Jena SDB поддерживает потокобезопасную транзакцию? Ошибка Jena SDB в среде многопоточного выполнения

Мой код jena не работает в многопоточной среде выполнения. Я использую jena sdb для сохранения троек rdf. Однако, когда я запускаю шесть потоков для завершения действия по сохранению данных, исключение выбрасывается. (каждый поток сохраняет график rdf в БД, каждый график отличается)

Мне нужна помощь:

<сильный>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

person squirrelRao    schedule 01.03.2012    source источник


Ответы (1)


Я подозреваю, что магазин не освобождается после использования. Не могли бы вы попробовать:

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

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

(Уведомление не требуется)

Он должен быть потокобезопасным и т.д.

person user205512    schedule 01.03.2012
comment
в моем тестировании я использовал junitPref, помогающий мне создать многопоточный запрос. en... Возможно, есть какая-то связь с junitPref. - person squirrelRao; 02.03.2012
comment
я отказался от использования junitPref и написал java-поток самостоятельно. Исключение не будет выброшено. эээ.... Это смущено поддержкой многопоточности jena - person squirrelRao; 02.03.2012