2012-11-18 30 views
5

Đối với OpenJPA, làm cách nào tôi có thể chỉ định kết nối JNDI trong jta_datasource mà không chỉ định tên người dùng và mật khẩu trong persistence.xml? Nó cho tôi một lỗi khi không có tên người dùng và mật khẩu được chỉ định trong tệp persistence.xml cho jndi.OpenJpa và JNDI

Trả lời

1

Câu hỏi hay; điều này không được đề cập trong tài liệu OpenJPA. Những gì bạn cần làm là sử dụng cú pháp "java: comp/env/..." đặc biệt cho thuộc tính "openjpa.ConnectionFactoryName" để yêu cầu OpenJPA truy xuất các tham số kết nối từ JNDI. Ví dụ: persistence.xml của bạn sẽ trông giống như sau:

<?xml version="1.0"?> 
<persistence> 
    <persistence-unit name="openjpa"> 
    <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider> 
    <class>tutorial.Animal</class> 
    <class>tutorial.Dog</class> 
    <class>tutorial.Rabbit</class> 
    <class>tutorial.Snake</class> 
    <properties> 
     <property name="openjpa.ConnectionFactoryName" value="java:comp/env/jdbc/myjndi"/> 
     <property name="openjpa.Log" value="DefaultLevel=WARN, Tool=INFO"/> 
    </properties> 
    </persistence-unit> 
</persistence> 

Điều này sẽ yêu cầu tài nguyên jndi được gọi là "myjndi" từ vùng chứa. Nếu bạn đang sử dụng Tomcat, bạn sẽ có một context.xml mà trông giống như sau:

<?xml version='1.0' encoding='UTF-8'?> 
<Context> 
    <Resource name="jdbc/myjndi" 
     auth="Container" 
     scope="Shareable" 
     type="javax.sql.DataSource" 
     maxActive="100" 
     maxIdle="30" 
     maxWait="10000" 
     removeAbandoned="true" 
     username="username" 
     password="password" 
     driverClassName="com.mysql.jdbc.Driver" 
     url="jdbc:mysql://localhost:3306/DBNAME?characterEncoding=UTF-8" 
     /> 
</Context> 

Thay đổi các thông số JNDI trên theo yêu cầu cho cơ sở dữ liệu của bạn.

+0

Cảm ơn Templar. Thật không may điều này đã không giải quyết được vấn đề. Tôi đang sử dụng openjpa trên ibm websphere, jndiname của tôi là A/B. Tôi bây giờ sử dụng tôi nhận được ngoại lệ sau đây: Một JDBC driver hoặc DataSource tên lớp phải được chỉ định trong thuộc tính ConnectionDriverName. –

+0

khi tôi chỉ định thuộc tính ConnectionDriverName, sau đó nó ném ngoại lệ cho tên người dùng và mật khẩu –

1

Hãy thử sử dụng phần tử jta-data-source trong persistence.xml của bạn.

<jta-data-source>java:comp/env/jdbc/FooBarDataSourceJNDI</jta-data-source> 
0

Cấu hình thông qua mã làm việc cho tôi:

Map<String, String> conf = new HashMap<>(); 
conf.put("javax.persistence.jtaDataSource", "java:comp/env/jdbc/myjndi"); 
return getEntityManagerFactory().createEntityManager(conf); 

Tôi nghĩ rằng tôi sẽ không đặt persistence.xml ở vị trí thích hợp, được nêu ra.

+0

nó bị viết sai chính tả. Bây giờ điều này cũng đang hoạt động: ' ' – andy

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