grails 2.0.3 で開発したスタンドアロン クライアントから EJB サービスにアクセスする際に問題が発生しています。EJB サービスは、glassfish サーバー (Java) にデプロイされます。EJB にアクセスするために、このコードを netbeans テスター クラスでテストしました。
Properties p = new Properties();
p.put("java.naming.factory.initial", "com.sun.enterprise.naming.SerialInitContextFactory");
p.setProperty("java.naming.factory.url.pkgs", "com.sun.enterprise.naming");
p.setProperty("java.naming.factory.state", "com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl");
p.setProperty("org.omg.CORBA.ORBInitialHost", INTEGRATION_IP);
p.setProperty("org.omg.CORBA.ORBInitialPort", CORBA_PORT);
ctx = new InitialContext(p);
try {
this.admAuth = (AdmAuthenticationRemote) this.ctx.lookup(Tester.AUTHENTICATION_SERVICE_JNDI);
}catch(Exception e){
...
}
これTester.AUTHENTICATION_SERVICE_JNDI
は、デプロイされたサービスへのパスを含む変数です。この場合、"java:global/..."
要求されているサービスへのアドレスを表すようなものです。サービスにアクセスするこの方法は、テスターからは完全に機能しますが、grails から同じことをしようとすると機能しません。同じ方法でコンテキストを作成できますが、呼び出しを呼び出すctx.lookup()
と例外が発生します。
Message: Lookup failed for 'java:global/...' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.SerialInitContextFactory,
java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming}
Cause: javax.naming.NamingException: Unable to acquire SerialContextProvider for SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.SerialInitContextFactory,
java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming}
[Root exception is java.lang.RuntimeException: Orb initialization erorr]
主な例外はネーミング例外です。これは で失敗したことを意味しますctx.lookup()
が、原因は orb 初期化例外であり、別の例外スタックがあります。
java.lang.RuntimeException: Orb initialization erorr
Caused by: java.lang.RuntimeException: java.lang.IllegalArgumentException: Can not set long field com.sun.corba.ee.impl.orb.ORBDataParserImpl.waitForResponseTimeout to java.lang.Integer
Caused by: java.lang.IllegalArgumentException: Can not set long field com.sun.corba.ee.impl.orb.ORBDataParserImpl.waitForResponseTimeout to java.lang.Integer
私はここで本当に迷っています。これをgrailsで実行するために多くの問題を抱えていました。InitialContext()
呼び出しを行うことができるように、すべてのglassfish jar(ライブラリとモジュール)を取得する必要がありましたが、これがまだjarの問題なのか、それとも構成の問題またはそれが何であるか。
IllegalArgumentException
Javaで互換性のない型を割り当てようとすると発生することは知っていますが、そのようなものを設定していないため、内部メソッドの初期化であると想定しています。
問題は、なぜこの例外が発生するのですか??
私のサービスを grails からより適切に呼び出す別の方法はありますか??