4

今日、私はこの例外を提示されました

Caused by: javax.naming.NamingException: Unable to acquire SerialContextProvider for SerialContext  [Root exception is java.lang.NullPointerException]
        at com.sun.enterprise.naming.impl.SerialContext.getProvider(SerialContext.java:276)
        at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:430)
        ... 23 more

ejb にリモートでアクセスしようとしましたが、問題のコードは

Context c = new InitialContext();

以前にこの例外を見て修正したことがありますが、どのように行ったかを正確に思い出せませんでした。初期、コンテキスト URL、サービス プロバイダーなどにいくつかの環境変数を設定する必要があることはわかっていました。

実際、前回この問題を修正するために使用したコードを見つけることができました。それは次のとおりです。

Hashtable<String, String> env = new Hashtable<String, String>();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.enterprise.naming.SerialInitContextFactory");
env.put(Context.PROVIDER_URL, "localhost:1099");
Context c = new InitialContext(env);

私の質問は、使用する初期コンテキスト ファクトリをどのように見つけることができるかということです。私は、glassfish v3 で実行されるデータベース用の ejb モジュールを作成しましたが、もちろん を使用する必要があるというヒントはまったく得られませんでしたcom.sun.enterprise.naming.SerialInitContextFactory。これらのコンテキスト ファクトリを作成するのは誰ですか? どちらを使用する必要があるかを誰が決定し、その理由は? さまざまな目的でどれが必要かを示すリストがないのはなぜですか? 誰かが、人間が可能なリソースにアクセスするための最も難解で不可解な方法を作るために道を踏み外したようです。または、ここで何かを完全に誤解しているか、膨大な量の知識が不足しています。

この件についての啓蒙をいただければ幸いです。

皆さん、ありがとうございました。

4

3 に答える 3

3

参照用のglassfish設定jndi.properties

java.naming.factory.initial=com.sun.enterprise.naming.SerialInitContextFactory
java.naming.factory.url.pkgs=com.sun.enterprise.naming
java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl
Context.SECURITY_PRINCIPAL=user1
Context.SECURITY_CREDENTIALS=pass123
org.omg.CORBA.ORBInitialHost=localhost
org.omg.CORBA.ORBInitialPort=3700

1.)デフォルトのコンストラクターが呼び出されるとjndi.properties、ファイルがロードされます。InitialContext私の考えでは、これらの値をハードコーディングしたり、Propertiesオブジェクトを作成したりすることから、これが望ましいです。

2.) これらの接続パラメーターは、ローカルで実行されている Glassfish で機能します。私はこれをさまざまな情報源からまとめました。

3.) 私は質問の精神に同意します: これらは細かいマニュアルのどこに明記されていますか? マニュアルでそれらについて言及しているのを見たことがありますが、すべてが 1 つの場所にあるわけではありません。少なくともグラスフィッシュの場合はそうです。4.x のグラスフィッシュのマニュアルが PDF でしか入手できないことは役に立ちません。

于 2014-09-25T10:34:15.483 に答える
1

通常、JNDIは、クラスパスのjndi.propertiesファイルで構成を検索します。

たぶん、あなたを誤った方向に向ける不正なjndi.propertiesファイルがあります。

詳細については、https://glassfish.dev.java.net/javaee5/ejb/EJB_FAQ.html#StandaloneRemoteEJBを参照してください。

于 2010-08-19T10:49:25.873 に答える
0

jndiContext.lookup(???) が正しく指定されているかどうかを確認します。

于 2011-01-07T07:05:01.997 に答える