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();