/*
* Copyright (C) 2013 Intel Corporation
* All rights reserved.
*/
package com.intel.mtwilson;
//import com.intel.mountwilson.as.common.ASConfig;
//import com.intel.mtwilson.audit.helper.AuditConfig;
import com.intel.dcsg.cpg.jpa.PersistenceManager;
import java.io.IOException;
//import com.intel.mtwilson.ms.common.MSConfig;
import java.util.Properties;
import javax.persistence.EntityManagerFactory;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.configuration.Configuration;
import org.apache.commons.configuration.MapConfiguration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Example:
*
Properties jdbc = new Properties();
jdbc.setProperty("mtwilson.db.host", "10.1.71.88");
jdbc.setProperty("mtwilson.db.schema", "mw_as");
jdbc.setProperty("mtwilson.db.user", "root");
jdbc.setProperty("mtwilson.db.password", "password");
jdbc.setProperty("mtwilson.db.port", "3306");
jdbc.setProperty("mtwilson.as.dek", "hPKk/2uvMFRAkpJNJgoBwA=="); // optional; if you don't set this ,the value you see here is the default
CustomPersistenceManager pm = new CustomPersistenceManager(jdbc);
*
* @author jbuhacoff
*/
public class MyPersistenceManager extends PersistenceManager {
private transient static Logger log = LoggerFactory.getLogger(MyPersistenceManager.class);
private static ClassLoader jpaClassLoader = null;
private Properties jdbcProperties;
public MyPersistenceManager(Properties jdbcProperties) {
this.jdbcProperties = jdbcProperties;
}
@Override
public void configure() {
log.debug("MyPersistenceManager: Database Host: {}", jdbcProperties.getProperty("mtwilson.db.host"));
MyConfiguration c = new MyConfiguration(jdbcProperties);
addPersistenceUnit("ASDataPU", getASDataJpaProperties(c));
addPersistenceUnit("MSDataPU", getMSDataJpaProperties(c));
addPersistenceUnit("AuditDataPU", getAuditDataJpaProperties(c));
}
public EntityManagerFactory getASData() {
return getEntityManagerFactory("ASDataPU");
}
public EntityManagerFactory getMSData() {
return getEntityManagerFactory("MSDataPU");
}
public EntityManagerFactory getAuditData() {
return getEntityManagerFactory("AuditDataPU");
}
// mtwilson-launcher calls setJpaClassLoader with the application classloader as parameter so that ASPersistenceManager can pass it o PersistenceManager as the classlaoder to use for loading persistence.xml files (because they are under /opt/mtwilson/java not in the .war)
// public static ClassLoader getJpaClassLoader() { return jpaClassLoader; }
// public static void setJpaClassLoader(ClassLoader cl) { jpaClassLoader = cl; }
public static Properties getJpaProperties(MyConfiguration config) {
Properties prop = new Properties();
prop.put("javax.persistence.jdbc.driver", config.getDatabaseDriver());
prop.put("javax.persistence.jdbc.scheme", config.getDatabaseProtocol());
String url = String.format("jdbc:%s://%s:%s/%s?autoReconnect=true",
config.getDatabaseProtocol(), config.getDatabaseHost(),
config.getDatabasePort(), config.getDatabaseSchema());
prop.put("javax.persistence.jdbc.url", url);
prop.put("javax.persistence.jdbc.user", config.getDatabaseUsername());
prop.put("javax.persistence.jdbc.password", config.getDatabasePassword());
prop.put("eclipselink.jdbc.batch-writing", "JDBC");
log.debug("javax.persistence.jdbc.url={}", url);
//System.err.println("getJpaProps Default url == " + prop.getProperty("javax.persistence.jdbc.url"));
return prop;
}
public static Properties getASDataJpaProperties(MyConfiguration config) {
Properties prop = new Properties();
Configuration myConfig = config.getConfiguration();
prop.put("javax.persistence.jdbc.driver", myConfig.getString("mountwilson.as.db.driver",config.getDatabaseDriver()));
if( prop.get("javax.persistence.jdbc.driver").equals("com.mysql.jdbc.Driver") ) {
prop.put("javax.persistence.jdbc.scheme", "mysql"); // NOTE: this is NOT a standard javax.persistence property, we are setting it for our own use
}
else if( prop.get("javax.persistence.jdbc.driver").equals("org.postgresql.Driver") ) {
prop.put("javax.persistence.jdbc.scheme", "postgresql"); // NOTE: this is NOT a standard javax.persistence property, we are setting it for our own use
}
else {
prop.put("javax.persistence.jdbc.scheme", "unknown-scheme");
}
prop.put("javax.persistence.jdbc.host", myConfig.getString("mountwilson.as.db.host", config.getDatabaseHost()));
prop.put("javax.persistence.jdbc.port", myConfig.getString("mountwilson.as.db.port", config.getDatabasePort()));
prop.put("javax.persistence.jdbc.schema", myConfig.getString("mountwilson.as.db.schema", config.getDatabaseSchema()));
prop.put("javax.persistence.jdbc.url" ,
myConfig.getString("mountwilson.as.db.url",
myConfig.getString("mtwilson.db.url",
String.format("jdbc:%s://%s:%s/%s?autoReconnect=true",
prop.get("javax.persistence.jdbc.scheme"),
prop.get("javax.persistence.jdbc.host"),
prop.get("javax.persistence.jdbc.port"),
prop.get("javax.persistence.jdbc.schema")))));
prop.put("javax.persistence.jdbc.user",
myConfig.getString("mountwilson.as.db.user",
myConfig.getString("mtwilson.db.user",
"root")));
prop.put("javax.persistence.jdbc.password",
myConfig.getString("mountwilson.as.db.password",
myConfig.getString("mtwilson.db.password",
"password")));
prop.put("eclipselink.jdbc.batch-writing", "JDBC");
log.debug("ASData javax.persistence.jdbc.url={}", prop.getProperty("javax.persistence.jdbc.url"));
//System.err.println("getJpaProps ASdata url == " + prop.getProperty("javax.persistence.jdbc.url"));
copyDbcpProperties(myConfig, prop);
return prop;
}
// copies some properties described in http://commons.apache.org/proper/commons-dbcp/configuration.html
// using same defaults as shown on that page
public static void copyDbcpProperties(Configuration myConfig, Properties prop) {
prop.setProperty("dbcp.max.active", myConfig.getInteger("dbcp.max.active", 8).toString());
prop.setProperty("dbcp.max.idle", myConfig.getInteger("dbcp.max.idle", 8).toString());
prop.setProperty("dbcp.min.idle", myConfig.getInteger("dbcp.min.idle", 0).toString()); // can be used instead of initial size
prop.setProperty("dbcp.validation.query", myConfig.getString("dbcp.validation.query","")); // for example SELECT 1 ; we provide empty string default because Properties would throw NullPointerException for a null value
prop.setProperty("dbcp.validation.on.borrow",String.valueOf( myConfig.getBoolean("dbcp.validation.on.borrow", true)));
prop.setProperty("dbcp.validation.on.return", String.valueOf(myConfig.getBoolean("dbcp.validation.on.return", false)));
}
public static Properties getMSDataJpaProperties(MyConfiguration config) {
Properties prop = new Properties();
Configuration myConfig = config.getConfiguration();
prop.put("javax.persistence.jdbc.driver",
myConfig.getString("mountwilson.as.db.driver",
config.getDatabaseDriver()));
if( prop.get("javax.persistence.jdbc.driver").equals("com.mysql.jdbc.Driver") ) {
prop.put("javax.persistence.jdbc.scheme", "mysql"); // NOTE: this is NOT a standard javax.persistence property, we are setting it for our own use
}
else if( prop.get("javax.persistence.jdbc.driver").equals("org.postgresql.Driver") ) {
prop.put("javax.persistence.jdbc.scheme", "postgresql"); // NOTE: this is NOT a standard javax.persistence property, we are setting it for our own use
}
else {
prop.put("javax.persistence.jdbc.scheme", "unknown-scheme");
}
prop.put("javax.persistence.jdbc.url" ,
myConfig.getString("mountwilson.as.db.url",
myConfig.getString("mtwilson.db.url",
String.format("jdbc:%s://%s:%s/%s?autoReconnect=true",
prop.getProperty("javax.persistence.jdbc.scheme"),
myConfig.getString("mountwilson.as.db.host", config.getDatabaseHost()),
myConfig.getString("mountwilson.as.db.port", config.getDatabasePort()),
myConfig.getString("mountwilson.as.db.schema", config.getDatabaseSchema())))));
prop.put("javax.persistence.jdbc.user",
myConfig.getString("mountwilson.as.db.user",
myConfig.getString("mtwilson.db.user",
"root")));
prop.put("javax.persistence.jdbc.password",
myConfig.getString("mountwilson.as.db.password",
myConfig.getString("mtwilson.db.password",
"password")));
log.debug("MSData javax.persistence.jdbc.url={}", prop.getProperty("javax.persistence.jdbc.url"));
//System.err.println("getJpaProps MSData url == " + prop.getProperty("javax.persistence.jdbc.url"));
copyDbcpProperties(myConfig, prop);
return prop;
}
public static Properties getAuditDataJpaProperties(MyConfiguration config) {
Properties prop = new Properties();
Configuration myConfig = config.getConfiguration();
prop.put("javax.persistence.jdbc.driver",
myConfig.getString("mountwilson.audit.db.driver",
config.getDatabaseDriver()));
if( prop.get("javax.persistence.jdbc.driver").equals("com.mysql.jdbc.Driver") ) {
prop.put("javax.persistence.jdbc.scheme", "mysql"); // NOTE: this is NOT a standard javax.persistence property, we are setting it for our own use
}
else if( prop.get("javax.persistence.jdbc.driver").equals("org.postgresql.Driver") ) {
prop.put("javax.persistence.jdbc.scheme", "postgresql"); // NOTE: this is NOT a standard javax.persistence property, we are setting it for our own use
}
else {
prop.put("javax.persistence.jdbc.scheme", "unknown-scheme");
}
prop.put("javax.persistence.jdbc.url" ,
myConfig.getString("mountwilson.audit.db.url",
myConfig.getString("mtwilson.db.url",
String.format("jdbc:%s://%s:%s/%s?autoReconnect=true",
prop.getProperty("javax.persistence.jdbc.scheme"),
myConfig.getString("mountwilson.audit.db.host", config.getDatabaseHost()),
myConfig.getString("mountwilson.audit.db.port", config.getDatabasePort()),
myConfig.getString("mountwilson.audit.db.schema", config.getDatabaseSchema())))));
prop.put("javax.persistence.jdbc.user",
myConfig.getString("mountwilson.audit.db.user",
myConfig.getString("mtwilson.db.user",
"root")));
prop.put("javax.persistence.jdbc.password",
myConfig.getString("mountwilson.audit.db.password",
myConfig.getString("mtwilson.db.password",
"password")));
log.debug("AuditData javax.persistence.jdbc.url={}", prop.getProperty("javax.persistence.jdbc.url"));
//System.err.println("getJpaProps audit url == " + prop.getProperty("javax.persistence.jdbc.url"));
copyDbcpProperties(myConfig, prop);
return prop;
}
public static Properties getMCDataJpaProperties(MyConfiguration config) {
Properties prop = new Properties();
Configuration myConfig = config.getConfiguration();
prop.put("javax.persistence.jdbc.driver",
myConfig.getString("mountwilson.mc.db.driver",
config.getDatabaseDriver()));
if( prop.get("javax.persistence.jdbc.driver").equals("com.mysql.jdbc.Driver") ) {
prop.put("javax.persistence.jdbc.scheme", "mysql"); // NOTE: this is NOT a standard javax.persistence property, we are setting it for our own use
}
else if( prop.get("javax.persistence.jdbc.driver").equals("org.postgresql.Driver") ) {
prop.put("javax.persistence.jdbc.scheme", "postgresql"); // NOTE: this is NOT a standard javax.persistence property, we are setting it for our own use
}
else {
prop.put("javax.persistence.jdbc.scheme", "unknown-scheme");
}
prop.put("javax.persistence.jdbc.url" ,
myConfig.getString("mountwilson.mc.db.url",
myConfig.getString("mtwilson.db.url",
String.format("jdbc:%s://%s:%s/%s?autoReconnect=true",
prop.getProperty("javax.persistence.jdbc.scheme"),
myConfig.getString("mountwilson.mc.db.host", config.getDatabaseHost()),
myConfig.getString("mountwilson.mc.db.port", config.getDatabasePort()),
myConfig.getString("mountwilson.mc.db.schema", config.getDatabaseSchema())))));
prop.put("javax.persistence.jdbc.user",
myConfig.getString("mountwilson.mc.db.user",
myConfig.getString("mtwilson.db.user",
"root")));
prop.put("javax.persistence.jdbc.password",
myConfig.getString("mountwilson.mc.db.password",
myConfig.getString("mtwilson.db.password",
"password")));
log.debug("MCData javax.persistence.jdbc.url={}", prop.getProperty("javax.persistence.jdbc.url"));
//System.err.println("getJpaProps MCData url == " + prop.getProperty("javax.persistence.jdbc.url"));
copyDbcpProperties(myConfig, prop);
return prop;
}
public static Properties getEnvDataJpaProperties(MyConfiguration config) {
Properties prop = getASDataJpaProperties(config);
String mtwilsonDbDriverEnvVar = System.getenv("MTWILSON_DB_DRIVER");
if ( mtwilsonDbDriverEnvVar != null && !mtwilsonDbDriverEnvVar.isEmpty()) {
prop.put("javax.persistence.jdbc.driver", mtwilsonDbDriverEnvVar);
}
String jdbcDriver = prop.get("javax.persistence.jdbc.driver").toString();
if( (jdbcDriver != null) && jdbcDriver.equals("com.mysql.jdbc.Driver") ) {
prop.put("javax.persistence.jdbc.scheme", "mysql"); // NOTE: this is NOT a standard javax.persistence property, we are setting it for our own use
}
else if((jdbcDriver != null) && jdbcDriver.equals("org.postgresql.Driver") ) {
prop.put("javax.persistence.jdbc.scheme", "postgresql"); // NOTE: this is NOT a standard javax.persistence property, we are setting it for our own use
}
else {
prop.put("javax.persistence.jdbc.scheme", "unknown-scheme");
}
String mtwilsonDbHostEnvVar = System.getenv("MTWILSON_DB_HOST");
if ( mtwilsonDbHostEnvVar != null && !mtwilsonDbHostEnvVar.isEmpty()) {
prop.put("javax.persistence.jdbc.host", mtwilsonDbHostEnvVar);
}
String mtwilsonDbPortEnvVar = System.getenv("MTWILSON_DB_PORT");
if (mtwilsonDbPortEnvVar != null && !mtwilsonDbPortEnvVar.isEmpty()) {
prop.put("javax.persistence.jdbc.port", mtwilsonDbPortEnvVar);
}
String mtwilsonDbSchemaEnvVar = System.getenv("MTWILSON_DB_SCHEMA");
if (mtwilsonDbSchemaEnvVar != null && !mtwilsonDbSchemaEnvVar.isEmpty()) {
prop.put("javax.persistence.jdbc.schema", mtwilsonDbSchemaEnvVar);
}
prop.put("javax.persistence.jdbc.url",
String.format("jdbc:%s://%s:%s/%s?autoReconnect=true",
prop.get("javax.persistence.jdbc.scheme"),
prop.get("javax.persistence.jdbc.host"),
prop.get("javax.persistence.jdbc.port"),
prop.get("javax.persistence.jdbc.schema")));
if (System.getenv("MTWILSON_DB_USER") != null && !System.getenv("MTWILSON_DB_USER").isEmpty()) {
prop.put("javax.persistence.jdbc.user",
System.getenv("MTWILSON_DB_USER"));
}
if (System.getenv("MTWILSON_DB_PASSWORD") != null && !System.getenv("MTWILSON_DB_PASSWORD").isEmpty()) {
prop.put("javax.persistence.jdbc.password",
System.getenv("MTWILSON_DB_PASSWORD"));
}
prop.put("eclipselink.jdbc.batch-writing", "JDBC");
return prop;
}
}