2012-02-07 7 views
2

最近、Java EEを使用してWebサービスを構築し始めました。 これらのほとんどは、リクエストを受け取り、仕事をし、結果を返すという点で非常に単純です。結果がクライアントに返されると、クライアントは終了します。Java EEがクライアントに応答しますが、処理を続行します

クライアントに応答できる必要があり、要求が受信されて処理中であることを示すために、要求を送信した後にWebサービススレッドを終了する必要はありません。他のWebサービスにリクエストを送信するなど、応答した後に処理を行う必要があります。クライアントは結果の結果を得るために定期的にポーリングを行います。これは別のWebサービス呼び出しスレッドによって処理されます。

Java EEでこれが可能かどうかはわかりません。私は一般に、xmlのTCPソケットを使ってこれを行っただけです。

答えて

1

Java EE 6からは、EJBのメソッドを非同期として定義することができます。Asynchronous Method Invocationを参照してください。したがって、ルーチンは、Webサービスを処理するBeanから非同期Beanを呼び出して、長いプロセスの開始をトリガーし、クライアントに戻ることになります。このプロセスの結果は、別のWebサービスメソッドを使用して照会できます。

Java EE 5では、直接ではありませんが、timer tasksを使用することもできます。しかし、このようなタスクの結果を自動的に照会することはできないため、別のBeanがデータベースを読み込めるデータベースに状態を保存するように設計する必要があります。

+0

私は単純なJava EE Webサービスを生成するためにnetbeansを使用しています。リンクありがとう。それは多くを助ける必要があります。 EJBが何であるかは分かりません。ネットビーンのように見えます。 – likenoother

1

リクエストを非同期で処理する必要があります。 Webサービスメソッドから、処理を行うMessage-Driven Bean(MDB)によって取得されたJMSキュー上にメッセージを送信できます。そのメッセージが送信されると、Webサービスメソッドから戻ります。

または可能であれば、クライアントはJMSキューにメッセージを送信し、サーバーはクライアントが監視する応答キューで応答します。

+0

ありがとう、私はJMSを調べます。私はまだJava EEの世界ではまだ新しいです。残念ながら。クライアントはJMSキューを直接使用することはできません。これは、外部で異なる言語で開発されるためです。 – likenoother

関連する問題