通过单例模式模拟RAC连接

简介: 单例模式基本是学习设计模式的第一个模式,而且在工作中使用太普遍了,通用到我们感觉就应该是这样,但是如果真给你纸和笔,在5分钟内写出一个完整的单例模式,估计还是有不少人会中招。
单例模式基本是学习设计模式的第一个模式,而且在工作中使用太普遍了,通用到我们感觉就应该是这样,但是如果真给你纸和笔,在5分钟内写出一个完整的单例模式,估计还是有不少人会中招。
RAC是实时应用集群,是oracle的一种高可用方案,假设我们有2个节点,如果其中一个节点出现问题,另外一个节点依然能够正常工作,对于客户端来说感觉是完全透明的,感觉不到任何的异常。
我们今天来通过设计模式的单例模式来模拟一下RAC连接的情况
首先是单例模式,一般都是认为一个类可以产生一个对象,如果对象的数量不收限制,也是可以实现的,这个就是单例模式的扩展。
我尝试写了如下的代码,模拟两个节点的情况

点击(此处)折叠或打开

  1. import java.util.ArrayList;

    public class RacTest {
    private static final RacTest rac1= new RacTest();
    private static final RacTest rac2= new RacTest();
    private final static ArrayList racNodes = new ArrayList();
    private RacTest(){}
    public static RacTest getInstance(){
    int i = (int)(1+Math.random()*2)-1;
    if(racNodes.size()==0){
    racNodes.add(rac1);
    racNodes.add(rac2);
    }
    System.out.println("rac instance "+(i+1)+" "+racNodes.get(i));
    return racNodes.get(i);
    }
    public static void main(String[] args){
    for(int i=0;i
    RacTest.getInstance();

    }
    }

这样,我们定义了两个节点,在初始化的时候指定getInstance()方法,然后在每次调用的时候都只初始化一次。
当然从客户端来说为了能够更加清晰表达出连接节点的随机性,我写了一个循环,一次循环200次,打印出连接的情况,通过数据更能够说明。可以从初始化的两个对象的地址看到只有两个对象。
rac instance 1 RacTest@42e816
rac instance 1 RacTest@42e816
rac instance 1 RacTest@42e816
rac instance 2 RacTest@9304b1
rac instance 1 RacTest@42e816
rac instance 1 RacTest@42e816
rac instance 2 RacTest@9304b1
rac instance 2 RacTest@9304b1
rac instance 1 RacTest@42e816
rac instance 2 RacTest@9304b1
rac instance 1 RacTest@42e816
rac instance 2 RacTest@9304b1
rac instance 2 RacTest@9304b1
rac instance 1 RacTest@42e816
rac instance 2 RacTest@9304b1
rac instance 1 RacTest@42e816
rac instance 1 RacTest@42e816
rac instance 1 RacTest@42e816
rac instance 1 RacTest@42e816
rac instance 2 RacTest@9304b1




目录
相关文章
|
Oracle 关系型数据库 Java
分享一个 Oracle RAC 模式下客户端建立JDBC初始连接时因ONS造成应用启动时卡顿30秒问题的排查分析案例
分享一个 Oracle RAC 模式下客户端建立JDBC初始连接时因ONS造成应用启动时卡顿30秒问题的排查分析案例
rac中连接pdb时遇到ORA-01033:
sqlplus system/dingjia@192.168.82.139:1528/third
115 0
|
网络协议 Oracle 关系型数据库
【转】Oracle RAC 环境下的连接管理
文章转自:http://www.oracle.com/technetwork/cn/articles/database-performance/oracle-rac-connection-mgmt-1650424-zhs.
1399 0
|
负载均衡 网络协议 Oracle
Oracle 11g R2 RAC高可用连接特性 – SCAN详解1
<p style="line-height:1.5em; font-family:'Lucida Grande','Lucida Sans Unicode',Verdana,Arial,sans-serif; font-size:1em; margin-top:1.2em; margin-bottom:1.2em"> 昨天帮朋友解决11g RAC SCAN问题,当时为这朋友简单解答了一些
2254 0
|
关系型数据库 数据库
连接RAC出现的问题--ORA-12514
场景:新建的RAC数据库,通过TNS,无法连接Oracle数据库。 原因:新建的RAC数据库的SID和GLOBAL_DBNAME不一致。 这个情况需要:tnsnames.ora中的SERVICE_NAME要和服务器的监听器listener.ora中的GLOBAL_DBNAME一样才可以 否则就会报ORA-12514错误。
2012 0
|
Oracle 关系型数据库 测试技术
|
Oracle 关系型数据库 数据库
kettle设计器连接oracle RAC时的连接字符串
1、不需要填写主机名 2、数据库名写如下连接字符串: (DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = IP地址)(PORT = 1521))(CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = 服务名))) 3、端口号写:-1  
1524 0
|
负载均衡 网络协议 Oracle
Oracle 11g R2 RAC高可用连接特性 – SCAN详解2
<p style="line-height:1.5em; font-size:14px; margin-top:1.2em; margin-bottom:1.2em; padding-top:0px; padding-bottom:0px; font-family:'Lucida Grande','Lucida Sans Unicode',Verdana,Arial,sans-serif"
1776 0