Знаете ли вы, если я могу получить аргументы базы данных от persistence.xml
, знаете ли вы, есть ли исходный код, который делает это. Или я должен разобрать persistence.xml
сам?
Мне ничего не известно о стандартном JPA API, позволяющем получить имя класса драйвера, URL-адрес jdbc, имя пользователя и пароль.
Вторая проблема, ключи для этих свойств не стандартизированы в JPA 1.0. Например, Hibernate будет использовать:
<property name="hibernate.connection.driver_class" value=""/>
<property name="hibernate.connection.url" value=""/>
<property name="hibernate.connection.username" value=""/>
<property name="hibernate.connection.password" value=""/>
Пока EclipseLink будет использовать:
<property name="eclipselink.jdbc.driver" value=""/>
<property name="eclipselink.jdbc.url" value=""/>
<property name="eclipselink.jdbc.user" value=""/>
<property name="eclipselink.jdbc.password" value=""/>
Это может сделать разбор хрупким.
Если это опция, возможно, вы могли бы использовать файл свойств для хранения как специфических для поставщика ключей, так и значений (я бы рекомендовал использовать стандартизированные свойства JPA 2.0 в качестве ключей). Например:
# keys for JPA
javax.persistence.jdbc.driver = hibernate.connection.driver_class
javax.persistence.jdbc.url = hibernate.connection.url
javax.persistence.jdbc.user = hibernate.connection.username
javax.persistence.jdbc.password = hibernate.connection.password
# values common to JPA and JDBC
driver = org.h2.Driver
url = jdbc:h2:mem:test
username = scott
password = tiger
И используйте Persistence.createEntityManagerFactory(String, Map)
и передайте Map
, который вы передадите со свойствами из файла, чтобы создать EntityManagerFactory
:
Map map = new HashMap();
map.put(...);
...
EntityManagerFactory emf = Persistence.createEntityManagerFactory("MyPu", map);