gpt4 book ai didi

java - EJB 依赖注入(inject)适用于 EAR,但不适用于 JAR

转载 作者:行者123 更新时间:2023-12-01 05:15:14 25 4
gpt4 key购买 nike

环境

  • 两个无状态 EJB 及其远程接口(interface)。 EJB1 被注入(inject)到 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 还使用一些可选包(在其 MANIFEST 中声明)

  • WebLogic 应用程序服务器 (10.3.3)

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

问题

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

最佳答案

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

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

关于java - EJB 依赖注入(inject)适用于 EAR,但不适用于 JAR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11345790/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com