Đố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
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.
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>
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.
nó bị viết sai chính tả. Bây giờ điều này cũng đang hoạt động: '
- 1. openJPA trên Java SE
- 2. Spring Jndi Context và PropertyPlaceholderConfigurer
- 3. Cấu hình persistence.xml của openJPA
- 4. Cách và thêm JNDI cho Hibernate ở đâu?
- 5. Tomcat vs Weblogic JNDI Lookup
- 6. Cách nâng cấp OpenJPA với Ant + IntelliJ IDEA
- 7. Hết nguồn dữ liệu JNDI chứa
- 8. tra cứu JNDI không thành công (NameNotFoundException)
- 9. WebSphere: JNDI bối cảnh Lookup Không
- 10. Servlet 3.0 Cấu hình Java Spring JNDI
- 11. JNDI Nhà cung cấp dịch vụ cho hệ thống tệp
- 12. Tại sao liên kết hibernate SessionFactory thành tài nguyên JNDI?
- 13. Duy trì JNDI trên nhiều trường hợp của Tomcat
- 14. JNDI lookup không làm việc với 3.x EJB
- 15. Tại sao nên chọn ClassCastException trên JMS ConnectionFactory trong JNDI?
- 16. Tôi có thể tìm hiểu về chuỗi JNDI ở đâu?
- 17. Tên JNDI - Tiền tố "jdbc /" có cần thiết không?
- 18. So sánh triển khai JPA 2.0: Hibernate 3.5 so với EclipseLink 2 so với OpenJPA 2
- 19. Điều gì sẽ nhanh hơn: JDBC hoặc JNDI?
- 20. Thiết lập JNDI Datasource với oracle trong Tomcat
- 21. Mysql không kết nối lại với JNDI Tomcat 6
- 22. Cầu tàu 7: định cấu hình JNDI cho Start.java
- 23. Thêm đối tượng tùy chỉnh vào JNDI trên Weblogic 10
- 24. Cách định cấu hình JPA để sử dụng JNDI?
- 25. Thẻ <jee: jndi-lookup> Spring & `SAXParseException`
- 26. Sử dụng VARCHAR hoặc TEXT làm ánh xạ chuỗi mặc định trong OpenJPA
- 27. Trợ giúp cấu hình JNDI với nhúng JBoss trong Tomcat 5.5.x
- 28. Tại sao tra cứu JNDI của tôi cho một QueueConnectionFactory trả về null?
- 29. Giao dịch mùa xuân không quay trở lại ngoại lệ (nguồn dữ liệu Oracle JNDI)
- 30. Tên tài nguyên JNDI được nối với __pm. Triển khai thất bại
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. –
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 –