英語は私の母国語ではないので、事前にお詫び申し上げます。ejbサービスを提供するJavaサーバーアプリケーションに接続するスタンドアロンクライアント(grailsで作成された-groovyフレームワーク)をテストするのに問題がありました。
corbaとwsdlの両方を介して接続しようとしましたが、どちらの方法でもコンテキスト()の初期化に失敗します。これは、アプリを実行したときにInitialContext
クラス()が欠落していると表示されるためです(組み込みのjetty grailsサーバーを使用)。NoClassDefFoundError
このクラスを含むjarがあり、このjarがクラスパスにあり、grailsアプリケーションのlibフォルダーにあるファイルであるため、このクラスはクラスパスに含まれているはずです。
これは、サービスを呼び出すためにBeanを初期化しようとする方法です。
Properties p = new Properties();
p.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.enterprise.naming.SerialInitContextFactory")
p.setProperty("org.omg.CORBA.ORBInitialHost", iProperties.getINTEGRATION_IP())
p.setProperty("org.omg.CORBA.ORBInitialPort", iProperties.getCORBA_PORT())
try{
ctx = new InitialContext(p)
authWS = (AdmAuthenticationRemote) ctx.lookup(AUTHENTICATION_SERVICE_JNDI); // CORBA
} catch(Throwable e){
ctx = new InitialContext(p)
authenticationWS = (AdmAuthenticationRemote) ctx.lookup(REMOTE_CLASS_PACKAGE_NAME) // WSDL
}
上記のコードには「;」はありません 原因groovyはJavaコードを実行するためにそれらを必要としません。このコードをnetbeans環境の小さなアプリでテストしたところ、両方とも機能しました。grailsアプリでこれを実行しようとすると、問題が発生します。
これは、サービスを呼び出そうとしたときに発生するエラーです。
NoClassDefFoundError: org/jvnet/hk2/component/MultiMap
もちろん、これは完全なスタックではありませんが、これが問題の原因です(スタック内で発生します)。このクラス(org.jvnet.hk2.component.MultiMap
)はファイルauto-depends.jar
(glassfishのjarファイル)に含まれています。gf-client.jar
アプリがすべてのglassfishjarをクラスパスに呼び出すようにappserv-rt.jar
(glassfish jarも)ライブラリに追加しようとしましたが、これは機能しませんでした。スタンドアロンアプリでは、クラスを含むjarを手動で追加する必要があることがわかりました(あなたは私appserv-rt.jar
がnetbeansテストファイルに追加して機能しました!)それで私はこのjarファイルを私のlibフォルダに追加しました:
appclient.security.jar
auto-depends.jar
common-util.jar
config-api.jar
config.jar
config-types.jar
connectors-admin.jar
connectors-inbound-runtime.jar
connectors-internal-api.jar
connectors-runtime.jar
container-common.jar
deployment-common.jar
dol.jar
ejb-container.jar
ejb-internal-api.jar
ejb.security.jar
glassfish-api.jar
glassfish-corba-asm.jar
glassfish-corba-codegen.jar
glassfish-corba-csiv2-idl.jar
glassfish-corba-newtimer.jar
glassfish-corba-omgapi.jar
glassfish-corba-orbgeneric.jar
glassfish-corba-orb.jar
glassfish.jar
glassfish-naming.jar
gmbal.jar
hk2-core.jar
internal-api.jar
javax.ejb.jar
kernel.jar
management-api.jar
orb-connector.jar
orb-enabler.jar
orb-iiop.jar
security.jar
tiger-types-osgi.jar
もちろん、Glassfishサーバーのサービスにアクセスするために必要なリモートインターフェイスとサービスオブジェクトを含むjarもあります。これを行っても、このエラーは発生し続けます。私はアイデアがなく、この問題で立ち往生していて、それを解決する方法がわかりません。私の質問は、この例外をどのように解決するのですか?グレイルズの問題ですか?いくつかのgrailsファイルを構成していませんか?どんな考えでもいただければ幸いです。
前もって感謝します
ケビン
更新:クリーンコマンドを実行してコマンドをコンパイルすると、前のエラーの代わりにこのエラーが発生することも発見しました:
java.lang.ClassNotFoundException: org.jvnet.hk2.component.Inhabitant
なぜこれが発生するのかわかりませんが、サーバーを(クリーンコンパイルせずに)再起動すると、前のエラーが発生します。