Java &引用;JNDI名称已在使用中”;在Weblogic 12c中使用EJB3

Java &引用;JNDI名称已在使用中”;在Weblogic 12c中使用EJB3,java,jakarta-ee,ejb-3.0,weblogic12c,Java,Jakarta Ee,Ejb 3.0,Weblogic12c,我尝试将以下代码作为EJB部署到WebLogic 12c,但出现了一个错误: “部署EJB GeopoliticalServiceBean时出错(应用程序: 活动家ejb,ejb组件:活动家服务.jar),JNDI名称 java:global/activater ejb/activater service/GeopoliticalServiceBean!com.dr_dee_sw.activater.service.GeopoliticalServiceLocal 已在使用中。必须在中设置其他J

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

“部署EJB GeopoliticalServiceBean时出错(应用程序: 活动家ejb,ejb组件:活动家服务.jar),JNDI名称 java:global/activater ejb/activater service/GeopoliticalServiceBean!com.dr_dee_sw.activater.service.GeopoliticalServiceLocal 已在使用中。必须在中设置其他JNDI名称 weblogic-ejb-jar.xml部署描述符或相应的注释 在部署此EJB之前对其进行测试。”

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


这是我第一个使用所有注释的应用程序,但它看起来仍然相当简单。在从Weblogic 10迁移到Weblogic 12的过程中,我们遇到了同样的问题。 我们可以通过在没有正确配置数据源的新服务器上部署EAR来重现问题;这将在部署期间导致NameNotFoundException。每次尝试部署EAR都会导致JDNI名称已经在使用中,即使在重新启动、取消部署、重新部署之后也是如此


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

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

解决方案

对于每个域,您应该删除缓存的人工制品。例如,对于svc域,停止所有服务器(Admin和managed),然后 执行以下操作以删除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管理控制台,转到主页>服务器摘要>您的域名,然后在EJBs选项卡上勾选强制生成为true

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