2013-08-23 11 views
17

Vorrei archiviare gli URL di connessione in un binding JNDI per la mia applicazione Tomcat. Poiché Tomcat utilizza context.xml per la definizione della risorsa JNDI, è necessario capire il modo propert per memorizzare una stringa (o più stringhe per più connessioni) in context.xml.Come memorizzare valori stringa in context.xml

Il motivo per cui è possibile è che posso definire stringhe diverse per ambienti diversi e caricarle tramite JNDI.

Di solito, vedo le voci in questo modo:

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

E 'davvero solo così semplice come:

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

Se è così, dove posso effettivamente memorizzare il valore String?!?! E se non è corretto, allora qual è il modo corretto per me di memorizzare, per esempio, "amqp:5272//blah.example.com&param1=4" in context.xml così ho potuto poi cercarlo in questo modo:

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

Grazie in anticipo!

risposta

6

È possibile configurare i valori denominati che verranno resi visibili all'applicazione Web come parametri di inizializzazione del contesto servlet da elementi di nidificazione all'interno di questo elemento. Ad esempio, è possibile creare un parametro di inizializzazione in questo modo:

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

il codice Java assomiglia a questo

ServletContext sc = getServletContext(); 

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

Si prega di consultare il riferimento http://tomcat.apache.org/tomcat-7.0-doc/config/context.html

+3

questo non risponde alla domanda posta anche se è contrassegnata come la risposta e può aver aiutato il mittente della domanda originale. Per quelli di voi che vengono a questo post alla ricerca di una soluzione per la domanda postata, fare riferimento alla risposta fornita da @Stoffe – loesak

18

È possibile utilizzare un Environment tag:

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

E puoi leggerlo quasi come ou specificato nella domanda:

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

Questo è più o meno lo stesso di utilizzare un tag Parameter, ma senza la necessità di un ServletContext.

+0

Il nome del file deve essere "context.xml" e dove viene memorizzato? – gkiko

+0

@gkiko: in Tomcat si chiama 'context.xml' e ce ne dovrebbe essere già uno nella directory' conf' dell'installazione di tomcat, su * nix di solito in/usr/share/tomcat/conf/context.xml'. Altri server Web hanno altri file e convenzioni. – Stoffe

Problemi correlati