Bug 405251 - [enterprise] Problems with deploying persistence applications - fix providing custom classes for integrating persistence and OpenEJB in the case when the application brings own persistence provider
diff --git a/org.eclipse.virgo.web.enterprise.openejb.jpa.integration/.classpath b/org.eclipse.virgo.web.enterprise.openejb.jpa.integration/.classpath
new file mode 100755
index 0000000..a31b100
--- /dev/null
+++ b/org.eclipse.virgo.web.enterprise.openejb.jpa.integration/.classpath
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src/main/java"/>
+ <classpathentry kind="src" output="target/test-classes" path="src/test/java"/>
+ <classpathentry kind="src" path="src/main/resources"/>
+ <classpathentry kind="src" output="target/test-classes" path="src/test/resources"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="var" path="IVY_CACHE/org.junit/com.springsource.org.junit/4.7.0/com.springsource.org.junit-4.7.0.jar" sourcepath="/IVY_CACHE/org.junit/com.springsource.org.junit/4.7.0/com.springsource.org.junit-sources-4.7.0.jar"/>
+ <classpathentry kind="var" path="IVY_CACHE/org.eclipse.virgo.mirrored/org.apache.openejb.core/4.0.0.beta-2_v201205260545-virgo-3/org.apache.openejb.core-4.0.0.beta-2_v201205260545-virgo-3.jar"/>
+ <classpathentry kind="var" path="IVY_CACHE/javax.transaction/com.springsource.javax.transaction/1.1.0/com.springsource.javax.transaction-1.1.0.jar"/>
+ <classpathentry kind="var" path="IVY_CACHE/org.eclipse.virgo.mirrored/org.eclipse.persistence.core/2.4.1.v20121003-ad44345/org.eclipse.persistence.core-2.4.1.v20121003-ad44345.jar"/>
+ <classpathentry kind="lib" path="C:/Users/i043832/Documents/LJS_Sprints_2013/LJS_sprint_3b/com.springsource.org.hibernate-4.1.0.Final.jar"/>
+ <classpathentry kind="var" path="IVY_CACHE/org.eclipse.virgo.mirrored/org.apache.openejb.loader/4.0.0.beta-2_v201205041336/org.apache.openejb.loader-4.0.0.beta-2_v201205041336.jar"/>
+ <classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/org.eclipse.virgo.web.enterprise.openejb.jpa.integration/.project b/org.eclipse.virgo.web.enterprise.openejb.jpa.integration/.project
new file mode 100755
index 0000000..2ff5479
--- /dev/null
+++ b/org.eclipse.virgo.web.enterprise.openejb.jpa.integration/.project
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.virgo.web.enterprise.openejb.jpa.integration</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.wst.common.project.facet.core.builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.wst.common.project.facet.core.nature</nature>
+ </natures>
+</projectDescription>
diff --git a/org.eclipse.virgo.web.enterprise.openejb.jpa.integration/build.xml b/org.eclipse.virgo.web.enterprise.openejb.jpa.integration/build.xml
new file mode 100755
index 0000000..16a00ac
--- /dev/null
+++ b/org.eclipse.virgo.web.enterprise.openejb.jpa.integration/build.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.virgo.web.enterprise.openejb.jpa.integration">
+
+ <property name="disable.bundlor" value="true" />
+ <property file="${basedir}/../build.properties"/>
+ <property file="${basedir}/../build.versions"/>
+ <import file="${basedir}/../virgo-build/standard/default.xml"/>
+
+</project>
diff --git a/org.eclipse.virgo.web.enterprise.openejb.jpa.integration/ivy.xml b/org.eclipse.virgo.web.enterprise.openejb.jpa.integration/ivy.xml
new file mode 100755
index 0000000..ba2336b
--- /dev/null
+++ b/org.eclipse.virgo.web.enterprise.openejb.jpa.integration/ivy.xml
@@ -0,0 +1,25 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<ivy-module xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd" version="2.0">
+
+ <info organisation='${project.organisation}' module='${ant.project.name}'/>
+
+ <configurations>
+ <include file='${virgo.build.dir}/common/default-ivy-configurations.xml'/>
+ </configurations>
+
+ <publications>
+ <artifact name='${ant.project.name}'/>
+ <artifact name='${ant.project.name}-sources' ext='jar' type='src'/>
+ </publications>
+
+ <dependencies>
+ <dependency org="org.eclipse.virgo.mirrored" name="javax.transaction" rev="${javax.transaction}" conf="compile->runtime"/>
+ <dependency org="org.eclipse.virgo.mirrored" name="org.eclipse.persistence.core" rev="${org.eclipse.persistence.core}" conf="compile->runtime"/>
+ <dependency org="org.eclipse.virgo.mirrored" name="org.apache.openejb.core" rev="4.0.0.beta-2_v201205260545-virgo-3" conf="compile->runtime"/>
+ <dependency org="org.eclipse.virgo.mirrored" name="org.apache.openejb.loader" rev="${org.apache.openejb.loader}" conf="compile->runtime"/>
+ <dependency org="org.hibernate" name="com.springsource.org.hibernate" rev="4.1.0.Final" conf="compile->runtime"/>
+
+ <dependency org="org.junit" name="com.springsource.org.junit" rev="${org.junit}" conf="test->runtime"/>
+ </dependencies>
+
+</ivy-module>
diff --git a/org.eclipse.virgo.web.enterprise.openejb.jpa.integration/src/main/java/org/eclipse/virgo/web/enterprise/openejb/eclipselink/JTATransactionController.java b/org.eclipse.virgo.web.enterprise.openejb.jpa.integration/src/main/java/org/eclipse/virgo/web/enterprise/openejb/eclipselink/JTATransactionController.java
new file mode 100755
index 0000000..a8bd66a
--- /dev/null
+++ b/org.eclipse.virgo.web.enterprise.openejb.jpa.integration/src/main/java/org/eclipse/virgo/web/enterprise/openejb/eclipselink/JTATransactionController.java
@@ -0,0 +1,18 @@
+package org.eclipse.virgo.web.enterprise.openejb.eclipselink;
+
+import java.lang.reflect.Method;
+
+import javax.transaction.TransactionManager;
+
+public class JTATransactionController extends
+ org.eclipse.persistence.transaction.JTATransactionController {
+
+ protected TransactionManager acquireTransactionManager() throws Exception {
+ Class<?> openEJB = Thread.currentThread().getContextClassLoader()
+ .loadClass("org.apache.openejb.OpenEJB");
+ Method method = openEJB.getMethod("getTransactionManager",
+ new Class[] {});
+
+ return (TransactionManager) method.invoke(openEJB, new Object[] {});
+ }
+}
diff --git a/org.eclipse.virgo.web.enterprise.openejb.jpa.integration/src/main/java/org/eclipse/virgo/web/enterprise/openejb/hibernate/OpenEJBJtaPlatform.java b/org.eclipse.virgo.web.enterprise.openejb.jpa.integration/src/main/java/org/eclipse/virgo/web/enterprise/openejb/hibernate/OpenEJBJtaPlatform.java
new file mode 100755
index 0000000..e91ca15
--- /dev/null
+++ b/org.eclipse.virgo.web.enterprise.openejb.jpa.integration/src/main/java/org/eclipse/virgo/web/enterprise/openejb/hibernate/OpenEJBJtaPlatform.java
@@ -0,0 +1,45 @@
+package org.eclipse.virgo.web.enterprise.openejb.hibernate;
+
+import java.lang.reflect.Method;
+
+import javax.transaction.TransactionManager;
+import javax.transaction.UserTransaction;
+
+import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.spi.ContainerSystem;
+import org.hibernate.service.jta.platform.internal.AbstractJtaPlatform;
+
+public class OpenEJBJtaPlatform extends AbstractJtaPlatform {
+
+ protected TransactionManager locateTransactionManager() {
+ try {
+ Class<?> openEJB = Thread.currentThread().getContextClassLoader()
+ .loadClass("org.apache.openejb.OpenEJB");
+ Method method = openEJB.getMethod("getTransactionManager",
+ new Class[] {});
+
+ return (TransactionManager) method.invoke(openEJB, new Object[] {});
+ } catch (Exception e) {
+
+ }
+
+ return null;
+ }
+
+ protected UserTransaction locateUserTransaction() {
+ try {
+ Class<?> systemInstanceClass = Thread.currentThread()
+ .getContextClassLoader()
+ .loadClass("org.apache.openejb.loader.SystemInstance");
+ Method method = systemInstanceClass
+ .getMethod("get", new Class[] {});
+ SystemInstance systemInstance = (SystemInstance) method.invoke(systemInstanceClass, new Object[]{});
+ return (UserTransaction) systemInstance
+ .getComponent(ContainerSystem.class).getJNDIContext()
+ .lookup("comp/UserTransaction");
+ } catch (Exception localNamingException) {
+
+ }
+ return null;
+ }
+}
diff --git a/org.eclipse.virgo.web.enterprise.openejb.jpa.integration/src/main/java/org/eclipse/virgo/web/enterprise/openejb/hibernate/TransactionManagerLookup.java b/org.eclipse.virgo.web.enterprise.openejb.jpa.integration/src/main/java/org/eclipse/virgo/web/enterprise/openejb/hibernate/TransactionManagerLookup.java
new file mode 100755
index 0000000..765298f
--- /dev/null
+++ b/org.eclipse.virgo.web.enterprise.openejb.jpa.integration/src/main/java/org/eclipse/virgo/web/enterprise/openejb/hibernate/TransactionManagerLookup.java
@@ -0,0 +1,38 @@
+package org.eclipse.virgo.web.enterprise.openejb.hibernate;
+
+import java.lang.reflect.Method;
+import java.util.Properties;
+
+import javax.transaction.Transaction;
+import javax.transaction.TransactionManager;
+
+import org.hibernate.HibernateException;
+
+public class TransactionManagerLookup implements
+ org.hibernate.transaction.TransactionManagerLookup {
+
+ public TransactionManager getTransactionManager(Properties paramProperties)
+ throws HibernateException {
+ try {
+ Class<?> openEJB = Thread.currentThread().getContextClassLoader()
+ .loadClass("org.apache.openejb.OpenEJB");
+ Method method = openEJB.getMethod("getTransactionManager",
+ new Class[] {});
+
+ return (TransactionManager) method.invoke(openEJB, new Object[] {});
+ } catch (Exception e) {
+
+ }
+
+ return null;
+ }
+
+ public String getUserTransactionName() {
+ return "java:comp/UserTransaction";
+ }
+
+ public Object getTransactionIdentifier(Transaction paramTransaction) {
+ return paramTransaction;
+ }
+
+}
diff --git a/org.eclipse.virgo.web.enterprise.openejb.jpa.integration/src/main/resources/.gitignore b/org.eclipse.virgo.web.enterprise.openejb.jpa.integration/src/main/resources/.gitignore
new file mode 100755
index 0000000..e69de29
--- /dev/null
+++ b/org.eclipse.virgo.web.enterprise.openejb.jpa.integration/src/main/resources/.gitignore
diff --git a/org.eclipse.virgo.web.enterprise.openejb.jpa.integration/src/main/resources/about.html b/org.eclipse.virgo.web.enterprise.openejb.jpa.integration/src/main/resources/about.html
new file mode 100755
index 0000000..c258ef5
--- /dev/null
+++ b/org.eclipse.virgo.web.enterprise.openejb.jpa.integration/src/main/resources/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 5, 2006</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party ("Redistributor") and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file