users@glassfish.java.net

Re: Dynamic Persistence Unit?

From: <glassfish_at_javadesktop.org>
Date: Mon, 11 May 2009 09:13:18 PDT

I've done something like this:

Persistence.createEntityManagerFactory("name",
                    config.getDbProps().buildPersistenceProperties()));

Where DBProps is a simple getter/setter thing. Essentially the createEntityManagerFactory method wants a Map with all the properties required by your JPA provider, hibernate in the case below.
public class DBProps {

    private String username;
    private String password;
    private String dbHost;
    private String database;
    private DBChoice dblayer = DBChoice.MYSQL;

    public Map buildPersistenceProperties() {
        final Map ret = new HashMap();
        ret.put("hibernate.connection.username", username);
        ret.put("hibernate.connection.password", password);
        ret.put("hibernate.connection.url", dblayer.getUrl()
                + dbHost + "/" + database);
        ret.putAll(dblayer.getAddtlProps());
        return ret;
    }

    public static enum DBChoice {

        MYSQL("jdbc:mysql://", new HashMap() {

    {
        put("hibernate.connection.driver_class", "com.mysql.jdbc.Driver");
        put("hibernate.dialect", "org.hibernate.dialect.MySQL5InnoDBDialect");
        put("hibernate.hbm2ddl.auto", "update");
        put("hibernate.c3p0.idle_test_period", "100");
    }
});

        private DBChoice(final String url, final Map addtl) {
            this.addtl = addtl;
            this.url = url;
        }

        public Map getAddtlProps() {
            return addtl;
        }

        public String getUrl() {
            return url;
        }

        private final Map addtl;
        private final String url;
    }
    
    public String getDatabase() {
        return database;
    }

    public void setDatabase(String database) {
        this.database = database;
    }

    public String getDbHost() {
        return dbHost;
    }

    public void setDbHost(String dbHost) {
        this.dbHost = dbHost;
    }

    public List<DBChoice> getDblayers() {
        return Arrays.asList(DBChoice.values());
    }

    public DBChoice getDblayer() {
        return dblayer;
    }

    public void setDblayer(final DBChoice dblayer) {
        this.dblayer = dblayer;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

}
[Message sent by forum member 'coding' (coding)]

http://forums.java.net/jive/thread.jspa?messageID=345816