2010-06-14 38 views
7

Tôi muốn thử nghiệm một số chức năng mới là một phần của ứng dụng web nội bộ. Mã mới này sử dụng kết nối cơ sở dữ liệu thường được cung cấp bởi một máy chủ ứng dụng (tomcat).Làm cách nào để giả mạo tìm kiếm jndi cho nguồn dữ liệu mà không cần máy chủ ứng dụng

Tôi không muốn tạo lại toàn bộ ứng dụng web trên máy cục bộ của mình để kiểm tra mã mới, vì tôi chỉ cần chạy một hàm.

Có ai biết làm thế nào tôi có thể 'giả mạo' một bối cảnh, hoặc datasource, để lấy cấu hình cơ sở dữ liệu, mà không thực sự tạo một cá thể ứng dụng web trên một máy chủ?

Trả lời

4

Với sự giúp đỡ của mùa xuân SimpleNamingContextBuilder và Apache BasicDataSource, bạn có thể làm một cái gì đó như thế này (tôi thường có điều này trong một khối tĩnh trong lớp học thử nghiệm mà cần JNDI):

BasicDataSource dataSource = new BasicDataSource(); 
dataSource.setDriverClassName(db_driver_name); 
dataSource.setUrl(db_connection_url); 
dataSource.setUsername(db_username); 
dataSource.setPassword(db_password); 
SimpleNamingContextBuilder builder = new SimpleNamingContextBuilder(); 
builder.bind(jndi_name, dataSource); 
builder.activate(); 

Giá trị của jndi_name có thể trông như thế này: java:comp/env/jdbc/my-db

Sau khi thiết lập này, mã thường tra cứu kết nối cơ sở dữ liệu qua JNDI sẽ hoạt động. Đoạn mã trên sẽ ví dụ làm việc với cấu hình mùa xuân này:

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> 
    <property name="jndiName" value="java:comp/env/jdbc/my-db"/> 
</bean> 
+0

Đây chỉ là những gì tôi đang tìm kiếm, cảm ơn. – Wiszh

+0

Lauri, làm thế nào để 'JndiObjectFactoryBean' biết tìm kiếm' my-db' trong thư mục Spring? Bạn không phải cung cấp môi trường ngữ cảnh? Đặc biệt, trong môi trường này, bạn sẽ đặt thuộc tính 'java.naming.factory.initial' thành giá trị nào? –

+0

Lauri, vui lòng xem câu hỏi của tôi tại http://stackoverflow.com/questions/5682732/what-value-should-property-java-naming-factory-initial-have-when-using-springs. –

0

Với TomcatJNDI bạn có thể truy cập vào tất cả các tài nguyên JNDI bạn đã cấu hình trong Tomcat như được sử dụng để làm trong ứng dụng web của bạn. Mã để đạt được nó là đơn giản và trông giống như

TomcatJNDI tomcatJNDI = new TomcatJNDI(); 
tomcatJNDI.processContextXml(contextXmlFile); 
tomcatJNDI.start(); 

DataSource ds = (DataSource) InitialContext.doLookup("java:comp/env/path/to/datasource") 

Go here to read more about it.

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