OpenDolphin-1.3をMacOSX Tiger上で構築する記録です。1台のMac上にサーバも構築してみようと考えています。このブログでは、元町皮ふ科様のサイトを参考に、それを忠実に(?)再現しようとした試みです。 バイブルサイトのURIは、こちらです。

2008年7月24日木曜日

OpenDolphinデータベースの初期化-失敗1の原因追及-

さて、前回のエントリーでは見事に失敗してしまいました。
どうやらHost Serviceを取得できていないようなので通信の問題のようです。では、どのような通信を行っているのかをInitDatabase.javaを覗いてみました。
// RMI Connection
String host = prop.get("host.address");
if (host == null || host.equals("")) {
host = "localhost";
}
Properties props = new Properties();
props.setProperty("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
props.setProperty("java.naming.provider.url","jnp://" + host + ":1099");
props.setProperty("java.naming.factory.url.pkgs","org.jboss.namingrg.jnp.interfaces");
InitialContext ctx = new InitialContext(props);

this.service = (RemoteSystemService) ctx.lookup("openDolphin/RemoteSystemService");

logger.info("Host Service を取得しました。");

この辺が怪しそうです。
JavaのRMIを利用して結局1099ポートにアクセスしているようです。という事で、JBOSSサーバを立ち上げて、1099ポートで待ち受けているかどうかを"netstat -na"で見たところ、なにやら待ち受けているプログラムがありそうです。ここはOK!

次に、RMIで通信するためにJNDIに登録されているかどうかを見ます。
  • ブラウザでhttp://localhost:8080にアクセスしてみてください。
  • JBoss Management -> JML Consoleをクリック
  • jboss -> service=JNDIviewをクリック
  • java.lang.String.list()の項目にあるInvokeボタンをクリック
Global GNDI NamespaceにOpenDolphinの名前があれば、一応サーバとしては検索可能になっていると言えます。

と、と、ところが、これが見当たりません。という事は、RMIサーバにきちんと名前解決できるように設定されていないという事です。

次に調べるべき事は、RMIの名前解決がどのような仕組みで行われているかです。ちょっとググってみたところ、どうやら外部のxml設定ファイルで設定している説明がたくさん出てきます。ところが、これらのxmlファイルがソースファイルに見当たりません。それらしいtxtファイルも見当たりません。

ここで、方針をかえて.earファイルにパッケージされるコンポーネントをbuild.xmlファイルで見てみると、dto, ejb, infomodelディレクトリ以下のファイルという事が分かります。いかにもそれらしいejbディレクトリ以下のファイルを見てみますと、インターフェースとその実装からなっています。で、それぞれのソースを見てみますが、特別にRMIの名前解決サーバに登録しているような記載は見当たりませんでした。
ただ、ちょっと気になったのは、
@Stateless
@Remote({RemoteSystemService.class})
@RemoteBinding(jndiBinding="openDolphin/RemoteSystemService")

以下のアノテーションです。
いろいろググって見ましたところ、どうやらJBossではアノテーションでRMIサーバへの名前登録ができ、OpenDolphinではそれを利用しているらしいという事です。

で、このアノテーションがどういったライブラリで提供されているのか見てみたところ、なんとjboss-4.2.3.GA/clientにjboss-annotations-ejb3.jarという何ともそれらしいjarファイルがありました。
ここで、ちょっと考えてみました。元々のソースコードはjboss-4.0.5.GA用のものですので、それに含まれるライブラリもおそらく当時のものだろう。より新しいjbossサーバを用いるのであれば、それ用のあたらしいライブラリを用いるべきでないか、と!
という事で、NetBeans上でソースコードに梱包されていたjboss-annotations-ejb3.jarを取り除き、jboss-4.2.3.GAで配布されていた同jarファイルを設定し直しました。そして、OpenDolphin-1.3プロジェクトを再構築し、できたがったopenDolphin-1.3.earを再度JBossサーバ配下にコピーしました。

JBossサーバを再起動して、RMIネームスペースを確認したところ、ちゃんと登録されているようです。

しかし、なんと同じエラーでデータベースの初期化ができません。serialUIDがどうのこうのというエラーで、ググっても決定的な解決策はなさそうです。

ここで、いったんjboss-4.2.3.GAを用いる事をあきらめました。

次回は、jboss-4.0.5.GAを用いてデータベース初期化に再挑戦です。

0 件のコメント:

自己紹介

ちょっとしたTipsのメモです。