Jena SDB支持线程安全交易?多线程执行环境下的Jena SDB错误

时间:2012-03-01 01:59:49

标签: multithreading jena

我的jena代码在多线程执行环境下被破坏了。我使用jena sdb来保存rdf三元组。但是,当我启动六个线程来完成保存数据操作时,异常将被抛出。 (每个线程将图形rdf保存到db中,每个图形都不同)

我需要的帮助是:

1。 jena SDB是否支持交易,这是线程安全的吗?

2。如何实现jena sdb的线程安全操作?

第3。如何解决我的代码问题? (例外情况和关键代码如下)

非常感谢您的帮助和任何建议。希望你重播一下。祝你好运~~

我的密钥代码如下:(数据库是DB2,数据库池:Websphere数据源池)

//DBConnector is an object that get the jdbc connection from the data source 
//initialize and return a sdb connection object [new SDBConnection(jdbcConnection)]
SDBConnection con = DBConnector.getSDBConnection(); 
store = SDBFactory.connectStore(con,storeDesc); 

model.notifyEvent(GraphEvent.startRead);
model.read(in,'',"N-Triple");
model.notifyEvent(GraphEvent.finishRead);
model.close();

例外如下:

com.hp.hpl.jena.sdb.layout2.LoaderTuplesNodes.Thread-6():  线程出错:制作新的tupleloader出了问题

com.hp.hpl.jena.sdb.SDBException:制作新的tupleloader时遇到问题

at com.hp.hpl.jena.sdb.layout2.LoaderTuplesNodes.updateOneTuple(LoaderTuplesNodes.java:269)

at com.hp.hpl.jena.sdb.layout2.LoaderTuplesNodes.access$200(LoaderTuplesNodes.java:31)

at com.hp.hpl.jena.sdb.layout2.LoaderTuplesNodes$Commiter.run(LoaderTuplesNodes.java:334)

at java.lang.Thread.run(Thread.java:619)

引起:java.lang.reflect.InvocationTargetException

at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)

at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)

at java.lang.reflect.Constructor.newInstance(Constructor.java:513)

at com.hp.hpl.jena.sdb.layout2.LoaderTuplesNodes.updateOneTuple(LoaderTuplesNodes.java:265)

... 3 more

引起:com.hp.hpl.jena.sdb.SDBException:初始化[Quads]

的加载程序时出现问题
at com.hp.hpl.jena.sdb.layout2.TupleLoaderBase.<init>(TupleLoaderBase.java:47)

at com.hp.hpl.jena.sdb.layout2.hash.TupleLoaderHashBase.<init>(TupleLoaderHashBase.java:17)

at com.hp.hpl.jena.sdb.layout2.hash.TupleLoaderHashDB2.<init>(TupleLoaderHashDB2.java:22)

... 8 more

1 个答案:

答案 0 :(得分:0)

我怀疑商店在使用后没有被释放。你能尝试一下:

SDBConnection con = DBConnector.getSDBConnection(); 
store = SDBFactory.connectStore(con,storeDesc); 

model.read(in,'',"N-Triple");
store.close();

(不需要通知)

它应该是线程安全等。