У меня есть два пакета 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
?