我有一个在Java EE项目中使用的带有某些JPA逻辑的EJB。
我没有在每个项目中都复制类,而是尝试将其放在单独的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仅出现一次。
我做错了吗?
最佳答案
如果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章: