2012-03-14 5 views
2

ドミノサーバーのサイドアクションから30秒ごとに外部Webサービスをポーリングする方法についてのアドバイスをしています。30秒外部Webサービスとキャッシュデータをポーリングする定期的なタスク

背景の迅速なビット...

私たちは、お知らせメールTomTomのAPIスルー車の位置を追跡します。我々は今、私たちのWebアプリケーションでこれを表示する必要があり、マップ(Google、bingなど)にオーバーレイされ、アプリケーションからの他のlat longデータをマッシュアップします。それをタクシーへの呼び出しをディスパッチするものと考えて、それらの呼び出しをタクシーに割り当てたい(タクシー\コールではないが、それと同様のプロセスです)。ディスパッチコントローラ画面を非常に積極的にリフレッシュするので、すべてのオブジェクトの状態を確認して最寄りの車に割り当てることができます。ユーザーの画面をリフレッシュしてデータを取得すると、サーバー側の制御が難しくなります。そうしないと、1分あたりの最大許容要求がTomTom APIにヒットします。

元々、私はWebサービスをポーリングして、私たちのアプリでキャッシュされたオブジェクトに書き込むようにエージェントをスケジューリングしようとしていました。そして、キャッシュからデータを引き出します。キャッシュは30秒ごとに更新する必要があります。私は1分ごとに実行されるプログラム文書を作成できますが、それでも十分に攻撃的ではありません。

私たちは.net guyがTomTomを30秒ごとにポーリングするサービスを作成し、彼のサービスから検索するか、またはドミノで行う方法を考え出します。可能な限り多くの論理を1つのシステム(Domino)に保つために、いくつかのスタンドアロンJavaアプリケーションや.netではなく、Dominoデータベースで行うのがよいでしょう。

私たちは、私たちのシステムで大量のバッキングビーンズを使用しています。私は今日後でこれをテストするつもりですが、これは賢明なルートのように見えますか?: Spawning threads in a JSF managed bean for scheduled tasks using a timer ...私が気づいていないことは、誰もこれをドミノコメントはありますか?事前に

おかげで、

ニック

答えて

0

ます(アプリケーションまたはセッションスコープ)Bean内のデータをキャッシュする場合。最後に更新された日付を含む日付オブジェクトを作成します。データが要求されたら、最後にキャッシュされた日付を現在の時刻と照合します。 30秒以上であれば、データを更新してください。

0

これを行う方法は、アプリケーションスコープで作成されたマネージドBean(別名は1つしかない)を作成することです。これは、管理対象Beanでは、あなたはこれがBeanが、その後ポーリングする管理

public class ServicePoller{ 
    private static myThread = null; 

public ServicePoller(){ 
    if(myThread == null){ 
    myThread = new ServicePollThread(); 
(new Thread(myThread)).start()); 

} 
    } 


} 

class ServicePollThread implements Runnable(){ 

    private hashMap yourcache = null; 

    public ServicePollThread(){ 

    } 


    public void run(){ 
    while(running){ 
     doPoll(); 
     Thread.sleep(4000); 
    } 
    } 
    .... 
} 

などの管理対象豆何かの作成時に開始し、古き良きJavaのWebサービスの実装とJavaのスレッドによるWebサービスの30秒のポーリングの世話をしますWebサービスを30秒ごとに実行し、その結果をハッシュマップまたは他のマネージドBeanクラスに保存します。このようにしてエージェントなどを実行する必要はなく、ディスパッチ画面を使用してキャッシュからデータを取得するときに達成できます。

もう一つの選択肢は、サーブレットを書くことです(これはextlibで可能ですが、今は情報を見つけることができません)。それであなたのデータベースでは、サーブレットのキャッシュを読んで、必要な場所で使うことができるはずです。

8

チェックアウトDOTS(ドミノOSGiのタスクレットサービス):http://www.openntf.org/internal/home.nsf/project.xsp?action=openDocument&name=OSGI%20Tasklet%20Service%20for%20IBM%20Lotus%20Domino

それはあなたのパフォーマンスのどれを使用してエージェントのすべての利点は、(スケジュールまたはトリガすることができます)があり、Dominoサーバー上のバックグラウンドのJavaタスクを定義することができますまたはメンテナンスの問題。

+0

ティム、ニクラス、トミー、 –

+0

ティム、@ニクラス、トミー、あなたの返信のためにも多くのありがとう、感謝jjtbsomhorst。私の質問に答えるドミノ\ Xページの最大の打者の3 ...ほとんどのアドバイスが第一の率であることを保証します。今あなたは私に解決策を与えてくれました。私は1週間かそこらに、どのように行ったのか、ここに戻ってきます。再度、感謝します。 –

0

TimはDOTSまたはjjtbsomhorstとしてスレッドまたはEclipseジョブと言っていました。

私はDOTSを記述したビデオを作成しました:http://www.youtube.com/watch?v=CRuGeKkddVI&list=UUtMIOCuOQtR4w5xoTT4-uDw&index=4&feature=plcp

次の月曜日、私はスレッドとEclipseのジョブを実行する方法のサンプルを公開します。ここではプレビュービデオです:http://www.youtube.com/watch?v=uYgCfp1Bw8Q&list=UUtMIOCuOQtR4w5xoTT4-uDw&index=1&feature=plcp

関連する問題