Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java WebLogic JNDI树是线程安全的吗?_Java_Weblogic_Jndi - Fatal编程技术网

Java WebLogic 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); } 现在是否有可能第一个

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);
}
现在是否有可能第一个线程检查某个值,发现它为空,然后去给它设置一个值,但此时另一个线程进来检查,它也发现该值为空,所以它设置了自己的值,所以第一个线程将该值绑定到它的名称,第二个线程将重新绑定到它自己的名称,覆盖第一个线程


或者,是否有某种方法使此线程安全?

当您将自定义对象(非RMI对象)绑定到WebLogic服务器群集中的JNDI树中时,该对象将在群集中的所有服务器上复制。但是,如果主机服务器停机,则会从集群的JNDI树中删除自定义对象。除非再次绑定自定义对象,否则不会复制自定义对象。每次要传播对自定义对象所做的更改时,都需要取消绑定并重新绑定自定义对象

解除绑定和重新绑定是昂贵(缓慢)的操作

请参见此处的更多信息:


还有大量关于上下文线程安全的信息。您将需要研究每个集群一次的设计模式。

这是Oracle文档,但我想它也适用于weblogic实现。哦,太好了,我没意识到您可以像那样锁定上下文对象。你知道这对集群环境中的多个服务器是否会起作用吗?我想在集群环境中它会失败。这是我的猜测,我从未在集群中实现过这样的事情。