2008-09-23 11 views
5

に埋め込まれたJBossとのJNDIの設定:ヘルプ私は自分のコードに次の検索をしようとするとTomcatの5.5.x

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  
    ... 

私は、次の組み込みのJBossをインストールJBoss wiki instructions。さらに、configuration wiki pageに指定されているように、「デフォルトですべてのWARをスキャンする」展開を使用してTomcatを設定しました。接続プール、EJB、JPAのような

組み込みのJBossコンポーネントは

JNDI、およびトランザクションは、サービスを公開するJNDIの 広範囲に使用します

configページを引用します。埋め込みJBossは、TomcatのJNDIインスタンスの上にレイヤーを重ねることで、TomcatのJNDI 実装をオーバーライドします。少数>の理由はこのためにあります。

  1. は、Javaのseemeless統合を可能にするためにserver.xmlの
  2. 内でこれらのサービスの一つ一つを宣言することを回避するには、次のWebアプリケーションと EJB間のコンプの名前空間。
  3. TomcatのJNDIの実装はそれにいくつかの重大なバグを持っている私たちは、EJBと>リモートで
を調べることができ、他のサービスをリモーティングのあなたのためのオプションを提供したい
  • を動作するようにいくつかのJBoss コンポーネントの能力を妨げます
  • 私はJBossのネーミングサービスをどのように設定することができますか?上記の引用によると、TomcatのJNDI実装を無効にしてjava:comp/envの検索を行うことができますか? FYI

    - 私の環境のJBoss(ベータ3)組み込みのTomcat 5.5.9、シーム2.0.2sp、

    注:私は私のデータベース接続のための-ds.xmlファイル適切に設定し、上でアクセスを持っています命令ごとのクラスパス。

    注:埋め込まれたJbossフォーラムとシームユーザーフォーラムにこの質問を掲載しました。

    答えて

    2

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

    1. です。GAここでは、使用されているJNDI ctxパラメータを示します。
      java.naming.factory.initial = org.jnp.interfaces.NamingContextFactory java.naming.factory.url.pkgs = org.jboss.naming:org.jnp.interfaces : org.jboss.naming:org.jnp.interfacesに

    2. は、上記のコードはのTomcat 5.5.xで動作し、ここで使用されているJNDIのCTXパラメータです:
      のjava.naming.factory.initial = ORG。 apache.naming.java.javaURLContextFactory java.naming.factory.url.pkgs = org.apache.naming

    3. 上記のコードは、上記のエラーメッセージでEmbedded JBoss(Beta 3) Tomcat 5.5.xで失敗します。
      java.naming.factory.initial = org.apache.naming.java.javaURLContextFactory java.naming.factory.url.pkgs = org.apache.naming上記のコードは、tomcat 5.5.xのJBoss Embeddedを使用して上記のエラーで失敗します。

    私は埋め込みJBoss JNDI構成を設定する必要がありますか?

    +0

    の作品を願っていましたか? 私もこの問題を抱えています。アプリケーションはネイティブのTomcatで正常に動作しますが、データソースは期待どおりに動作しますが、JBossが組み込まれている場合、「Name java:compはこのコンテキストにバインドされていません」というエラーが発生します。 –

    1

    java:comp/envはエンタープライズネーミングコンテキスト(ENC)と呼ばれ、グローバルには表示されません。詳細については、hereを参照してください。あなたのデータソースが登録されているグローバルJNDI名を見つける必要があります。

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

    1

    私は組み込みJBossのといくつかの同様の問題があったと私は最終的にファイルに遊ん修正:問題はJBossは接頭辞のjavaを追加しました

    <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> 
    

    を追加

    を テストデータソース-ds.xmlの: /宣言されたすべてのデータソースに対して。だから、最終的に私は/例データソース

    をJDBCのそのディレクティブをオーバーライドtestDatasourceという名前のデータソースは、それはあなたが解決策を見つけるか

    関連する問題