ejb-3.0 - Weblogic 10.3.5 和 EJB 3 JNDI 名称

标签 ejb-3.0 jndi weblogic11g

有人能告诉我在哪里可以找到有关 EJB 3 的默认 JNDI 命名的信息吗?

Weblogic 是否使用像 Glassfish 这样的可移植 JNDI 名称?

我能否找到(如 Glassfish)使用 JNDI 名称的 EJB 部署的踪迹?

例如:

  • 只有@Remote 的接口(interface)(服务)
  • 一个只有@Stateless 实现接口(interface)的bean (ServiceImpl)
  • 打包在 .ear 文件中的所有内容 (service-application-1.0)

在 Weblogic 上部署时,我看到的唯一 JNDI 引用是:

service-application-1.0service-application-1.0_jarServiceImpl_Home

但我不能在上下文查找中使用该名称。如果我这样做

Service myService = (Service) context.lookup("service-application-1.0service-application-1.0_jarServiceImpl_Home");

它给了我

Exception in thread "main" java.lang.ClassCastException: weblogic.ejb.container.internal.StatelessEJBHomeImpl_1035_WLStub cannot be cast to com.tuto.Service
at com.tuto.TestEjb.main(TestEjb.java:24)

附言。有了 Glassfish,它给了我

Portable jndi names for .... : java:global/service-application-1.0/service-application-ejb-1.0/ServiceImpl

Service myService = (Service) context.lookup("java:global/service-application-1.0/service-application-ejb-1.0/ServiceImpl");

正在工作。

最佳答案

不幸的是,EJB 3.0 没有指定标准的 JNDI 命名并将其留给服务器供应商。引用有关 mappedName 的 WL 文档是正确的:“如果指定此属性,则无状态 session bean 可能不可移植”。 mappedName 属性的缺点是全局 JNDI 名称将默认为 mappedName#FullyQualifiedRemoteInterface。由于 mappedName 是源代码中的注释,它使您的代码不可移植。首选方法是在特定于供应商的部署描述符(例如 weblogic-ejb-jar.xml)中保留特定于供应商的行为。这样,您还可以选择指定自己的自定义 JNDI 名称,而无需预先确定的格式,如 mappedName#FullyQualifiedRemoteInterface。

EJB 3.1 在全局、应用程序和模块级别对 JNDI 名称进行了标准化。请看http://docs.oracle.com/cd/E19798-01/821-1841/girgn/index.html

关于ejb-3.0 - Weblogic 10.3.5 和 EJB 3 JNDI 名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14872141/

相关文章:

jboss - 没有可用于处理的 EJB 接收器

java - 使用 Glassfish V3 的 JWS 和安全数据库连接

java - 在eclipse中使用weblogic服务器运行struts项目

java - 为 sparc T4 8 核正确调整 G1 GC

java - 不同应用程序的类加载器可以不同吗?

hibernate - EJB 3 或 Hibernate 3

java - 第一次连接到 Glassfish v3 很慢

java - 运行简单 EJB 应用程序时出现问题

java - 如何匿名访问 Windows Active Directory?

java - 资源 JNDI 查找失败