我为冗长的问题道歉。
我正在研究EJB应用程序。我有两个EJB eclipse项目(Ejb1
和Ejb2
)和其他动态Web应用程序(Web1
),它们将被编译并添加到父EjbEar
项目并打包为{ {1}}文件。
问题1:我首先在EjbEar.ear
项目的persistence.xml
文件夹中创建了EJb1
,这有助于我将实体管理员注入会话bean并开始工作。 (以下代码)
META-INF
在@PersistenceContext(unitName = "ejbPersistanceunit")
private EntityManager em;
中,我创建了另一个会话bean并注入了与上面相同的实体管理器(这里我Ejb2
配置了persistence.xml)但是当我从客户端调用时,我得到了来自Ejb1和Ejb2项目的回应。
为什么EntityManger在两个ejbproject之间共享?如果我的Ejb2项目需要另一个persistence.xml用于不同的数据源,我是否要创建另一个或将其包含在现有的persistence.xml中?它也会被分享吗?我的did not
项目是否也以同样的方式获得了Entitymanager?
问题2:我在Web1
项目中有sessionbeans,他们的远程接口是在Ejb1
项目中创建的,但是在这些新创建的实体/接口中公开这些实体/接口的最佳方法是什么一个ejb项目? (对于企业应用程序中的多个Ejb项目)
问题3: Ejb 3.0不再有家庭和远程接口正确吗?
答案 0 :(得分:1)
为什么EntityManger在两个ejbproject之间共享?
如果您不想要,可以通过isoloting Ejb jar来禁用此共享。如果jboss打开jboss-deployment-structure.xml
并将属性ear-subdeployments-isolated
设置为true
如果我的Ejb2项目需要另一个persistence.xml来获取不同的数据 来源,我是创建另一个还是将其包含在现有的中 persistence.xml中?它也会被分享吗?
这完全取决于你的用例, 如果您的系统中有多个数据源,那么我将基于persistence.xml定义 我打包我的bean访问持久性单元的方式。
如果属于两个数据源的所有实体都打包在一起,那么我将在同一个persistence.xml
中定义2个持久性单元
如果它们在2个罐子中以不同的方式包装,则以下任何一种可能性
PersistenceUnit
persistence.xml
上面或我将在一个单独中定义2 persistenceUnit
persistence.xml
并确保罐子里有
首先部署Persistence.xml
我的Web1项目是否也同样拥有Entitymanager 方式是什么?
是的,您可以访问persistenceContext
注意:我认为您的应用服务器是JBoss
我在Ejb1项目中有sessionbeans,他们的远程接口是 在Web1项目中创建但是暴露的最佳方法是什么 这些新创建的实体/接口在ejb项目中? (更多 而不是企业应用程序中的一个Ejb项目)
据我所知,这取决于您的系统架构/设计。如果我是你,我会将我的远程接口和Beans打包在同一个EJB-Jar中,我会使用查找EJB bean的Business Delegate或者在Web中可以看到Remote接口,我会在网络层并使用它。
Ejb 3.0不再具有正确的家庭和远程接口吗?
没有名为home& amp;的界面远程但概念仍然以注释@Remote & @Local
的形式出现,这意味着您可以定义接口,并且可以在接口级别或Bean级别声明@Remote or @Local
。