Return-Path: Delivered-To: apmail-incubator-aries-commits-archive@minotaur.apache.org Received: (qmail 6680 invoked from network); 10 Dec 2010 13:10:12 -0000 Received: from unknown (HELO mail.apache.org) (140.211.11.3) by 140.211.11.9 with SMTP; 10 Dec 2010 13:10:12 -0000 Received: (qmail 76956 invoked by uid 500); 10 Dec 2010 13:10:12 -0000 Delivered-To: apmail-incubator-aries-commits-archive@incubator.apache.org Received: (qmail 76857 invoked by uid 500); 10 Dec 2010 13:10:11 -0000 Mailing-List: contact aries-commits-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: aries-dev@incubator.apache.org Delivered-To: mailing list aries-commits@incubator.apache.org Received: (qmail 76849 invoked by uid 99); 10 Dec 2010 13:10:11 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 10 Dec 2010 13:10:11 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 10 Dec 2010 13:10:06 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id A991023889D7; Fri, 10 Dec 2010 13:09:44 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1044342 - in /incubator/aries/trunk: jndi/jndi-url/src/main/java/org/apache/aries/jndi/url/ jpa/jpa-container-context/src/main/java/org/apache/aries/jpa/container/context/impl/ jpa/jpa-container-itest/src/test/java/org/apache/aries/jpa/con... Date: Fri, 10 Dec 2010 13:09:44 -0000 To: aries-commits@incubator.apache.org From: mnuttall@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20101210130944.A991023889D7@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: mnuttall Date: Fri Dec 10 13:09:43 2010 New Revision: 1044342 URL: http://svn.apache.org/viewvc?rev=1044342&view=rev Log: ARIES-512: JPA itests: use blueprint:comp/ to reference a datasource declared in blueprint from persistence.xml. Includes a fix to PersistenceContextManager by Tim Ward. Added: incubator/aries/trunk/jpa/jpa-container-testbundle/src/main/resources/OSGI-INF/ incubator/aries/trunk/jpa/jpa-container-testbundle/src/main/resources/OSGI-INF/blueprint/ incubator/aries/trunk/jpa/jpa-container-testbundle/src/main/resources/OSGI-INF/blueprint/config.xml Modified: incubator/aries/trunk/jndi/jndi-url/src/main/java/org/apache/aries/jndi/url/BlueprintURLContext.java incubator/aries/trunk/jndi/jndi-url/src/main/java/org/apache/aries/jndi/url/BlueprintURLContextFactory.java incubator/aries/trunk/jpa/jpa-container-context/src/main/java/org/apache/aries/jpa/container/context/impl/PersistenceContextManager.java incubator/aries/trunk/jpa/jpa-container-itest/src/test/java/org/apache/aries/jpa/container/itest/JPAContainerTest.java incubator/aries/trunk/jpa/jpa-container-itest/src/test/java/org/apache/aries/jpa/context/itest/JPAContextTest.java incubator/aries/trunk/jpa/jpa-container-testbundle/pom.xml incubator/aries/trunk/jpa/jpa-container-testbundle/src/main/resources/META-INF/persistence.xml incubator/aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/unit/impl/DelayedLookupDataSource.java incubator/aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/unit/impl/PersistenceUnitInfoImpl.java Modified: incubator/aries/trunk/jndi/jndi-url/src/main/java/org/apache/aries/jndi/url/BlueprintURLContext.java URL: http://svn.apache.org/viewvc/incubator/aries/trunk/jndi/jndi-url/src/main/java/org/apache/aries/jndi/url/BlueprintURLContext.java?rev=1044342&r1=1044341&r2=1044342&view=diff ============================================================================== --- incubator/aries/trunk/jndi/jndi-url/src/main/java/org/apache/aries/jndi/url/BlueprintURLContext.java (original) +++ incubator/aries/trunk/jndi/jndi-url/src/main/java/org/apache/aries/jndi/url/BlueprintURLContext.java Fri Dec 10 13:09:43 2010 @@ -131,7 +131,7 @@ public class BlueprintURLContext impleme } } - public BlueprintURLContext (Bundle callersBundle, BlueprintName parentName, Map env, + private BlueprintURLContext (Bundle callersBundle, BlueprintName parentName, Map env, BlueprintContainer bpc) { _callersBundle = callersBundle; _parentName = parentName; Modified: incubator/aries/trunk/jndi/jndi-url/src/main/java/org/apache/aries/jndi/url/BlueprintURLContextFactory.java URL: http://svn.apache.org/viewvc/incubator/aries/trunk/jndi/jndi-url/src/main/java/org/apache/aries/jndi/url/BlueprintURLContextFactory.java?rev=1044342&r1=1044341&r2=1044342&view=diff ============================================================================== --- incubator/aries/trunk/jndi/jndi-url/src/main/java/org/apache/aries/jndi/url/BlueprintURLContextFactory.java (original) +++ incubator/aries/trunk/jndi/jndi-url/src/main/java/org/apache/aries/jndi/url/BlueprintURLContextFactory.java Fri Dec 10 13:09:43 2010 @@ -26,6 +26,8 @@ import javax.naming.Name; import javax.naming.spi.ObjectFactory; import org.osgi.framework.Bundle; +import org.osgi.framework.BundleContext; +import org.osgi.service.jndi.JNDIConstants; public class BlueprintURLContextFactory implements ObjectFactory { @@ -37,13 +39,17 @@ public class BlueprintURLContextFactory @Override public Object getObjectInstance(Object obj, Name name, Context callersCtx, Hashtable envmt) throws Exception { + BundleContext bc = (BundleContext) envmt.get(JNDIConstants.BUNDLE_CONTEXT); + Bundle b = (bc != null)? bc.getBundle() : null; Object result = null; if (obj == null) { - result = new BlueprintURLContext(_callersBundle, envmt); + result = new BlueprintURLContext((b == null) ? _callersBundle : b, + envmt); } else if (obj instanceof String) { Context ctx = null; try { - ctx = new BlueprintURLContext(_callersBundle, envmt); + ctx = new BlueprintURLContext((b == null) ? _callersBundle : b, + envmt); result = ctx.lookup((String) obj); } finally { if (ctx != null) { Modified: incubator/aries/trunk/jpa/jpa-container-context/src/main/java/org/apache/aries/jpa/container/context/impl/PersistenceContextManager.java URL: http://svn.apache.org/viewvc/incubator/aries/trunk/jpa/jpa-container-context/src/main/java/org/apache/aries/jpa/container/context/impl/PersistenceContextManager.java?rev=1044342&r1=1044341&r2=1044342&view=diff ============================================================================== --- incubator/aries/trunk/jpa/jpa-container-context/src/main/java/org/apache/aries/jpa/container/context/impl/PersistenceContextManager.java (original) +++ incubator/aries/trunk/jpa/jpa-container-context/src/main/java/org/apache/aries/jpa/container/context/impl/PersistenceContextManager.java Fri Dec 10 13:09:43 2010 @@ -26,8 +26,8 @@ import java.util.Hashtable; import java.util.Iterator; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.Map.Entry; +import java.util.Set; import javax.persistence.EntityManagerFactory; import javax.persistence.PersistenceContextType; @@ -434,12 +434,21 @@ public class PersistenceContextManager e //Find the ManagedFactories for the persistence unit List factoriesToQuiesce = new ArrayList(); synchronized (this) { - for(String name : units) { - ServiceRegistration reg = entityManagerRegistrations.get(name); + Iterator it = units.iterator(); + while(it.hasNext()) { + ServiceRegistration reg = entityManagerRegistrations.get(it.next()); + //If there's no managed factory then we don't need to quiesce this unit + boolean needsQuiesce = false; if(reg != null) { ManagedPersistenceContextFactory fact = (ManagedPersistenceContextFactory) bundleToQuiesce.getBundleContext().getService(reg.getReference()); - if(fact != null) + if(fact != null) { factoriesToQuiesce.add(fact); + needsQuiesce = true; + } + } + //If the unit doesn't need quiescing then remove it from our check + if(!!!needsQuiesce) { + it.remove(); } } } Modified: incubator/aries/trunk/jpa/jpa-container-itest/src/test/java/org/apache/aries/jpa/container/itest/JPAContainerTest.java URL: http://svn.apache.org/viewvc/incubator/aries/trunk/jpa/jpa-container-itest/src/test/java/org/apache/aries/jpa/container/itest/JPAContainerTest.java?rev=1044342&r1=1044341&r2=1044342&view=diff ============================================================================== --- incubator/aries/trunk/jpa/jpa-container-itest/src/test/java/org/apache/aries/jpa/container/itest/JPAContainerTest.java (original) +++ incubator/aries/trunk/jpa/jpa-container-itest/src/test/java/org/apache/aries/jpa/container/itest/JPAContainerTest.java Fri Dec 10 13:09:43 2010 @@ -21,14 +21,9 @@ import static org.ops4j.pax.exam.CoreOpt import static org.ops4j.pax.exam.CoreOptions.wrappedBundle; import static org.ops4j.pax.exam.OptionUtils.combine; -import java.util.Hashtable; - import javax.persistence.EntityManagerFactory; -import javax.persistence.spi.PersistenceProvider; import org.apache.aries.jpa.container.PersistenceUnitConstants; -import org.junit.Before; -import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.ops4j.pax.exam.CoreOptions; @@ -44,7 +39,6 @@ import org.osgi.framework.Filter; import org.osgi.framework.FrameworkUtil; import org.osgi.framework.InvalidSyntaxException; import org.osgi.framework.Version; -import org.osgi.service.packageadmin.PackageAdmin; import org.osgi.util.tracker.ServiceTracker; @RunWith(JUnit4TestRunner.class) @@ -58,6 +52,23 @@ public class JPAContainerTest { public void findEntityManagerFactory() throws Exception { EntityManagerFactory emf = getOsgiService(EntityManagerFactory.class, "(&(osgi.unit.name=test-unit)(" + PersistenceUnitConstants.CONTAINER_MANAGED_PERSISTENCE_UNIT + "=true))", DEFAULT_TIMEOUT); } + + @Test + public void findEntityManagerFactory2() throws Exception { + EntityManagerFactory emf = getOsgiService(EntityManagerFactory.class, "(&(osgi.unit.name=bp-test-unit)(" + PersistenceUnitConstants.CONTAINER_MANAGED_PERSISTENCE_UNIT + "=true))", DEFAULT_TIMEOUT); + } + + @Test + public void findEntityManager() throws Exception { + EntityManagerFactory emf = getOsgiService(EntityManagerFactory.class, "(&(osgi.unit.name=test-unit)(" + PersistenceUnitConstants.CONTAINER_MANAGED_PERSISTENCE_UNIT + "=true))", DEFAULT_TIMEOUT); + emf.createEntityManager(); + } + + @Test + public void findEntityManager2() throws Exception { + EntityManagerFactory emf = getOsgiService(EntityManagerFactory.class, "(&(osgi.unit.name=bp-test-unit)(" + PersistenceUnitConstants.CONTAINER_MANAGED_PERSISTENCE_UNIT + "=true))", DEFAULT_TIMEOUT); + emf.createEntityManager(); + } @org.ops4j.pax.exam.junit.Configuration public static Option[] configuration() { @@ -77,18 +88,27 @@ public class JPAContainerTest { systemProperty("org.ops4j.pax.logging.DefaultServiceLog.level").value("DEBUG"), // Bundles - mavenBundle("org.osgi", "org.osgi.compendium"), + mavenBundle("commons-lang", "commons-lang"), + mavenBundle("commons-collections", "commons-collections"), + mavenBundle("commons-pool", "commons-pool"), mavenBundle("org.apache.aries", "org.apache.aries.util"), - mavenBundle("org.apache.geronimo.specs", "geronimo-jpa_2.0_spec"), + mavenBundle("org.apache.aries.blueprint", "org.apache.aries.blueprint"), + mavenBundle("org.apache.aries.jndi", "org.apache.aries.jndi.api"), + mavenBundle("org.apache.aries.jndi", "org.apache.aries.jndi.core"), + mavenBundle("org.apache.aries.jndi", "org.apache.aries.jndi.url"), mavenBundle("org.apache.aries.jpa", "org.apache.aries.jpa.api"), mavenBundle("org.apache.aries.jpa", "org.apache.aries.jpa.container"), + mavenBundle("org.apache.derby", "derby"), mavenBundle("org.apache.geronimo.specs", "geronimo-jta_1.1_spec"), - mavenBundle("commons-lang", "commons-lang"), - mavenBundle("commons-collections", "commons-collections"), - mavenBundle("commons-pool", "commons-pool"), - mavenBundle("org.apache.servicemix.bundles", "org.apache.servicemix.bundles.serp"), + mavenBundle("org.apache.geronimo.specs", "geronimo-jpa_2.0_spec"), mavenBundle("org.apache.openjpa", "openjpa"), + mavenBundle("org.apache.servicemix.bundles", "org.apache.servicemix.bundles.serp"), + mavenBundle("org.osgi", "org.osgi.compendium"), + //vmOption ("-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5006"), + //waitForFrameworkStartup(), + + // mavenBundle("org.eclipse.persistence", "org.eclipse.persistence.jpa"), // mavenBundle("org.eclipse.persistence", "org.eclipse.persistence.core"), // mavenBundle("org.eclipse.persistence", "org.eclipse.persistence.asm"), Modified: incubator/aries/trunk/jpa/jpa-container-itest/src/test/java/org/apache/aries/jpa/context/itest/JPAContextTest.java URL: http://svn.apache.org/viewvc/incubator/aries/trunk/jpa/jpa-container-itest/src/test/java/org/apache/aries/jpa/context/itest/JPAContextTest.java?rev=1044342&r1=1044341&r2=1044342&view=diff ============================================================================== --- incubator/aries/trunk/jpa/jpa-container-itest/src/test/java/org/apache/aries/jpa/context/itest/JPAContextTest.java (original) +++ incubator/aries/trunk/jpa/jpa-container-itest/src/test/java/org/apache/aries/jpa/context/itest/JPAContextTest.java Fri Dec 10 13:09:43 2010 @@ -25,7 +25,6 @@ import static org.ops4j.pax.exam.CoreOpt import static org.ops4j.pax.exam.OptionUtils.combine; import java.util.HashMap; -import java.util.Map; import javax.persistence.EntityManagerFactory; import javax.persistence.PersistenceContextType; @@ -105,10 +104,13 @@ public class JPAContextTest { // Bundles mavenBundle("org.osgi", "org.osgi.compendium"), mavenBundle("org.apache.aries", "org.apache.aries.util"), + // Adding blueprint to the runtime is a hack to placate the maven bundle plugin. + mavenBundle("org.apache.aries.blueprint", "org.apache.aries.blueprint"), mavenBundle("org.apache.geronimo.specs", "geronimo-jpa_2.0_spec"), mavenBundle("org.apache.aries.jpa", "org.apache.aries.jpa.api"), mavenBundle("org.apache.aries.jpa", "org.apache.aries.jpa.container"), mavenBundle("org.apache.aries.jpa", "org.apache.aries.jpa.container.context"), + mavenBundle("org.apache.derby", "derby"), mavenBundle("org.apache.geronimo.specs", "geronimo-jta_1.1_spec"), mavenBundle("commons-lang", "commons-lang"), mavenBundle("commons-collections", "commons-collections"), Modified: incubator/aries/trunk/jpa/jpa-container-testbundle/pom.xml URL: http://svn.apache.org/viewvc/incubator/aries/trunk/jpa/jpa-container-testbundle/pom.xml?rev=1044342&r1=1044341&r2=1044342&view=diff ============================================================================== --- incubator/aries/trunk/jpa/jpa-container-testbundle/pom.xml (original) +++ incubator/aries/trunk/jpa/jpa-container-testbundle/pom.xml Fri Dec 10 13:09:43 2010 @@ -55,6 +55,7 @@ org.apache.aries.jpa.container.itest.entities;version="${pom.version}", + org.apache.aries.jpa.container.itest <_versionpolicy>[$(version;==;$(@)),$(version;+;$(@))) <_removeheaders>Ignore-Package,Include-Resource,Private-Package,Bundle-DocURL META-INF/persistence.xml Modified: incubator/aries/trunk/jpa/jpa-container-testbundle/src/main/resources/META-INF/persistence.xml URL: http://svn.apache.org/viewvc/incubator/aries/trunk/jpa/jpa-container-testbundle/src/main/resources/META-INF/persistence.xml?rev=1044342&r1=1044341&r2=1044342&view=diff ============================================================================== --- incubator/aries/trunk/jpa/jpa-container-testbundle/src/main/resources/META-INF/persistence.xml (original) +++ incubator/aries/trunk/jpa/jpa-container-testbundle/src/main/resources/META-INF/persistence.xml Fri Dec 10 13:09:43 2010 @@ -32,4 +32,12 @@ + + + Test persistence unit for the JPA Container and Context iTests + blueprint:comp/jta + blueprint:comp/nonjta + org.apache.aries.jpa.container.itest.entities.Car + true + Added: incubator/aries/trunk/jpa/jpa-container-testbundle/src/main/resources/OSGI-INF/blueprint/config.xml URL: http://svn.apache.org/viewvc/incubator/aries/trunk/jpa/jpa-container-testbundle/src/main/resources/OSGI-INF/blueprint/config.xml?rev=1044342&view=auto ============================================================================== --- incubator/aries/trunk/jpa/jpa-container-testbundle/src/main/resources/OSGI-INF/blueprint/config.xml (added) +++ incubator/aries/trunk/jpa/jpa-container-testbundle/src/main/resources/OSGI-INF/blueprint/config.xml Fri Dec 10 13:09:43 2010 @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + Modified: incubator/aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/unit/impl/DelayedLookupDataSource.java URL: http://svn.apache.org/viewvc/incubator/aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/unit/impl/DelayedLookupDataSource.java?rev=1044342&r1=1044341&r2=1044342&view=diff ============================================================================== --- incubator/aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/unit/impl/DelayedLookupDataSource.java (original) +++ incubator/aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/unit/impl/DelayedLookupDataSource.java Fri Dec 10 13:09:43 2010 @@ -21,11 +21,14 @@ package org.apache.aries.jpa.container.u import java.io.PrintWriter; import java.sql.Connection; import java.sql.SQLException; +import java.util.Hashtable; import javax.naming.InitialContext; import javax.naming.NamingException; import javax.sql.DataSource; +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -39,7 +42,16 @@ public class DelayedLookupDataSource imp private DataSource getDs() { if(ds == null) { try { - InitialContext ctx = new InitialContext(); + + Hashtable props = new Hashtable(); + + BundleContext bCtx = persistenceBundle.getBundleContext(); + if(bCtx == null) + throw new IllegalStateException("The bundle " + + persistenceBundle.getSymbolicName() + "_" + persistenceBundle.getVersion() + + " is not started."); + props.put("osgi.service.jndi.bundleContext", bCtx); + InitialContext ctx = new InitialContext(props); ds = (DataSource) ctx.lookup(jndiName); } catch (NamingException e) { _logger.error("No JTA datasource could be located using the JNDI name " + jndiName, @@ -51,9 +63,11 @@ public class DelayedLookupDataSource imp } private final String jndiName; + private final Bundle persistenceBundle; - public DelayedLookupDataSource (String jndi) { + public DelayedLookupDataSource (String jndi, Bundle persistenceBundle) { jndiName = jndi; + this.persistenceBundle = persistenceBundle; } public Connection getConnection() throws SQLException { Modified: incubator/aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/unit/impl/PersistenceUnitInfoImpl.java URL: http://svn.apache.org/viewvc/incubator/aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/unit/impl/PersistenceUnitInfoImpl.java?rev=1044342&r1=1044341&r2=1044342&view=diff ============================================================================== --- incubator/aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/unit/impl/PersistenceUnitInfoImpl.java (original) +++ incubator/aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/unit/impl/PersistenceUnitInfoImpl.java Fri Dec 10 13:09:43 2010 @@ -94,7 +94,7 @@ public class PersistenceUnitInfoImpl imp String jndiString = (String) unit.getPersistenceXmlMetadata().get(ParsedPersistenceUnit.JTA_DATASOURCE); DataSource toReturn = null; if(jndiString != null) { - toReturn = new DelayedLookupDataSource(jndiString); + toReturn = new DelayedLookupDataSource(jndiString, bundle); } return toReturn; } @@ -126,7 +126,7 @@ public class PersistenceUnitInfoImpl imp String jndiString = (String) unit.getPersistenceXmlMetadata().get(ParsedPersistenceUnit.NON_JTA_DATASOURCE); DataSource toReturn = null; if(jndiString != null) { - toReturn = new DelayedLookupDataSource(jndiString); + toReturn = new DelayedLookupDataSource(jndiString, bundle); } return toReturn; }