当我们通过 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();
}
}
这让我想知道,使用哪一个?关闭上下文后返回的对象是否有效?这是通过纯粹的巧合工作还是仅用于查找的上下文和对象(作为 ejb 的代理)是 self 维持的?
我试图在 JNDI-Spec 中找到一些东西……但一无所获……但我可能只是瞎了眼 ;-)
通过 JNDI 查找和使用 EJB 的最佳实践是什么,原因是什么。
最佳答案
第一个版本包含多余的声明,没有什么可推荐的,但是从上下文的角度来看,这两者之间没有区别。返回的对象在任何一种情况下都是有效的。
关于java - 何时关闭 JNDI 上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30320248/