Hi Danny,

 

Thank you for this example of catching an exception from a pre-commit
trigger.

 

Tim

 

-----Original Message-----
From: [email protected]
[mailto:[email protected]] On Behalf Of Danny Sokolsky
Sent: Monday, November 02, 2009 8:37 PM
To: General Mark Logic Developer Discussion
Subject: RE: [MarkLogic Dev General] Capturing the exception from
apre-commit trigger

 

Hi Geert,

 

When a pre-commit trigger throws an exception, the query that triggered it
gets that exception (and cannot catch it with a try/catch).  The fact that
it aborts the update is by design because the pre-commit trigger must
complete before the transaction is committed.

 

I can think of a way of doing this though.  The trick here is to make sure
the calling main module can catch the exception.  So if you xdmp:invoke or
xdmp:eval the module that does the insert that triggers the pre-commit
trigger, then you can catch the exception to that module (which includes an
exception from the pre-commit trigger).  Something like the following worked
for me, assuming a pre-commit trigger scoped on the "/" directory:

 

(: trigger definition:

xquery version "1.0-ml";

import module namespace trgr="http://marklogic.com/xdmp/triggers"; 

   at "/MarkLogic/triggers.xqy";

 

trgr:create-trigger("myTrigger", "Simple trigger example", 

  trgr:trigger-data-event(

      trgr:directory-scope("/", "1"),

      trgr:document-content("create"),

      trgr:pre-commit()),

  trgr:trigger-module(xdmp:database("test"), "/", "error.xqy"),

  fn:true(), xdmp:default-permissions() )

:)

 

(: /error.xqy:

xquery version "1.0-ml";

fn:error((), "hello")

:)

 

xquery version "1.0-ml";

try {

xdmp:eval('xdmp:document-insert("/hello.xml", <hello/>)')

} catch ($e)

{ "caught exception " }

 

This should work with an invoke too.

 

-Danny

 

-----Original Message-----

From: [email protected]
[mailto:[email protected]] On Behalf Of Geert Josten

Sent: Sunday, November 01, 2009 10:56 PM

To: General Mark Logic Developer Discussion

Subject: [MarkLogic Dev General] Capturing the exception from a pre-commit
trigger

 

Hi,

 

I would like to put some checks in a pre-commit trigger, that throws an
exception if something is wrong, preventing updates to be stored if the
checks are not fully satisfied.

 

The problem is though, that this trigger is throwing an exception that
breaks the main module as well. Is there a way to capture the exception
thrown from the pre-commit trigger?

 

Kind regards,

Geert

 

 

Drs. G.P.H. Josten

Consultant

 

 

http://www.daidalos.nl/

Daidalos BV

Source of Innovation

Hoekeindsehof 1-4

2665 JZ Bleiswijk

Tel.: +31 (0) 10 850 1200

Fax: +31 (0) 10 850 1199

http://www.daidalos.nl/

KvK 27164984

De informatie - verzonden in of met dit emailbericht - is afkomstig van
Daidalos BV en is uitsluitend bestemd voor de geadresseerde. Indien u dit
bericht onbedoeld hebt ontvangen, verzoeken wij u het te verwijderen. Aan
dit bericht kunnen geen rechten worden ontleend.

 

 

 

_______________________________________________

General mailing list

[email protected]

http://xqzone.com/mailman/listinfo/general

_______________________________________________

General mailing list

[email protected]

http://xqzone.com/mailman/listinfo/general

_______________________________________________
General mailing list
[email protected]
http://xqzone.com/mailman/listinfo/general

Reply via email to