在带有 EJB3 的 Weblogic 12c 中“JNDI 名称已被使用”

问题描述 投票:0回答:3

我尝试将以下代码作为 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 已在使用中。您必须在中设置不同的 JNDI 名称 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 以及第三方库。所以,对我来说,这似乎不是包装问题。

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

java jakarta-ee ejb-3.0 weblogic12c
3个回答
5
投票

在从 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,然后在 EJBs 选项卡上将 Force Generation 勾选为 true


0
投票

WLS 管理控制台的更改对我有用。谢谢!!

© www.soinside.com 2019 - 2024. All rights reserved.