Author: mahrwald Date: Mon Jul 4 20:05:35 2011 New Revision: 1142785 URL: http://svn.apache.org/viewvc?rev=1142785&view=rev Log: ARIES-691: Move Eclipse server code to adapter bundle
Added: aries/trunk/jpa/jpa-container-eclipselink-adapter/src/main/java/org/apache/aries/jpa/eclipselink/adapter/platform/ aries/trunk/jpa/jpa-container-eclipselink-adapter/src/main/java/org/apache/aries/jpa/eclipselink/adapter/platform/OSGiTSServer.java aries/trunk/jpa/jpa-container-eclipselink-adapter/src/main/java/org/apache/aries/jpa/eclipselink/adapter/platform/OSGiTSWrapper.java Removed: aries/trunk/jpa/jpa-container-testbundle-eclipselink/src/main/java/org/apache/aries/jpa/container/itest/OSGiTSServer.java aries/trunk/jpa/jpa-container-testbundle-eclipselink/src/main/java/org/apache/aries/jpa/container/itest/OSGiTSWrapper.java Modified: aries/trunk/jpa/jpa-container-eclipselink-adapter/pom.xml aries/trunk/jpa/jpa-container-eclipselink-adapter/src/main/java/org/apache/aries/jpa/eclipselink/adapter/Activator.java aries/trunk/jpa/jpa-container-testbundle-eclipselink/pom.xml aries/trunk/jpa/jpa-container-testbundle-eclipselink/src/main/resources/META-INF/persistence.xml Modified: aries/trunk/jpa/jpa-container-eclipselink-adapter/pom.xml URL: http://svn.apache.org/viewvc/aries/trunk/jpa/jpa-container-eclipselink-adapter/pom.xml?rev=1142785&r1=1142784&r2=1142785&view=diff ============================================================================== --- aries/trunk/jpa/jpa-container-eclipselink-adapter/pom.xml (original) +++ aries/trunk/jpa/jpa-container-eclipselink-adapter/pom.xml Mon Jul 4 20:05:35 2011 @@ -34,12 +34,9 @@ </scm> <properties> - <aries.osgi.private.pkg> - org.apache.aries.jpa.eclipselink.adapter - </aries.osgi.private.pkg> - <aries.osgi.activator> - org.apache.aries.jpa.eclipselink.adapter.Activator - </aries.osgi.activator> + <aries.osgi.private.pkg>org.apache.aries.jpa.eclipselink.adapter</aries.osgi.private.pkg> + <aries.osgi.export.pkg>org.apache.aries.jpa.eclipselink.adapter.platform</aries.osgi.export.pkg> + <aries.osgi.activator>org.apache.aries.jpa.eclipselink.adapter.Activator</aries.osgi.activator> </properties> <dependencies> @@ -69,6 +66,12 @@ <artifactId>org.eclipse.persistence.jpa</artifactId> <version>2.1.0</version> </dependency> + <dependency> + <groupId>org.apache.aries.transaction</groupId> + <artifactId>org.apache.aries.transaction.manager</artifactId> + <version>0.3.1-SNAPSHOT</version> + <scope>provided</scope> + </dependency> </dependencies> </project> Modified: aries/trunk/jpa/jpa-container-eclipselink-adapter/src/main/java/org/apache/aries/jpa/eclipselink/adapter/Activator.java URL: http://svn.apache.org/viewvc/aries/trunk/jpa/jpa-container-eclipselink-adapter/src/main/java/org/apache/aries/jpa/eclipselink/adapter/Activator.java?rev=1142785&r1=1142784&r2=1142785&view=diff ============================================================================== --- aries/trunk/jpa/jpa-container-eclipselink-adapter/src/main/java/org/apache/aries/jpa/eclipselink/adapter/Activator.java (original) +++ aries/trunk/jpa/jpa-container-eclipselink-adapter/src/main/java/org/apache/aries/jpa/eclipselink/adapter/Activator.java Mon Jul 4 20:05:35 2011 @@ -19,17 +19,29 @@ package org.apache.aries.jpa.eclipselink.adapter; import java.lang.reflect.Constructor; +import java.net.URL; import java.util.Arrays; import java.util.Collections; import java.util.HashSet; import java.util.Hashtable; import java.util.List; +import java.util.Map; +import java.util.Properties; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; +import javax.persistence.EntityManagerFactory; +import javax.persistence.SharedCacheMode; +import javax.persistence.ValidationMode; +import javax.persistence.spi.ClassTransformer; import javax.persistence.spi.PersistenceProvider; +import javax.persistence.spi.PersistenceUnitInfo; +import javax.persistence.spi.PersistenceUnitTransactionType; +import javax.persistence.spi.ProviderUtil; +import javax.sql.DataSource; +import org.apache.aries.jpa.eclipselink.adapter.platform.OSGiTSServer; import org.osgi.framework.Bundle; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; @@ -57,6 +69,93 @@ public class Activator implements Bundle private ServiceTracker tracker; private BundleContext context; + + private static class PersistenceUnitProxyWithTargetServer implements PersistenceUnitInfo { + private final PersistenceUnitInfo delegate; + + public PersistenceUnitProxyWithTargetServer(PersistenceUnitInfo info) { + delegate = info; + } + + public void addTransformer(ClassTransformer arg0) { + delegate.addTransformer(arg0); + } + + public boolean excludeUnlistedClasses() { + return delegate.excludeUnlistedClasses(); + } + + public ClassLoader getClassLoader() { + ClassLoader unionClassLoader = new ClassLoader(delegate.getClassLoader()) { + protected Class<?> findClass(String name) throws ClassNotFoundException { + return Activator.class.getClassLoader().loadClass(name); + } + }; + + return unionClassLoader; + } + + public List<URL> getJarFileUrls() { + return delegate.getJarFileUrls(); + } + + public DataSource getJtaDataSource() { + return delegate.getJtaDataSource(); + } + + public List<String> getManagedClassNames() { + return delegate.getManagedClassNames(); + } + + public List<String> getMappingFileNames() { + return delegate.getMappingFileNames(); + } + + public ClassLoader getNewTempClassLoader() { + return delegate.getNewTempClassLoader(); + } + + public DataSource getNonJtaDataSource() { + return delegate.getNonJtaDataSource(); + } + + public String getPersistenceProviderClassName() { + return delegate.getPersistenceProviderClassName(); + } + + public String getPersistenceUnitName() { + return delegate.getPersistenceUnitName(); + } + + public URL getPersistenceUnitRootUrl() { + return delegate.getPersistenceUnitRootUrl(); + } + + public String getPersistenceXMLSchemaVersion() { + return delegate.getPersistenceXMLSchemaVersion(); + } + + public Properties getProperties() { + Properties props = delegate.getProperties(); + if (!!!props.containsKey("eclipselink.target-server")) { + props.put("eclipselink.target-server", OSGiTSServer.class.getName()); + } + + return props; + } + + public SharedCacheMode getSharedCacheMode() { + return delegate.getSharedCacheMode(); + } + + public PersistenceUnitTransactionType getTransactionType() { + return delegate.getTransactionType(); + } + + public ValidationMode getValidationMode() { + return delegate.getValidationMode(); + } + } private static class EclipseLinkProviderService implements ServiceFactory { private final Bundle eclipseLinkJpaBundle; @@ -71,7 +170,22 @@ public class Activator implements Bundle try { Class<? extends PersistenceProvider> providerClass = eclipseLinkJpaBundle.loadClass(ECLIPSELINK_JPA_PROVIDER_CLASS_NAME); Constructor<? extends PersistenceProvider> con = providerClass.getConstructor(); - return con.newInstance(); + final PersistenceProvider provider = con.newInstance(); + + return new PersistenceProvider() { + public ProviderUtil getProviderUtil() { + return provider.getProviderUtil(); + } + + public EntityManagerFactory createEntityManagerFactory(String arg0, Map arg1) { + return provider.createEntityManagerFactory(arg0, arg1); + } + + public EntityManagerFactory createContainerEntityManagerFactory(PersistenceUnitInfo punit, Map props) { + return provider.createContainerEntityManagerFactory(new PersistenceUnitProxyWithTargetServer(punit), props); + } + }; + } catch (Exception e) { logger.error("Got exception trying to instantiate the EclipseLink provider", e); return null; @@ -180,6 +294,10 @@ public class Activator implements Bundle } } + result.add("org.apache.aries.jpa.eclipselink.adapter.platform;" + + Constants.BUNDLE_SYMBOLICNAME_ATTRIBUTE + "=" + context.getBundle().getSymbolicName() + ";" + + Constants.BUNDLE_VERSION_ATTRIBUTE + "=" + context.getBundle().getVersion()); + logger.debug("Found JPA packages {}", result); return result.toArray(new String[0]); Added: aries/trunk/jpa/jpa-container-eclipselink-adapter/src/main/java/org/apache/aries/jpa/eclipselink/adapter/platform/OSGiTSServer.java URL: http://svn.apache.org/viewvc/aries/trunk/jpa/jpa-container-eclipselink-adapter/src/main/java/org/apache/aries/jpa/eclipselink/adapter/platform/OSGiTSServer.java?rev=1142785&view=auto ============================================================================== --- aries/trunk/jpa/jpa-container-eclipselink-adapter/src/main/java/org/apache/aries/jpa/eclipselink/adapter/platform/OSGiTSServer.java (added) +++ aries/trunk/jpa/jpa-container-eclipselink-adapter/src/main/java/org/apache/aries/jpa/eclipselink/adapter/platform/OSGiTSServer.java Mon Jul 4 20:05:35 2011 @@ -0,0 +1,35 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIESOR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.aries.jpa.eclipselink.adapter.platform; + +import org.eclipse.persistence.platform.server.ServerPlatformBase; +import org.eclipse.persistence.sessions.DatabaseSession; + +public class OSGiTSServer extends ServerPlatformBase { + + public OSGiTSServer(DatabaseSession newDatabaseSession) { + super(newDatabaseSession); + } + + @Override + public Class getExternalTransactionControllerClass() { + return OSGiTSWrapper.class; + } + +} Added: aries/trunk/jpa/jpa-container-eclipselink-adapter/src/main/java/org/apache/aries/jpa/eclipselink/adapter/platform/OSGiTSWrapper.java URL: http://svn.apache.org/viewvc/aries/trunk/jpa/jpa-container-eclipselink-adapter/src/main/java/org/apache/aries/jpa/eclipselink/adapter/platform/OSGiTSWrapper.java?rev=1142785&view=auto ============================================================================== --- aries/trunk/jpa/jpa-container-eclipselink-adapter/src/main/java/org/apache/aries/jpa/eclipselink/adapter/platform/OSGiTSWrapper.java (added) +++ aries/trunk/jpa/jpa-container-eclipselink-adapter/src/main/java/org/apache/aries/jpa/eclipselink/adapter/platform/OSGiTSWrapper.java Mon Jul 4 20:05:35 2011 @@ -0,0 +1,46 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIESOR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.aries.jpa.eclipselink.adapter.platform; + +import javax.transaction.TransactionManager; + +import org.eclipse.persistence.transaction.JTATransactionController; +import org.osgi.framework.BundleContext; +import org.osgi.framework.FrameworkUtil; +import org.osgi.framework.ServiceReference; + +public class OSGiTSWrapper extends JTATransactionController { + + @Override + protected TransactionManager acquireTransactionManager() throws Exception { + BundleContext ctx = FrameworkUtil.getBundle(OSGiTSWrapper.class).getBundleContext(); + + if (ctx != null) { + ServiceReference ref = ctx.getServiceReference(TransactionManager.class.getName()); + + if (ref != null) { + TransactionManager manager = (TransactionManager) ctx.getService(ref); + return manager; + } + } + + return super.acquireTransactionManager(); + } + +} Modified: aries/trunk/jpa/jpa-container-testbundle-eclipselink/pom.xml URL: http://svn.apache.org/viewvc/aries/trunk/jpa/jpa-container-testbundle-eclipselink/pom.xml?rev=1142785&r1=1142784&r2=1142785&view=diff ============================================================================== --- aries/trunk/jpa/jpa-container-testbundle-eclipselink/pom.xml (original) +++ aries/trunk/jpa/jpa-container-testbundle-eclipselink/pom.xml Mon Jul 4 20:05:35 2011 @@ -44,7 +44,6 @@ org.apache.aries.jpa.container.itest* </aries.osgi.export.pkg> <aries.osgi.import> - org.eclipse.persistence.platform.server.was, javax.persistence;version="[1.0.0,3.0.0)", * </aries.osgi.import> Modified: aries/trunk/jpa/jpa-container-testbundle-eclipselink/src/main/resources/META-INF/persistence.xml URL: http://svn.apache.org/viewvc/aries/trunk/jpa/jpa-container-testbundle-eclipselink/src/main/resources/META-INF/persistence.xml?rev=1142785&r1=1142784&r2=1142785&view=diff ============================================================================== --- aries/trunk/jpa/jpa-container-testbundle-eclipselink/src/main/resources/META-INF/persistence.xml (original) +++ aries/trunk/jpa/jpa-container-testbundle-eclipselink/src/main/resources/META-INF/persistence.xml Mon Jul 4 20:05:35 2011 @@ -40,8 +40,6 @@ <class>org.apache.aries.jpa.container.itest.entities.Car</class> <exclude-unlisted-classes>true</exclude-unlisted-classes> <properties> - <!-- This makes sure we get transaction integration. --> - <property name="eclipselink.target-server" value="org.apache.aries.jpa.container.itest.OSGiTSServer" /> <!-- These properties are creating the database on the fly. We are using them to avoid the tests having to create a database --> <property name="eclipselink.target-database" value="Derby"/>