2013-08-23 4 views
17

Я хотел бы сохранить URL-адреса соединений в привязке JNDI для моего приложения Tomcat. Поскольку Tomcat использует context.xml для определения ресурса JNDI, мне нужно выяснить способ правильного хранения String (или нескольких строк для нескольких подключений) в context.xml.Как хранить значения строк в контексте.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&param1=4» в context.xml, так что я мог бы посмотреть его так:

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

Заранее спасибо!

ответ

6

Вы можете настроить именованные значения, которые будут отображаться в веб-приложении как параметры инициализации контекста сервлета, вставляя элементы внутри этого элемента. Например, вы можете создать параметр инициализации, как это:

<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

+3

это не отвечает на вопрос, даже если он отмечен как ответ и, возможно, помог исходному вопроснику. Для тех из вас, кто приходит на это сообщение, ища решение для поставленного вопроса, обратитесь к ответу, предоставленному @Stoffe – loesak

18

Вы можете использовать Environment тег:

<Context> 
    <Environment name="myConnectionURL" value="amqp:5272//blah.example.com&param1=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 тег, но без необходимости ServletContext.

+0

. Должно ли имя файла быть «context.xml» и где оно хранится? – gkiko

+0

@gkiko: в Tomcat это называется 'context.xml', и в каталоге' conf' вашей установки tomcat должен быть один, на * nix обычно на '/ usr/share/tomcat/conf/context.xml'. Другие веб-серверы имеют другие файлы и соглашения. – Stoffe