Java WebLogic JNDI树是线程安全的吗?
JNDI树中的对象是线程安全的吗 比如说,我做了这样的事情: 伪代码:Java WebLogic JNDI树是线程安全的吗?,java,weblogic,jndi,Java,Weblogic,Jndi,JNDI树中的对象是线程安全的吗 比如说,我做了这样的事情: 伪代码: String value = null; try { value = context.lookup("someValue") } catch (Exception ignored) {} if (value == null) { value = "My name is "+currentThread.getName() context.bind("someValue", value); } 现在是否有可能第一个
String value = null;
try {
value = context.lookup("someValue")
} catch (Exception ignored) {}
if (value == null) {
value = "My name is "+currentThread.getName()
context.bind("someValue", value);
}
现在是否有可能第一个线程检查某个值,发现它为空,然后去给它设置一个值,但此时另一个线程进来检查,它也发现该值为空,所以它设置了自己的值,所以第一个线程将该值绑定到它的名称,第二个线程将重新绑定到它自己的名称,覆盖第一个线程
或者,是否有某种方法使此线程安全?当您将自定义对象(非RMI对象)绑定到WebLogic服务器群集中的JNDI树中时,该对象将在群集中的所有服务器上复制。但是,如果主机服务器停机,则会从集群的JNDI树中删除自定义对象。除非再次绑定自定义对象,否则不会复制自定义对象。每次要传播对自定义对象所做的更改时,都需要取消绑定并重新绑定自定义对象 解除绑定和重新绑定是昂贵(缓慢)的操作 请参见此处的更多信息:
还有大量关于上下文线程安全的信息。您将需要研究每个集群一次的设计模式。这是Oracle文档,但我想它也适用于weblogic实现。哦,太好了,我没意识到您可以像那样锁定上下文对象。你知道这对集群环境中的多个服务器是否会起作用吗?我想在集群环境中它会失败。这是我的猜测,我从未在集群中实现过这样的事情。