【问题标题】:Unknown JNDI Lookup String未知的 JNDI 查找字符串
【发布时间】:2015-08-12 12:26:32
【问题描述】:

我是 EJB 概念的新手。我在不同的网站上看到了以下内容:

样本 1:

@Stateless
@EJB(name="audit", beanInterface=AnotherEJBLocal.class)
public class EmployeeBean implements EmployeeServiceLocal, EmployeeServiceRemote {
  @PersistenceContext(unitName = "EmployeeService")
  private EntityManager manager;

  public void doAction(){
    try {
      Context ctx = new InitialContext();
      AnotherEJBLocal audit = (AnotherEJBLocal) ctx.lookup("java:comp/env/audit");
      audit.doAnother();
  } catch (NamingException e) {
      throw new EJBException(e);
  }

  }
}

示例 2:

public static void main(String[] a) throws Exception {

    EmployeeServiceRemote service = null;
    service = (EmployeeServiceRemote) new InitialContext().lookup("EmployeeBean/remote");


    service.doAction();



  }

示例 3:

obj = ctx.lookup(ejb/CBDWebAppEAR/CBDWebApp.jar/<EJB name>/<Remote Interface Class Name>);

CBDWebApp 是 bean 所在的项目名称。

我的问题是:

  1. java:comp/env/audit 的需要和意义是什么

  2. 为什么在示例 2 的情况下不使用相同类型的字符串。我猜是 它是一个非本地的远程 EJB。

  3. 示例3中EJB查找字符串的含义是什么。

【问题讨论】:

    标签: ejb ejb-3.0 jndi ejb-3.1 ejb-2.x


    【解决方案1】:
    1. java:comp/env/audit 字符串正在查找之前由 @EJB(name="audit", beanInterface=AnotherEJBLocal.class) 声明的 EJB 引用。 @EJB 声明的名称(以及 @Resource 和所有其他 EE 引用)在 java:comp/env 上下文中隐式声明。使用此引用,部署者可以将“审计”引用重新定位到应用程序中实现了 AnotherEJBLocal 接口的任何 EJB,或者如果部署者没有指定任何内容,@EJB 注释的 javadoc 要求它以单个 EJB 为目标实现接口的同一应用程序。

    2. 这个 main 方法(可能)由独立的 Java 程序声明。在这种情况下,它(可能)通过系统属性配置以连接应用程序服务器的 JNDI 服务器,该服务器会将远程引用返回给客户端。查找的名称是特定于供应商的,并且可能是在部署期间为 EJB 配置的。

    3. 这与 #2 非常相似,唯一的区别是使用的特定字符串。在这种情况下,如果在部署期间使用ejb/&lt;app&gt;/&lt;module&gt;/&lt;bean&gt;/&lt;interface&gt; 模式没有为 EJB 配置任何绑定名称,它可能依赖于应用程序服务器的“默认”绑定名称。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-13
      • 2020-10-19
      • 2019-07-20
      • 2017-10-21
      • 1970-01-01
      • 1970-01-01
      • 2013-08-24
      • 1970-01-01
      相关资源
      最近更新 更多