JNDIクライアントから InitialContext の取得を行った場合に発生するエラーと対処方法について説明します。
JNDIクライアントのクラスパスに wosv-rt.jar は含まれているが jndiclt.jar が含まれていない場合、 InitialContext 取得時に下記のような例外が出力されます。
javax.naming.NoInitialContextException: Cannotinstantiate class: jp.co.nec.WebOTX.jndi.SerialInitContextFactory [Rootexception is java.lang.ClassNotFoundException:jp/co/nec/WebOTX/jndi/SerialInitContextFactory]
エラーを解決するには、クライアントのクラスパスに jndiclt.jar を追加してください。
ただし、JNI の AttachCurrentThread を使用してメソッド呼び出しを行っている場合は、上記の対処を行っても例外は解消されません。
この場合は、JNI仕様によりコンテキストクラスローダがブートストラップクラスローダになっていることが原因です。下記の例を参照し、 InitialContext を取得する前に、コンテキストクラスローダをシステムクラスローダに変更する処理を追加してください。
ClassLoader urlCl = ClassLoader.getSystemClassLoader(); Thread.currentThread().setContextClassLoader(urlCl); InitialContext l_ctx = new InitialContext(env);