私はJavaEEを初めて使用し、いくつかの基本的なミドルウェアの概念に数日間苦労してきました。「tingsのしくみ」の理解に突破口があったかもしれないと信じています。この質問の一部は私の調査結果の確認の要求であり、他の部分は正当な質問です;-)。
確認/明確化してください:サービスバス/ MOM(メッセージ指向ミドルウェア)についての私の理解は、それらが本質的にクライアント要求を非同期的に処理することを目的としているということです。これは、通常、ある種のサービスによって実装される同期的な通常の要求/応答サイクルとは対照的です。Javaでは、このようなバス/MOMはApacheCamelのようなものであり、同期サービスはEJB(3)のようなものである可能性があります。したがって、クライアントが要求をすぐに処理する必要がある場合、HttpRequest
はWebサービスに移動し、Webサービスが要求を正しいEJBに転送する可能性があります。そのEJBはメッセージを処理し、結果をサービスに返します。サービスは次に、HttpResponse
をクライアントに返します。そのため、クライアントがそれらをブロックせず、単に処理する必要がある要求を持っている場合、Webサービスはそれらを転送しますHttpRequest
サービスバス上のあるエンドポイントに転送され、要求はメッセージのように扱われ、さまざまなプロセッサ(フィルタ、トランスなど)によって処理されます。
したがって、最初に、ESB / MOMソリューションが非同期要求の処理に最適であり、EJB(3.x)が同期要求にリアルタイムで応答するのに最適であると述べているのが間違っている場合は、訂正してください。または私が正しいことを確認します。
その場合、大きなアプリケーションでは、同期(ブロッキング)と非同期(非ブロッキング)のクライアント要求を同様に処理するために、両方のタイプのバックエンドが必要になるように思われます。したがって、私の理論は、バックエンドを次のように実装することです。
- JBossやGlassFishのような本格的なアプリサーバーを使用する
- アプリサーバーのWebコンテナには、次の2つのWARが
WebServices.war
ありESB.war
ます。それぞれバックエンドの「ゲートウェイ」とサービスバスを表します - アプリサーバーのビジネスコンテナには、すべてのEJBがあります
- これで、
WebService.war
(ゲートウェイ)は要求をESBまたはEJBのどちらに中継するかを検出できます。
私の2番目の質問は、私はここでかなりオフベースであり、ミドルウェア101の基本的な概念を見逃したことがありますか、それともこれは中途半端なアプローチですか?
編集:最初の応答から、私は2つの領域で間違っていたことがすでにわかりました:(1)ESBとEJBは実際には同期または非同期のいずれかであり、(2)MDBを使用する場合、EJBは次のように配線できますESB。
したがって、これらの修正は私にとっていくつかの新しい精神的な障害をもたらします:
- ESBを使用する場合と、MDB/EJBソリューションを使用する場合。と
- 私はApacheCamelのProcessorsAPI(EIPの実装)が本当に好きです。MDB / EJBを使用できますが、すべてのEJB内でCamelプロセッサ(、など)を使用するだけ
Filter
ですWireTap
か?