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 (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  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, &quot;Program&quot; 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 (&quot;Redistributor&quot;) 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