java - Cómo almacenar valores de cadena en context.xml
string tomcat (2)
Me gustaría almacenar las URL de conexión en un enlace JNDI para mi aplicación Tomcat. Dado que Tomcat usa context.xml
para la definición de recursos JNDI, necesito descubrir la forma correcta de almacenar una Cadena (o múltiples cadenas para múltiples conexiones) en context.xml
.
Mi razón para hacer esto es para poder definir diferentes cadenas para diferentes entornos y cargarlas a través de JNDI.
Por lo general, veo entradas como tal:
<Context ...>
<Resource name="someName" auth="Container"
type="someFullyQualifiedClassName"
description="Some description."/>
</Context>
¿Es realmente tan simple como:
<Context ...>
<Resource name="myConnectionURL" auth="Container"
type="java.lang.String"
description="A connection URL string."/>
</Context>
Si es así, ¿ dónde almaceno realmente el valor de la cadena?!?! Y si no es correcto, entonces, ¿cuál es la forma correcta para que yo almacene, por ejemplo, " amqp:5272//blah.example.com¶m1=4
" en context.xml
para que luego pueda buscarlo así:
Context ctx = new InitialContext();
String connectionURL = (String)ctx.lookup("myConnectionURL");
¡Gracias por adelantado!
Puede configurar valores nombrados que se harán visibles para la aplicación web como parámetros de inicialización de contexto de servlet al anidar elementos dentro de este elemento. Por ejemplo, puede crear un parámetro de inicialización como este:
<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>
Tu código de Java se ve así
ServletContext sc = getServletContext();
String companyName = sc.getInitParameter("companyName");
Consulte la referencia http://tomcat.apache.org/tomcat-7.0-doc/config/context.html
Puede utilizar una etiqueta de Environment
:
<Context>
<Environment name="myConnectionURL" value="amqp:5272//blah.example.com¶m1=4" type="java.lang.String"/>
</Context>
Y puede leerlo casi como especificó en la pregunta:
InitialContext initialContext = new InitialContext();
Context environmentContext = (Context) initialContext.lookup("java:/comp/env");
String connectionURL = (String) environmentContext.lookup("myConnectionURL");
Esto es muy parecido a usar una etiqueta de Parameter
, pero sin la necesidad de un ServletContext
.