web-dev-qa-db-ja.com

文字列値をcontext.xmlに格納する方法

TomcatアプリケーションのJNDIバインディングに接続URLを保存したいのですが。 TomcatはJNDIリソースの定義にcontext.xmlを使用するため、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>

もしそうなら、実際に文字列値をどこに保存しますか?!?!そして、それが正しくない場合、たとえば「amqp:5272//blah.example.com&param1=4」を保存する適切な方法は何ですか? context.xmlなので、次のように調べることができます。

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

前もって感謝します!

21
user1768830

この要素内に要素をネストすることにより、サーブレットコンテキスト初期化パラメーターとしてWebアプリケーションに表示される名前付き値を構成できます。たとえば、次のような初期化パラメータを作成できます。

 <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

Environmenttagを使用できます:

<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は必要ありません。

28
Stoffe