2013-08-23 14 views
17

Ich möchte Verbindungs-URLs in einer JNDI-Bindung für meine Tomcat-Anwendung speichern. Da Tomcat context.xml für die Definition von JNDI-Ressourcen verwendet, muss ich herausfinden, wie eine Zeichenfolge (oder mehrere Zeichenfolgen für mehrere Verbindungen) in context.xml gespeichert werden kann.So speichern Sie Zeichenfolgenwerte in context.xml

Mein Grund dafür ist, dass ich verschiedene Zeichenfolgen für verschiedene Umgebungen definieren und sie über JNDI laden kann.

Normalerweise sehe ich Einträge wie folgt:

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

Ist es wirklich so einfach wie:

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

Wenn ja, wo tatsächlich speichere ich den String-Wert?!?! Und wenn es nicht richtig ist, was ist dann der richtige Weg für mich zum Beispiel zu speichern, „amqp:5272//blah.example.com&param1=4“ in context.xml so konnte ich es dann wie so sehen:

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

Vielen Dank im Voraus!

Antwort

6

Sie können benannte Werte konfigurieren, die für die Webanwendung als Servletkontextinitialisierungsparameter sichtbar gemacht werden, indem Sie Elemente innerhalb dieses Elements verschachteln. Zum Beispiel können Sie eine Initialisierung Parameter wie folgt erstellen:

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

Ihr Java-Code wie folgt http://tomcat.apache.org/tomcat-7.0-doc/config/context.html

+3

Dies beantwortet die Frage nicht, obwohl sie als Antwort markiert ist und dem ursprünglichen Fragesteller geholfen haben könnte. Für diejenigen, die zu diesem Post auf der Suche nach einer Lösung für die gestellte Frage sind, lesen Sie die Antwort von @Stoffe – loesak

18

Sie können verwenden, um ein Environment Tag sieht

ServletContext sc = getServletContext(); 

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

Bitte siehe die Referenz:

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

Und Sie können es fast als y lesen ou in der Frage angegeben:

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

Dies ist sehr ähnlich wie ein Parameter-Tag, aber ohne die Notwendigkeit eines ServletContext.

+0

Sollte der Dateiname 'context.xml' sein und wo ist er gespeichert? – gkiko

+0

@gkiko: In Tomcat heißt es 'context.xml' und es sollte bereits eins im' conf' -Verzeichnis Ihrer Tomcat-Installation sein, auf * nix normalerweise unter '/ usr/share/tomcat/conf/context.xml'. Andere Webserver haben andere Dateien und Konventionen. – Stoffe