何时关闭JNDI上下文

时间:2015-05-19 08:19:52

标签: java java-ee ejb jndi

当我们通过JNDI查找对象时,我们会这样做:

public SomeResult doSomething() {
  Context ctx;
  try {
    ctx = new InitialContext(properties);
    SomeClass someObject = (SomeClass) ctx.lookup("jndiName");
    SomeResult someResult = someObject.getResult();
    return someResult;
  } finally {
      ctx.close();
  }
}

一位同事这样做有点不同:

public SomeClass getSomeClass() {
  Context ctx;
  SomeClass someObject = null;
  try {
    ctx = new InitialContext(properties);
    SomeClass someObject = (SomeClass) ctx.lookup("jndiName");
    return someObject;
  } finally {
    ctx.close();
  }
}

这让我感到疑惑,使用哪一个?关闭Context后返回的对象是否有效?这是通过纯粹的巧合工作还是仅用于查找的上下文,并且对象(作为ejb的代理)是自我维持的?

我试图在JNDI-Spec中找到一些东西......但什么都没有......但我可能只是盲目的; - )

通过JNDI查找EJB并使用它的最佳做法是什么,以及出于什么原因。

1 个答案:

答案 0 :(得分:2)

第一个版本包含冗余声明,没有任何建议,但从上下文的角度来看,这两者之间没有区别。无论哪种情况,返回的对象都有效。