Skip to content

Commit a97abd9

Browse files
committed
Misc. improvements to demo on CDI + JPA + JTA
1 parent 31ca0aa commit a97abd9

File tree

9 files changed

+119
-13
lines changed

9 files changed

+119
-13
lines changed

other/cdi-jpa-testing/pom.xml

+6-7
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,12 @@
4343
<version>2.0.SP1</version>
4444
<scope>provided</scope>
4545
</dependency>
46-
46+
<dependency>
47+
<groupId>org.jboss.spec.javax.transaction</groupId>
48+
<artifactId>jboss-transaction-api_1.2_spec</artifactId>
49+
<version>${version.jboss-transaction-api}</version>
50+
<scope>provided</scope>
51+
</dependency>
4752
<dependency>
4853
<groupId>junit</groupId>
4954
<artifactId>junit</artifactId>
@@ -85,12 +90,6 @@
8590
</exclusions>
8691
<scope>test</scope>
8792
</dependency>
88-
<dependency>
89-
<groupId>org.jboss.spec.javax.transaction</groupId>
90-
<artifactId>jboss-transaction-api_1.2_spec</artifactId>
91-
<version>${version.jboss-transaction-api}</version>
92-
<scope>test</scope>
93-
</dependency>
9493
<dependency>
9594
<groupId>log4j</groupId>
9695
<artifactId>log4j</artifactId>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
/*
2+
* License: Apache License, Version 2.0
3+
* See the LICENSE file in the root directory or <http://www.apache.org/licenses/LICENSE-2.0>.
4+
*/
5+
package org.hibernate.demos.jpacditesting;
6+
7+
import javax.enterprise.context.ApplicationScoped;
8+
9+
@ApplicationScoped
10+
public class GreetingService {
11+
12+
public String greet(String name) {
13+
return "Hello, " + name;
14+
}
15+
}

other/cdi-jpa-testing/src/main/java/org/hibernate/demos/jpacditesting/TestService.java

+8
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,19 @@
88
import java.util.List;
99

1010
import javax.enterprise.context.ApplicationScoped;
11+
import javax.inject.Inject;
12+
import javax.persistence.EntityManager;
1113

1214
@ApplicationScoped
1315
public class TestService {
1416

1517
private final List<String> names = new ArrayList<>();
18+
private final EntityManager entityManager;
19+
20+
@Inject
21+
public TestService(EntityManager entityManager) {
22+
this.entityManager = entityManager;
23+
}
1624

1725
public List<String> getTestEntityNames() {
1826
return names;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
/*
2+
* License: Apache License, Version 2.0
3+
* See the LICENSE file in the root directory or <http://www.apache.org/licenses/LICENSE-2.0>.
4+
*/
5+
package org.hibernate.demos.jpacditesting;
6+
7+
import javax.enterprise.context.ApplicationScoped;
8+
import javax.transaction.Transactional;
9+
import javax.transaction.Transactional.TxType;
10+
11+
@ApplicationScoped
12+
public class TransactionalTestService {
13+
14+
@Transactional(value=TxType.MANDATORY)
15+
public String doSomething() {
16+
return "Success";
17+
}
18+
}

other/cdi-jpa-testing/src/test/java/org/hibernate/demos/jpacditesting/CdiJpaTest.java

+21-1
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,19 @@
55
package org.hibernate.demos.jpacditesting;
66

77
import static org.assertj.core.api.Assertions.assertThat;
8+
import static org.junit.Assert.fail;
89

910
import java.util.List;
1011
import java.util.UUID;
1112

1213
import javax.inject.Inject;
1314
import javax.persistence.EntityManager;
15+
import javax.transaction.TransactionalException;
1416
import javax.transaction.UserTransaction;
1517

1618
import org.junit.Test;
1719

18-
public class CdiJpaTest extends AbstractCdiTest {
20+
public class CdiJpaTest extends CdiJpaTestBase {
1921

2022
@Inject
2123
private EntityManager entityManager;
@@ -29,6 +31,9 @@ public class CdiJpaTest extends AbstractCdiTest {
2931
@Inject
3032
private TestService testService;
3133

34+
@Inject
35+
private TransactionalTestService transactionalTestService;
36+
3237
@Test
3338
public void canInjectEntityManager() {
3439
assertThat(entityManager).isNotNull();
@@ -103,4 +108,19 @@ public void canUseDiInEntityListener() {
103108

104109
assertThat(testService.getTestEntityNames()).contains("Test 1", "Test 2");
105110
}
111+
112+
@Test
113+
public void canUseDeclarativeTxControl() throws Exception {
114+
try {
115+
transactionalTestService.doSomething();
116+
fail("Exception raised due to missing yet required transaction wasn't raised");
117+
}
118+
catch(TransactionalException e) {
119+
assertThat(e.getMessage().contains("ARJUNA016110"));
120+
}
121+
122+
ut.begin();
123+
assertThat(transactionalTestService.doSomething()).isEqualTo("Success");
124+
ut.rollback();
125+
}
106126
}

other/cdi-jpa-testing/src/test/java/org/hibernate/demos/jpacditesting/AbstractCdiTest.java other/cdi-jpa-testing/src/test/java/org/hibernate/demos/jpacditesting/CdiJpaTestBase.java

+20-4
Original file line numberDiff line numberDiff line change
@@ -5,24 +5,40 @@
55
package org.hibernate.demos.jpacditesting;
66

77
import javax.enterprise.context.RequestScoped;
8-
import javax.enterprise.inject.se.SeContainerInitializer;
98

9+
import org.hibernate.demos.jpacditesting.support.EntityManagerFactoryProducer;
10+
import org.hibernate.demos.jpacditesting.support.EntityManagerProducer;
1011
import org.hibernate.demos.jpacditesting.support.TransactionalConnectionProvider;
11-
import org.jboss.weld.environment.se.Weld;
1212
import org.jboss.weld.junit4.WeldInitiator;
1313
import org.jnp.server.NamingBeanImpl;
1414
import org.junit.AfterClass;
1515
import org.junit.BeforeClass;
1616
import org.junit.Rule;
1717

18+
import com.arjuna.ats.jta.cdi.TransactionExtension;
1819
import com.arjuna.ats.jta.utils.JNDIManager;
1920

20-
public abstract class AbstractCdiTest {
21+
public abstract class CdiJpaTestBase {
2122

2223
private static NamingBeanImpl NAMING_BEAN;
2324

25+
// @Rule
26+
// public WeldInitiator weld = WeldInitiator.from(new Weld())
27+
// .activate(RequestScoped.class)
28+
// .inject(this)
29+
// .build();
30+
31+
// new Weld() above enables scanning of the classpath; alternatively, only the required beans can be listed explicitly:
32+
2433
@Rule
25-
public WeldInitiator weld = WeldInitiator.from(((Weld) SeContainerInitializer.newInstance()))
34+
public WeldInitiator weld = WeldInitiator.from(
35+
ObserverTestBean.class,
36+
TransactionalTestService.class,
37+
TestService.class,
38+
EntityManagerProducer.class,
39+
EntityManagerFactoryProducer.class,
40+
TransactionExtension.class
41+
)
2642
.activate(RequestScoped.class)
2743
.inject(this)
2844
.build();
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
/*
2+
* License: Apache License, Version 2.0
3+
* See the LICENSE file in the root directory or <http://www.apache.org/licenses/LICENSE-2.0>.
4+
*/
5+
package org.hibernate.demos.jpacditesting;
6+
7+
import static org.assertj.core.api.Assertions.assertThat;
8+
9+
import javax.enterprise.context.RequestScoped;
10+
import javax.inject.Inject;
11+
12+
import org.jboss.weld.junit4.WeldInitiator;
13+
import org.junit.Rule;
14+
import org.junit.Test;
15+
16+
public class SimpleCdiTest {
17+
18+
@Rule
19+
public WeldInitiator weld = WeldInitiator.from(GreetingService.class)
20+
.activate(RequestScoped.class)
21+
.inject(this)
22+
.build();
23+
24+
@Inject
25+
private GreetingService greeter;
26+
27+
@Test
28+
public void helloWorld() {
29+
assertThat(greeter.greet("Java")).isEqualTo("Hello, Java");
30+
}
31+
}

other/cdi-jpa-testing/src/test/java/org/hibernate/demos/jpacditesting/support/TestingTransactionServices.java

-1
Original file line numberDiff line numberDiff line change
@@ -40,5 +40,4 @@ public boolean isTransactionActive() {
4040
public UserTransaction getUserTransaction() {
4141
return com.arjuna.ats.jta.UserTransaction.userTransaction();
4242
}
43-
4443
}

0 commit comments

Comments
 (0)