You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by ma...@apache.org on 2011/07/04 22:05:36 UTC
svn commit: r1142785 - in /aries/trunk/jpa:
jpa-container-eclipselink-adapter/
jpa-container-eclipselink-adapter/src/main/java/org/apache/aries/jpa/eclipselink/adapter/
jpa-container-eclipselink-adapter/src/main/java/org/apache/aries/jpa/eclipselink/ad...
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"/>