Вывести учетные данные из файла persistence.xml в приложение J2SE - PullRequest
4 голосов
/ 28 декабря 2010

Я пишу приложение J2SE (без корпоративного контейнера), которое использует JPA для сохранения. Вот мой persistence.xml:

<persistence xmlns="http://java.sun.com/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
    version="2.0">

    <persistence-unit name="dbstats">

    <!-- TODO: why is this needed? -->
    <class>dreambear.stats.data.GamePlayedEvent</class>
    <class>dreambear.stats.data.HyveMemberCountPoll</class>
    <class>dreambear.stats.data.ProfileCountPoll</class>
    <class>dreambear.stats.data.UserSession</class>
    <class>dreambear.stats.data.UsersOnlinePoll</class>

    <properties>

        <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
        <property name="hibernate.max_fetch_depth" value="3" />
        <property name="hibernate.hbm2ddl.auto" value="update" />

        <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />

        <!-- TODO: externalize information -->
        <property name="javax.persistence.jdbc.user" value="dbstats" />
        <property name="javax.persistence.jdbc.password" value="*****" />
        <property name="javax.persistence.jdbc.url" value="jdbc:mysql://example.com/dbstats" />

    </properties>

    </persistence-unit>

</persistence>

Это статический файл, «скомпилированный» в приложение. Однако мне нужно извлечь учетные данные, чтобы я мог загрузить их из параметров конфигурации во время выполнения, потому что они отличаются, например, для разработка и живая версия приложения.

Я загружаю настройку постоянства по умолчанию:

emf = Persistence.createEntityManagerFactory("dbstats");

Как я могу вывести учетные данные в этой настройке? Я мог бы сгенерировать файл persistence.xml во время выполнения, но это немного странно.

1 Ответ

4 голосов
/ 28 декабря 2010

Вы можете предоставить дополнительные свойства при создании EntityManagerFactory:

Map<String, String> properties = new HashMap<String, String>();
properties.put("javax.persistence.jdbc.user", ...);
...

emf = Persistence.createEntityManagerFactory("dbstats", properties); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...