Externalize credentials from persistence.xml in J2SE app
Asked Answered
D

1

4

I'm writing a J2SE app (no enterprise container) that uses JPA for persistence. Here is my 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>

It's a static file, "compiled" into the application. However, I need to extract the credentials so I can load them from config parameters at runtime, because they're different for e.g. the development and live version of the app.

I load the persistence setup in the default way:

emf = Persistence.createEntityManagerFactory("dbstats");

How can I externalize the credentials in this setup? I could generate the persistence.xml file at runtime, but that's a bit hacky.

Dedifferentiation answered 28/12, 2010 at 18:24 Comment(0)
L
4

You can provide additional properties when creating EntityManagerFactory:

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

emf = Persistence.createEntityManagerFactory("dbstats", properties); 
Lore answered 28/12, 2010 at 18:27 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.