5

コードで次のルックアップを試してみると、次のようになります。

Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
return (DataSource) envCtx.lookup("jdbc/mydb"); 

次の例外が発生します。

java.sql.SQLException: QueryResults: Unable to initialize naming context: 
    Name java:comp is not bound in this Context at 
    com.onsitemanager.database.ThreadLocalConnection.getConnection
    (ThreadLocalConnection.java:130) at     
    ...

JBosswikiの指示に従って組み込みJBossをインストールしました。そして、構成wikiページで指定されているように、「デフォルトですべてのWARをスキャンする」デプロイメントを使用してTomcatを構成しました。

設定ページの引用:

JNDI

接続プール、EJB、JPA、トランザクションなどの組み込みJBossコンポーネントは、JNDIを広範囲に使用してサービスを公開します。組み込みJBossは、TomcatのJNDIインスタンス化の上にそれ自体を階層化することにより、TomcatのJNDI実装をオーバーライドします。これにはいくつかの理由があります:

  1. server.xml内でこれらのサービスのすべてを宣言する必要をなくすため
  2. WebアプリとEJB間のjava:comp名前空間の見た目のない統合を可能にするため。
  3. TomcatのJNDI実装には、一部のJBossコンポーネントの動作を妨げるいくつかの重大なバグがあります。
  4. >リモートで検索できるEJBやその他のサービスをリモート処理するオプションを提供したいと考えています。

上記の引用によると、Java:comp / envでルックアップを実行できるようにTomcatのJNDI実装をオーバーライドするJBossネーミングサービスを構成する方法について、誰かが考えていますか?

参考までに-私の環境Tomcat5.5.9、Seam 2.0.2sp、Embedded JBoss(Beta 3)、

注:データベース接続用の-ds.xmlファイルが適切にセットアップされており、指示に従ってクラスパスからアクセスできます。

注:この質問は、埋め込みJbossフォーラムとseamユーザーフォーラムに投稿しました。

4

3 に答える 3

2

応答ツールキットをありがとう....はい、java:jdbc/mydb に直接アクセスしてデータソースにアクセスできますが、ENC 経由で接続する既存のコード ベースを使用しています。ここで私が見つけたいくつかの興味深い情報があります....

  1. 上記のコードはJBoss 4.2.2.GA
    で動作し、使用されている JNDI ctx パラメータは次のとおりです。 :org.jnp.interfaces: org.jboss.naming:org.jnp.interfaces

  2. 上記のコードはTomcat 5.5.xで動作し、使用されている JNDI ctx パラメータは次のとおり
    です。

  3. 上記のコードは、Tomcat 5.5.x の組み込み JBoss (ベータ 3)で失敗し、上記のエラー メッセージが表示されます。
    java.naming.factory.initial=org.apache.naming.java.javaURLContextFactory java.naming.factory.url.pkgs=org.apache.namingTomcat 5.5.x で JBoss Embedded を使用すると、上記のコードは上記のエラーで失敗します

組み込み JBoss JNDI 構成の構成で何をする必要があるか考えている人はいますか?

于 2008-09-23T19:33:23.830 に答える
1

Jboss Embedded で同様の問題が発生し、最終的にファイルでの再生を修正しました: test-Datasource-ds.xml

追加

<mbean code="org.jboss.naming.NamingAlias" name="jboss.jmx:alias=testDatasource">
    <attribute name="FromName">jdbc/Example DataSource</attribute>
    <attribute name="ToName">java:/testDatasource</attribute>
</mbean>

問題は、jboss が宣言されたすべてのデータ ソースに接頭辞 java:/ を追加することでした。最後に、jdbc/Example DataSource へのディレクティブでオーバーライドされた testDatasource という名前のデータソースがありました

それがうまくいくことを願っています

于 2011-06-07T10:58:22.473 に答える
1

java:comp/env はエンタープライズ ネーミング コンテキスト (ENC) として知られており、グローバルには表示されません。詳しくはこちらをご覧ください。データソースが登録されているグローバル JNDI 名を見つける必要があります。

これを行う最も簡単な方法は、JBoss の Web ベースの JMX コンソールに移動し、「JNDIView」(名前は正確にはわからない - 現在自宅にあります) mbean を探すことです。この mbean には、呼び出すことができる list メソッドが必要です。これにより、JNDI にバインドされたすべてのオブジェクトのコンテキスト パスが表示されます。

于 2008-09-23T18:26:31.027 に答える