2014-05-07 2 views
1

de fond

je suis l'incorporation d'un environnement d'exécution basé sur OSGi Apache Felix in the bridged mode dans un récipient Tomcat6. Il y a un tas de connexions JDBC spécifiées dans le fichier conf/server.xml dans Tomcat6.recherches JNDI dans OSGi en mode ponté

<Resource name="foo/bar" ... /> 

Question

La recherche JNDI standard ne semble pas fonctionner à partir de faisceaux déployés au conteneur OSGi.

ctx.lookup("java:comp/env/foo/bar"); 

Y at-il quelque chose de spécial qui doit être fait pour l'exécution OSGi pour pouvoir les ressources lookup enregistrées dans le conteneur Tomcat6 parent?

+0

Pouvez-vous fournir plus d'informations sur votre environnement, est l'ctx.lookup réalisé à l'intérieur d'un activateur de faisceau ou dans une application plan aries? En raison de fils fourchus, dans notre environnement, je n'ai pu extraire jndi-ressources qu'à l'intérieur des threads qui ont été démarrés sur le serveur. –

Répondre

0

@ Le commentaire de Martin m'a fait penser à plusieurs parties. Je suis arrivé que cela fonctionne par:

  1. Veiller à ce que ctx.lookup(...) est invoquée dans le BundleActivator. En effet, en mode ponté, le ClassLoader du thread exécutant le code Activator peut rechercher toutes les classes et ressources définies dans le fichier WAR parent.
  2. Veiller à ce que la META-INF/context.xml de parent WAR expose la ressource JNDI via <ResourceLink global="foo/bar" name="foo/bar" type="javax.sql.DataSource"/>