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

Gar*_*art 6 java java-ee ejb-3.0 weblogic12c

我有以下代码尝试作为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的相应注释中设置其他JNDI名称,然后才能对其进行部署。”

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
{
...
}
Run Code Online (Sandbox Code Playgroud)

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

这是我第一个使用所有注释的应用程序,但看起来仍然很简单。我想念什么?

P_W*_*999 4

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

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