Jboss 从模块到EAR的依赖关系

Jboss 从模块到EAR的依赖关系,jboss,Jboss,你好 我们正在进行一个将J2EE应用程序从WAS 8.5迁移到JBOSS EAP 7.0的项目,我们是JBOSS的新手 具有以下功能的应用程序包: 1) EAR(战争和EJB) 2) 应用程序实用程序JAR和持久性JAR(实体类) 3) 第三方jar,如log4j2.5、Jackson、hibernate、 我们创建了名为sharedLib的文件夹,并维护了sharedLib/main/module.xml 我们将所有的应用程序实用程序jar、持久性jar和第三方jar移到了shardLib模块

你好

我们正在进行一个将J2EE应用程序从WAS 8.5迁移到JBOSS EAP 7.0的项目,我们是JBOSS的新手

具有以下功能的应用程序包: 1) EAR(战争和EJB) 2) 应用程序实用程序JAR和持久性JAR(实体类) 3) 第三方jar,如log4j2.5、Jackson、hibernate、

我们创建了名为sharedLib的文件夹,并维护了sharedLib/main/module.xml

我们将所有的应用程序实用程序jar、持久性jar和第三方jar移到了shardLib模块中

    <resource-root path="../SEC_BatchService_Contract-1.0.0.jar"/>
    <resource-root path="../SEC_DepartmentService_Contract-1.0.0.jar"/>
    <resource-root path="../SEC_LoginService_Contract-1.0.0.jar"/>
    <resource-root path="../SEC_MenuService_Contract-1.0.0.jar"/>
    <resource-root path="../SEC_ProcessesService_Contract-1.0.0.jar"/>
    <resource-root path="../SEC_SessionMaintenanceService_Contract-1.0.0.jar"/>
    <resource-root path="../SEC_SessionService_Contract-1.0.0.jar"/>
    <resource-root path="../SecurityInterfaceServices_Contract-1.0.0.jar"/>
    <resource-root path="../SEC_UserAuthoriser_Contract-1.0.0.jar"/>
    <resource-root path="../SEC_UserMaintenanceService_Contract-1.0.0.jar"/>
    <resource-root path="../SEC_UserRole_Contract-1.0.0.jar"/>
    <resource-root path="../SystemUtility_Contract-1.0.0.jar"/>
    <resource-root path="../WorkFlow_Contract-1.0.0.jar"/>
    <resource-root path="../Application_Contract-1.0.0.jar"/>
    <resource-root path="../BootStrapService_Contract-1.0.0.jar"/>
    <resource-root path="../Intergration_Contract-1.0.0.jar"/>
    <resource-root path="../Logger_Contract-1.0.0.jar"/>
    <resource-root path="../Persistence_Contract-1.0.0.jar"/>
    <resource-root path="/apps/SGDEV/config/SEC/product/thirdParty/Logger_Contract-1.0.0.jar"/>
    <resource-root path="/apps/SGDEV/config/SEC/product/thirdParty/antlr-2.7.7.jar"/>
    <resource-root path="/apps/SGDEV/config/SEC/product/thirdParty/btf-1.2.jar"/>
    <resource-root path="/apps/SGDEV/config/SEC/product/thirdParty/com.ibm.websphere.appserver.api.json-1.0.13.jar"/>
    <resource-root path="/apps/SGDEV/config/SEC/product/thirdParty/commons-codec-1.3.jar"/>
    <resource-root path="/apps/SGDEV/config/SEC/product/thirdParty/commons-httpclient-3.0.jar"/>
    <resource-root path="/apps/SGDEV/config/SEC/product/thirdParty/cors-filter-2.5.jar"/>
    <resource-root path="/apps/SGDEV/config/SEC/product/thirdParty/disruptor-3.0.0.jar"/>
    <resource-root path="/apps/SGDEV/config/SEC/product/thirdParty/dom4j-1.6.1.jar"/>
    <resource-root path="/apps/SGDEV/config/SEC/product/thirdParty/guava-19.0.jar"/>
    <resource-root path="/apps/SGDEV/config/SEC/product/thirdParty/hibernate-commons-annotations-4.0.5.Final.jar"/>
    <resource-root path="/apps/SGDEV/config/SEC/product/thirdParty/hibernate-core-4.2.7.Final.jar"/>
    <resource-root path="/apps/SGDEV/config/SEC/product/thirdParty/hibernate-jpa-2.0-api-1.0.1.Final.jar"/>
    <resource-root path="/apps/SGDEV/config/SEC/product/thirdParty/jackson-annotations-2.7.3.jar"/>
    <resource-root path="/apps/SGDEV/config/SEC/product/thirdParty/jackson-core-2.7.3.jar"/>
    <resource-root path="/apps/SGDEV/config/SEC/product/thirdParty/jackson-coreutils-1.8.jar"/>

    And   APP_EAR/META-INF/MANIFEST.MF
              Manifest-Version: 1.0
              Dependencies: sharedLib

和APP_EAR/META-INF/MANIFEST.MF
清单版本:1.0
依赖项:sharedLib
在从EAR调用sharedLib模块文件时,我们没有遇到任何问题。但是驻留在sharedLib中的文件无法访问EAR的EJB jar

示例WAR------>EJB-->共享数据库(模块)良好 WAR-->EJB1-->sharedLib-->EJB2.jar失败,错误为NoClassDifferor。(无法访问任何EJB jar POJO类。)

我们可以从sharedLib(隔离模块)调用EAR EJB Jar吗

错误:

流程:Rest服务-->EJB.jar-->EJB.jar-->sharedLib-->EJB

原因:java.lang.NoClassDefFoundError:scb/technical/bootstrap/process/SystemProperties-------------------(POJO类驻留在EJB JAR中)-------------- 位于scb.technical.security.service.util.SecurityUtility.convertDateToUserTZ(SecurityUtility.java:257)-------------------------(POJO类驻留在sharedLib模块中)---------------------- 位于scb.technical.security.service.LoginServiceBean.validateLogin(LoginServiceBean.java:161)---------------------------(SessionBean驻留在EJBJAR中)---------------------------- 在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处 位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中 位于java.lang.reflect.Method.invoke(Method.java:498) 位于org.jboss.as.ee.component.ManagedReferenceMethodInterceptor.processInvocation(ManagedReferenceMethodInterceptor.java:52) 在org.jboss.invocation.InterceptorContext.procedure(InterceptorContext.java:340)上 在org.jboss.invocation.InterceptorContext$invocation.procedure(InterceptorContext.java:437) 位于org.jboss.as.weld.ejb.jsr29bindingSinterceptor.doMethodInterception(jsr29bindingSinterceptor.java:82) 位于org.jboss.as.weld.ejb.Jsr299BindingsInterceptor.processInvocation(jsr29bindingsinterceptor.java:93) 位于org.jboss.as.ee.component.interceptors.UserInterceptorFactory$1.processInvocation(UserInterceptorFactory.java:63) 在org.jboss.invocation.InterceptorContext.procedure(InterceptorContext.java:340)上 位于org.jboss.as.ejb3.component.invocationmetrics.ExecutionTimeInterceptor.processInvocation(ExecutionTimeInterceptor.java:43) 在org.jboss.invocation.InterceptorContext.procedure(InterceptorContext.java:340)上 在org.jboss.invocation.InterceptorContext$invocation.procedure(InterceptorContext.java:437) 位于org.jboss.weld.ejb.AbstractEJBRequestScopeActivationInterceptor.aroundInvoke(AbstractEJBRequestScopeActivationInterceptor.java:64) 位于org.jboss.as.weld.ejb.EjbRequestScopeActivationInterceptor.processInvocation(EjbRequestScopeActivationInterceptor.java:83) 在org.jboss.invocation.InterceptorContext.procedure(InterceptorContext.java:340)上 位于org.jboss.as.ee.concurrent.ConcurrentContextInterceptor.processInvocation(ConcurrentContextInterceptor.java:45) 在org.jboss.invocation.InterceptorContext.procedure(InterceptorContext.java:340)上 位于org.jboss.invocation.InitialInterceptor.processInvocation(InitialInterceptor.java:21) 在org.jboss.invocation.InterceptorContext.procedure(InterceptorContext.java:340)上 位于org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61) 位于org.jboss.as.ee.component.interceptors.ComponentDispatcherInterceptor.processInvocation(ComponentDispatcherInterceptor.java:52) 在org.jboss.invocation.InterceptorContext.procedure(InterceptorContext.java:340)上 位于org.jboss.as.ejb3.component.pool.PooledInstanceInterceptor.processInvocation(PooledInstanceInterceptor.java:51) 在org.jboss.invocation.InterceptorContext.procedure(InterceptorContext.java:340)上 位于org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeincalertx(CMTTxInterceptor.java:254) ... 212更多 原因:java.lang.ClassNotFoundException:scb.technical.bootstrap.process.SystemProperties来自本地模块加载器@66133adc(查找器:本地模块查找器@7bfcd12c)的[Module“sharedLib:main”(根目录:/jboss/eap/7.0/jboss-eap/modules,/jboss/eap/7.0/jboss-eap/modules/system/layers/base/.overlays/layer-base-jboss-eap-7.0.6.CP,/jboss/eap/7.0/jboss-eap/modules/system/layers/base))]

服务器:JBOSS EAP 7.0

谢谢
Viswa..

如果我理解正确,您需要一个静态(模块文件夹中的方法)在动态应用程序模块中具有依赖项。我认为这不是一个好主意。但无论如何,您是否尝试在部署的静态模块清单中将EJB2.jar声明为显式依赖项?感谢loannis。我在静态jar模块的jboss-deployment-structure.xml中添加了以下条目:还是一样的问题…不确定如何将EJB jar链接到静态模块jar。我也不确定。但是既然这两个模块没有解耦,为什么不以相同的方式部署呢?静态模块的意思是,它们经常被使用,你希望它们总是被部署,并且它们是不可靠的。一个很好的例子是MySQL驱动程序,其中你的部署就在于这项技术。但是为什么你想要一个模块t