Постоянство OpenJPA между пакетами OSGi

У меня есть два пакета OSGi, развернутых в контейнере Apache Karaf. Допустим, это A и B. Пакет A — это основной пакет, который содержит все объекты базы данных и логику персистентности. Пакет B OSGi — это приложение, которое использует методы из A для хранения некоторых данных в базе данных. Также в комплекте B есть конечная точка веб-службы CXF. Постоянство обрабатывается OpenJPA.

Метод в комплекте A является оболочкой для метода persist диспетчера сущностей. В пакете B есть метод, который принимает объект в качестве параметра, который определен в пакете A, и имеет метод для сохранения данных. Когда я вызываю этот метод в пакете B, все в порядке, данные сохраняются в базе данных, как и ожидалось.

Проблема в том, что я хочу обновить объект в классе реализации конечной точки CXF пакета B, который представлен как компонент Spring и имеет OSGi ссылку на объект из пакета A, который содержит оператор find, чтобы найти объект, который мне нужно обновить.

Сущность возвращается мне правильно, когда я вызываю метод find, но когда я устанавливаю какое-то новое значение, транзакция не фиксируется, и данные не появляются в базе данных.

Насколько я знаю, одна из функций OpenJPA заключается в том, что когда вы вызываете persist для объекта, позже вы можете установить для него некоторые новые данные, и необходимые транзакции будут выполнены для обновления этого объекта. Кажется, это не работает в моем случае. Я попытался аннотировать класс реализации конечной точки CXF аннотацией org.springframework.transaction.annotation.Transactional. Но это тоже не работает.

Может кто знает где может быть проблема? Нужно ли мне писать запрос, который обновляет мою сущность в конечной точке CXF?


person Paulius Matulionis    schedule 14.08.2012    source источник
comment
Этот вопрос очень трудно понять. Может быть, вы можете предоставить пример кода или диаграмму для иллюстрации?   -  person Björn Pollex    schedule 09.09.2012


Ответы (1)


В этом случае я предлагаю перейти с Spring на Blueprint. Если вы посмотрите на план aries (например), который используется Karaf, вы сможете получить, например, DAO из Bundle A, вызвать «метод изменения» из Bundle B, и он будет сохранен диспетчером транзакций, прикрепленным к Bundle. А.

person Achim Nierbeck    schedule 20.09.2012