23

Tomcat アプリケーションの JNDI バインディングに接続 URL を保存したいと考えています。Tomcat はcontext.xmlJNDI リソースの定義に使用するため、文字列 (または複数の接続の場合は複数の文字列) を に格納する適切な方法を理解する必要があります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");

前もって感謝します!

4

2 に答える 2

30

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.

于 2014-06-09T14:18:21.770 に答える
10

この要素内に要素をネストすることにより、サーブレット コンテキストの初期化パラメーターとして 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を参照してください。

于 2013-08-23T13:45:13.677 に答える