Как сохранить строковые значения в файле context.xml
Я хотел бы сохранить URL-адреса соединений в привязке JNDI для моего приложения Tomcat. Поскольку Tomcat использует context.xml
для определения ресурса JNDI, мне нужно выяснить способ правильного хранения String (или нескольких строк для нескольких подключений) в context.xml
.
Моя причина для этого заключается в том, что я могу определить разные строки для разных сред и загружать их через JNDI.
Обычно я вижу такие записи:
<Context ...>
<Resource name="someName" auth="Container"
type="someFullyQualifiedClassName"
description="Some description."/>
</Context>
Действительно ли это так просто:
<Context ...>
<Resource name="myConnectionURL" auth="Container"
type="java.lang.String"
description="A connection URL string."/>
</Context>
Если да, , где я действительно храню значение String?!?! И если это не так, то каков правильный способ хранения, например, "amqp:5272//blah.example.com¶m1=4
", в context.xml
, чтобы я мог выглядеть так:
Context ctx = new InitialContext();
String connectionURL = (String)ctx.lookup("myConnectionURL");
Спасибо заранее!
Ответы
Ответ 1
Вы можете настроить именованные значения, которые будут отображаться в веб-приложении как параметры инициализации контекста сервлетов, вставляя элементы внутри этого элемента. Например, вы можете создать параметр инициализации следующим образом:
<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>
Ваш код Java выглядит следующим образом:
ServletContext sc = getServletContext();
String companyName = sc.getInitParameter("companyName");
См. ссылку http://tomcat.apache.org/tomcat-7.0-doc/config/context.html
Ответ 2
Вы можете использовать тег Environment
:
<Context>
<Environment name="myConnectionURL" value="amqp:5272//blah.example.com¶m1=4" type="java.lang.String"/>
</Context>
И вы можете прочитать его почти так, как вы указали в вопросе:
InitialContext initialContext = new InitialContext();
Context environmentContext = (Context) initialContext.lookup("java:/comp/env");
String connectionURL = (String) environmentContext.lookup("myConnectionURL");
Это то же самое, что использовать тег Parameter
, но без необходимости <<24 > .