2012-08-14 70 views
1

我在Apache Karaf容器上部署了兩個OSGi包。可以說它們是A和B.A bundle是包含所有數據庫實體和持久性邏輯的主包。 B OSGi軟件包是一種應用程序,它使用A中的方法將一些數據存儲到數據庫中。捆綁B也有CXF網絡服務端點。持久性由OpenJPA處理。OSJi包之間的OpenJPA持久性

捆綁包中的方法包裝實體管理器的持久化方法。在bundle B中,有一種方法將一個對象作爲bundle A中定義的參數,並具有持久化數據的方法。當我在捆綁包B中調用該方法時,一切正常,數據按預期持久保存到數據庫中。

的問題是,我想更新B中捆綁的CXF端點實現類的實體,其公開爲一個Spring bean和具有OSGi參考從包一個對象包含find語句來找到我需要的實體更新。

當我調用find方法時,實體返回給我,但是當我設置一些新值時,事務不會被提交,並且數據不會出現在數據庫中。

因爲我知道OpenJPA的功能之一是,當你調用持久化到一個對象,然後你可以設置一些新的數據,並且需要的事務來更新該實體。它似乎沒有在我的情況下工作。我試圖用org.springframework.transaction.annotation.Transactional註釋來註釋CXF端點實現類。但是,這不起作用。

也許有人知道哪裏可能會出現問題?我是否需要在CXF端點寫更新我的實體的查詢?

+0

這個問題很難遵循。也許你可以提供一些示例代碼或圖來說明? – 2012-09-09 17:41:40

回答

0

在這種情況下,我建議從春季切換到藍圖。如果您看看Karaf使用的aries藍圖(例如),您可以從Bundle A中檢索例如DAO,從Bundle B中調用「更改方法」,並且它將由附加到Bundle的事務管理器A.