Java EJB依赖注入可以使用EAR,但不能使用JAR 环境 两个无状态EJB及其远程接口。EJB1被注入EJB2 ///EJB1 包com.xxx.layer1; @遥远的 公共接口EJB1远程{ } @无状态(mappedname=“com.xxx.EJB1”) 公共类EJB1实现EJB1远程{ } ///EJB2 包com.xxx.layer2; 导入com.xxx.layer1; @遥远的 公共接口EJB2Remote{ } @无状态(mappedname=“com.xxx.EJB2”) 公共类EJB2实现EJB2Remote{ @EJB(mappedName=“com.xxx.EJB1”) ejb1远程ejb1; }

Java EJB依赖注入可以使用EAR,但不能使用JAR 环境 两个无状态EJB及其远程接口。EJB1被注入EJB2 ///EJB1 包com.xxx.layer1; @遥远的 公共接口EJB1远程{ } @无状态(mappedname=“com.xxx.EJB1”) 公共类EJB1实现EJB1远程{ } ///EJB2 包com.xxx.layer2; 导入com.xxx.layer1; @遥远的 公共接口EJB2Remote{ } @无状态(mappedname=“com.xxx.EJB2”) 公共类EJB2实现EJB2Remote{ @EJB(mappedName=“com.xxx.EJB1”) ejb1远程ejb1; },java,dependency-injection,ejb,weblogic-10.x,Java,Dependency Injection,Ejb,Weblogic 10.x,EJB2还使用一些可选包(在其清单中声明) WebLogic应用服务器(10.3.3) 两个EJB打包成两个单独的JAR文件 问题 如果将两个JAR文件打包成一个EAR文件并进行部署,依赖项注入就可以工作。但是如果我单独部署它们,即使在我首先部署EJB1并在Weblogic中验证全局JNDI名称(com.xxx.EJB1#com.xxx.layer1.EJB1Remote)之后,EJB2的部署失败,出现ClassNotFoundException:com.xxx.layer1.EJB1Remo

EJB2还使用一些可选包(在其清单中声明)

  • WebLogic应用服务器(10.3.3)

  • 两个EJB打包成两个单独的JAR文件

  • 问题
    如果将两个JAR文件打包成一个EAR文件并进行部署,依赖项注入就可以工作。但是如果我单独部署它们,即使在我首先部署EJB1并在Weblogic中验证全局JNDI名称(com.xxx.EJB1#com.xxx.layer1.EJB1Remote)之后,EJB2的部署失败,出现ClassNotFoundException:com.xxx.layer1.EJB1Remote

    在这种情况下,每个单独的JAR文件在WebLogic中都是自己的应用程序,每个应用程序都有自己的类加载器。因此,当单独部署JAR文件(而不是捆绑在EAR文件中)时,它们的类加载器看不到其他文件中的类

    在本例中,我将EJB2的接口分离到另一个JAR文件中,并将其作为可选包部署,并将其引用添加到其他JAR文件的清单中