Tomcat vs Weblogic Recherche JNDI
La Weblogic serveurs que nous utilisons ont été configurés pour permettre JNDI de la source de données des noms comme "appds".
Pour le développement (localhost), nous pourrions être en cours d'exécution de Tomcat et lorsqu'ils sont déclarés dans le <contexte> la section de l'server.xml, Tomcat va accrocher JNDI sources de données sur "java:comp/env/jdbc/*" dans l'arborescence JNDI.
Problème: dans Weblogic, la recherche JNDI est "appds", tandis que dans Tomcat, il semble que je doit fournir à l'formel "java:comp/env/jdbc/appds". J'ai peur que la version de Tomcat est un implicite de la norme, mais malheureusement, je ne peux pas changer la configuration de Weblogic ... ce qui signifie que nous nous retrouvons avec deux différentes printemps des fichiers de configuration (nous sommes à l'aide de spring 2.5) afin de faciliter les différents environnements.
Est-il un moyen élégant pour remédier à ce problème. Puis-je regarder les noms JNDI directement dans Tomcat? Peut venir prendre un nom et de look dans les deux endroits? Des recherches sur Google ou suggestions serait génial.
Vous devez vous connecter pour publier un commentaire.
JndiLocatorSupport
a une propriétéresourceRef
. Lors de la définition de ce vrai, "java:comp/env/" préfixe sera ajouté automatiquement. Donc, je crois qu'il serait bon de différencier ce paramètre lors du passage de Tomcat pour Weblogic.Comment utiliser un seul nom JNDI dans votre application web
J'ai lutté avec pendant quelques mois moi-même. La meilleure solution est de rendre votre application portable, alors vous avez le même nom JNDI dans Tomcat et Weblogic.
Pour ce faire, vous modifiez votre
web.xml
etspring-beans.xml
de pointer sur un seul nom jndi, et de fournir une cartographie pour chaque fournisseur de nom jndi.J'ai placé chaque fichier ci-dessous.
Vous avez besoin:
<resource-ref />
entrée dans web.xml pour votre application pour utiliser un nom uniqueWEB-INF/weblogic.xml
à la carte de votre nom jndi de la gestion des ressources par WebLogicMETA-INF/context.xml
à la carte de votre nom jndi de la gestion des ressources par TomcatEn règle générale, préférez avoir vos noms jndi dans votre application, tels que
jdbc/MyDataSource
etjms/ConnFactory
et éviter les préfixant avecjava:comp/env/
.Aussi, sources de données et des fabriques de connexions sont mieux gérées par le conteneur et utilisé avec JNDI. C'est un erreur commune à instancier connexion à la base de piscines dans votre application.
printemps
web.xml
weblogic.xml
META-INF/context.xml (pour Tomcat)
J'ai géré le truc avec Tomcat et WebLogic à l'aide de Printemps. Ici est une description de la façon dont il a travaillé pour moi.
La configuration suivante fonctionne dans Tomcat et Weblogic pour moi.
Au Printemps:
Dans la Console d'administration Weblogic créer une ressource JDBC nommé
jdbc/AgriShare
. En vertu des 'Objectifs', ASSUREZ-VOUS de CIBLER LA source de données POUR LE SERVEUR de DÉPLOIEMENT de VOTRE APPLICATION!. Ce point en particulier m'a coûté un certain temps tout à l'heure...Un environnement variable? Définir les développeurs de machines avec le tomcat nom et la production avec le Weblogic nom. Vous pouvez même mettre votre code pour utiliser une valeur par défaut (WebLogic) dans le cas où la variable n'existe pas.
Comment êtes-vous référencer la ressource au printemps?
C'est ce que nous avons pour tomcat:
contexte:
printemps:
Le jee espace de noms vient de:
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.0.xsd
Configuration de source de données dans l'application elle-même n'est pas fou 🙂 je dirais que c'est même obligatoire si l'application est destinée à être déployée sur une grille. Rivière, GigaSpaces, ou similaire.
Note: je ne dis pas les paramètres de connexion doivent être codé en dur à l'intérieur de la GUERRE, ils doivent être fournis au moment du déploiement/de l'exécution. Cela simplifie la gestion de cloud instances puisqu'il n'est que sur place à configurer.
Configuration des ressources dans le conteneur n'a de sens que si plusieurs applications y sont déployés et ils peuvent utiliser des ressources partagées.
Nouveau, dans le type de nuage de déploiements il n'y a qu'une seule demande par conteneur de servlet instance.
Ma demande a également eu un problème similaire et c'est comment je l'ai résolu:
1)
WEB-INF/classes/application.properties
contient l'entrée:2) Sur le PRIX de la machine, j'ai une entrée dans le
/etc/sysenv
fichier:3) j'ai configuré le printemps pour la recherche de l'JNDI vis de la propriété
${ds.jndi}
, à l'aide d'unPropertyPlaceholderConfigurer
bean avecclasspath:application.properties
etfile:/etc/sysenv
emplacements. J'ai également réglé leignoreResourceNotFound
àtrue
afin que les développeurs n'ont pas besoin de/etc/sysenv
sur leurs machines.4) je lance un test d'intégration à l'aide de Fret+Jetée et je ne pouvais pas installer correctement un environnement JNDI là. J'ai donc une solution de repli
BasicDataSource
configurée à l'aide de ladefaultObject
propriété deJndiObjectFactoryBean
.