环境


两个无状态EJB及其远程接口。 EJB1被注入到EJB2中。


 

    /// EJB1

    package com.xxx.layer1;

    @Remote
    public interface EJB1Remote {
    }

    @Stateless (mappedNamed="com.xxx.EJB1")
    public class EJB1 implements EJB1Remote {
    }


    /// EJB2

    package com.xxx.layer2;

    import com.xxx.layer1;

    @Remote
    public interface EJB2Remote {
    }

    @Stateless (mappedNamed="com.xxx.EJB2")
    public class EJB2 implements EJB2Remote {

        @EJB(mappedNamed="com.xxx.EJB1")
        EJB1Remote ejb1;
    }



EJB2还使用一些可选包(在其清单中声明)
WebLogic应用程序服务器(10.3.3)
将两个EJB打包到两个单独的JAR文件中


问题

如果将两个JAR文件打包到EAR文件中并进行部署,则依赖项注入将起作用。但是,如果我分别部署它们,即使先部署EJB1并在Weblogic中验证了全局JNDI名称(com.xxx.EJB1#com.xxx.layer1.EJB1Remote)之后,EJB2的部署也会失败,并出现ClassNotFoundException:com.xxx.layer1。 EJB1远程

最佳答案

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

在这种情况下,我将EJB2的接口分离到另一个JAR文件中,并将其部署为可选包,并将其引用添加到其他JAR文件的清单中。

10-08 12:04