2016-05-16 8 views
1

私は2つの他のプロジェクトへのミドルウェアとして動作するJavaプロジェクトは、Aはその私のミドルウェア・プロジェクトにその出力を送信し、AとBベストアプローチ/設計(Javaコード)

を呼び出すことができます持っています存在する各インシデントに対して何らかの処理を行い、Bは自分のプロジェクトからの出力を消費し、各インシデントを表示します。入力/出力はすべてのプロジェクトでXML形式です。

Aは、その後、接続前から現在開いているインシデントを送信し、新たな事件がでてくるのを待ってライブモードになります。

問題を聞かせている私はしばらくの間、いくつかのために私のプロジェクトを停止した場合と言いますインシデントが閉じられた後、私は再びプロジェクトを開始し、Aは現在開いているもののみを送信し、Bは明示的にそのインシデントを表示から削除する必要があり、ミドルウェアプロジェクトがダウンした場合、

私のアプローチは、プロジェクトからデータベースに入ってくるすべてのインシデントをログに記録して再起動するときに、データベースからAのものを比較し、データベースに存在するが、A、私のミドルウェアプロジェクトがダウンしたときにクローズされたので、手動でXML出力を作成し、それをBに送って表示から削除します。

しかし、このアプローチの問題は、Aへのソケットはプロジェクトからのライブ接続です。つまり、最初に接続されたAは以前に開いたインシデントをすべてダンプし、新しいものではライブで待機します。 どのように私は、古いものをダンプし終わったのか、ソケットが閉じていないことを知っているでしょうか?また、Aに接続する時を知る方法がなく、入ってくる事件が古いダンプに属するか、入射。

編集:例

私はAの10件のインシデントを作成し、彼らは私のmiddlwareに送信し、私は、データベースにそれらのすべてを記録し、それらを表示するBにオフに送信得ます。

私は私のミドルウェアを起動し、接続時にAがライブモードになった後、7件の以前のオープンインシデントを送信し、これら3つの事件はまだB.

に表示されている私のmiddlwareを停止し、Aに近い3つの事件新しい事件を待っている。

私のミドルウェアは、Bで更新されたBに7つの処理済みのオープンインシデントを送信しますが、まだ表示されている3つのインシデントを閉じるには明示的なクローズメッセージが必要です。

私のDBには前回の実行で10件のインシデントがあり、残り7件はDB内の残りの3件が閉鎖されていることがわかっています。

質問はそのライブソケット以降です。以前のバルクが完了したときはどうすればわかりますか?私は、私が以前の事件を完全に受けたことを知るために私の処理をどこで止め、DBの中のものと比較するのをやめますか?

答えて

1

私は私のミドルウェアを起動し、接続時にAが進む、その後、7件の以前のオープンインシデントを送信し、これら3つの事件はまだB.

に表示されている私のmiddlwareを停止し、Aに近い3つの事件新しいインシデントを待っているライブモード。

あなたは3件のインシデントを閉じているので、なぜあなたはあなたのミドルウェアを起動して、あなたのミドルウェアを変更し、は3つのに近いメッセージを送信し、その後、7件の以前のオープンインシデントを送信オープン接続A、していない、とついにライブモードに入りますか?

+0

それは事です! 3つのインシデントが閉鎖されたミドルウェアを起動した後、私は知る方法がありません。現在開かれているものを見つける唯一の方法は、再接続後にAが送信するものなので、すべてが接続されているときに10件のインシデントが開かれ、1件が終了すると、ミドルウェアはAからのクローズメッセージを得てBに送信します私のミドルウェアが終了したら、私はミドルウェアを再起動すると、私はAから9つのメッセージしか受信しません。 – Saad

+0

これらの9つのメッセージは私のミドルウェアに送られ、 Bにリフレッシュすると、ミドルウェアがダウンしている間に閉じられた1つのインシデントは、手動で閉じるまでBに表示されます。そのシステムAの特性は、私たちが接続するたびに、メッセージで開いているすべてのインシデントを取得し、次にライブモードになります。問題はライブソケット以降です。接続時に9メッセージ、接続そのあとでまだ開いているのですが、どの時点でいいですか、これはライブモードに入って、今起きる事件は、プレボイスからのものではありません。 – Saad

+0

@Saad:私の答えで言ったように、**あなたのミドルウェアを修正する**。 GUIなどを追加すると、システムAでインシデント**、あなた自身**が閉じられたことをミドルウェアに伝えることができます。 –

関連する問題