использование JDBC с persistence.xml - PullRequest
1 голос
/ 02 мая 2010

Я создаю структуру, которая управляет доступом к базе данных.

платформа получает задачи от пользователя и обрабатывает пул соединений, которые управляют доступом к базе данных. пользователь просто отправляет мне команды SQL.

Одной из функций, которую я хотел бы поддержать, является работа с JPA, в этом случае я предоставлю менеджера сущностей. в некоторых случаях я хотел бы предоставить доступ JDBC, а также доступ JPA. аргументы для базы данных записаны в файле XML.

поэтому для JPA мне нужно написать свойство в persistence.xml, чтобы было не так умно снова писать те же аргументы для JDBC. Знаете ли вы, если я могу получить аргументы базы данных из persistence.xml, знаете ли вы, есть ли исходный код, который делает это. или мне самому нужно разобрать persistence.xml?

1 Ответ

3 голосов
/ 02 мая 2010

Знаете ли вы, если я могу получить аргументы базы данных от 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...