【问题标题】:Jena SDB support thread-safe transaction? Jena SDB error under multiple-thread execution enviromentJena SDB 支持线程安全事务吗?多线程执行环境下的Jena SDB错误
【发布时间】:2012-03-01 01:59:48
【问题描述】:

我的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(): 线程中的错误:制作新元组加载器时出现问题

com.hp.hpl.jena.sdb.SDBException: 制作新元组加载器时出现问题

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

【问题讨论】:

    标签: multithreading jena


    【解决方案1】:

    我怀疑商店在使用后没有被释放。你可以试试:

    SDBConnection con = DBConnector.getSDBConnection(); 
    store = SDBFactory.connectStore(con,storeDesc); 
    
    model.read(in,'',"N-Triple");
    store.close();
    

    (不需要通知)

    它应该是线程安全的等等。

    【讨论】:

    • 在我的测试中,我使用了 junitPref 帮助我创建了多线程请求。 en... 可能和junitPref有关系。
    • 我放弃使用junitPref,自己编写java线程。异常不会被抛出。 er.... 对 jena 的线程安全支持感到困惑
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-26
    • 2013-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多