<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, 評論 - 58, 引用 - 0
    數(shù)據(jù)加載中……

    Oracle Coherence初啼

         昨天寫了個Coherence的小例子,使用了Oracle Enterprise Pack for Eclipse,直接用它創(chuàng)建了一個ADF項目,連帶創(chuàng)建了JPA項目,在Configuration里添加了Coherence,這樣就有了配套的jar包了。
         Coherence利用多播自動組成集群,類可以不實現(xiàn)序列化接口,這是一個簡單的例子:
    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,這樣不需要實現(xiàn)序列化接口,而且性能非常高,需要做以下幾件事實現(xiàn)這個:
        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)建一個coherence-config文件,指定serializer,共有三個級別的指定,針對特定service,針對所有service,針對jvm,下面是針對所有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 指定這個自定義的coherence-config.xml,在jvm啟動參數(shù)里:
        
    -Dtangosol.coherence.cacheconfig=C:\workspace\AdfprjModel\src\custom-coherence-cache-config.xml

          由于我是用JUnit進(jìn)行測試,因此就是把這個寫在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]]]

        運行多個節(jié)點加入集群,可以讓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)容看這個:
      

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

    主站蜘蛛池模板: 永久在线毛片免费观看| 亚洲欧洲自拍拍偷午夜色无码| 久久精品国产99精品国产亚洲性色| 亚洲一区二区无码偷拍| 久久精品中文字幕免费| 免费大片黄手机在线观看| 亚洲一卡2卡4卡5卡6卡残暴在线| 免费久久人人爽人人爽av| 国产hs免费高清在线观看| 亚洲一级毛片中文字幕| 黄色网址在线免费| 亚洲精品线路一在线观看| 亚洲偷自拍另类图片二区| 狼群影院在线观看免费观看直播| 中文亚洲AV片不卡在线观看| 国产精品国产亚洲区艳妇糸列短篇 | 亚洲人成自拍网站在线观看 | 亚洲狠狠婷婷综合久久久久| 国产亚洲欧美日韩亚洲中文色| 1000部拍拍拍18免费网站| 亚洲va久久久噜噜噜久久男同| 四虎影视永久在线精品免费 | 亚洲国产成人VA在线观看| 亚洲色在线无码国产精品不卡| 91久久精品国产免费直播| 国产精品亚洲A∨天堂不卡| 人妻18毛片a级毛片免费看| 色播在线永久免费视频| 亚洲av永久无码精品天堂久久| 最近2019中文字幕免费大全5| 亚洲成在人线av| 成人免费777777被爆出| 亚洲国产精品无码久久九九| 欧美日韩亚洲精品| 国产精品成人免费视频网站京东| 亚洲男人电影天堂| 69免费视频大片| 久久久亚洲裙底偷窥综合| 免费人成视频在线观看网站| 亚洲国产a∨无码中文777| 女人隐私秘视频黄www免费|