簡體   English   中英

EJB依賴注入可與EAR一起使用,但不適用於JAR

[英]EJB Dependency Injection works with EAR but not JAR

環境

  • 兩個無狀態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文件的清單中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM