2013-08-23 1 views
17

Je souhaite stocker les URL de connexion dans une liaison JNDI pour mon application Tomcat. Puisque Tomcat utilise context.xml pour la définition de ressource JNDI, j'ai besoin de trouver le moyen de stocker une chaîne (ou plusieurs chaînes pour plusieurs connexions) en context.xml. La raison pour cela est que je peux définir différentes chaînes pour différents environnements, et les charger via JNDI.Comment stocker les valeurs de chaîne dans context.xml

Habituellement, je vois des entrées comme ceci:

<Context ...> 
    <Resource name="someName" auth="Container" 
      type="someFullyQualifiedClassName" 
      description="Some description."/> 
</Context> 

Est-ce vraiment aussi simple que:

<Context ...> 
    <Resource name="myConnectionURL" auth="Container" 
      type="java.lang.String" 
      description="A connection URL string."/> 
</Context> 

Si oui, où dois-je conserver en fait la valeur de chaîne?!?! Et si ce n'est pas correct, ce qui est la bonne façon pour moi de stocker, par exemple, « amqp:5272//blah.example.com&param1=4 » dans context.xml pour que je puisse alors le chercher comme ceci:

Context ctx = new InitialContext(); 
String connectionURL = (String)ctx.lookup("myConnectionURL"); 

Merci à l'avance!

Répondre

6

Vous pouvez configurer des valeurs nommées qui seront rendues visibles à l'application Web en tant que paramètres d'initialisation de contexte de servlet en imbriquant des éléments dans cet élément. Par exemple, vous pouvez créer un paramètre d'initialisation comme ceci:

<Context> 
     ... 
    <Parameter name="companyName" value="My Company, Incorporated" 
      override="false"/> 
     ... 
</Context> 

    This is equivalent to the inclusion of the following element in the web application deployment descriptor (/WEB-INF/web.xml): 



<context-param> 
     <param-name>companyName</param-name> 
     <param-value>My Company, Incorporated</param-value> 
</context-param> 

Votre code java ressemble à ce

ServletContext sc = getServletContext(); 

String companyName = sc.getInitParameter("companyName"); 

S'il vous plaît voir la référence http://tomcat.apache.org/tomcat-7.0-doc/config/context.html

+3

cela ne répond pas à la question posée même si elle est marquée comme la réponse et peut avoir aidé la question originale. Pour ceux d'entre vous qui viennent à ce poste à la recherche d'une solution pour la question postée, référez-vous à la réponse fournie par @Stoffe – loesak

18

Vous pouvez utiliser une balise Environment:

<Context> 
    <Environment name="myConnectionURL" value="amqp:5272//blah.example.com&param1=4" type="java.lang.String"/> 
</Context> 

Et vous pouvez le lire presque comme y ous spécifié dans la question:

InitialContext initialContext = new InitialContext(); 
Context environmentContext = (Context) initialContext.lookup("java:/comp/env"); 
String connectionURL = (String) environmentContext.lookup("myConnectionURL"); 

Ceci est la même que l'utilisation d'une étiquette Parameter, mais sans la nécessité d'un ServletContext.

+0

Le nom de fichier devrait-il être 'context.xml' et où est-il stocké? – gkiko

+0

@gkiko: dans Tomcat, il s'appelle 'context.xml' et il devrait déjà y en avoir un dans le répertoire' conf' de votre installation tomcat, sur * nix habituellement '/ usr/share/tomcat/conf/context.xml'. D'autres serveurs Web ont d'autres fichiers et conventions. – Stoffe

Questions connexes