Java 何时关闭JNDI上下文

Java 何时关闭JNDI上下文,java,jakarta-ee,ejb,jndi,Java,Jakarta 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

当我们通过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();
  }
}
一位同事的做法有些不同,如下所示:

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();
  }
}
这让我想知道,该用哪一个?关闭上下文后返回的对象是否仍然有效?这是通过完全一致的方式实现的,还是上下文只是为了查找,而对象(作为ejb的代理)是自我维持的

我试图在JNDI-Spec中找到一些东西。。。但是什么都没有。。。但我可能只是瞎了;-)


通过JNDI查找EJB并使用它的最佳实践是什么,原因是什么。

第一个版本包含一个冗余声明,没有什么可推荐的,但从上下文的角度来看,这两者之间没有区别。返回的对象在任何情况下都有效