著者: Zhu Xianzhong コンパイラ ソース: Tianji.com
要約 この記事では、ASP.NET アプリケーションと J2EE アプリケーション サーバー間の対話を実現する方法と、XML Web サービスを呼び出すのと同じくらい簡単に EJB を呼び出す方法を紹介します。
はじめ
に 現在、多くの大規模組織が開発チームを編成し、.NET と J2EE テクノロジーを組み合わせた公開サーバーを使用しています。 J2EE アプリケーション サーバーを通じて送信されるエンタープライズ品質のバランスをとるために、企業のビジネス ロジックは、多くの場合、エンタープライズ JavaBeans (EJB) の形式で J2EE アプリケーション サーバー上に公開されます。一方、ビジネス開発の絶え間なく変化する要件を満たすために、ほとんどの開発者は、高い運用パフォーマンスを備えた Visual Studio.NET 開発環境に記述ロジックを実装することを好みます。 .NET プレゼンテーション層を J2EE ビジネス ロジック層に接続する必要がある場合に、問題が発生します。
Visual MainWin for J2EE がどのように直面し、克服するのに役立つかを見てみましょう。Visual Studio.NET から、C# または Visual Basic.NET を使用して ASP.NET 記述層を実装し、次の形式で実装されたビジネス ロジック層を呼び出します。 EJB - これは開発が難しいです。これを行うために EJB API コーディングをいじる必要はありませんので、ご安心ください。 Visual MainWin for J2EE を使用すると、ASP.NET フロントエンドと EJB バックエンドの両方の層が、パフォーマンスの最適化と一貫した J2EE ベースのセキュリティを備えた J2EE アプリケーション サーバー上で純粋な J2EE アプリケーションとして実行できます。
Visual Studio .NET から EJB を呼び出すには、エンタープライズ バージョンの Visual MainWin for J2EE をインストールする必要があります。もちろん、実験的な分析のために mainsoft.com Web サイトから評価版をダウンロードできます。
サンプル分析
この記事の StocksPortfolio サンプル (ASP.NET Web レイヤーと J2EE ビジネス レイヤーを使用してアプリケーションを作成する方法を示しています) は、Visual MainWin for J2EE にインストールされ、文書化されています。この例では、ユーザーが株式投資を管理するために使用する単純な ASP.NET Web ページと、架空の株価情報を提供するために使用する ASP.NET Web サービスを実装します。この例では、株式の売買ロジックを実装するために J2EE アプリケーション サーバーによって使用されるセッション EJB も使用します。
図 1. JBoss アプリケーション サーバー上で実行される StocksPortfolio アプリケーション
.NET 環境への EJB の追加
Visual Studio.NET から EJB を呼び出すのは、Web サービスを呼び出すのと同じくらい簡単です。ソリューション エクスプローラーで、[参照] を右クリックし、[EJB 参照の追加] を選択すると、Visual MainWin for J2EE プロジェクトでのみ使用できる新しい参照タイプが表示されます。これは、標準の Visual Studio Web 参照によく似ています。 NETIDE (図 2 を参照)。
図 2. EJB 参照の追加
Visual MainWin for J2EE プロジェクトに EJB 参照を追加するには、EJB を実装するか、そのローカルおよびリモート インターフェイスを含む Java アーカイブ (JAR) ファイルのみが必要です。 Visual MainWin は、アプリケーション サーバーに公開されているすべての EJB に関する情報をアプリケーション サーバーに照会し、JAR 定義に対応する EJB をダイアログ ボックスに表示できます。必要なのは、使用する特定の EJB (場合によっては複数) を選択することだけです (図 3 を参照)。
図 3. [EJB 参照の追加] ダイアログ ボックス
プロジェクトに関連付けられたローカル アプリケーション サーバーと同じタイプである限り、リモート アプリケーション サーバー上の EJB を使用することもできます。これは、Windows、Linux、Unix、メインフレーム、またはその他の J2EE 対応サーバーである可能性があります。リモート サーバー上で公開された EJB を使用するには、[詳細] をクリックしてダイアログ ボックスを展開します (図 4 を参照)。
図 4. 詳細モードの [EJB 参照の追加] ダイアログ ボックス
リモート J2EE アプリケーション サーバーへの JNDI URL を入力し、[サーバーから取得] をクリックします。 Visual MainWin は、リモート サーバー上で公開されているすべての EJB と、JAR ファイルに対応する EJB を一覧表示します。この操作はローカル EJB と一致します。
使用する EJB を選択し (複数ある場合があります)、「OK」をクリックします。図 5 に示すように、ソリューション エクスプローラー ブラウザーに新しい EJB 参照フォルダーが作成されます。このフォルダーには、Web 参照ノードと同様に、新しく追加された各 EJB 参照に対するサーバーベースの参照が含まれています。さらに、EJB 呼び出しのコーディングを簡素化するためにラッパー クラスが生成されます。このラッパー クラスについては後のセクションで説明します。
図 5. EJB 参照を表示するソリューション エクスプローラー フォルダー
.NET からの EJB メソッドの呼び出し
EJB 参照をプロジェクトに追加すると、システムは .NET (C# または VB.NET) クラスを自動的に生成します。これは、EJB への単純なインターフェイスを記述します。 。このクラスには、EJB を作成し、そのメソッドを呼び出すために必要な J2EE コーディングが含まれています。この .NET クラスは、独自のパブリック メソッドを通じて EJB リモート インターフェイスのメソッドを公開します。 EJB のビジネス メソッドを呼び出すには、ラッパー クラスのインスタンスを作成し、適切なラッパー クラス メソッドを呼び出すだけです。
.NET プロジェクトから EJB メソッドを呼び出すコード例を次に示します。
//StockTrader EJB のインスタンスを作成します。
localhost.StockTraderEJB トレーダー = 新しい localhost.StockTraderEJB();
//銘柄名のテキストボックスでユーザーが定義した銘柄を購入します。
//購入した株数は株数テキストボックスの数と一致します
trader.buy(tbStockName.Text, Int32.Parse(tbNumOfShares.Text));
詳細な分析により、
上記で生成されたラッパー クラスの静的コンストラクターで要求された J2EE 呼び出しが実行され、EJB のホーム オブジェクトが作成されます。次に、デフォルトのコンストラクターで、ホーム オブジェクトを使用して EJB オブジェクトを作成します。 EJB オブジェクトは、ビジネス EJB メソッドが呼び出されるラッパー クラス メンバーとして格納されます。
以下は、StockTrader EJB のラッパー クラスを作成するコードの一部です
。
個人取引。StockTraderEJB ejbObj;
静的 StockTraderEJB() {
// Java ネーミング (JNDI) コンテキストを作成します
コンテキストコンテキスト。
context = vmw.j2ee.J2EEUtils.CreateContext(null, null);
オブジェクトhomeObj;
//JNDIサーバーからホームオブジェクトを取得します
homeObj = context.lookup("ejb/StockTrader");
ホーム = ((trading.StockTraderHome)(homeObj));
}
//デフォルトのコンストラクター: 新しい EJB インスタンスを作成します
public StockTraderEJB() {
this.ejbObj = home.create();
このラッパー クラスは、
パブリック メソッドを通じて EJB リモート インターフェイスのメソッドを公開します。これらの各メソッドは、EJB オブジェクトを通じて EJB の対応するビジネス メソッドを呼び出します。次のコードは、EJB ラッパーの株式トレーダー メソッドを示しています。
public virtual void buy(string arg_0, int arg_1) {
this.ejbObj.buy(arg_0, arg_1);
}
public virtual void sell(string arg_0, int arg_1) {
this.ejbObj.sell(arg_0, arg_1);
Visual MainWin は、
Java と .NET 間のデータ型のマッピングも担当します。たとえば、EJB のメソッドの 1 つが java.lang.calendar オブジェクトをパラメータとして受け取る場合、.NET System.DateTime オブジェクト パラメータを使用してそのメソッドを呼び出し、それをカレンダー オブジェクトの java.lang にマップします。その後、EJB メソッドが java.lang.class を返す場合は、代わりに System.Type オブジェクトを受け取ります。
デバッグの問題
Visual MainWin は開発を簡素化しますが、マルチレベルの混合 ASP.NET/EJB アプリケーションをデバッグする必要がある場合があります。 Visual MainWin デバッガーを使用すると、Visual Studio .NET IDE 内からハイブリッド アプリケーションをデバッグできます。 C# または VB.NET コードに割り込みを設定し、EJB Java コードにステップインして、言語の境界を越えてアプリケーション全体をデバッグできます。また、問題が発生した場合は常にデバッグが必要であるため、Visual MainWin デバッガは、デバッガ上で実行できる限り、Linux、Unix、またはその他のフレームワークで実行されているかどうかに関係なく、J2EE アプリケーション サーバーに接続できます。パターン。
図 6. Visual MainWin デバッガを使用した EJB ソース コードのデバッグ
Visual MainWin が作成するアプリケーションは標準の J2EE サーブレット アプリケーションです。他の J2EE と同様に、J2EE アプリケーション サーバー マネージャ コンソールを通じて公開および管理できます。サーブレットと同じです。応用。したがって、ASP.NET プレゼンテーション層と EJB ビジネス ロジック層は、同じ J2EE セキュリティ インフラストラクチャに依存できます。ハイブリッド ASP.NET/EJB アプリケーションは、J2EE サーブレット認証の使用を通じて一貫したセキュリティ モデルに依存でき、アプリケーション サーバーのユーザーとロールの定義は、ロールベースの承認メカニズムのバランスを取ることでセキュリティを確保できます。
概要
1. この記事では、リモート オブジェクトとインターフェイスについて説明しました。 Visual MainWin を介したローカル オブジェクトの使用も可能です。ネイティブ オブジェクトを使用するアプリケーションを配布するには、アプリケーションの WAR ファイルとローカル EJB の JAR ファイルの両方を含むエンタープライズ アーカイブ (EAR) ファイルを作成する必要があります。
2. Visual MainWin は、ほとんどの .NET 型を Java 型にマッピングできますが、コレクション型をマッピングすることはできません。これは、このマッピングによってパフォーマンスが低下する可能性があるためです。したがって、.NET コードから Java コレクション型を処理するか、そのような変換を自分で実行するかを選択できます。
3. Visual MainWin を使用すると、セッション Bean と非トランザクション エンティティ Bean を使用できます。トランザクション エンティティ Bean は透過的に使用できないため、J2EE トランザクション呼び出しを手動でコーディングする必要があります。ただし、ほとんどの場合、トランザクション エンティティ Bean にはセッション Bean を通じてアクセスできるため、これを行う必要はほとんどありません。