Author: cschneider
Date: Thu Jun 12 12:05:56 2014
New Revision: 1602134

URL: http://svn.apache.org/r1602134
Log:
ARIES-1208 Allow more flexible configuration of DataSourceFactory

Modified:
    
aries/trunk/jpa/jpa-container-advancedtestbundle/src/main/resources/META-INF/persistence.xml
    aries/trunk/jpa/jpa-container-itest/pom.xml
    
aries/trunk/jpa/jpa-container-itest/src/test/java/org/apache/aries/jpa/advanced/features/itest/OpenjpaWeavingAndAnnotationScanningTest.java
    
aries/trunk/jpa/jpa-container-itest/src/test/java/org/apache/aries/jpa/container/itest/JPAContainerDataSourceFactoryTest.java
    
aries/trunk/jpa/jpa-container-itest/src/test/java/org/apache/aries/jpa/itest/AbstractJPAItest.java
    
aries/trunk/jpa/jpa-container-testbundle/src/main/resources/META-INF/persistence.xml
    
aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/impl/PersistenceBundleManager.java
    
aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/unit/impl/DataSourceFactoryDataSource.java
    
aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/unit/impl/PersistenceUnitInfoImpl.java

Modified: 
aries/trunk/jpa/jpa-container-advancedtestbundle/src/main/resources/META-INF/persistence.xml
URL: 
http://svn.apache.org/viewvc/aries/trunk/jpa/jpa-container-advancedtestbundle/src/main/resources/META-INF/persistence.xml?rev=1602134&r1=1602133&r2=1602134&view=diff
==============================================================================
--- 
aries/trunk/jpa/jpa-container-advancedtestbundle/src/main/resources/META-INF/persistence.xml
 (original)
+++ 
aries/trunk/jpa/jpa-container-advancedtestbundle/src/main/resources/META-INF/persistence.xml
 Thu Jun 12 12:05:56 2014
@@ -27,7 +27,7 @@
     <properties>
       <property name="openjpa.jdbc.SynchronizeMappings" 
value="buildSchema(ForeignKeys=true)"/>
       <property name="javax.persistence.jdbc.driver" 
value="org.apache.derby.jdbc.EmbeddedDriver"/>
-      <property name="javax.persistence.jdbc.url" 
value="jdbc:derby:memory:TEST;create=true"/>
+      <property name="javax.persistence.jdbc.databaseName" 
value="memory:TEST;create=true"/>
       <property name="eclipselink.target-database" value="Derby"/>     
       <property name="eclipselink.ddl-generation" 
value="drop-and-create-tables"/>
       <property name="eclipselink.ddl-generation.output-mode" value="database" 
/>

Modified: aries/trunk/jpa/jpa-container-itest/pom.xml
URL: 
http://svn.apache.org/viewvc/aries/trunk/jpa/jpa-container-itest/pom.xml?rev=1602134&r1=1602133&r2=1602134&view=diff
==============================================================================
--- aries/trunk/jpa/jpa-container-itest/pom.xml (original)
+++ aries/trunk/jpa/jpa-container-itest/pom.xml Thu Jun 12 12:05:56 2014
@@ -252,6 +252,11 @@
             <scope>test</scope>
         </dependency>
         <dependency>
+               <groupId>org.ops4j.pax.jdbc</groupId>
+               <artifactId>pax-jdbc-derby</artifactId>
+                   <version>0.3.0</version>
+               </dependency>
+        <dependency>
             <groupId>org.apache.servicemix.bundles</groupId>
             <artifactId>org.apache.servicemix.bundles.cglib</artifactId>
             <version>2.1_3_4</version>

Modified: 
aries/trunk/jpa/jpa-container-itest/src/test/java/org/apache/aries/jpa/advanced/features/itest/OpenjpaWeavingAndAnnotationScanningTest.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/jpa/jpa-container-itest/src/test/java/org/apache/aries/jpa/advanced/features/itest/OpenjpaWeavingAndAnnotationScanningTest.java?rev=1602134&r1=1602133&r2=1602134&view=diff
==============================================================================
--- 
aries/trunk/jpa/jpa-container-itest/src/test/java/org/apache/aries/jpa/advanced/features/itest/OpenjpaWeavingAndAnnotationScanningTest.java
 (original)
+++ 
aries/trunk/jpa/jpa-container-itest/src/test/java/org/apache/aries/jpa/advanced/features/itest/OpenjpaWeavingAndAnnotationScanningTest.java
 Thu Jun 12 12:05:56 2014
@@ -22,22 +22,21 @@ import java.util.Arrays;
 
 import org.apache.aries.jpa.container.advanced.itest.bundle.entities.Car;
 import org.apache.openjpa.enhance.PersistenceCapable;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.ops4j.pax.exam.Configuration;
 import org.ops4j.pax.exam.Option;
 
 // TODO The Test persistence unit does not seem to be created. Reenable when 
this works 
-@Ignore
 public class OpenjpaWeavingAndAnnotationScanningTest extends 
JPAWeavingAndAnnotationScanningTest {
 
        @Configuration
        public Option[] openjpaConfig() {
                return options(
-                               baseOptions(), 
+                               baseOptions(),
+                               openJpa(),
+                               derbyDataSourceFactory(),
                                ariesJpa(),
                                transactionWrapper(),
-                               openJpa(),
 
                                testBundleAdvanced()
                                );
@@ -45,6 +44,7 @@ public class OpenjpaWeavingAndAnnotation
 
        @Test
        public void testClassIsWoven() throws Exception {
+               showBundles();
                getEMF(TEST_UNIT);
                assertTrue("Not PersistenceCapable", 
Arrays.asList(Car.class.getInterfaces())
                                .contains(PersistenceCapable.class));

Modified: 
aries/trunk/jpa/jpa-container-itest/src/test/java/org/apache/aries/jpa/container/itest/JPAContainerDataSourceFactoryTest.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/jpa/jpa-container-itest/src/test/java/org/apache/aries/jpa/container/itest/JPAContainerDataSourceFactoryTest.java?rev=1602134&r1=1602133&r2=1602134&view=diff
==============================================================================
--- 
aries/trunk/jpa/jpa-container-itest/src/test/java/org/apache/aries/jpa/container/itest/JPAContainerDataSourceFactoryTest.java
 (original)
+++ 
aries/trunk/jpa/jpa-container-itest/src/test/java/org/apache/aries/jpa/container/itest/JPAContainerDataSourceFactoryTest.java
 Thu Jun 12 12:05:56 2014
@@ -19,49 +19,36 @@ import static org.junit.Assert.assertEqu
 import static org.junit.Assert.assertNull;
 import static org.ops4j.pax.exam.CoreOptions.options;
 
-import java.sql.Driver;
-import java.sql.SQLException;
-import java.util.Hashtable;
-import java.util.Properties;
-
 import javax.persistence.EntityManager;
 import javax.persistence.EntityManagerFactory;
-import javax.sql.ConnectionPoolDataSource;
-import javax.sql.DataSource;
-import javax.sql.XADataSource;
 import javax.transaction.UserTransaction;
 
 import org.apache.aries.jpa.container.itest.entities.Car;
 import org.apache.aries.jpa.itest.AbstractJPAItest;
-import org.apache.derby.jdbc.EmbeddedDataSource;
-import org.apache.derby.jdbc.EmbeddedXADataSource;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import org.ops4j.pax.exam.Configuration;
 import org.ops4j.pax.exam.Option;
+import org.osgi.framework.BundleException;
 import org.osgi.framework.InvalidSyntaxException;
-import org.osgi.framework.ServiceRegistration;
-import org.osgi.service.jdbc.DataSourceFactory;
 
 public class JPAContainerDataSourceFactoryTest extends AbstractJPAItest {
        private static final String DSF_TEST_UNIT = "dsf-test-unit";
        private static final String DSF_XA_TEST_UNIT = "dsf-xa-test-unit";
+       private static final String DERBY_DS_FACTORY_SYMBOLIC_NAME = 
"org.ops4j.pax.jdbc.derby";
        
-       @SuppressWarnings("rawtypes")
-       private ServiceRegistration reg;
-
        @Before
-       public void waitStartup() throws InvalidSyntaxException {
+       public void waitStartup() throws InvalidSyntaxException, 
BundleException {
                getEMF(TEST_UNIT);
                assertNull(getEMFRefs(DSF_TEST_UNIT));
                assertNull(getEMFRefs(DSF_XA_TEST_UNIT));
-               reg = registerDataSourceFactory();
+               
context().getBundleByName(DERBY_DS_FACTORY_SYMBOLIC_NAME).start();
        }
        
        @After
-       public void shutDown() throws InvalidSyntaxException {
-               reg.unregister();
+       public void shutDown() throws InvalidSyntaxException, BundleException {
+               
context().getBundleByName(DERBY_DS_FACTORY_SYMBOLIC_NAME).stop();
                assertNull(getEMFRefs(DSF_TEST_UNIT));
                assertNull(getEMFRefs(DSF_XA_TEST_UNIT));
        }
@@ -110,44 +97,6 @@ public class JPAContainerDataSourceFacto
                em.close();
        }
 
-       private static class DerbyDataSourceFactory implements 
DataSourceFactory {
-
-               public DataSource createDataSource(Properties props)
-                               throws SQLException {
-                       EmbeddedDataSource ds = new EmbeddedDataSource();
-                       ds.setDatabaseName("memory:TEST");
-                       ds.setCreateDatabase("create");
-                       return ds;
-               }
-
-               public ConnectionPoolDataSource createConnectionPoolDataSource(
-                               Properties props) throws SQLException {
-                       // TODO Auto-generated method stub
-                       return null;
-               }
-
-               public XADataSource createXADataSource(Properties props)
-                               throws SQLException {
-                       EmbeddedXADataSource ds = new EmbeddedXADataSource();
-                       ds.setDatabaseName("memory:TEST");
-                       ds.setCreateDatabase("create");
-                       return ds;
-               }
-
-               public Driver createDriver(Properties props) throws 
SQLException {
-                       // TODO Auto-generated method stub
-                       return null;
-               }
-
-       }
-
-       @SuppressWarnings({ "rawtypes", "unchecked" })
-       private ServiceRegistration registerDataSourceFactory() {
-               Hashtable<String, Object> props = new Hashtable();
-               props.put(DataSourceFactory.OSGI_JDBC_DRIVER_CLASS,     
"org.apache.derby.jdbc.EmbeddedDriver");
-               return 
context().registerService(DataSourceFactory.class.getName(), new 
DerbyDataSourceFactory(), props);
-       }
-
        private Car createCar() {
                Car c = new Car();
                c.setNumberPlate("123456");
@@ -174,6 +123,7 @@ public class JPAContainerDataSourceFacto
                                ariesJpa(),
                                transactionWrapper(),
                                openJpa(),
+                               derbyDataSourceFactory().noStart(),
                                testBundle()
                                );
        }

Modified: 
aries/trunk/jpa/jpa-container-itest/src/test/java/org/apache/aries/jpa/itest/AbstractJPAItest.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/jpa/jpa-container-itest/src/test/java/org/apache/aries/jpa/itest/AbstractJPAItest.java?rev=1602134&r1=1602133&r2=1602134&view=diff
==============================================================================
--- 
aries/trunk/jpa/jpa-container-itest/src/test/java/org/apache/aries/jpa/itest/AbstractJPAItest.java
 (original)
+++ 
aries/trunk/jpa/jpa-container-itest/src/test/java/org/apache/aries/jpa/itest/AbstractJPAItest.java
 Thu Jun 12 12:05:56 2014
@@ -168,6 +168,10 @@ public abstract class AbstractJPAItest e
                return mavenBundle("org.apache.aries.transaction", 
"org.apache.aries.transaction.testds").versionAsInProject();
        }
        
+       protected MavenArtifactProvisionOption derbyDataSourceFactory() {
+               return mavenBundle("org.ops4j.pax.jdbc", 
"pax-jdbc-derby").versionAsInProject();
+       }
+       
        protected MavenArtifactProvisionOption testBundle() {
                return mavenBundle("org.apache.aries.jpa", 
"org.apache.aries.jpa.container.itest.bundle").versionAsInProject();
        }

Modified: 
aries/trunk/jpa/jpa-container-testbundle/src/main/resources/META-INF/persistence.xml
URL: 
http://svn.apache.org/viewvc/aries/trunk/jpa/jpa-container-testbundle/src/main/resources/META-INF/persistence.xml?rev=1602134&r1=1602133&r2=1602134&view=diff
==============================================================================
--- 
aries/trunk/jpa/jpa-container-testbundle/src/main/resources/META-INF/persistence.xml
 (original)
+++ 
aries/trunk/jpa/jpa-container-testbundle/src/main/resources/META-INF/persistence.xml
 Thu Jun 12 12:05:56 2014
@@ -69,7 +69,7 @@
      <!-- These properties are creating the database on the fly. We are using 
them to avoid the tests having
           to create a database  -->
       <property name="javax.persistence.jdbc.driver" 
value="org.apache.derby.jdbc.EmbeddedDriver"/>
-      <property name="javax.persistence.jdbc.url" 
value="jdbc:derby:memory:TEST;create=true"/>
+      <property name="javax.persistence.jdbc.databaseName" 
value="memory:TEST;create=true"/>
      <property name="openjpa.jdbc.SynchronizeMappings" 
value="buildSchema(ForeignKeys=true)"/>
      <property name="openjpa.jdbc.DBDictionary" value="derby"/>
     </properties>
@@ -83,7 +83,7 @@
      <!-- These properties are creating the database on the fly. We are using 
them to avoid the tests having
           to create a database  -->
       <property name="javax.persistence.jdbc.driver" 
value="org.apache.derby.jdbc.EmbeddedDriver"/>
-      <property name="javax.persistence.jdbc.url" 
value="jdbc:derby:memory:TEST;create=true"/>
+      <property name="javax.persistence.jdbc.databaseName" 
value="memory:TEST;create=true"/>
      <property name="openjpa.jdbc.SynchronizeMappings" 
value="buildSchema(ForeignKeys=true)"/>
      <property name="openjpa.jdbc.DBDictionary" value="derby"/>
     </properties>

Modified: 
aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/impl/PersistenceBundleManager.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/impl/PersistenceBundleManager.java?rev=1602134&r1=1602133&r2=1602134&view=diff
==============================================================================
--- 
aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/impl/PersistenceBundleManager.java
 (original)
+++ 
aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/impl/PersistenceBundleManager.java
 Thu Jun 12 12:05:56 2014
@@ -65,6 +65,8 @@ import org.slf4j.LoggerFactory;
 
 /**
  * This class locates, parses and manages persistence units defined in OSGi 
bundles.
+ * It also keeps track of PersistenceProvider services and delegates the EMF 
creation to the 
+ * matching PersistenceProvider
  */
 public class PersistenceBundleManager implements BundleTrackerCustomizer, 
ServiceTrackerCustomizer, BundleActivator
 {

Modified: 
aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/unit/impl/DataSourceFactoryDataSource.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/unit/impl/DataSourceFactoryDataSource.java?rev=1602134&r1=1602133&r2=1602134&view=diff
==============================================================================
--- 
aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/unit/impl/DataSourceFactoryDataSource.java
 (original)
+++ 
aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/unit/impl/DataSourceFactoryDataSource.java
 Thu Jun 12 12:05:56 2014
@@ -49,18 +49,10 @@ public class DataSourceFactoryDataSource
   private final AtomicReference<SingleServiceTracker<DataSourceFactory>> 
trackerRef =
     new AtomicReference<SingleServiceTracker<DataSourceFactory>>();
   
-  public DataSourceFactoryDataSource(Bundle bundle, String driverName, String 
dbURL, 
-      String dbUserName, String dbPassword, boolean jta) {
+  public DataSourceFactoryDataSource(Bundle bundle, String driverName, 
Properties props, boolean jta) {
     this.persistenceBundle = bundle;
     this.driverName = driverName;
-    props = new Properties();
-    if(dbURL != null)
-      props.setProperty(DataSourceFactory.JDBC_URL, dbURL);
-    if(dbUserName != null)
-      props.setProperty(DataSourceFactory.JDBC_USER, dbUserName);
-    if(dbPassword != null)
-      props.setProperty(DataSourceFactory.JDBC_PASSWORD, dbPassword);
-    
+    this.props = props;
     this.jta = jta;
   }
 

Modified: 
aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/unit/impl/PersistenceUnitInfoImpl.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/unit/impl/PersistenceUnitInfoImpl.java?rev=1602134&r1=1602133&r2=1602134&view=diff
==============================================================================
--- 
aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/unit/impl/PersistenceUnitInfoImpl.java
 (original)
+++ 
aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/unit/impl/PersistenceUnitInfoImpl.java
 Thu Jun 12 12:05:56 2014
@@ -68,6 +68,7 @@ public class PersistenceUnitInfoImpl imp
   
   /** Logger */
   private static final Logger _logger = 
LoggerFactory.getLogger("org.apache.aries.jpa.container");
+  private static final String JDBC_PREFIX = "javax.persistence.jdbc.";
   
   public PersistenceUnitInfoImpl (Bundle b, ParsedPersistenceUnit parsedData, 
       final ServiceReference providerRef, Boolean globalUsedatasourcefactory)
@@ -141,11 +142,8 @@ public class PersistenceUnitInfoImpl imp
             _logger.debug(NLS.MESSAGES.getMessage("using.datasource.factory", 
getPersistenceUnitName(),
                 bundle.getSymbolicName(), bundle.getVersion()));
           
-          jtaDSFDS.compareAndSet(null, new DataSourceFactoryDataSource(bundle, 
driverName,
-              props.getProperty("javax.persistence.jdbc.url"), 
-              props.getProperty("javax.persistence.jdbc.user"), 
-              props.getProperty("javax.persistence.jdbc.password"),
-              getTransactionType() == PersistenceUnitTransactionType.JTA));
+          boolean jta = getTransactionType() == 
PersistenceUnitTransactionType.JTA;
+          jtaDSFDS.compareAndSet(null, new DataSourceFactoryDataSource(bundle, 
driverName, getDsProps(props), jta)); 
           toReturn = jtaDSFDS.get();
         }
       }
@@ -153,6 +151,7 @@ public class PersistenceUnitInfoImpl imp
     return toReturn;
   }
 
+
   @SuppressWarnings("unchecked")
   public List<String> getManagedClassNames() {
     List<String> classes = (List<String>) 
unit.getPersistenceXmlMetadata().get(ParsedPersistenceUnit.MANAGED_CLASSES);
@@ -197,11 +196,7 @@ public class PersistenceUnitInfoImpl imp
             _logger.debug(NLS.MESSAGES.getMessage("using.datasource.factory", 
getPersistenceUnitName(),
                 bundle.getSymbolicName(), bundle.getVersion()));
           
-          nonJtaDSFDS.compareAndSet(null, new 
DataSourceFactoryDataSource(bundle, driverName,
-              props.getProperty("javax.persistence.jdbc.url"), 
-              props.getProperty("javax.persistence.jdbc.user"), 
-              props.getProperty("javax.persistence.jdbc.password"),
-              false));
+          nonJtaDSFDS.compareAndSet(null, new 
DataSourceFactoryDataSource(bundle, driverName, getDsProps(props), false));
           toReturn = nonJtaDSFDS.get();
         }
       }
@@ -291,4 +286,22 @@ public class PersistenceUnitInfoImpl imp
     }
   }
   
+  /**
+   * Return all properties that start with the prefix JDBC_PREFIX and cut off 
that prefix.
+   * 
+   * @param props
+   * @return
+   */
+  private Properties getDsProps(Properties props) {
+         Properties dsProps = new Properties();
+         for (Object keyO : props.keySet()) {
+                 String key = (String)keyO;
+                 if (key.startsWith(JDBC_PREFIX) && !key.equals(JDBC_PREFIX + 
"driver")) {
+                         dsProps.put(key.substring(JDBC_PREFIX.length()), 
props.get(key));
+                 }
+         }
+         return dsProps;
+  }
+
+  
 }
\ No newline at end of file


Reply via email to