2015-04-29 57 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