Question

Lorsque j'essaie la recherche suivante dans mon code:

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

Je reçois l'exception suivante:

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

J'ai installé JBoss intégré après JBoss instructions de wiki . Et j'ai configuré Tomcat à l'aide de l'option "Analyse de chaque fichier WAR par défaut". déploiement tel que spécifié dans la page du wiki de configuration .

Citation de la page de configuration:

  

JNDI

     

Les composants JBoss intégrés tels que le regroupement de connexions, les EJB, les JPA et les transactions   utilisation intensive de JNDI pour la publication de services. JBoss intégré annule le JNDI de Tomcat   mise en œuvre en se superposant à l’instanciation JNDI de Tomcat. Il y a quelques > raisons pour cela:

     
      
  1. Pour éviter de devoir déclarer chacun de ces services dans server.xml
  2.   
  3. Pour permettre l’intégration sans apparence de l’espace de nom java: comp entre les applications Web et   EJBs.
  4.   
  5. L'implémentation JNDI de Tomcat contient quelques bogues critiques qui gênent certains JBoss.   composants capacité à travailler
  6.   
  7. Nous souhaitons vous fournir la possibilité de mettre à distance des EJB et d’autres services pouvant > être regardé à distance
  8.   

Quelqu'un a-t-il une idée de la façon dont je peux configurer le service de dénomination JBoss qui, selon la citation ci-dessus, redéfinit l'implémentation JNDI de Tomcat afin que je puisse effectuer une recherche sur java: comp / env?

FYI - Mon environnement Tomcat 5.5.9, Seam 2.0.2sp, JBoss intégré (version bêta 3),

Remarque: j’ai un fichier -ds.xml pour la connexion à la base de données correctement configuré et accessible sur le chemin de classe conformément aux instructions.

Remarque: j'ai posté cette question dans le forum Jboss et le forum d'utilisateurs Seam intégrés.

Était-ce utile?

La solution

Merci pour la boîte à outils de réponse .... oui, je peux accéder à ma source de données en allant directement à java: jdbc / mydb, mais j'utilise un code de base existant qui se connecte via l'ENC. Voici quelques informations intéressantes que j'ai découvertes ....

  1. Le code ci-dessus fonctionne avec JBoss 4.2.2.GA . Voici les paramètres JNDI ctx utilisés:
    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. Le code ci-dessus fonctionne avec Tomcat 5.5.x et voici les paramètres ctx JNDI utilisés:
    java.naming.factory.initial = org.apache.naming.java.javaURLContextFactory java.naming.factory.url.pkgs = org.apache.naming

  3. Le code ci-dessus échoue avec JBoss intégré (version bêta 3) dans Tomcat 5.5.x avec le message d'erreur ci-dessus.
    java.naming.factory.initial = org.apache.naming.java.javaURLContextFactory java.naming.factory.url.pkgs = org.apache.namingLe code ci-dessus échoue avec l'erreur susmentionnée à l'aide de JBoss Embedded dans tomcat 5.5.x

Quelqu'un a-t-il une idée de ce que je dois faire pour configurer la configuration JBoss JNDI intégrée?

Autres conseils

java: comp / env est connu sous le nom de Enterprise Naming Context (ENC) et n'est pas visible de manière globale. Voir ici pour plus d'informations. Vous devrez localiser le nom JNDI global sous lequel votre source de données est enregistrée.

Pour ce faire, le moyen le plus simple consiste à accéder à la console Web JMX de JBoss et à rechercher un "JNDIView" (pas tout à fait sûr du nom - actuellement à la maison) mbean. Ce mbean devrait avoir une méthode de liste que vous pouvez appeler, qui affichera le chemin du contexte pour tous les objets liés à JNDI.

J'ai eu un problème similaire avec Jboss Embedded et j'ai enfin résolu le problème de lecture dans le fichier: test-Datasource-ds.xml

ajouter

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

Le problème était que jboss a ajouté le préfixe java: / pour toutes les sources de données déclarées. Donc, finalement, j'avais une source de données nommée testDatasource, surchargée avec cette directive en jdbc / Example DataSource

J'espère que ça fonctionne

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top