2013-08-23 47 views
17

Tôi muốn lưu trữ các URL kết nối trong một ràng buộc JNDI cho ứng dụng Tomcat của tôi. Vì Tomcat sử dụng context.xml để xác định tài nguyên JNDI, tôi cần tìm ra cách thích hợp để lưu trữ một chuỗi (hoặc nhiều chuỗi cho nhiều kết nối) trong context.xml.Cách lưu trữ các giá trị chuỗi trong context.xml

Lý do của tôi để làm điều này là để tôi có thể xác định các chuỗi khác nhau cho các môi trường khác nhau và tải chúng qua JNDI.

Thông thường, tôi thấy các mục như vậy:

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

Là nó thực sự chỉ đơn giản như:

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

Nếu vậy, nơi nào tôi thực sự lưu trữ các giá trị String?!?! Và nếu nó không đúng, sau đó một cách thích hợp đối với tôi để lưu trữ, ví dụ, "amqp:5272//blah.example.com&param1=4" trong context.xml vì vậy tôi sau đó có thể nhìn nó lên như vậy là gì:

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

Cảm ơn trước!

Trả lời

6

Bạn có thể định cấu hình các giá trị được đặt tên sẽ được hiển thị cho ứng dụng web dưới dạng tham số khởi tạo ngữ cảnh servlet bằng cách lồng các phần tử bên trong phần tử này. Ví dụ, bạn có thể tạo một tham số khởi tạo như thế này:

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

mã java của bạn trông như thế này

ServletContext sc = getServletContext(); 

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

Xin vui lòng xem các tài liệu tham khảo http://tomcat.apache.org/tomcat-7.0-doc/config/context.html

+3

điều này không trả lời câu hỏi được hỏi mặc dù nó được đánh dấu là câu trả lời và có thể đã giúp người gửi câu hỏi ban đầu. Đối với những người bạn đến bài đăng này tìm kiếm giải pháp cho câu hỏi được đăng, hãy tham khảo câu trả lời được cung cấp bởi @Stoffe – loesak

18

Bạn có thể sử dụng một thẻ Environment:

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

Và bạn có thể đọc nó gần như y ou quy định trong câu hỏi:

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

này cũng tương tự như sử dụng một thẻ Parameter, nhưng không có nhu cầu về một ServletContext.

+0

Tên tệp có phải là 'context.xml' và nó được lưu trữ ở đâu không? – gkiko

+0

@gkiko: trong Tomcat, nó được gọi là 'context.xml' và phải có một trong thư mục' conf' của bản cài đặt tomcat của bạn, trên * nix thường ở '/ usr/share/tomcat/conf/context.xml'. Các máy chủ web khác có các tệp và quy ước khác. – Stoffe

Các vấn đề liên quan