2016-04-12 6 views
1

WSO2 ESBスケジュールタスクを使用して外部システムからデータを取得しました。タスクは5秒ごとにプロキシサービスを呼び出します。私のプロキシサービスでは、プロパティ名「startTime」と「endTime」を使用しました。つまり、「startTime」から「endTime」にデータをフェッチしたいということです。 "startTime"と "endTime"は、タスクコールごとに5秒増やす必要があります。 しかし、ESBはすべてのタスクコールの間にこれらのプロパティ(startTimeとendTime)を保存できないようです。私は「のstartTime」を得ることができますが、それは同じ値のまますべてのタスクコール間でプロパティ値を予約する方法

importPackage(Packages.org.apache.synapse.config); 
var id = mc.getProperty("id"); 
var res = "conf/data_task/"+id ; 
var startTimeInReg = mc.getProperty("_endTime"); 
mc.getConfiguration().getRegistry().updateResource(res+"/startTime", startTimeInReg.toString()); 

し、それを

<property expression="get-property('registry', fn:concat('conf/data_task/',get-property('id'),'/startTime'))" 
    name="startTimeInReg" scope="default" type="STRING"/> 

を取得し、私は後のことがわかった:私は「のstartTime」を書くためにスクリプトを使用してみてください2回または3回のスケジュール・タスク・コール(15秒を超えることがあります)、startTimeの値が変更されます。

私はこれがESBキャッシングによって引き起こされたと考えていますが、updateResourceメソッドが呼び出された直後にstartTime値の変更をコミットできる方法はありますか。または、この問題をどのように解決できるか。

答えて

2

ガバナンスのレジストリに値を保存するようにしてください:

mc.getConfiguration().getRegistry().newResource("gov:/trunk/test/MyCounter.txt",false); // create the resource the 1st time, does nothing the others 
mc.getConfiguration().getRegistry().updateResource("gov:/trunk/test/MyCounter.txt", startTimeInReg.toString()); 

他のソリューション、(ESBが再起動されたときに失われた)「グローバル」カウンタを作成し、このサンプルを見てみます:

<script language="js"><![CDATA[       
    var curValue = mc.getEnvironment().getServerContextInformation().getProperty("MyCounter"); 
    if (curValue == null) {    
     curValue = 0;   
    } else { 
     curValue++; 
    } 
    mc.getEnvironment().getServerContextInformation().addProperty("MyCounter",curValue); 
    mc.setProperty("MyCounter",curValue); 
]]></script> 
+0

これは2番目のソリューションで動作します。しかし、最初の解決策はまだ数秒後に変更プロパティを取得できませんが、それはESBのキャッシュメカニズムのためですか? – yeahliu

+0

私は第1の解決方法を使ってデータをキャッシュに入れます。したがって、あなたは私に、変更が即時利用可能ではないことを発見しました... –

関連する問題