我有一个带有一些JPA逻辑的EJB,我在java EE项目中使用它。 我没有在每个项目中复制类,而是试图将它放在一个单独的jar中,所以我有这样的结构:
JPALogic仅在EJB项目中使用,并且在Java EE应用程序的其他部分中没有引用它。在JPALogic库中,我有我的JPALogic bean:
@Stateless
@LocalBean
public class JPALogic {
@Resource
private EJBContext ejbContext;
@Inject @ShardedPersistenceContext
private EntityManager em;
public JPALogic() {
}
[...lots of methods...]
}
如果JPALogic代码直接在EJB项目中,它是完美的,但当我把它放在外部库部署时变得非常不稳定(netbeans 8 + glassfish 4),几乎每个部署都会因此错误而失败:
Exception while deploying the app [app] : Cannot resolve reference [Remote ejb-ref name=com.my.autenticacion.services.AutRolBackendServices/jpa,Remote 3.x interface =com.my.infraestructura.jpa.JPALogic,ejb-link=null,lookup=,mappedName=,jndi-name=,refType=Session] because there are [2] ejbs in the application with interface com.my.infraestructura.jpa.JPALogic.
我已经搜索了但是当接口有多个实现时似乎出现了这种错误,而事实并非如此:只有一个名为“JPALogic”的bean,并检查耳朵,JPALogic.jar出现一个只有时间。
我做错了什么?
答案 0 :(得分:0)
如果jar包含EJB注释(@Singleton,@ Stateless,@Stateful组件定义注释),它不是简单的jar,而是ejb-jar,应该打包为模块。
解决方案:
像这样:
application.EAR
META-INF/application.xml
(must have a reference to the JPALogic.jar EJB module)
JPALogic.jar (EJB-JAR)
remoteservices.jar
services.jar
META-INF/MANITESF.MF Class-Path: JPALogic.jar
remoteservices.jar
frontend.war
有关更多详细信息,请参阅JAVA EE 6规范,章节EE.8: