web-dev-qa-db-ja.com

Webサービス対EJB対RMI、長所と短所は?

すべての作業がそこで行われた場合、私のWebサーバーはすぐに過負荷になります。データを処理するために、その背後に2番目のサーバーを立ち上げます。

RMIに対するEJBの利点、またはその逆は何ですか?

Webサービス(SOAP、REST)はどうですか?

55
Dean J

EJBはRMIの上に構築されます。両方ともJavaクライアントとBean。クライアントを他の何か(.NET、PHPなど)で記述する必要がある場合、Webサービスまたはプラットフォームに依存しない他の何かを使用します。 HTTPまたはXML over HTTPまたはSOAPなどのワイヤプロトコル。

RMIを選択する場合、Java EE EJBアプリサーバーは必要ありません。クライアントとサーバーのJVMを同期させる必要があります。サーバーをアップグレードしないとクライアントをアップグレードできません。 EJBアプリサーバーが提供するすべてのサービス(接続プーリング、ネーミングサービスとディレクトリサービス、プーリング、リクエストキューイング、トランザクションなど)を記述する必要があります。

考えてみると、RMIは非常に低いレベルです。なぜCORBAに戻るのですか?

より良い選択は、SpringよりもEJB 3.0です。それは、POJO開発が好きかどうか、ORMやJPAなどのリレーショナルテクノロジーを選択したいかどうかによって異なります。

Java EEアプリサーバー(たとえば、WebLogic、WebSphere)を支払うか、オープンソースサーバー(JBOSS、Glassfish、OpenEJB、ActiveMQ)を使用するか、Springに固執してデプロイできます。 Tomcat、Jetty、Resinまたはその他のサーブレット/ JSPエンジン。

Springは、テクノロジーにとらわれないことで多くの選択肢を提供します。永続性(Hibernate、iBatis、JDBC、JDO、JPA、TopLink)、リモーティング(HTTP、ヘッセ行列、バーラップ、RMI、SOAP Webサービス)、等.

EJB 3.0は多くのベンダーの仕様です。 SpringはSpring Sourceからのみ入手できます。

Spring をお勧めします。それは非常に堅実で、多くの牽引力を持ち、どこにも行きません。すべてのオプションを開いたままにします。

理論的にはWebサービスは優れていますが、注意すべき点がいくつかあります。

  1. レイテンシー。分散オブジェクトに関するファウラーの最初の法則:「しないでください!」粒度の細かい多数の分散SOAPサービスで構成されるアーキテクチャは、糖蜜のようにエレガントで美しく、遅くなります。配信する前に慎重に検討してください。
  2. XMLからオブジェクトへのマーシャリングとその逆は、クライアントがプラットフォームに依存しないプロトコルを話せるようにすること以外はビジネス価値をもたらさないCPUサイクルを消費します。
  3. SOAPは、毎日肥大化して複雑になっている標準ですが、多くのツールをサポートしています。ベンダーは、ESBの販売促進に役立つため、それを気に入っています。 RESTは単純ですが、あまり理解されていません。ツールではサポートされていません。

SpringのWebサービスモジュールは非常に優れていますが、この方法でデプロイすることに注意してください。 POJOサービスインターフェイスの観点から記述します。これらにより、必要な概念的な分離を取得し、展開の選択を最後の瞬間まで延期し、最初の考えがうまくいかなかった場合に考えを変えることができます。

117
duffymo

EJBとRMIの間では、EJBの方が確かに優れています。RMIが持つすべてのものと、コンテナを介したはるかに多くのもの(オブジェクトプーリング、トランザクション管理など)

EJBとWebサービスの間で、将来Java以外のアプリから呼び出すことができるようにしたい場合、Webサービスは移植性を高めます。 EJBにより、トランザクション管理やプーリングなど、Webサービスでは「すぐに使用できる」ものが得られます。

個人的に、私がそれをやっていたら、おそらくEJBまたは同様のリモートオブジェクトフレームワークを使用するでしょう(スプリングリモーティングも思い浮かびます)。非Javaアプリからオブジェクトを呼び出す機能が必要な場合は、必要に応じて簡単なWebサービスプロキシを使用してEJBをいつでも処理できます。

10
Eric Petroelje