例如,我有DBManager. java Singleton Class,我必须在集群环境中部署它.
它是一个基于Web的应用程序,具有以下部署策略

Apache负载均衡器 – > Tomcat 6(群集中的3个服务器).

我必须为3个tomcat实例维护DBManager的单个实例.

我的代码是

package com.db.util;
public class DBManager {
    private static DBManager singleInstance;
    private DBManager () {}
    public static DBManager getSingleInstance() {
        if (singleInstance == null) {
            synchronized (DBManager.class) {
                if (singleInstance == null) {
                    singleInstance = new DBManager ();
                }
            }
        }
        return singleInstance;
    }
}

我一直在寻找这个问题的解决方案,并找到了像jgroups API这样的东西.
这可以使用jgroups实现吗?任何想法,如何实现?

解决方法

Java在每个实例中为您提供单例,您需要在实例之间进行某种协调,因此在任何给定时间,其中一个是活动的,但如果活动的一个死亡,则另一个实例变为活动状态.

一些应用服务器具有内置功能来控制这种协调的工作者实例,我不知道Tomcat是否具有这样的功能.

自己构建这样的功能是非常困难的,请参阅this question并注意到该问题提供了一个有用库的链接 – 对我来说这看起来很复杂.

但是在您的情况下,您有一个数据库,这为您提供了一个协调点.我没有详细设计这个,但我认为可以使用控制表中的专用行创建预订方案.有效地执行此操作有点棘手,平衡实例死亡的检测速度与轮询数据库的开销以查看哪个实例处于活动状态,但似乎可行.

这个想法是记录包含“reservedUntil”时间戳和“processId”.每个进程读取记录,如果它包含它自己的id并且时间戳尚未到期,则它知道它可以工作.当时间接近到期时,活动进程使用乐观锁定样式“Update where timestamp == old timestamp”来更新时间戳以管理竞争条件.每个非活动进程等待,直到它上次读取的时间戳已过期,然后尝试通过更新记录来控制,再次使用乐观锁定Update where.通常,控制的尝试将失败,但如果成功,我们现在有一个新的活动实例,并且由于乐观锁定,我们只能获得一个活动实例.

如何为多个jvm支持创建单例java类?的更多相关文章

  1. 视频流 – 使用视频工具箱解码iOS 8中的h264

    需要解码h264流并获取像素缓冲区我知道iOS8上的视频工具箱可能1.如何将h264流转换为CMSampleBufferRef?

  2. ios – 访问文件属性与访问sqlite记录

    >看到上述结果后,我决定选择attributesOfItemAtPath方法.还有什么我不是考虑传递sqlite?

  3. ios – NSTimeInterval到unix时间戳

    我从cmmotionmanager获取CMDeviceMotion对象.CMDeviceMotion的一个属性是时间戳,表示为NSTimeInterval.根据文档,这允许“亚毫秒”时间戳精度.不幸的是,NSTimeInterval是自上次设备启动以来计算的,对以原始形式使用它提出了重大挑战.有没有人有一个工作代码将此NSTimeInterval转换为类似时间戳的Unix?解决方法在将磁力计值与CoreMotion事件进行比较时,我遇到了类似的问题.如果要转换这些NSTimeIntervals,您只需要计

  4. ios – 更改JSQMessagesViewController中的时间戳逻辑

    SOMessaging一天一天怎么样?

  5. 如何从iOS中的CMSampleBufferRef获取相机数据当前捕获的时间戳

    我开发和iOS应用程序,将捕获的相机数据保存到一个文件,我使用捕获CMSampleBufferRef,并将编码为H264格式,帧将使用AVAssetWriter保存到文件.我遵循示例源代码来创建此应用程序:http://www.gdcl.co.uk//2013/02/20/iOS-Video-Encoding.html现在我想获得保存的视频帧的时间戳来创建一个新的电影文件,为此我做了以下事情1)找

  6. ios – 如何维护两个不同设备之间的时钟会话?

    我正在研究iOS应用程序,它需要在接受两个设备用户时在两个设备之间维持时钟计时器会话?但我不确定如何在两台设备上都没有时间缺陷的情况下实现这一目标?

  7. Swift开发用到的一些工具类

  8. Swift&Cocoa实战之数据类型:时间日期

    时间日期NSDate在Objective-C中,可以使用如下的代码创建一个UTC的时间:但是在Swift中,如果使用如下方式:获取到的会是本地时间。

  9. swift - DateUtil

  10. swift 移动支付之【微信支付】开发步骤

    //向微信注册WXApi.registerapp2.发送预支付数据预支付数据由后台返回,格式如下[plain]viewplaincopyprint?{"appid":"wxxxxxxxxxxx","noncestr":"Hk8dsZoMOdTXGjkJ","package":"Sign=WXPay","partnerid":"01001010110","prepayid":"wx2016050000000000000000000000","sign":"B4879FFFA8B65522A04034E2D0

随机推荐

  1. 使用序列化将对象传递给另一个JVM – 相同的Java版本和jar(都运行我们的应用程序)

    但是想使用纯序列化到bytearray然后进行编码,将它从jvm1中的servlet1发送到jvm2中的servlet2局域网,在两个J2EE应用程序中设置相同的Java版本和jar)基本步骤是:–>将任何Serializable对象序列化为字节数组并生成字符串.确切的代码见下文>Base64输出1.是否需要基于64或可以跳过第2步?

  2. 所有JVM /系统中的Java,Object.hashCode()结果常量?

    Object.hashCode()的输出是否必须在同一个对象的所有JVM实现上相同?例如,如果“test”.hashCode()在1.4上返回1,它是否可能在1.6上返回2.或者如果操作系统不同,或者实例之间存在不同的处理器架构,该怎么办?

  3. Clojure的STM模型可以在多个JVM上运行吗?

    我知道Clojure在多核计算机上运行良好,但我想知道它是否适用于在多台计算机上分布的JVM集群?

  4. java – 加载时出现Eclipse jvm.dll错误

    解决方法按照评论中的要求.您的eclipse版本正在搜索jdk的x86版本.您应该检查您的eclipse是否是64位版本,如果没有,切换到64位jvm.

  5. java – 什么JVM优化导致这些性能结果?

    执行JavaREST服务性能测试我看到一个意外的模式:在每次调用中创建并返回相同值对象的方法比仅返回存储在类或对象字段中的值对象的另一个版本运行得更快.码:字节代码:>内联(更快):getstatic,invokestatic,invokevirtual,areturn>静态归档(较慢):getstatic,areturn>对象字段(较慢):aload,getfield,areturn性能(使用A

  6. java – JVM是否有计划在运行时支持泛型?

    你知道,就像CLR一样.有人甚至承认缺乏运行时通用信息是一个问题,并努力解决它?解决方法Java的设计者选择此解决方案来保持向后兼容性.从那时起,存在更多的Java代码,因此破坏向后兼容性会产生更糟糕的后果.所以我怀疑他们会改变他们的想法.

  7. 如何为多个jvm支持创建单例java类?

    任何想法,如何实现?

  8. java – 强制jvm返回本机内存

    参见英文答案>JVMsendingbackmemorytoOS3个我不时在需要大量内存的eclipse任务中运行.所以jvm在任务运行时吞下大约2-3GB的RAM,没关系.但是一旦jvm占用了那个内存它就不会释放它而且我有一种情况,当堆中使用的内存大约是200mb,总堆大小约为3gb时,这真的是不需要的,因为其他程序正在挨饿.我尝试了Max/MinHeapFreeRatio参数来强制jvm减少未使

  9. java – 获取给定JVM实例中所有当前加载的类的列表

    知道给定JVM实例当前加载哪些类是很方便的.例如,有没有办法让他们通过JVisualVM?

  10. java – JVM Spec,JVM Implementation,JVM Runtime之间的区别

    我读了以下几个字,但我想知道它们之间的差异……JVM规范,JVM实现,JVM运行时解决方法JVMSpec:描述JVM应如何表现的文档.JVM实现:基于JVMSpec的JVM实现.JVM运行时:JVM实现的一个实例.

返回
顶部