2

次の問題があります。MarkLogic の OBI フレームワークを使用します。データベース内のトリガーを使用して、受信するセンサー データを監視します。新しい OBI ソースが読み込まれるとすぐに、いくつかチェックします。何かを見つけたら、「Alert」オブジェクトを作成します。次に、そのオブジェクトを使用して「ペイロード」メッセージを生成し、モバイル デバイスに送信したいと思います...

これでトリガーが機能します。トリガーでは、別のトランザクションで xdmp:eval を使用して、同じトリガー コードで作成されたドキュメントを使用できることを確認します...しかし、新しく作成されたオブジェクトを検索しても見つかりません...

ドキュメントを作成して、同じトリガー コードで使用できますか?

ここで最小限の実用的な例を作成するのは難しいと思いますが、これは試してみます:

関連するトリガー コード:

(: fire trigger ALWAYS :)
let $_ := xdmp:log(fn:concat('TP-SENSORTRIGGER-ACTION : Source ', $trgr:uri, ' triggers base rule...')) 
(: create alert object plus link to source :)
let $object-id := xdmp:eval(concat('
    xquery version "1.0-ml";
    import module namespace scl = "http://example.com/sccs/lib" at "/lib/sccss-lib.xqy";

    declare variable $source-id external;

    let $object-id := scl:create-alert-object($source-id)
    let $_ := xdmp:log("***** test *****")      
    return $object-id 
    '), (xs:QName('source-id'), $source-id),
    <options xmlns="xdmp:eval"><isolation>different-transaction</isolation></options>)
let $_ := xdmp:log($object-id)
(: create payload from alert object :)
(:let $payload := scl:create-payload-from-alert-object($object-id)
:)
let $object := obj:find-object($object-id)
let $_ := xdmp:log($object)

OBI オブジェクトを作成する関数は lib にあります。必要に応じて共有できます。適切なトリガーを使用していることを確認するために、ログ行「test」と「test B」を追加しました。そして、それらが app-specific.rb で展開時に再構築されていることを確認します。

次に、ログから、オブジェクトが見つからないことは明らかです。

2015-10-20 15:33:02.860 Info: example-app: ******** Ingest transform Started ***************
2015-10-20 15:33:04.196 Info: TaskServer: TP-SENSORTRIGGER /marklogic.solutions.obi/source/81a3591a-a885-4f85-a781-b066e706ff41.xml was created, start trigger action...
2015-10-20 15:33:04.291 Info: TaskServer: TP-SENSORTRIGGER-ACTION : Source /marklogic.solutions.obi/source/81a3591a-a885-4f85-a781-b066e706ff41.xml triggers base rule...
2015-10-20 15:33:07.267 Info: TaskServer: ***** test B *****
2015-10-20 15:33:07.268 Info: TaskServer: ***** test *****
2015-10-20 15:33:07.273 Info: TaskServer: 4d1fd4e4-2911-40b0-848c-ccf8eaa39229
2015-10-20 15:33:07.277 Info: TaskServer: 

トリガーが実行された後、QC から ID 4d1fd4e4-2911-40b0-848c-ccf8eaa39229 のオブジェクトを見つけることができます。

つまり、これは MarkLogic のトランザクション モデルに関係していると思います。

もう一度質問します: xdmp:eval で作成したばかりのオブジェクトが見つからないのはなぜですか?

4

1 に答える 1