Reading parameters directed from persistence.xml
authorindvdum (gotoindvdum[at]gmail[dot]com)
Sun, 11 Nov 2012 02:45:26 +0400
changeset 74c2e4f602872
parent 6 180decac2433
child 8 eec474867dbe
Reading parameters directed from persistence.xml
pom.xml
src/main/java/ru/indvdum/jpa/dao/JPADataAccessObject.groovy
src/main/java/ru/indvdum/jpa/init/DatabaseInitializer.java
     1.1 --- a/pom.xml	Sun Nov 11 01:24:41 2012 +0400
     1.2 +++ b/pom.xml	Sun Nov 11 02:45:26 2012 +0400
     1.3 @@ -109,5 +109,10 @@
     1.4  			<artifactId>jackson-jaxrs</artifactId>
     1.5  			<version>${jackson-jaxrs.version}</version>
     1.6  		</dependency>
     1.7 +		<dependency>
     1.8 +			<groupId>commons-configuration</groupId>
     1.9 +			<artifactId>commons-configuration</artifactId>
    1.10 +			<version>${commons-configuration.version}</version>
    1.11 +		</dependency>
    1.12  	</dependencies>
    1.13  </project>
     2.1 --- a/src/main/java/ru/indvdum/jpa/dao/JPADataAccessObject.groovy	Sun Nov 11 01:24:41 2012 +0400
     2.2 +++ b/src/main/java/ru/indvdum/jpa/dao/JPADataAccessObject.groovy	Sun Nov 11 02:45:26 2012 +0400
     2.3 @@ -1,39 +1,18 @@
     2.4 -package ru.indvdum.jpa.dao
     2.5 import java.sql.Connection
     2.6 -import java.sql.SQLException
     2.7 -import java.util.ResourceBundle;
     2.8 import java.util.Map.Entry
     2.9 -
    2.10 -import javax.persistence.EntityManager
    2.11 -import javax.persistence.EntityManagerFactory
    2.12 -import javax.persistence.EntityTransaction
    2.13 -import javax.persistence.NoResultException
    2.14 -import javax.persistence.Persistence
    2.15 -import javax.persistence.Query
    2.16 -import javax.persistence.criteria.CriteriaBuilder
    2.17 -import javax.persistence.criteria.CriteriaQuery
    2.18 -import javax.persistence.criteria.Predicate
    2.19 -import javax.persistence.criteria.Root
    2.20 -import javax.sql.DataSource
    2.21 -
    2.22 -import org.apache.openjpa.conf.OpenJPAConfiguration
    2.23 -import org.apache.openjpa.persistence.OpenJPAEntityManagerFactorySPI
    2.24 -import org.apache.openjpa.persistence.OpenJPAPersistence
    2.25 -import org.slf4j.Logger
    2.26 -import org.slf4j.LoggerFactory
    2.27 -
    2.28 import ru.indvdum.jpa.props.Props;
    2.29 
    2.30 +package ru.indvdum.jpa.dao
    2.31 import java.sql.Connection
    2.32 import java.sql.SQLException
    2.33 import java.util.Map.Entry
    2.34 
    2.35 import javax.persistence.EntityManager
    2.36 import javax.persistence.EntityManagerFactory
    2.37 import javax.persistence.EntityTransaction
    2.38 import javax.persistence.NoResultException
    2.39 import javax.persistence.Persistence
    2.40 import javax.persistence.Query
    2.41 import javax.persistence.criteria.CriteriaBuilder
    2.42 import javax.persistence.criteria.CriteriaQuery
    2.43 import javax.persistence.criteria.Predicate
    2.44 import javax.persistence.criteria.Root
    2.45 import javax.sql.DataSource
    2.46 
    2.47 import org.apache.commons.configuration.XMLConfiguration
    2.48 import org.apache.openjpa.conf.OpenJPAConfiguration
    2.49 import org.apache.openjpa.persistence.OpenJPAEntityManagerFactorySPI
    2.50 import org.apache.openjpa.persistence.OpenJPAPersistence
    2.51 import org.slf4j.Logger
    2.52 import org.slf4j.LoggerFactory
    2.53 
    2.54 import ru.indvdum.jpa.props.Props
    2.55 
    2.56  /**
    2.57   * @author indvdum (gotoindvdum[at]gmail[dot]com)
    2.58   * @since 08.11.2012 23:35:04
    2.59   *
    2.60   */
    2.61  public class JPADataAccessObject {
    2.62 -
    2.63 	protected static String persistenceUnitName = null;
    2.64 +
    2.65 	protected static Logger log = LoggerFactory.getLogger(JPADataAccessObject.class.getSimpleName());
    2.66 +	protected static String persistenceUnitName = null;
    2.67  	protected static EntityManagerFactory emf = Persistence.createEntityManagerFactory(getPersistenceUnitName(), JPAPropertySelector.select());
    2.68  	protected EntityManager em = emf.createEntityManager();
    2.69 -	final static Logger log = LoggerFactory.getLogger(JPADataAccessObject.class.getSimpleName());
    2.70  
    2.71  	JPADataAccessObject() {
    2.72  		em.isOpen();
    2.73 -	}
    2.74 	
    2.75 	protected static String getPersistenceUnitName() {
    2.76 		if (persistenceUnitName != null)
    2.77 			return persistenceUnitName;
    2.78 
    2.79 		if (persistenceUnitName == null)
    2.80 			persistenceUnitName = System.getProperty(Props.PERSISTANCE_UNIT_NAME_PROPERTY);
    2.81 		if (persistenceUnitName == null)
    2.82 			persistenceUnitName = ResourceBundle.getBundle(Props.JPADAO_PROPERTY_FILE).getString(Props.PERSISTANCE_UNIT_NAME_PROPERTY);
    2.83 		if (persistenceUnitName == null)
    2.84 			persistenceUnitName = "database";
    2.85 		return persistenceUnitName;
    2.86 	}
    2.87 +	}
    2.88 	
    2.89 	protected static String getPersistenceUnitName() {
    2.90 		if (persistenceUnitName != null)
    2.91 			return persistenceUnitName;
    2.92 
    2.93 		if (persistenceUnitName == null)
    2.94 			persistenceUnitName = System.getProperty(Props.PERSISTANCE_UNIT_NAME_PROPERTY);
    2.95 		if (persistenceUnitName == null) {
    2.96 			try {
    2.97 				persistenceUnitName = ResourceBundle.getBundle(Props.JPADAO_PROPERTY_FILE).getString(Props.PERSISTANCE_UNIT_NAME_PROPERTY);
    2.98 			} catch (MissingResourceException e) {
    2.99 				log.info("Configuration file " + Props.JPADAO_PROPERTY_FILE + ".properties not found");
   2.100 			}
   2.101 		}
   2.102 		if (persistenceUnitName == null) {
   2.103 			XMLConfiguration conf = new XMLConfiguration("META-INF/persistence.xml");
   2.104 			persistenceUnitName = conf.getString("persistence-unit[@name]");
   2.105 		}
   2.106 		if (persistenceUnitName == null)
   2.107 			persistenceUnitName = "database";
   2.108 		return persistenceUnitName;
   2.109 	}
   2.110  
   2.111  	public static Connection getSQLConnection() throws SQLException {
   2.112  		OpenJPAEntityManagerFactorySPI openjpaemf = (OpenJPAEntityManagerFactorySPI) OpenJPAPersistence.cast(emf);
     3.1 --- a/src/main/java/ru/indvdum/jpa/init/DatabaseInitializer.java	Sun Nov 11 01:24:41 2012 +0400
     3.2 +++ b/src/main/java/ru/indvdum/jpa/init/DatabaseInitializer.java	Sun Nov 11 02:45:26 2012 +0400
     3.3 @@ -1,13 +1,17 @@
     3.4  package ru.indvdum.jpa.init;
     3.5  
     3.6 +import java.util.MissingResourceException;
     3.7  import java.util.ResourceBundle;
     3.8  
     3.9  import javax.naming.InitialContext;
    3.10  import javax.naming.NamingException;
    3.11  
    3.12 +import org.apache.commons.configuration.ConfigurationException;
    3.13 +import org.apache.commons.configuration.XMLConfiguration;
    3.14  import org.apache.commons.dbcp.BasicDataSource;
    3.15 +import org.slf4j.Logger;
    3.16 +import org.slf4j.LoggerFactory;
    3.17  
    3.18 -import ru.indvdum.jpa.dao.JPAPropertySelector;
    3.19  import ru.indvdum.jpa.props.Props;
    3.20  
    3.21  /**
    3.22 @@ -17,22 +21,33 @@
    3.23   */
    3.24  public class DatabaseInitializer {
    3.25  
    3.26 +	protected static Logger log = LoggerFactory.getLogger(DatabaseInitializer.class.getSimpleName());
    3.27 +
    3.28  	protected static String dataSource = null;
    3.29  
    3.30 -	protected static String getDataSourceName() {
    3.31 +	protected static String getDataSourceName() throws ConfigurationException {
    3.32  		if (dataSource != null)
    3.33  			return dataSource;
    3.34  
    3.35  		if (dataSource == null)
    3.36  			dataSource = System.getProperty(Props.DATA_SOURCE_PROPERTY);
    3.37 -		if (dataSource == null)
    3.38 -			dataSource = ResourceBundle.getBundle(Props.JPADAO_PROPERTY_FILE).getString(Props.DATA_SOURCE_PROPERTY);
    3.39 +		if (dataSource == null) {
    3.40 +			try {
    3.41 +				dataSource = ResourceBundle.getBundle(Props.JPADAO_PROPERTY_FILE).getString(Props.DATA_SOURCE_PROPERTY);
    3.42 +			} catch (MissingResourceException e) {
    3.43 +				log.info("Configuration file " + Props.JPADAO_PROPERTY_FILE + ".properties not found");
    3.44 +			}
    3.45 +		}
    3.46 +		if (dataSource == null) {
    3.47 +			XMLConfiguration conf = new XMLConfiguration("META-INF/persistence.xml");
    3.48 +			dataSource = conf.getString("persistence-unit.non-jta-data-source");
    3.49 +		}
    3.50  		if (dataSource == null)
    3.51  			dataSource = "jdbc/database";
    3.52  		return dataSource;
    3.53  	}
    3.54  
    3.55 -	public static void init() throws NamingException {
    3.56 +	public static void init() throws NamingException, ConfigurationException {
    3.57  		String url = System.getProperty(Props.DATABASE_URL_PROPERTY);
    3.58  		String driver = System.getProperty(Props.DATABASE_DRIVER_PROPERTY);
    3.59  		String username = System.getProperty(Props.DATABASE_USERNAME_PROPERTY);
    3.60 @@ -52,14 +67,14 @@
    3.61  			initDerby();
    3.62  	}
    3.63  
    3.64 -	public static void init(BasicDataSource dataSource) throws NamingException {
    3.65 +	public static void init(BasicDataSource dataSource) throws NamingException, ConfigurationException {
    3.66  		InitialContext context = new InitialContext();
    3.67  		BasicDataSource existedDataSource = (BasicDataSource) context.lookup(getDataSourceName());
    3.68  		if (existedDataSource == null)
    3.69  			context.bind(getDataSourceName(), dataSource);
    3.70  	}
    3.71  
    3.72 -	public static void initDerby() throws NamingException {
    3.73 +	public static void initDerby() throws NamingException, ConfigurationException {
    3.74  		System.setProperty("derby.stream.error.field", "java.lang.System.err");
    3.75  
    3.76  		BasicDataSource dataSource = new BasicDataSource();