首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多集群环境(weblogic集群)上的同步数据块

多集群环境(weblogic集群)上的同步数据块
EN

Stack Overflow用户
提问于 2018-04-09 18:21:19
回答 2查看 472关注 0票数 1

我有一种情况,我只需要加载一次提供者列表。所以我使用了同步块。但是在weblogic的多集群环境下,该算法失败了。有没有办法解决这个问题。这段代码在单个集群中工作得很好。

代码语言:javascript
复制
public class AdditionalInfoImplProvider
{
    private volatile boolean isLoaded = false;

    private void ensureProviderLoaded()
    {
        if (!isLoaded) {
            synchronized (this) {
                if (!isLoaded) {
                    // Load Provider
                    isLoaded = true;
                }
            }
        }
    }
}
EN

回答 2

Stack Overflow用户

发布于 2018-05-24 18:51:44

Java关键字是一个单独的synchronized概念。在集群中,有多个JVM,所以所有这些都将在不同的AdditionalInfoImplProvider实例上同步,并且您的逻辑将在所有Weblogic实例中执行。

据我所知,标准JDK中没有提供这种同步。

Singleton设计模式在这里也不起作用,因为传统上,Singleton意味着每个JVM而不是每个集群的Singleton。

处理这种情况的基本方法是拥有应用程序外部的东西,比如锁文件或RDBMS中的条目&无论谁先获得它,加载和rest只需退出即可。

您还可以查看Weblogic是否为应用程序事件提供了某种类型的侦听器--而不是特定于集群实例。

我没有使用过Zookeeper,但听说人们在你的用例中使用它。

有关该主题的更广泛讨论,请参阅this question

总结一下,您肯定需要在应用程序范围内存在一些东西,而每个JVM构造是不够的。

票数 0
EN

Stack Overflow用户

发布于 2018-05-24 19:13:57

WebLogic有一个您应该实现的特定接口- https://docs.oracle.com/cd/E68505_01/wls/WLAPI/weblogic/cluster/singleton/SingletonService.html -当您运行"activate“方法时,当另一个实例已经在您的WebLogic集群中处于活动状态时,它将抛出一个异常。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49730680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档