【问题标题】:Weblogic Unable to deploy EJB javax.naming.NameAlreadyBoundExceptionWeblogic 无法部署 EJB javax.naming.NameAlreadyBoundException
【发布时间】:2025-12-13 03:05:02
【问题描述】:

我有 2 个 ejb,MyTestEB 位于 mytest 项目中,TestEB 位于 test 项目中。 mytest项目引用test项目

MyTestEB 中的ejb-jar.xml 文件中的mytest 项目:

<entity id="Entity_TransactionEB">
        <description>Transaction Entity Bean</description>
        <display-name>Transaction Entity Bean</display-name>
        <ejb-name>MyTestEB</ejb-name>
        <local-home>
            test.transaction.ejb.TransactionLocalHome
        </local-home>
        <local>
            test.transaction.ejb.TransactionLocal
        </local>
        <ejb-class>
            test.transaction.ejb.TransactionBean
        </ejb-class>
        <persistence-type>Bean</persistence-type>
        <prim-key-class>
            test.transaction.TransactionKey
        </prim-key-class>
        <reentrant>False</reentrant>
        <resource-ref id="ResourceRef_TransactionEB_jdbc">
            <res-ref-name>jdbc/DataSource</res-ref-name>
            <res-type>javax.sql.DataSource</res-type>
            <res-auth>Container</res-auth>
        </resource-ref>
    </entity>

test.transaction.ejb.TransactionLocalHome; test.transaction.ejb.TransactionBeantest.transaction.TransactionKey 都在 test 项目中

TestEB 中的ejb-jar.xml 文件中的test 项目:

<entity id="Entity_TransactionEB">
            <description>Transaction Entity Bean</description>
            <display-name>Transaction Entity Bean</display-name>
            <ejb-name>TestEB</ejb-name>
            <local-home>
                test.transaction.ejb.TransactionLocalHome
            </local-home>
            <local>
                test.transaction.ejb.TransactionLocal
            </local>
            <ejb-class>
                test.transaction.ejb.TransactionBean
            </ejb-class>
            <persistence-type>Bean</persistence-type>
            <prim-key-class>
                test.transaction.TransactionKey
            </prim-key-class>
            <reentrant>False</reentrant>
            <resource-ref id="ResourceRef_TransactionEB_jdbc">
                <res-ref-name>jdbc/DataSource</res-ref-name>
                <res-type>javax.sql.DataSource</res-type>
                <res-auth>Container</res-auth>
            </resource-ref>
        </entity>

当我在 Weblogic 中部署我的应用程序时,我收到了错误(错误 sn-p):

Unable to deploy EJB: MyTestEB from mytest-ejb.jar:

[EJB:011072]Unable to bind EJB Local Home Interface to the JNDI name: TestEB.
javax.naming.NameAlreadyBoundException: TestEB is already bound; remaining name ''
    at weblogic.jndi.internal.BasicNamingNode.bindHere(BasicNamingNode.java:357)

【问题讨论】:

    标签: java jakarta-ee weblogic


    【解决方案1】:

    当有多个实例试图绑定到 JNDI 树时,会出现“JNDI 名称已绑定”。您可以通过打开控制台 -> 域 -> 服务器来检查导致此问题的原因。选择一个托管服务器并选择 JNDI 树选项。这会告诉你谁取了这个名字。 您也可以在 XML 中执行此操作,将 JNDI 指定为 &lt;jndi-name&gt;...&lt;/jndi-name&gt; 你可以参考更多关于这里 resource-description from Oracle Doc 可以在 ejb-jar.xml 中提及的全部内容列表在此处提及 docs.oracle.com/cd/E23943_01/web.1111/e13719/ejb_jar_ref.htm#i1114706

    【讨论】:

    • 非常感谢,您的回答建议我转到 mytest 项目中的 weblogic-ejb-jar.xml 并将 &lt;local-jndi-name&gt;TestEB&lt;/local-jndi-name&gt; 更改为 &lt;local-jndi-name&gt;MyTestEB&lt;/local-jndi-name&gt; 以便修复错误。