<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    零雨其蒙's Blog

    做優(yōu)秀的程序員
    隨筆 - 59, 文章 - 13, 評(píng)論 - 58, 引用 - 0
    數(shù)據(jù)加載中……

    Oracle Coherence初啼

         昨天寫了個(gè)Coherence的小例子,使用了Oracle Enterprise Pack for Eclipse,直接用它創(chuàng)建了一個(gè)ADF項(xiàng)目,連帶創(chuàng)建了JPA項(xiàng)目,在Configuration里添加了Coherence,這樣就有了配套的jar包了。
         Coherence利用多播自動(dòng)組成集群,類可以不實(shí)現(xiàn)序列化接口,這是一個(gè)簡單的例子:
    public class Cat  {
     
        private String name;
        private int age;
        private String sex;
          

        public Cat() {
            super();

        }

        public Cat(String name, int age, String sex) {
            super();
            this.name = name;
            this.age = age;
            this.sex = sex;
        }
    服務(wù)類:
    public class CatService {
     

        
    public Cat getCat(String name){
            NamedCache cache 
    = CacheFactory.getCache("AnimalCache");
            Cat cat 
    = (Cat) cache.get(name);
            
    if(cat==null){
                
    long age = Math.round(Math.random() * 10)+5;
                cat 
    = new Cat(name,(int) age,"male");
                cache.put(name, cat);
            }
            
    return cat;
        }
    }


    測試:
     
    public class CatServiceTest {
        CatService catService
    =new CatService();
        @Before
        
    public void setUp() throws Exception {
            CacheFactory.ensureCluster();
        }

        @After
        
    public void tearDown() throws Exception {
            CacheFactory.shutdown(); 
        }

        @Test
        
    public void test() {
            Cat tomCat
    =catService.getCat("tom");
            Cat tomCatFromCache
    =catService.getCat("tom");
            System.out.println(tomCat);
            assertEquals(tomCat, tomCatFromCache);
        }

    }
       Coherence推薦采用pof作為Serializer,這樣不需要實(shí)現(xiàn)序列化接口,而且性能非常高,需要做以下幾件事實(shí)現(xiàn)這個(gè):
        1 創(chuàng)建Serializer類:
        
    public class CatSerializer implements PofSerializer {

        @Override
        
    public Object deserialize(PofReader pofReader) throws IOException {
             String sName
    =pofReader.readString(0);
             Cat cat
    =new Cat();
             cat.setName(sName);
             pofReader.registerIdentity(cat);
             cat.setAge(pofReader.readInt(
    1));
             cat.setSex(pofReader.readString(
    2));
             pofReader.readRemainder();
            
    return cat;
        }

        @Override
        
    public void serialize(PofWriter pofWriter, Object object) throws IOException {
             Cat cat
    =(Cat)object;
             pofWriter.writeString(
    0,cat.getName());
             pofWriter.writeInt(
    1, cat.getAge());
             pofWriter.writeString(
    2, cat.getSex());
             pofWriter.writeRemainder(
    null);
        }

    }
        2 創(chuàng)建一個(gè)coherence-config文件,指定serializer,共有三個(gè)級(jí)別的指定,針對(duì)特定service,針對(duì)所有service,針對(duì)jvm,下面是針對(duì)所有service。
      
    <cache-config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns
    ="http://xmlns.oracle.com/coherence/coherence-cache-config"
        xsi:schemaLocation
    ="http://xmlns.oracle.com/coherence/coherence-cache-config http://xmlns.oracle.com/coherence/coherence-cache-config/1.1/coherence-cache-config.xsd">
        
    <!-- The defaults element defines factory-wide default settings. -->
        
    <defaults>
            
    <!-- Note: This element defines the default serializer for all services 
                defined within this cache configuration descriptor. Valid values include 
                full serializer definitions, as well as named references to serializers defined 
                within the "serializers" element of the operational configuration. Example 
                values include: java, pof. Default value is java. 
    -->
            
    <!--<serializer system-property="tangosol.coherence.serializer" />-->
            
    <serializer>
                    
    <instance>
                        
    <class-name>com.tangosol.io.pof.ConfigurablePofContext</class-name>
                        
    <init-params>
                            
    <init-param>
                                
    <param-type>String</param-type>
                                
    <param-value>custom-pof-config.xml</param-value>
                            
    </init-param>
                        
    </init-params>
                    
    </instance>
                
    </serializer>

       3 編寫custom-pof-config.xml,注冊serializer:
        
    <?xml version="1.0"?>
    <pof-config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns
    ="http://xmlns.oracle.com/coherence/coherence-pof-config"
        xsi:schemaLocation
    ="http://xmlns.oracle.com/coherence/coherence-pof-config http://xmlns.oracle.com/coherence/coherence-pof-config/1.1/coherence-pof-config.xsd">
        
    <user-type-list>
            
    <!-- include all "standard" Coherence POF user types -->
            
    <include>coherence-pof-config.xml</include>
            
    <user-type>
                
    <type-id>1001</type-id>
                
    <class-name>org.jport.coherence.demo.Cat</class-name>
                
    <serializer>
                    
    <class-name>org.jport.coherence.demo.CatSerializer</class-name>
                
    </serializer>
            
    </user-type>

        
    </user-type-list>
    </pof-config>

       4 指定這個(gè)自定義的coherence-config.xml,在jvm啟動(dòng)參數(shù)里:
        
    -Dtangosol.coherence.cacheconfig=C:\workspace\AdfprjModel\src\custom-coherence-cache-config.xml

          由于我是用JUnit進(jìn)行測試,因此就是把這個(gè)寫在run junit的configuration里了。
       
       如果屬性是引用了其他的類也沒問題:
       
    public class Cat  {
     
        
    private String name;
        
    private int age;
        
    private String sex;
        
    private Owner owner;

    public class Owner {
        
    private String name;
        
    private String phoneNumber;

        
    public Owner(String name, String phoneNumber) {
            
    super();
            
    this.name = name;
            
    this.phoneNumber = phoneNumber;
        }
       創(chuàng)建Owner的Serializer:
       
    public class OwnerSerializer implements PofSerializer {

        @Override
        
    public Object deserialize(PofReader pofReader) throws IOException {
             String sName
    =pofReader.readString(0);
             Owner owner
    =new Owner();
             owner.setName(sName);
             pofReader.registerIdentity(owner);
             owner.setPhoneNumber(pofReader.readString(
    1));
             
             pofReader.readRemainder();
            
    return owner;
        }

        @Override
        
    public void serialize(PofWriter pofWriter, Object object) throws IOException {
            Owner owner
    =(Owner)object;
             pofWriter.writeString(
    0,owner.getName());         
             pofWriter.writeString(
    1, owner.getPhoneNumber());
             pofWriter.writeRemainder(
    null);
        }

    }
      修改Cat的Serializer:
      
    public class CatSerializer implements PofSerializer {

        @Override
        
    public Object deserialize(PofReader pofReader) throws IOException {
             String sName
    =pofReader.readString(0);
             Cat cat
    =new Cat();
             cat.setName(sName);
             pofReader.registerIdentity(cat);
             cat.setAge(pofReader.readInt(
    1));
             cat.setSex(pofReader.readString(
    2));
             
    cat.setOwner((Owner) pofReader.readObject(3));        
             pofReader.readRemainder();
    return cat;
        }

        @Override
        
    public void serialize(PofWriter pofWriter, Object object) throws IOException {
             Cat cat
    =(Cat)object;
             pofWriter.writeString(
    0,cat.getName());
             pofWriter.writeInt(
    1, cat.getAge());
             pofWriter.writeString(
    2, cat.getSex());
      
           pofWriter.writeObject(3, cat.getOwner());
             pofWriter.writeRemainder(
    null);
        }

    }
     
     然后在pof配置中新增該類型:
      
        <user-type>
                
    <type-id>1002</type-id>
                
    <class-name>org.jport.coherence.demo.Owner</class-name>
                
    <serializer>
                    
    <class-name>org.jport.coherence.demo.OwnerSerializer</class-name>
                
    </serializer>
            
    </user-type>

       引用集合類:
      
    public class Cat  {
     
        
    private String name;
        
    private int age;
        
    private String sex;
        
    private Owner owner;
        
    private List<Cat> childrenCats;
      
       修改Cat服務(wù)類:
       
        public Cat getCat(String name){
            NamedCache cache 
    = CacheFactory.getCache("AnimalCache");
            Cat cat 
    = (Cat) cache.get(name);
            
    if(cat==null){
                
    int age =(int) Math.round(Math.random() * 10)+5;
                cat 
    = new Cat(name,  age,"male");
                Owner owner 
    = new Owner("sslaowan","1212554525");
                cat.setOwner(owner);
                List
    <Cat> childrenCats=new ArrayList<Cat>();
                Cat child1 
    = new Cat("tt",age-3,"female");
                child1.setOwner(owner);         
                Cat child2 
    = new Cat("mm",age-3,"female");
                child2.setOwner(owner);
                childrenCats.add(child1);
                childrenCats.add(child2);
                cat.setChildrenCats(childrenCats);
                cache.put(name, cat);
            }
            
    return cat;
        }
         修改Serializer:
         
    public class CatSerializer implements PofSerializer {

        @Override
        
    public Object deserialize(PofReader pofReader) throws IOException {
             String sName
    =pofReader.readString(0);
             Cat cat
    =new Cat();
             cat.setName(sName);
             pofReader.registerIdentity(cat);
             cat.setAge(pofReader.readInt(
    1));
             cat.setSex(pofReader.readString(
    2));
             cat.setOwner((Owner) pofReader.readObject(
    3));
           
      cat.setChildrenCats((List<Cat>) pofReader.readCollection(4new ArrayList<Cat>()));        
             pofReader.readRemainder();
            return cat;
        }

        @Override
        
    public void serialize(PofWriter pofWriter, Object object) throws IOException {
             Cat cat
    =(Cat)object;
             pofWriter.writeString(
    0,cat.getName());
             pofWriter.writeInt(
    1, cat.getAge());
             pofWriter.writeString(
    2, cat.getSex());
             pofWriter.writeObject(
    3, cat.getOwner());
           
      pofWriter.writeCollection(4, cat.getChildrenCats(), Cat.class);
             pofWriter.writeRemainder(
    null);
        }

    }

          測試結(jié)果如下:
       
    Cat [name=tom, age=6, sex=male, owner=Owner [name=sslaowan, phoneNumber=1212554525],
        childrenCats
    =[Cat [name=tt, age=3, sex=female, owner=Owner [name=sslaowan, phoneNumber=1212554525], childrenCats=null],
                           Cat 
    [name=mm, age=3, sex=female, owner=Owner [name=sslaowan, phoneNumber=1212554525], childrenCats=null]]]

        運(yùn)行多個(gè)節(jié)點(diǎn)加入集群,可以讓JUnit測試
        
    Group{Address=224.3.7.0, Port=37000, TTL=4}

    MasterMemberSet(
      ThisMember
    =Member(Id=4, Timestamp=2012-05-23 17:44:27.749, Address=192.168.56.1:8094, MachineId=14169, Location=site:,machine:wanxing-PC,process:12444, Role=EclipseJdtRemoteTestRunner)
      OldestMember
    =Member(Id=1, Timestamp=2012-05-23 17:35:23.01, Address=192.168.56.1:8088, MachineId=14169, Location=site:,machine:wanxing-PC,process:14536, Role=EclipseJdtRemoteTestRunner)
      ActualMemberSet
    =MemberSet(Size=4
        Member(Id
    =1, Timestamp=2012-05-23 17:35:23.01, Address=192.168.56.1:8088, MachineId=14169, Location=site:,machine:wanxing-PC,process:14536, Role=EclipseJdtRemoteTestRunner)
        Member(Id
    =2, Timestamp=2012-05-23 17:35:28.781, Address=192.168.56.1:8090, MachineId=14169, Location=site:,machine:wanxing-PC,process:13692, Role=EclipseJdtRemoteTestRunner)
        Member(Id
    =3, Timestamp=2012-05-23 17:36:06.641, Address=192.168.56.1:8092, MachineId=14169, Location=site:,machine:wanxing-PC,process:14964, Role=EclipseJdtRemoteTestRunner)
        Member(Id
    =4, Timestamp=2012-05-23 17:44:27.749, Address=192.168.56.1:8094, MachineId=14169, Location=site:,machine:wanxing-PC,process:12444, Role=EclipseJdtRemoteTestRunner)
        )
      MemberId|ServiceVersion|ServiceJoined|MemberState
        
    1|3.7.1|2012-05-23 17:35:23.01|JOINED,
        
    2|3.7.1|2012-05-23 17:35:28.781|JOINED,
        
    3|3.7.1|2012-05-23 17:36:06.641|JOINED,
        
    4|3.7.1|2012-05-23 17:44:27.769|JOINED
      RecycleMillis
    =1200000
      RecycleSet
    =MemberSet(Size=0
        )
      )

    TcpRing{Connections
    =[3]}
    IpMonitor{AddressListSize
    =0}
    關(guān)于pof的更多內(nèi)容看這個(gè):
      

    posted on 2012-05-23 16:41 零雨其蒙 閱讀(2094) 評(píng)論(0)  編輯  收藏 所屬分類: 學(xué)習(xí)筆記

    主站蜘蛛池模板: 久久国产免费直播| 国产精品黄页在线播放免费| 亚洲老熟女五十路老熟女bbw| 亚洲成av人片不卡无码久久| 日日麻批免费40分钟无码| 亚洲丁香婷婷综合久久| 亚洲av无码国产精品色午夜字幕| 男人的好免费观看在线视频| 99在线免费观看| 亚洲人成网站999久久久综合| 亚洲国产精品高清久久久| 在线播放免费人成视频在线观看| a级日本高清免费看| 国产精品久久久久久亚洲小说| 亚洲影院在线观看| 久久久青草青青国产亚洲免观 | 猫咪免费人成网站在线观看入口| 亚洲爱情岛论坛永久| 日本媚薬痉挛在线观看免费| 先锋影音资源片午夜在线观看视频免费播放| 亚洲精品9999久久久久无码| 久久久久亚洲av无码专区喷水| 亚洲人成影院在线无码观看| 最近中文字幕无免费视频| 无码成A毛片免费| 一级一级毛片免费播放| 亚洲综合av一区二区三区不卡| 亚洲91av视频| 亚洲熟妇无码乱子AV电影| 国产传媒在线观看视频免费观看 | g0g0人体全免费高清大胆视频| 亚洲小说图区综合在线| 老司机亚洲精品影院无码| 国产偷国产偷亚洲清高动态图| 国产精品免费综合一区视频| 一二三四在线观看免费高清中文在线观看| 国产婷婷成人久久Av免费高清| 一级做a爱过程免费视| 美女羞羞喷液视频免费| 亚洲精品无码久久久久久| 亚洲三级视频在线|