8

私はjavaeventingを使用して、データベースにアクセスするための偶数駆動シェルを作成しています。したがって、私のユースケースは次のとおりです。

  1. コマンドラインでシェルを開きます。
  2. これで、シェルはデータベースに接続し、入ってくるコマンドをリッスンします。
  3. コマンドを取得すると、それを実行し、必要な出力を返します。

while(!exit){ //do stuff }さて、ここで一種のループを回避するにはどうすればよいでしょうか? Javaイベントを正しく使用するには?

簡単な方法は次のとおりです。

while(!exit)
{
   exit = myClass.execute("command"); //when command is exit, return true.
}

しかし、私はJavaイベントがより良い解決策を提供できるかどうかを探しています.

アップデート1:

ここに私が実装しようとしているものがあります:

1私のアプリケーションは、キー値データベースを試すためのシェル (mongodb シェルなど) です。
2簡単なコード:

init(); //Initialize the connection with database
while(!exit)
{  
    //exit = myClass.execute("put(5)"); //This returns false  
    exit = myClass.execute("exit"); //returns true, i.e. the user wants to exit the shell
}

ここで、Java イベンティングの使用が表示されず、問題を解決しました。Java イベンティングがどのようにここに表示されるか教えてください。ユーザーにイベントをトリガーしてもらいたい。

4

2 に答える 2

2

あなたが何をしようとしているのか正確に理解するのは難しいと思いますが、私は javaEventing の経験があり、できる限りお手伝いします。Will Hartung は正しいです。どこかでイベントを作成する必要があります。したがって、私があなたを正しく理解していれば、コマンドラインからJavaアプリを起動し、データベースに接続してコマンドが挿入されるのを監視し、挿入されたらイベントを作成したいと考えています。これは正しいです?

その場合、通常のデータベースでは、何らかの条件が真の場合にアプリケーションに通知する方法がないため、おそらくデータベースに対して何らかのポーリングを行う必要があります。これは、探しているコマンドを含む結果セットを待って、データベースに対してクエリを実行する while{} 句がおそらく必要になることを意味します。見つかったら、次のようなイベントを作成できます。

Class ReceivedCommandEvent extends EventManager.EventObject {}   // define your event   

while (command==null) {
  command = pollDataBaseForCommand();  //poll your databae for commands
  waitForSomePeriod(); 
}

EventManager.triggerEvent(this, new ReceivedCommandEvent(command));     //trigger your event, with the command as payload

これで、イベント (ReceivedCommandEvent) をリッスンしている他のスレッドがイベントを受信し、イベント ペイロードからコマンドを取得できるようになります。

さて、問題は、データベースを使用してコマンドをやり取りする理由です。アプリケーション間の通信に使用しますか? 他のアプリケーションも Java で作成されている場合は、分散イベントの使用を検討できます。これにより、1 つの Java アプリが、ネットワーク内の他のマシン上の他の JVM で実行されている Java アプリにイベントを送信できるようになります。まさにそれを行う JED ( http://code.google.com/p/jed-java-event-distribution ) を見てみるとよいでしょう。

これがお役に立てば幸いです、ボブ

于 2011-02-08T16:16:51.227 に答える
2

そのイベンティング ライブラリが行うことは、イベントをリスナーにディスパッチすることだけです。それを超えて、実際にイベントを作成するために何かが必要です。

この場合、コンソールを読み取ってイベントを生成するためのコードが必要になります。DB を「リッスン」してそこからイベントを生成するために、何か他のものが必要になる可能性があります (テーブルなど、探している非同期 DB イベントがあると仮定します)。または行の変更)。

そのコードはまだ書く必要があります。

そして、そのフレームワークがそのようなユーティリティ クラスを提供しない限り、それを自分で作成する必要があり、それらのクラスはおそらくあなたが説明したとおりになります。

しかし、これらのクラスはすべてシステムの端にあり、データを駆動します。コードの残りの部分はすべて、完全にイベント ベースにすることができます。

于 2011-02-08T02:33:08.467 に答える