2013-05-16 2 views
0

내 클래스 중재자 코드는 다음과 같습니다오류 동안

<sequence xmlns="http://ws.apache.org/ns/synapse" name="cacheImplementationSeq"> 
    <property xmlns:ns="http://org.apache.synapse/xsd" name="propertyarray" expression="$body"/> 
    <log level="custom"> 
     <property xmlns:ns="http://org.apache.synapse/xsd" name="PropertyData" expression="get-property('propertyarray')"/> 
    </log> 
    <class name="cts.falcon.data.cachable.CacheData"/> 
    <property xmlns:ns="http://org.apache.synapse/xsd" name="ResultSet" expression="get-property('ResultData')" scope="default" type="STRING"/> 
    <header name="To" action="remove"/> 
    <property name="RESPONSE" value="true" scope="default" type="STRING"/> 
    <property name="NO_ENTITY_BODY" action="remove" scope="axis2"/> 
    <payloadFactory> 
     <format> 
     <resultSetResponse xmlns:ns1="http://www.cts.falcon.data.cachable/">$1</resultSetResponse> 
     </format> 
     <args> 
     <arg xmlns:ns="http://org.apache.synapse/xsd" expression="get-property('ResultSet')"/> 
     </args> 
    </payloadFactory> 
    <send/> 
</sequence> 
: 내가 마지막으로 프록시 서비스에 호출되는 내 ESB의 순서로 클래스 중재자를 호출하고

package wso2.caching; 

import org.apache.synapse.MessageContext; 
import org.apache.synapse.mediators.AbstractMediator; 
import java.util.Date; 
import net.sf.ehcache.CacheManager; 
import net.sf.ehcache.Element; 
import net.sf.ehcache.Cache; 
import net.sf.ehcache.config.CacheConfiguration; 


public class CacheMe extends AbstractMediator { 

    String data = ""; 
    CacheManager cacheManager; 
    CacheConfiguration cacheConfiguration; 
    Element element; 
    private Cache mdmCache; 
    boolean firstTime=true; 

    public boolean mediate(MessageContext messageContext) { 
     System.out.println(new Date() + "FirstTime = " + firstTime); 
     data = String.valueOf(messageContext.getProperty("propertyarray")); 
     System.out.println("data from proxy service is : " + data); 
     cacheData(data); 
     messageContext.setProperty("ResultData", "You got Data"); 
     return true; 
    } 

    public void cacheData(String data){ 
     if(firstTime){ 
     cacheManager = new CacheManager(); 
     firstTime=false; 
     } 
     System.out.println(new Date() + "FirstTime = " + firstTime); 
     System.out.println("Checkpoint A"); 
     //mdmCache = new Cache(getCacheConfiguration("mdmCache"));//test 
     cacheManager.addCache("mdmCache"); 
     System.out.println("Checkpoint B"); 
     this.mdmCache = cacheManager.getCache("mdmCache"); 
     System.out.println("Checkpoint C"); 
     //this.mdmCache = mdmCache;//test 
     System.out.println(new Date() + " Generating MDM Data..."); 
     System.out.println("mdmCache.size(): " + mdmCache.getSize()); 
     Element eqpElement = new Element("CacheValueKey", data); 
     mdmCache.put(eqpElement); 
     System.out.println("mdmCache.size(): " + mdmCache.getSize()); 
     } 
} 

try-it에서 처음으로 프록시 서비스를 실행할 때 내 응답이 고유 키 (UUID)를 가지고 캐시되고 다시 서비스를 실행할 때 이전 키가 새 키와 새로운 응답 값으로 대체됩니다. . 내가 찾고있는 키가 동일하면 캐시를 업데이트해야하며 내 키가 다른 경우 새 키를 추가해야하며 이전의 캐시 키가 사라지지 않아야합니다. 나는 플러그 접속 식에있는 wso2 esb에 오는 이것을 달성하기 위하여 ehcache1.5.0 단지를 사용하고있다. 귀하의 답변을 기다리고 있습니다. 미리 감사드립니다

답변

0

문제가 수업 조정자에게 있습니다 .Debug 및 찾기

+0

수업 중재자를 디버깅하는 방법은 무엇입니까? – Roy