2009年1月7日水曜日

Ejb on GlassFIsh

クラスタを組んだGFにEJBを配置してクライアントから呼び出していたが、以下の原因不明のエラーが発生。


Caused by: java.lang.NullPointerException
at com.sun.enterprise.util.ORBManager$1.run(ORBManager.java:386)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.enterprise.util.ORBManager.setORBSystemProperties(ORBManager.java:381)
at com.sun.enterprise.naming.SerialInitContextFactory.(SerialInitContextFactory.java:65)
... 28 more

結局ソースを調べてわかったのは、System.getProperty("java.vendor") が null になっていた。
これは、SystemPropertiesの設定をするところで、以下のようにしたため。
System.setProperties(prpty);
これをすると、prptyに定義されているものだけが残り、ほかはすべてNULLとなる。
Propertiesの指定をした理由はSunのACCを使用せずにクラスタが使えないかを調べるためだったが、
結局普通のクライアントからだとクラスタ化されたJNDIを引くことができずに撃沈。

ACCを使用すると、関連するインスタンスを探し出してそのJNDIをリストアップし、重みづけをして負荷分散できるように設定しているらしいことがログからわかった。ただし、実際のコードの実行部分になると、以下のようなエラーが発生してしまう。


Caused by: java.lang.RuntimeException: メインクラス内の持続性ユニットの注釈の確認中にエラーが発生しました
at com.sun.enterprise.appclient.StandAloneAppClientInfo.classContainsAnnotation(StandAloneAppClientInfo.java:101)
at com.sun.enterprise.appclient.AppClientInfo.mainClassContainsPURefcAnnotations(AppClientInfo.java:413)
at com.sun.enterprise.appclient.AppClientInfo.appClientDependsOnPersistenceUnit(AppClientInfo.java:382)
at com.sun.enterprise.appclient.AppClientInfo.completeInit(AppClientInfo.java:175)
at com.sun.enterprise.appclient.AppClientInfoFactory.buildAppClientInfo(AppClientInfoFactory.java:149)
at com.sun.enterprise.appclient.MainWithModuleSupport.(MainWithModuleSupport.java:366)

0 件のコメント: