私は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を使用する方法はありますか
解決策は、次のようなjdbc接続で直接コミット/ロールバックを実行することです。 store.getConnection()。getSqlConnection()。setAutoCommit(false);store.getConnection()。getSqlConnection()。commit(); またはトランザクションハンドラを使用している場合は、これを確認してください。 私の考えは、 dataset.begin(ReadWrite.WRITE)を使用することでした。 dataset.commit();DatasetはTDBとSDBの共通のインターフェイスであり、そのようにすれば、両方のニーズに対応することができます。 SDBのDataset実装であるDatasetGraphSDBのようなものは、トランザクションをサポートしていません。 –
修正 - SDBはデータセットトランザクションをサポートしていません(それよりも前のトランザクション)。 – AndyS
あなたの答えよりも。私の最後の疑問は、SDBでjdbcトランザクションを使用する場合(前のコメントに示されているように)、Jenaを読み書きするmodel.enterCriticalSectionのロック機構を使用するか、JDBCトランザクションの分離レベルで読者/ライターの問題を解決するのに十分です。 。 –