[ARIES-2050] EMSupplier selectes better TX-related coordination to store EM instance
diff --git a/itests/jpa-container-blueprint-testbundle-dao/osgi.bnd b/itests/jpa-container-blueprint-testbundle-dao/osgi.bnd
new file mode 100644
index 0000000..13eb520
--- /dev/null
+++ b/itests/jpa-container-blueprint-testbundle-dao/osgi.bnd
@@ -0,0 +1,18 @@
+# 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 WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+-contract: JavaJPA
\ No newline at end of file
diff --git a/itests/jpa-container-blueprint-testbundle-dao/pom.xml b/itests/jpa-container-blueprint-testbundle-dao/pom.xml
new file mode 100644
index 0000000..d4028d9
--- /dev/null
+++ b/itests/jpa-container-blueprint-testbundle-dao/pom.xml
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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 WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.aries.jpa.itest</groupId>
+ <artifactId>org.apache.aries.jpa.itest.parent</artifactId>
+ <version>2.7.3-SNAPSHOT</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+
+ <artifactId>org.apache.aries.jpa.container.itest.bundle.blueprint.dao</artifactId>
+ <packaging>bundle</packaging>
+ <name>Apache Aries JPA test bundle blueprint integration 2</name>
+ <description>Testing blueprint integration with EntityManager, EntityManagerFactory and EmSupplier injection.
+Also testing declarative transactions with REQUIRES_NEW behavior</description>
+
+ <properties>
+ <baseline.skip>true</baseline.skip>
+ </properties>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.compendium</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.core</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>javax.transaction</groupId>
+ <artifactId>javax.transaction-api</artifactId>
+ <version>1.2</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>javax.interceptor</groupId>
+ <artifactId>javax.interceptor-api</artifactId>
+ <version>1.2</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.geronimo.specs</groupId>
+ <artifactId>geronimo-jpa_2.0_spec</artifactId>
+ <version>1.1</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.aries.jpa.javax.persistence</groupId>
+ <artifactId>javax.persistence_2.0</artifactId>
+ <version>${project.version}</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.aries.jpa</groupId>
+ <artifactId>org.apache.aries.jpa.api</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.aries.jpa</groupId>
+ <artifactId>org.apache.aries.jpa.container.itest.bundle</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ </dependencies>
+
+</project>
diff --git a/itests/jpa-container-blueprint-testbundle-dao/src/main/java/org/apache/aries/jpa/container/itest/bundle/blueprint/CarDao.java b/itests/jpa-container-blueprint-testbundle-dao/src/main/java/org/apache/aries/jpa/container/itest/bundle/blueprint/CarDao.java
new file mode 100644
index 0000000..696a897
--- /dev/null
+++ b/itests/jpa-container-blueprint-testbundle-dao/src/main/java/org/apache/aries/jpa/container/itest/bundle/blueprint/CarDao.java
@@ -0,0 +1,31 @@
+/*
+ * 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.container.itest.bundle.blueprint;
+
+import java.util.List;
+
+import org.apache.aries.jpa.container.itest.entities.Car;
+
+public interface CarDao {
+
+ void createNew(Car car);
+
+ List<Car> getAllCars();
+
+}
diff --git a/itests/jpa-container-blueprint-testbundle-dao/src/main/java/org/apache/aries/jpa/container/itest/bundle/blueprint/NewTxTestService.java b/itests/jpa-container-blueprint-testbundle-dao/src/main/java/org/apache/aries/jpa/container/itest/bundle/blueprint/NewTxTestService.java
new file mode 100644
index 0000000..8711257
--- /dev/null
+++ b/itests/jpa-container-blueprint-testbundle-dao/src/main/java/org/apache/aries/jpa/container/itest/bundle/blueprint/NewTxTestService.java
@@ -0,0 +1,27 @@
+/*
+ * 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.container.itest.bundle.blueprint;
+
+import javax.transaction.Transaction;
+
+public interface NewTxTestService {
+
+ void testNewTransaction(Transaction previousTransaction) throws Exception;
+
+}
diff --git a/itests/jpa-container-blueprint-testbundle-dao/src/main/java/org/apache/aries/jpa/container/itest/bundle/blueprint/TestService.java b/itests/jpa-container-blueprint-testbundle-dao/src/main/java/org/apache/aries/jpa/container/itest/bundle/blueprint/TestService.java
new file mode 100644
index 0000000..4ce7c34
--- /dev/null
+++ b/itests/jpa-container-blueprint-testbundle-dao/src/main/java/org/apache/aries/jpa/container/itest/bundle/blueprint/TestService.java
@@ -0,0 +1,25 @@
+/*
+ * 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.container.itest.bundle.blueprint;
+
+public interface TestService {
+
+ void performTest() throws Exception;
+
+}
diff --git a/itests/jpa-container-blueprint-testbundle-dao/src/main/java/org/apache/aries/jpa/container/itest/bundle/blueprint/dao/CarDaoImpl.java b/itests/jpa-container-blueprint-testbundle-dao/src/main/java/org/apache/aries/jpa/container/itest/bundle/blueprint/dao/CarDaoImpl.java
new file mode 100644
index 0000000..24665c2
--- /dev/null
+++ b/itests/jpa-container-blueprint-testbundle-dao/src/main/java/org/apache/aries/jpa/container/itest/bundle/blueprint/dao/CarDaoImpl.java
@@ -0,0 +1,45 @@
+/*
+ * 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.container.itest.bundle.blueprint.dao;
+
+import java.util.List;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
+
+import org.apache.aries.jpa.container.itest.bundle.blueprint.CarDao;
+import org.apache.aries.jpa.container.itest.entities.Car;
+
+public class CarDaoImpl implements CarDao {
+
+ @PersistenceContext(unitName = "xa-test-unit")
+ protected EntityManager em;
+
+ @Override
+ public void createNew(Car car) {
+ em.persist(car);
+ }
+
+ @Override
+ public List<Car> getAllCars() {
+ TypedQuery<Car> query = em.createQuery("select c from Car c", Car.class);
+ return query.getResultList();
+ }
+
+}
diff --git a/itests/jpa-container-blueprint-testbundle-dao/src/main/java/org/apache/aries/jpa/container/itest/bundle/blueprint/impl/NewTxTestServiceImpl.java b/itests/jpa-container-blueprint-testbundle-dao/src/main/java/org/apache/aries/jpa/container/itest/bundle/blueprint/impl/NewTxTestServiceImpl.java
new file mode 100644
index 0000000..fd8e6f1
--- /dev/null
+++ b/itests/jpa-container-blueprint-testbundle-dao/src/main/java/org/apache/aries/jpa/container/itest/bundle/blueprint/impl/NewTxTestServiceImpl.java
@@ -0,0 +1,58 @@
+/*
+ * 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.container.itest.bundle.blueprint.impl;
+
+import java.util.List;
+import javax.transaction.Transaction;
+import javax.transaction.TransactionManager;
+import javax.transaction.Transactional;
+import javax.transaction.Transactional.TxType;
+
+import org.apache.aries.jpa.container.itest.bundle.blueprint.CarDao;
+import org.apache.aries.jpa.container.itest.bundle.blueprint.NewTxTestService;
+import org.apache.aries.jpa.container.itest.entities.Car;
+
+public class NewTxTestServiceImpl implements NewTxTestService {
+
+ private CarDao carDao;
+
+ private TransactionManager transactionManager;
+
+ public void setCarDao(CarDao carDao) {
+ this.carDao = carDao;
+ }
+
+ public void setTransactionManager(TransactionManager transactionManager) {
+ this.transactionManager = transactionManager;
+ }
+
+ @Override
+ @Transactional(TxType.REQUIRES_NEW)
+ public void testNewTransaction(Transaction previousTransaction) throws Exception {
+ if (previousTransaction == transactionManager.getTransaction()) {
+ throw new RuntimeException("No new transaction created for TxType.REQUIRES_NEW");
+ }
+
+ List<Car> cars = carDao.getAllCars();
+ if (cars.size() != 0) {
+ throw new RuntimeException("EntityManager query executed in suspended transaction!");
+ }
+ }
+
+}
diff --git a/itests/jpa-container-blueprint-testbundle-dao/src/main/java/org/apache/aries/jpa/container/itest/bundle/blueprint/impl/TestServiceImpl.java b/itests/jpa-container-blueprint-testbundle-dao/src/main/java/org/apache/aries/jpa/container/itest/bundle/blueprint/impl/TestServiceImpl.java
new file mode 100644
index 0000000..09fea86
--- /dev/null
+++ b/itests/jpa-container-blueprint-testbundle-dao/src/main/java/org/apache/aries/jpa/container/itest/bundle/blueprint/impl/TestServiceImpl.java
@@ -0,0 +1,72 @@
+/*
+ * 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.container.itest.bundle.blueprint.impl;
+
+import java.util.List;
+import javax.transaction.TransactionManager;
+import javax.transaction.Transactional;
+import javax.transaction.Transactional.TxType;
+
+import org.apache.aries.jpa.container.itest.bundle.blueprint.CarDao;
+import org.apache.aries.jpa.container.itest.bundle.blueprint.NewTxTestService;
+import org.apache.aries.jpa.container.itest.bundle.blueprint.TestService;
+import org.apache.aries.jpa.container.itest.entities.Car;
+
+public class TestServiceImpl implements TestService {
+
+ private CarDao carDao;
+ private NewTxTestService newTxTestService;
+
+ private TransactionManager transactionManager;
+
+ public void setCarDao(CarDao carDao) {
+ this.carDao = carDao;
+ }
+
+ public void setNewTxTestService(NewTxTestService newTxTestService) {
+ this.newTxTestService = newTxTestService;
+ }
+
+ public void setTransactionManager(TransactionManager transactionManager) {
+ this.transactionManager = transactionManager;
+ }
+
+ @Override
+ @Transactional(TxType.REQUIRED)
+ public void performTest() throws Exception {
+ try {
+ List<Car> cars = carDao.getAllCars();
+ if (cars.size() != 0) {
+ throw new RuntimeException("Database must be cleaned before executing the test!");
+ }
+
+ Car car = new Car();
+ car.setNumberOfSeats(4);
+ car.setEngineSize(42);
+ car.setNumberPlate("WWW-xxxx");
+ car.setColour("blue");
+ carDao.createNew(car);
+
+ newTxTestService.testNewTransaction(transactionManager.getTransaction());
+ } finally {
+ transactionManager.setRollbackOnly();
+ }
+ }
+
+}
diff --git a/itests/jpa-container-blueprint-testbundle-dao/src/main/resources/OSGI-INF/blueprint/config.xml b/itests/jpa-container-blueprint-testbundle-dao/src/main/resources/OSGI-INF/blueprint/config.xml
new file mode 100644
index 0000000..f0e31cc
--- /dev/null
+++ b/itests/jpa-container-blueprint-testbundle-dao/src/main/resources/OSGI-INF/blueprint/config.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+ 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 WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
+ xmlns:jpa="http://aries.apache.org/xmlns/jpa/v2.0.0"
+ xmlns:tx="http://aries.apache.org/xmlns/transactions/v2.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 https://osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd">
+
+ <jpa:enable />
+ <tx:enable />
+
+ <reference id="transactionManager" interface="javax.transaction.TransactionManager" />
+
+ <bean id="carDao" class="org.apache.aries.jpa.container.itest.bundle.blueprint.dao.CarDaoImpl" />
+
+ <bean id="testService" class="org.apache.aries.jpa.container.itest.bundle.blueprint.impl.TestServiceImpl">
+ <property name="carDao" ref="carDao" />
+ <property name="transactionManager" ref="transactionManager" />
+ <property name="newTxTestService" ref="newTxTestService" />
+ </bean>
+
+ <bean id="newTxTestService" class="org.apache.aries.jpa.container.itest.bundle.blueprint.impl.NewTxTestServiceImpl">
+ <property name="carDao" ref="carDao" />
+ <property name="transactionManager" ref="transactionManager" />
+ </bean>
+
+ <service ref="testService" interface="org.apache.aries.jpa.container.itest.bundle.blueprint.TestService" />
+
+ <service ref="newTxTestService" interface="org.apache.aries.jpa.container.itest.bundle.blueprint.NewTxTestService" />
+
+</blueprint>
diff --git a/itests/jpa-container-itest/pom.xml b/itests/jpa-container-itest/pom.xml
index 095956d..3601be3 100644
--- a/itests/jpa-container-itest/pom.xml
+++ b/itests/jpa-container-itest/pom.xml
@@ -283,6 +283,12 @@
<scope>test</scope>
</dependency>
<dependency>
+ <groupId>org.apache.aries.jpa.itest</groupId>
+ <artifactId>org.apache.aries.jpa.container.itest.bundle.blueprint.dao</artifactId>
+ <version>${project.version}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
<groupId>org.apache.aries.jpa</groupId>
<artifactId>org.apache.aries.jpa.container.itest.bundle.eclipselink</artifactId>
<version>${project.version}</version>
diff --git a/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/blueprint/aries/itest/BlueprintDaoTest.java b/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/blueprint/aries/itest/BlueprintDaoTest.java
new file mode 100644
index 0000000..d2d5769
--- /dev/null
+++ b/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/blueprint/aries/itest/BlueprintDaoTest.java
@@ -0,0 +1,48 @@
+/* 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 WARRANTIES OR 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.blueprint.aries.itest;
+
+import org.apache.aries.jpa.container.itest.bundle.blueprint.TestService;
+import org.apache.aries.jpa.itest.AbstractJPAItest;
+import org.junit.Test;
+import org.ops4j.pax.exam.Configuration;
+import org.ops4j.pax.exam.Option;
+
+import static org.ops4j.pax.exam.CoreOptions.mavenBundle;
+
+public class BlueprintDaoTest extends AbstractJPAItest {
+
+ @Test
+ public void testNestedTransactionsWithIsolatedEntityManagers() throws Exception {
+ TestService testService = getService(TestService.class, null);
+ testService.performTest();
+ }
+
+ @Configuration
+ public Option[] configuration() {
+ return new Option[] {
+ baseOptions(), //
+ jta12Bundles(), //
+ ariesJpa20(), //
+ hibernate(), //
+ derbyDSF(), //
+ testBundle(), //
+ testBundleBlueprintDao(),
+ mavenBundle("org.apache.aries.transaction", "org.apache.aries.transaction.blueprint", "2.3.0-SNAPSHOT"),
+// debug()
+ };
+ }
+}
diff --git a/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/itest/AbstractJPAItest.java b/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/itest/AbstractJPAItest.java
index c0a2692..8d636a6 100644
--- a/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/itest/AbstractJPAItest.java
+++ b/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/itest/AbstractJPAItest.java
@@ -327,6 +327,10 @@
return mvnBundle("org.apache.aries.jpa.itest", "org.apache.aries.jpa.container.itest.bundle.blueprint");
}
+ protected Option testBundleBlueprintDao() {
+ return mvnBundle("org.apache.aries.jpa.itest", "org.apache.aries.jpa.container.itest.bundle.blueprint.dao");
+ }
+
protected MavenArtifactProvisionOption testBundleEclipseLink() {
return mvnBundle("org.apache.aries.jpa", "org.apache.aries.jpa.container.itest.bundle.eclipselink");
}
diff --git a/itests/pom.xml b/itests/pom.xml
index b1ea0f7..ca76042 100644
--- a/itests/pom.xml
+++ b/itests/pom.xml
@@ -50,6 +50,7 @@
<modules>
<module>jpa-container-blueprint-testbundle</module>
+ <module>jpa-container-blueprint-testbundle-dao</module>
<module>jpa-container-itest</module>
<module>jpa-container-itest-karaf</module>
<module>jpa-container-testbundle</module>
diff --git a/jpa-support/src/main/java/org/apache/aries/jpa/support/impl/EMSupplierImpl.java b/jpa-support/src/main/java/org/apache/aries/jpa/support/impl/EMSupplierImpl.java
index e338659..199de93 100644
--- a/jpa-support/src/main/java/org/apache/aries/jpa/support/impl/EMSupplierImpl.java
+++ b/jpa-support/src/main/java/org/apache/aries/jpa/support/impl/EMSupplierImpl.java
@@ -128,9 +128,19 @@
}
Coordination getTopCoordination() {
+ // In normal situation, There should be TxInterceptor and JpaInterceptor
Coordination coordination = coordinator.peek();
while (coordination != null && coordination.getEnclosingCoordination() != null) {
coordination = coordination.getEnclosingCoordination();
+ if (coordination != null) {
+ String transaction = (String) coordination.getVariables().get(Transaction.class);
+ if (transaction != null) {
+ // ARIES-2050: transaction-blueprint doesn't always create new coordination (for example
+ // when calling REQUIRED -> REQUIRED annotated methods. And we can assume the "new" behavior
+ // when the Transaction.class attribute is not null (it matches one of the 6 TX behaviors)
+ return coordination;
+ }
+ }
}
return coordination;
}