2017-08-18 3 views
0

私はApache Jena ApiをSQLデータベース(micrtosoft sql server)としてAS JENA SDBを使用しています。 trensactional方式でデータベースにアクセスしたいときに問題があります。 私はJena TDBトランザクションをサポートしていますが、JENA TDBをstransactinalの方法で使用しているとき java.lang.UnsupportedOperationException:トランザクションがサポートされていません 例外がスローされました。次のようにApache Jena SDBトランザクションサポート

取り組んでいるイエナTDBからの抜粋です:次のように動作しないイエナSDBから

Dataset dataset = return TDBFactory.createDataset("datasetLocation"); 
dataset.begin(ReadWrite.WRITE); 
//... 

スニペットは、次のとおりです。

StoreDesc storeDesc = new StoreDesc(LayoutType.LayoutTripleNodesHash, 
    DatabaseType.SQLServer); 
    SDBConnection sdbConn = new SDBConnection(getConnection()); 
    Store store = StoreFactory.create(storeDesc, sdbConn); 
    Dataset dataset =DatasetStore.create(store); 
    dataset.begin(ReadWrite.WRITE); 
    //...this throws the exception 

私の要件が移行することだったので、私の質問ですTDBからSDBへ(私は推薦されていないことを知っています) トランザクション方式でJena SDBを使用する方法はありますか

答えて

0

デフォルトでは、非常に高価な自動コミットです。

あなたが直接設定JDBC接続を操作し、あるいは同じコードに同じデータセットマップのすべてのモデルとしても利用可能であるJDBC接続に作用するので、任意のモデルのTransactionHandlerを使用することができます。

Store.getConnection().getTransactionHandler()

+0

解決策は、次のようなjdbc接続で直接コミット/ロールバックを実行することです。 store.getConnection()。getSqlConnection()。setAutoCommit(false);store.getConnection()。getSqlConnection()。commit(); またはトランザクションハンドラを使用している場合は、これを確認してください。 私の考えは、 dataset.begin(ReadWrite.WRITE)を使用することでした。 dataset.commit();DatasetはTDBとSDBの共通のインターフェイスであり、そのようにすれば、両方のニーズに対応することができます。 SDBのDataset実装であるDatasetGraphSDBのようなものは、トランザクションをサポートしていません。 –

+0

修正 - SDBはデータセットトランザクションをサポートしていません(それよりも前のトランザクション)。 – AndyS

+0

あなたの答えよりも。私の最後の疑問は、SDBでjdbcトランザクションを使用する場合(前のコメントに示されているように)、Jenaを読み書きするmodel.enterCriticalSectionのロック機構を使用するか、JDBCトランザクションの分離レベルで読者/ライターの問題を解決するのに十分です。 。 –

関連する問題