Jakarta ee 如何在JBoss上部署独立的EJB3模块以及它们之间的依赖关系?

Jakarta ee 如何在JBoss上部署独立的EJB3模块以及它们之间的依赖关系?,jakarta-ee,glassfish-3,jboss6.x,Jakarta Ee,Glassfish 3,Jboss6.x,我有一个用这种结构开发的Java EE应用程序: 应用程序1.ear -应用程序1.war Application1DAO.jar(EJB独立模块) Application1Business.jar(EJB独立模块) Application1Facade.jar(EJB独立模块) 应用程序2.ear -Application2DAO.jar(EJB模块) -Application2Business.jar(EJB模块) -Application2Web.war 因此,应用程序以这种方式划分以实

我有一个用这种结构开发的Java EE应用程序:

应用程序1.ear
-应用程序1.war
Application1DAO.jar(EJB独立模块)
Application1Business.jar(EJB独立模块)
Application1Facade.jar(EJB独立模块)

应用程序2.ear
-Application2DAO.jar(EJB模块)
-Application2Business.jar(EJB模块)
-Application2Web.war

因此,应用程序以这种方式划分以实现业务规则

Application1EJB模块(DAO、Business和Facade)作为独立模块部署,因为Application2也使用这些EJB

为了在Glassfish 3.1服务器中实现这一点,对于所有这些EJB模块,我已经将本地和远程接口分离到API JAR中,并将它们放在domain/lib文件夹中

现在我必须在JBoss6.0.0服务器上做同样的事情。因此,我尝试将API jar(本地和远程接口)放入server/default/lib,但当我尝试部署依赖于Application1DAO.jar的Application1Business.jar时,服务器会抛出一个异常。遵循堆栈跟踪:

14:44:32,779 ERROR [org.jboss.kernel.plugins.dependency.AbstractKernelController] Error installing to Real: name=vfs:///opt/javatools/jboss-6.0.0/server/default/deploy/ePublicBusiness.jar state=PreReal mode=Manual requiredState=Real: org.jboss.deployers.spi.DeploymentException: Error during deploy: org.jboss.metadata.ejb.jboss.JBossEnterpriseBeanMetaData.UnidadeCentroCustoBusiness
at org.jboss.deployers.spi.DeploymentException.rethrowAsDeploymentException(DeploymentException.java:49) [:2.2.0.GA]
at org.jboss.deployers.plugins.deployers.DeployerWrapper.deploy(DeployerWrapper.java:185) [:2.2.0.GA]
at org.jboss.deployers.plugins.deployers.DeployersImpl.doDeploy(DeployersImpl.java:1832) [:2.2.0.GA]
at org.jboss.deployers.plugins.deployers.DeployersImpl.doInstallParentFirst(DeployersImpl.java:1550) [:2.2.0.GA]
at org.jboss.deployers.plugins.deployers.DeployersImpl.doInstallParentFirst(DeployersImpl.java:1571) [:2.2.0.GA]
at org.jboss.deployers.plugins.deployers.DeployersImpl.install(DeployersImpl.java:1491) [:2.2.0.GA]
at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:379) [jboss-dependency.jar:2.2.0.GA]
at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:2044) [jboss-dependency.jar:2.2.0.GA]
at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:1083) [jboss-dependency.jar:2.2.0.GA]
at org.jboss.dependency.plugins.AbstractController.executeOrIncrementStateDirectly(AbstractController.java:1322) [jboss-dependency.jar:2.2.0.GA]
at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1246) [jboss-dependency.jar:2.2.0.GA]
at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1139) [jboss-dependency.jar:2.2.0.GA]
at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:939) [jboss-dependency.jar:2.2.0.GA]
at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:654) [jboss-dependency.jar:2.2.0.GA]
at org.jboss.deployers.plugins.deployers.DeployersImpl.change(DeployersImpl.java:1983) [:2.2.0.GA]
at org.jboss.deployers.plugins.deployers.DeployersImpl.process(DeployersImpl.java:1076) [:2.2.0.GA]
at org.jboss.deployers.plugins.main.MainDeployerImpl.process(MainDeployerImpl.java:679) [:2.2.0.GA]
at org.jboss.system.server.profileservice.deployers.MainDeployerPlugin.process(MainDeployerPlugin.java:106) [:6.0.0.Final]
at org.jboss.profileservice.dependency.ProfileControllerContext$DelegateDeployer.process(ProfileControllerContext.java:143) [:0.2.2]
at org.jboss.profileservice.deployment.hotdeploy.HDScanner$HDScanAction.deploy(HDScanner.java:240) [:0.2.2]
at org.jboss.profileservice.deployment.hotdeploy.HDScanner$HDScanAction.complete(HDScanner.java:192) [:0.2.2]
at org.jboss.profileservice.management.TwoPCActionWrapper.doComplete(TwoPCActionWrapper.java:57) [:0.2.2]
at org.jboss.profileservice.management.actions.AbstractTwoPhaseModificationAction.complete(AbstractTwoPhaseModificationAction.java:74) [:0.2.2]
at org.jboss.profileservice.management.actions.AbstractTwoPhaseModificationAction.prepare(AbstractTwoPhaseModificationAction.java:95) [:0.2.2]
at org.jboss.profileservice.management.ModificationSession.prepare(ModificationSession.java:87) [:0.2.2]
at org.jboss.profileservice.management.AbstractActionController.internalPerfom(AbstractActionController.java:234) [:0.2.2]
at org.jboss.profileservice.management.AbstractActionController.performWrite(AbstractActionController.java:213) [:0.2.2]
at org.jboss.profileservice.management.AbstractActionController.perform(AbstractActionController.java:150) [:0.2.2]
at org.jboss.profileservice.management.AbstractActionController.perform(AbstractActionController.java:135) [:0.2.2]
at org.jboss.profileservice.deployment.hotdeploy.HDScanner.scan(HDScanner.java:146) [:0.2.2]
at org.jboss.profileservice.deployment.hotdeploy.HDScanner.run(HDScanner.java:90) [:0.2.2]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441) [:1.6.0_24]
at java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317) [:1.6.0_24]
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150) [:1.6.0_24]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98) [:1.6.0_24]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:180) [:1.6.0_24]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:204) [:1.6.0_24]
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [:1.6.0_24]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [:1.6.0_24]
at java.lang.Thread.run(Thread.java:662) [:1.6.0_24]
Caused by: java.lang.RuntimeException: Could not resolve @EJB reference: [EJB Reference: beanInterface 'br.com.prescon.epublic.dao.UnidadeCentroCustoDAORemote', beanName 'null', mappedName 'null', lookupName 'null', owning unit 'ComponentDeploymentContext@322802193{org.jboss.metadata.ejb.jboss.JBossEnterpriseBeanMetaData.UnidadeCentroCustoBusiness}'] for environment entry: env/br.com.prescon.epublic.business.UnidadeCentroCustoBusiness/unidadeCentroCustoDAO in unit ComponentDeploymentContext@322802193{org.jboss.metadata.ejb.jboss.JBossEnterpriseBeanMetaData.UnidadeCentroCustoBusiness}
at org.jboss.ejb3.jndi.deployers.resource.provider.AnnotatedEJBRefResourceProvider.provide(AnnotatedEJBRefResourceProvider.java:99) [:0.1.7]
at org.jboss.ejb3.jndi.deployers.resource.provider.AnnotatedEJBRefResourceProvider.provide(AnnotatedEJBRefResourceProvider.java:50) [:0.1.7]
at org.jboss.switchboard.mc.JndiEnvironmentProcessor.process(JndiEnvironmentProcessor.java:68) [:1.0.0-alpha-15]
at org.jboss.switchboard.mc.deployer.AbstractSwitchBoardDeployer.process(AbstractSwitchBoardDeployer.java:119) [:1.0.0-alpha-15]
at org.jboss.switchboard.mc.deployer.EJBEnvironmentSwitchBoardDeployer.internalDeploy(EJBEnvironmentSwitchBoardDeployer.java:87) [:1.0.0-alpha-15]
at org.jboss.deployers.spi.deployer.helpers.AbstractRealDeployer.deploy(AbstractRealDeployer.java:55) [:2.2.0.GA]
at org.jboss.deployers.plugins.deployers.DeployerWrapper.deploy(DeployerWrapper.java:179) [:2.2.0.GA]
所以,我的问题是,如何使用JBoss实现与Glassfish相同的部署结构


提前感谢。

通过
@EJB
注释进行注入无法跨EAR边界工作(在JBoss6中)

解决这个问题的方法是使用

@EJB(mappedName=“bean的JNDI名称”)


JBoss6仍然为bean使用非标准化的JNDI名称。但是当您部署
Application1.ear
时,这些名称应该显示在日志中。使用如图所示的名称,包括末尾的
/remote
部分。

通过
@EJB
注释进行注入无法跨EAR边界工作(在JBoss 6中)

解决这个问题的方法是使用

@EJB(mappedName=“bean的JNDI名称”)

JBoss6仍然为bean使用非标准化的JNDI名称。但是当您部署
Application1.ear
时,这些名称应该显示在日志中。使用如图所示的名称,包括末尾的
/remote
部分