2015-04-29 84 views
0

我們擁有僅包含實體和persistence.xml的持久性存檔。我們有一個包含ejb東西的ejb模塊。JPA EntityListener和持久性存檔

現在對於一個特定的用例,我們需要添加一個EntityListener,它有權訪問服務層中的一些EJB。

ejb模塊依賴於持久性模塊。但是爲了在實體中聲明監聽器,持久性模塊需要知道ejb模塊中的類。循環依賴是不可能的,並且只有第三個模塊只包含JPA偵聽器也會導致循環依賴。

所以我看到的唯一選擇是將ejb模塊和持久化歸檔合併到一個模塊中。但是,這樣我們就失去了在另一個應用程序中使用持久性存檔的靈活性來連接到遠程接口而無需攜帶整個ejb jar的內容。

關於如何解決這個問題並保持模塊化的任何想法(單獨的ejb和持久化模塊?)。

我們在談論一個JEE7應用程序。

回答

0

一個想法是使用Source-Control-Management(git/svn/cvs)將實體包導入到您的EJB項目中(+ persistence.xml文件)。這樣,你就什麼/如何定義它們有更大的靈活性。 在SVN中您有svn:externals。爲了git檢查出this answer

+0

不知道你有問題的權利。我基本上有四個maven模塊:持久性(包含實體),接口,網絡(戰爭)和ejb。問題在於,通過註釋來使用實體監聽器,這種分離方式不起作用,因爲實體需要知道監聽器。而偵聽器需要ejb包中的一些bean。 –

+0

我不確定是否可以在實體項目之外定義實體偵聽器。鑑於此,我的想法是擺脫實體的maven項目,而不是將每個svn:externals所需的源代碼(Java實體)集成到EJB項目中。 –

1

您可以將persistence.xml從JPA項目移至您的EJB項目,然後使用<jar-file>packedEntity.jar</jar-file> XML元素。檢查這個answer