EJB3で管理されるリモートインタフェースを切り替える

JBossアプリケーション(非Webアプリ)にて、@Remoteをつけたリモートインタフェースの実装クラスをStatelessBeanとしてEJBコンテナに登録。ちなみにJBossサーバは起動済みとする。

クライアント(ただのpulic static void main(String[])プログラム)からはそのインタフェースを呼出したい場合、クラスパスの通ったところにjndi.propertiesファイルを置いて、new InitialContext()して取得したコンテキストからlookupすれば取得できる。
ここまではよくあるEJB3のサンプル通り。

今回、開発時には、サーバ側のBean実装が存在しなくても、クライアントがちゃんと動作するようにしておきたい(モックで代用)。
そのために、専用のNamingContextFactoryを作るのも微妙だし、DIコンテナで管理させることもしたくない。で、単純な方法を思いついた。

  • コンテキストの取得やEJBのルックアップは専用のクラス(XXX)が行う。
  • VMの起動オプションに-Dfoo.bar.qux.mode=debugを指定
  • XXXの実装内で、System.getProperty("foo.ar.qux.mode")で振り分け。