Coherence EP中调用其他CACHE问题deadlock告警问题

来源:互联网 发布:手机淘宝 国际版 编辑:程序博客网 时间:2024/05/18 12:34

 如果把COHERENCE的LOG级别为DEBUG,那么在EP执行时,会有下面的WARING和EXCEPTION。虽然查询结果是正确的。在压力比较大的情况下,不清楚会不会真的死锁

 

该WARING和EXCEPTION只在第一次调用EP的时候会抛,以后就不会。

 

2013-12-17 15:09:01 Coherence [WARN]2013-12-17 15:09:01.565/18.179 Oracle Coher

ence GE 3.7.1.0 <Warning>(thread=boss-distributed-serviceWorker:49, member=1):

Application code runningon "boss-distributed-service" service thread(s) should

not call ensureCache asthis may result in deadlock. The most common case is a C

acheFactory call from acustom CacheStore implementation.

2013-12-17 15:09:01 Coherence [DEBUG]2013-12-17 15:09:01.569/18.183 Oracle Cohe

rence GE 3.7.1.0 <D7>(thread=boss-distributed-serviceWorker:49, member=1): Stac

k trace:

       at com.tangosol.coherence.component.util.SafeService.checkClientThread(S

afeService.CDB:38)

       at com.tangosol.coherence.component.util.safeService.SafeCacheService.en

sureCache(SafeCacheService.CDB:8)

        atcom.tangosol.net.DefaultConfigurableCacheFactory.ensureCache(DefaultC

onfigurableCacheFactory.java:920)

       at com.tangosol.net.DefaultConfigurableCacheFactory.configureCache(Defau

ltConfigurableCacheFactory.java:1296)

       at com.tangosol.net.DefaultConfigurableCacheFactory.ensureCache(DefaultC

onfigurableCacheFactory.java:297)

       at com.tangosol.net.CacheFactory.getCache(CacheFactory.java:204)

       at com.tangosol.net.CacheFactory.getCache(CacheFactory.java:181)

        atcom.newland.poc.boss.test.Case1EP.process(Case1EP.java:49)

       at com.tangosol.coherence.component.util.daemon.queueProcessor.service.g

rid.partitionedService.PartitionedCache$Storage.invoke(PartitionedCache.CDB:10)

       at com.tangosol.coherence.component.util.daemon.queueProcessor.service.g

rid.partitionedService.PartitionedCache.onInvokeRequest(PartitionedCache.CDB:52)

 

       at com.tangosol.coherence.component.util.daemon.queueProcessor.service.g

rid.partitionedService.PartitionedCache$InvokeRequest.run(PartitionedCache.CDB:1

)

       at com.tangosol.coherence.component.util.DaemonPool$WrapperTask.run(Daem

onPool.CDB:1)

       at com.tangosol.coherence.component.util.DaemonPool$WrapperTask.run(Daem

onPool.CDB:32)

       at com.tangosol.coherence.component.util.DaemonPool$Daemon.onNotify(Daem

onPool.CDB:63)

       at com.tangosol.coherence.component.util.Daemon.run(Daemon.CDB:42)

       at java.lang.Thread.run(Thread.java:662)

 

user=User [user_id=591305000000181,imsi=460005008377002, msisdn=13805002028, ho

me_city=591, home_county=104,inure_time=2005/1/5 10:09:53, expire_time=2030/7/1

, affinityKey=591305000000181]

解决方法:

给调用EP的CACHE和在EP中要操作的CACHE配置不同的SERVICE,这样就不会有上面的告警. 但这样如果在实际项目中CACHE很多话,配置管理比较麻烦。

<caching-scheme-mapping>

   <cache-mapping>

     <cache-name>xcj-*</cache-name>

     <scheme-name>ExamplesPartitionedPofScheme</scheme-name>

   </cache-mapping>  

    <cache-mapping>

     <cache-name>dist-*</cache-name>

     <scheme-name>boss-distributed</scheme-name>

   </cache-mapping>

     

 </caching-scheme-mapping>

 

 <caching-schemes>

   <!--

   Distributed caching scheme.

   -->

   <distributed-scheme>

     <scheme-name>ExamplesPartitionedPofScheme</scheme-name>

     <service-name>PartitionedPofCache</service-name>

     <serializer> 

       <instance>

        <class-name>com.tangosol.io.pof.ConfigurablePofContext</class-name>

          <init-params>

            <init-param>

              <param-type>String</param-type> 

              <param-value>boss-pof-config.xml</param-value>

            </init-param>

          </init-params>

       </instance>

     </serializer>

       <thread-count>10</thread-count> 

       <backing-map-scheme>

        <local-scheme>

          <unit-calculator>binary</unit-calculator>

        </local-scheme>

     </backing-map-scheme>

     <autostart>true</autostart>

   </distributed-scheme>

    

   <distributed-scheme>

     <scheme-name>boss-distributed</scheme-name>

     <service-name>boss-distributed-service</service-name>

     <thread-count>64</thread-count>

      <key-associator>

        <class-name>com.newland.poc.boss.domain.affinity.MyKeyAssociator</class-name>

      </key-associator>

      <backing-map-scheme>

        <partitioned>true</partitioned>

                <local-scheme>

                    <unit-calculator>BINARY</unit-calculator>

                </local-scheme>

        <!--

        <local-scheme>

          <scheme-ref>example-binary-backing-map</scheme-ref>

        </local-scheme>

         -->

     </backing-map-scheme>

 

     <autostart>true</autostart>

    </distributed-scheme>

 

imsiToUseridIndex=CacheFactory.getCache(xcj-cache)

Map result =imsiToUseridIndex.invokeAll(keys, new Case1EP());

 

EP代码:

public Map processAll(Set setEntries) {

        //System.out.println("enter processall**********");      

        Useruser=null;

        UserSelectedBranduserSBresult = null;

        UserStatus userStatus = null;

       

        for (Iterator iter =setEntries.iterator(); iter.hasNext(); )

           {

             Entryentry = (Entry) iter.next();

             Stringimsi = entry.getKey().toString();

                //System.out.println("imsi=" +imsi);

                Stringuserid=entry.getValue().toString();

                //System.out.println("userid=" +userid);

                NamedCache userCache= CacheFactory.getCache(“dist-cache”);

                user= (User) userCache.get(userid);

 

 

0 0
原创粉丝点击