ステートフルセッションBeanでの実装

EJB 3クライアントの実装デプロイが完了したEJBにリモートクライアントからアクセスしてみます。リモートクライアントでは、JNDIの初期コンテキストを取得し、EJBをルックアップする必要があります。

田澤 孝之

2007年10月16日 20:00

EJB 3クライアントの実装

デプロイが完了したEJBにリモートクライアントからアクセスしてみます。リモートクライアントでは、JNDIの初期コンテキストを取得し、EJBをルックアップする必要があります。

この方法は従来の方法と変わりありません。ただし、EJB 3からはホームインターフェースが廃止されていますのでホームスタブを取得してライフサイクルメソッドを呼び出すことはせず、直接EJBをJNDIから ルックアップ(取得)してビジネスメソッドを実行します。またEJBコンテナ内、すなわちEJBからEJBを呼びだす場合はJNDIルックアップを利用せ ずに、@EJBアノテーションを利用することが可能です。これは別の機会に紹介します。

なおEJBクライアントのコンパイル時のクラスパスには、JARファイル「jbossall-client.jar」を指定してください。これは利用するEJBのインンタフェースとJBoss EAPインストールディレクトリ以下のjboss-as/clientディレクトリにあります。

以下にEJBのクライアントのコードを示します。


EJBクライアント BankEJBClientSLSB.java

import java.util.Properties;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import ejb3bankapp.Account;
import ejb3bankapp.BankControl;

public class BankEJBClientSLSB {

public static void main(String[] args) {
try {
InitialContext initialContext = getInitialContext();              ←(1)
BankControl bankControl =
(BankControl) initialContext.lookup("BankControlBean/remote");    ←(2)

Account accountA = new Account(1000, 0, "ttazawa");               ←(3)
Account accountB = new Account(2000, 100000, "eyazawa");          ←(3)

accountA = bankControl.deposit(accountA, 15000);

System.out.println(accountA.getName() +":"+ accountA.getBalance());
System.out.println(accountB.getName() +":"+ accountB.getBalance());

accountA = bankControl.withdraw(accountA, 10000);                 ←(4)
accountB = bankControl.deposit(accountB, 10000);                  ←(5)

System.out.println(accountA.getName() +":"+ accountA.getBalance());
System.out.println(accountB.getName() +":"+ accountB.getBalance());

} catch (Exception e) {                                           ←(6)
e.printStackTrace();
        }
  }

private static InitialContext getInitialContext() throws NamingException{
Properties properties = new Properties();
properties.put(javax.naming.Context.INITIAL_CONTEXT_FACTORY,
"org.jnp.interfaces.NamingContextFactory");
properties.put(javax.naming.Context.PROVIDER_URL,
"jnp://localhost:1099");
return new javax.naming.InitialContext(properties);
  }
}

ここでは、まずJNDIの初期コンテキストをJBoss EAPから取得(1)し、取得した初期コンテキストを利用してJNDI名「BankControlBean/remote」をルックアップ(2)しています。

次に、Accountクラスを2つインスタンス化し(3)その2つのAccountオブジェクトをBankControlBeanのビジネスメソッドの引数に指定します。振り込み処理として、出金(4)と入金処理(5)をそれぞれの口座に対して実行しています。

ちなみに、今回のサンプルクライアントプログラムでは例外のハンドリングは行っていません。実際のプログラムでは状況に応じた例外処理が必要となります。

実行結果は以下のようになります。

ttazawa:15000
eyazawa:100000
ttazawa:5000
eyazawa:110000

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30