【问题标题】:"JNDI name is already in use" in Weblogic 12c with EJB3带有 EJB3 的 Weblogic 12c 中的“JNDI 名称已在使用中”
【发布时间】:2015-07-21 18:21:16
【问题描述】:

我尝试将以下代码作为 EJB 部署到 WebLogic 12c,但出现错误:

“部署 EJB GeopoliticalServiceBean 时出错(应用程序: campaigner-ejb,EJBComponent:campaigner-service.jar),JNDI 名称 java:global/campaigner-ejb/campaigner-service/GeopoliticalServiceBean!com.dr_dee_sw.campaigner.service.GeopoliticalServiceLocal 已在使用中。您必须在 weblogic-ejb-jar.xml 部署描述符或对应注解 在部署此 EJB 之前。”

public interface GeopoliticalService
{
...
}

@Local
public interface GeopoliticalServiceLocal extends GeopoliticalService
{
}

@Remote
public interface GeopoliticalServiceRemote extends GeopoliticalService
{
}

@TransactionManagement(value = TransactionManagementType.CONTAINER)
@TransactionAttribute(value = TransactionAttributeType.REQUIRED)
@Stateless
public class GeopoliticalServiceBean implements GeopoliticalServiceLocal,GeopoliticalServiceRemote
{
...
}

更多信息: 我已经减少了 EJB-JAR 文件,campaigner-service.jar,所以其中只有一个 bean,加上接口和异常。 EAR 文件,campaigner-ejb.ear,在它的主层只有 EJB-JAR。它还有一个包含支持库的“lib”目录,但其中只有 DAO 和 DTO jar 以及第三方库。所以,对我来说,这似乎不是包装问题。

这是我第一个使用所有注释的应用程序,但它看起来仍然相当简单。我错过了什么?

【问题讨论】:

  • 您能澄清一下减少 EJB-JAR 文件是什么意思吗?你能粘贴文件的内容吗?
  • 即使弹回weblogic也会出现同样的错误吗?
  • EJB-JAR 中有几个 bean。为了减少此问题中的变量数量,我将构建文件更改为仅包含一个 bean。 EJB-JAR 文件是一个 JAR 文件,所以我无法真正复制它,但它的内容包括一个 EJB 实现及其接口,以及一些自定义异常。
  • 是的,我在弹回 weblogic 时遇到同样的错误
  • 我们已从 OC4J 升级。在 OC4J 中,EJB 可以是本地的也可以是远程的,但不能同时是两者。我假设在 WebLogic 中,EJB 可能两者兼有。这个假设是错误的吗?我确实需要这两个,因为我要从网站和独立的命令行应用程序访问这些 bean。

标签: java jakarta-ee ejb-3.0 weblogic12c


【解决方案1】:

在从 Weblogic 10 迁移到 Weblogic 12 的过程中,我们遇到了同样的问题。 我们可以通过在没有正确配置数据源的新服务器上部署 EAR 来重现该问题;这将在部署期间导致 NameNotFoundException。每次尝试部署 EAR 都会导致 JDNI 名称已在使用中,即使在重新启动、取消部署、重新部署之后也是如此。

解决该问题的唯一方法是删除目标服务器的缓存(最重要的是 EJBCompilerCache)和 tmp 文件夹。

【讨论】:

    【解决方案2】:

    WebLogic 缓存人工制品,即使它们被取消部署(删除)。解决方案是删除缓存。

    解决方案

    对于每个域,您应该删除缓存的人工制品。例如对于 svc 域,停止所有服务器(管理员和托管),然后 执行以下操作以删除 tmp 和 EJB 缓存。

    cd /data/weblogic/Oracle/products/Oracle_Home/fusion/user_projects/domains/svc
    rm -fr ./servers/svc_srv1/cache/EJBCompilerCache
    rm -fr ./servers/Administrator/cache/EJBCompilerCache
    rm -fr ./servers/AdminServer/tmp
    rm -fr ./servers/svc_srv1/tmp
    

    否则,从 weblogic 管理控制台,转到主页 > 服务器摘要 >YOUR_DOMAIN_NAME,然后在 EJB 选项卡上将 Force Generation 勾选为 true

    【讨论】:

    • YOUR_DOMAIN_NAME 然后在 EJB 选项卡上勾选 Force Generation to true dosent work for me。
    猜你喜欢
    • 1970-01-01
    • 2015-10-21
    • 2023-03-09
    • 2012-04-18
    • 1970-01-01
    • 2013-01-30
    • 2020-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多