2013-08-23 10 views
17

Chciałbym przechowywać adresy URL połączeń w powiązaniu JNDI dla mojej aplikacji Tomcat. Ponieważ Tomcat używa context.xml do definiowania zasobów JNDI, muszę znaleźć sposób na przechowywanie ciągu (lub wielu ciągów dla wielu połączeń) w context.xml.Sposób zapisywania wartości ciągów w context.xml

Moja przyczyna polega na tym, że mogę zdefiniować różne ciągi dla różnych środowisk i załadować je poprzez JNDI.

Zazwyczaj widzę wpisy tak:

<Context ...> 
    <Resource name="someName" auth="Container" 
      type="someFullyQualifiedClassName" 
      description="Some description."/> 
</Context> 

Czy to naprawdę tak proste, jak:

<Context ...> 
    <Resource name="myConnectionURL" auth="Container" 
      type="java.lang.String" 
      description="A connection URL string."/> 
</Context> 

Jeśli tak, gdzie mogę faktycznie przechowywania wartości ciągu?!?! A jeśli to nie jest poprawna, to co to jest właściwy sposób dla mnie do przechowywania, na przykład, „amqp:5272//blah.example.com&param1=4” w context.xml więc mogłem wtedy szukać go tak:

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

Z góry dzięki!

Odpowiedz

6

Można skonfigurować nazwane wartości, które będą widoczne dla aplikacji WWW jako parametry inicjowania kontekstu serwletu, zagnieżdżając elementy wewnątrz tego elementu. Na przykład, można utworzyć parametr inicjalizacji takiego:

<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> 

Twój kod Java wygląda następująco

ServletContext sc = getServletContext(); 

String companyName = sc.getInitParameter("companyName"); 

proszę zobaczyć odniesienie http://tomcat.apache.org/tomcat-7.0-doc/config/context.html

+3

to nie odpowiada na zadane pytanie, mimo że jest oznaczone jako odpowiedź i może pomogło w przesłaniu pierwotnego pytania. Dla tych, którzy przychodzą do tego postu szukając rozwiązania dla wysłanego pytania, zapoznaj się z odpowiedzią udzieloną przez @Stoffe – loesak

18

Można użyć Environment tag:

<Context> 
    <Environment name="myConnectionURL" value="amqp:5272//blah.example.com&param1=4" type="java.lang.String"/> 
</Context> 

I można go przeczytać prawie jak ou określone w pytaniu:

InitialContext initialContext = new InitialContext(); 
Context environmentContext = (Context) initialContext.lookup("java:/comp/env"); 
String connectionURL = (String) environmentContext.lookup("myConnectionURL"); 

To jest tak samo jak przy użyciu Parameter tag, ale bez konieczności stosowania ServletContext.

+0

Czy nazwa pliku powinna być "context.xml" i gdzie jest przechowywana? – gkiko

+0

@gkiko: w Tomcat nazywa się "context.xml" i powinien już być w katalogu 'conf' instalacji tomcat, na * nix zwykle w'/usr/share/tomcat/conf/context.xml'. Inne serwery internetowe mają inne pliki i konwencje. – Stoffe

Powiązane problemy