2011-11-28 33 views
12

Đây là context.xml tôi file:Cách lấy tài nguyên từ tệp context.xml trong webapp tomcat?

... 
<Resource auth="Container" 
      driverClass="net.sourceforge.jtds.jdbc.Driver" 
      type="com.jolbox.bonecp.BoneCPDataSource" 
      idleMaxAge="240" 
      idleConnectionTestPeriod="60" 
      partitionCount="3" 
      acquireIncrement="1" 
      maxConnectionsPerPartition="10" 
      minConnectionsPerPartition="3" 
      statementsCacheSize="50" 
      releaseHelperThreads="4" 

      name="jdbc/MyDatasource" 
      username="my_username" 
      password="my_password" 
      factory="org.apache.naming.factory.BeanFactory" 
      jdbcUrl="jdbc:jtds:sqlserver://localhost:12345/my_database" 
/> 
... 

Tôi đã cố gắng sử dụng ServletContext.getResource(java.lang.String) với tên của tài nguyên ("jdbc/MyDatasource"), nhưng Tomcat phàn nàn rằng tên không bắt đầu bằng một '/'. Tôi cũng đã thử với "/ jdbc/MyDatasource", nhưng lần này nó trả về null.

tôi chủ yếu cần jdbcUrl để thực hiện một kết nối kiểm tra với máy chủ cơ sở dữ liệu (xem nếu máy chủ đang trực tuyến và hoạt động).

Trả lời

15

từ khóa là: JNDI. Các tài nguyên trong số context.xml không phải là 'Tài nguyên hệ thống' mà là Tài nguyên JNDI. Hãy thử cách này:

InitialContext ic = new InitialContext(); 
// that's everything from the context.xml and from the global configuration 
Context xmlContext = (Context) ic.lookup("java:comp/env"); 
DataSource myDatasource = (DataSource) xmlContext.lookup("jdbc/MyDatasource"); 

// now get a connection to see if everything is fine. 
Connection con = ds.getConnection(); 
// reaching this point means everything is fine. 
con.close(); 
+2

Cảm ơn bạn đã trả lời. Tôi không biết cách tiếp tục chấp nhận câu trả lời vì cả hai bạn đã giúp tôi rất nhiều ... Tôi nghĩ tôi sẽ chấp nhận câu trả lời của bạn vì đã khuyến khích bạn (vì bạn là người dùng mới hơn) để tiếp tục đóng góp cho cộng đồng này .. –

+0

@IgorPopov Vâng tôi có cùng một câu hỏi nhưng chỉ là tôi muốn đọc các tham số khác từ context.xml: như maxTotal, maxIdle, vv Làm sao tôi có thể đọc những thứ đó vì tôi có thể in chúng trong giao diện điều khiển? Tôi đang sử dụng cách tiếp cận tương tự. Có cách nào để đọc các tham số này từ context.xml không? –

+0

@HarshvardhanSolanki Không phải là tôi biết. Nhưng bạn nên hỏi những câu hỏi tiếp theo là câu hỏi riêng. Hãy chắc chắn liên kết với các câu hỏi hiện có nếu họ không trả lời câu hỏi của bạn, vì vậy câu trả lời cho thấy bạn đã cố tự mình giải quyết. –

10

Bạn sẽ có thể truy cập vào nguồn dữ liệu với đoạn mã sau:

Context initialContext = new InitialContext(); 
Context envContext = (Context)initialContext.lookup("java:/comp/env"); 
DataSource ds = (DataSource)envContext.lookup("jdbc/MyDatasource"); 
+0

Cảm ơn sự giúp đỡ của bạn :) Có vẻ như tôi đã tìm kiếm sai địa điểm lần đầu tiên. Tôi tìm thấy một mẫu mã trong tài liệu tomcat: http://tomcat.apache.org/tomcat-6.0-doc/jndi-datasource-examples-howto.html –

+3

Trong tomcat bạn nên thay đổi "java:/comp/env" cho "java: comp/env" – lmiguelmh

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