0

ケース: 複数のユーザー デスクトップの異なる場所で実行されるスタンドアロンの Java クライアントを開発しています。アプリケーション サーバー (Oracle Weblogic) は、別の場所にある中央の場所で実行されます。

ここで、クライアントから中央サーバーで実行されている EJB (セッション Bean) にアクセス/呼び出したいと考えています。クライアントとサーバーは別の場所にあり、イントラネットや LAN 経由で接続されていないため、接続の媒体はインターネットのみです。

私の質問は、間にサーブレット/JSPレイヤーを使用せずに、サーバー内のEJBをクライアントから直接呼び出すにはどうすればよいですか?

EJB はリモート アクセス用に考案されたものですが、なぜサーブレットに依存するのでしょうか?

RMI-IIOP を使用してこのタイプの接続を確立できることを読みましたが、インターネット経由で RMI-IIOP を使用できません!

このタイプのリモート通信に最適なアーキテクチャ/ソリューションは何ですか?

4

4 に答える 4

2

EJB はビジネス ロジックの構成単位であり、プロトコルに依存しないことに注意してください。それを呼び出し元に公開するのは、アプリケーション サーバーの仕事です。RMI-IIOP/CORBA は単なるデフォルトです。

IIOP のインターネット ルーティングの問題は、多くのプロトコルに似ています。インターネット経由でルーティングしないということではなく、簡単なプロキシ/リバース プロキシ機能が組み込まれていないということです。したがって、DMZ を通過する際に問題が発生します。リバース プロキシをサポートする HTTP と比較すると、SMTP はリレーを許可します。通常、ファイアウォール ポートも閉じられます。通常、アプリケーション サーバーを DMZ に配置することはありません。

ビジネスロジックへの直接アクセスを外部ネットワークに与えるという問題を解決するために、私は通常、プロトコルを外部ネットワーク通信用に設計されたものに変更します。たとえば、@WebMethod で EJB にアノテーション (またはデプロイメント記述子) を付けて SOAP サービスとして自動的に使用できるようにするか、@PATH (など) を使用してそれらを HTTP/JSON/XML サービスとして公開します。

CORBA タイプのプロトコルには、セキュリティ、XA トランザクションのためのすぐに使える機能があり、非常に高いパフォーマンスを発揮します。私は通常、これをエンタープライズ レベルのコンポーネント指向システムに内部的に使用します。(各 EJB コンポーネントは基本的にマイクロサービスとして使用されます) 外部統合の場合、特に呼び出し元がインターフェイス コントラクトを事前に知る必要がない場合は、通常、EJB の SOAP または HTTP/JSON/XML エンドポイントを使用します。

于 2016-12-23T18:23:05.730 に答える
1

サーブレットの依存関係はありません。アプリサーバー固有のカスタムクライアント/プロトコル依存関係があります。各サーバーには、接続をセットアップする独自の方法があり、適切なプロバイダーとプロトコルハンドラー用にJNDIを構成することで明らかになります。

RMI-IIOPがインターネット上で機能しないのはなぜですか?私が見ることができる唯一の潜在的な問題はセキュリティです。暗号化されたバージョンのRMI-IIOPがあるかどうかはわかりませんが、それ以外は完全にルーティング可能なプロトコルです。

ポートとファイアウォールの問題に遭遇する可能性がありますが、それはプロトコルの障害ではありません。ポート80(httpのポート)でRMI-IIOPを実行する場合は、それで問題ありません(明らかに、httpではなくhttpプロキシでも機能しませんが、プロトコルの問題ではありません)。

Weblogicには、独自のプロトコルT3もありますか?私はそれがそうだったと思う?使えますか?

重要なのは、「インターネット経由で」RMI-IIOPを実行できない理由であり、その問題を解決しようとすることであり、必ずしもどのプロトコルを使用するかではありません。

于 2012-05-15T20:34:29.497 に答える
0

ええと、EJBはサーブレットにまったく依存していません。これらは、RMI/IIOPを使用して直接呼び出すことができます。あなたが直面しなければならない唯一の問題はネットワーク構造です。つまり、RMI / IIOPは通常、会社のファイアウォールでは開かないいくつかのポートを使用し、それらを開くのは非常に難しい場合があります。したがって、ほとんどすべてのファイアウォールがこの種の要求を受け入れるため、通常はHTTP要求を行う方が適切です。

したがって、イントラネット(同じイントラネット内のクライアントとサーバー)にいる場合はRMI / IIOPを使用できますが、クライアントとサーバーがインターネット接続のある異なるネットワークに配置されている場合は、HTTPを使用することをお勧めします。Webサービスを使用して、EJBをWebサービスとして「エクスポート」することができます。Webサービスを使用したくない場合は、HTTPリクエストを受信して​​EJBを呼び出すサーブレットをextrema-ratioとして実装できます。これは、クライアントに返さなければならないオブジェクトのタイプによって異なります。単純な文字列またはそれほど複雑ではないものである場合は、サーブレットを使用することもできますが、それらがオブジェクトである場合は、Serveltソリューションは適切な選択ではありません。

于 2012-08-10T07:22:42.253 に答える