Skip to content

Commit 60db8a7

Browse files
enpy303maibin
authored andcommitted
PR for BAEL-2838 (eugenp#6970)
* Singleton injection examples and tests added * code and tests implemented * test refactored
1 parent 0579815 commit 60db8a7

File tree

1 file changed

+23
-56
lines changed

1 file changed

+23
-56
lines changed

jee-7/src/test/java/com/baeldung/singleton/CarServiceIntegrationTest.java

Lines changed: 23 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@
1010
import java.util.UUID;
1111

1212
import javax.ejb.EJB;
13+
import javax.enterprise.context.spi.CreationalContext;
14+
import javax.enterprise.inject.spi.Bean;
15+
import javax.enterprise.inject.spi.BeanManager;
16+
import javax.enterprise.inject.spi.CDI;
1317
import javax.inject.Inject;
1418

1519
import org.jboss.arquillian.container.test.api.Deployment;
@@ -47,68 +51,31 @@ public static JavaArchive createDeployment() {
4751

4852
@EJB
4953
private CarServiceEjbSingleton carServiceEjbSingleton;
50-
51-
private static Map<String, UUID> idMap = new HashMap<>();
52-
53-
@Before
54-
public void setUp() {
55-
// populate idMap only on first run
56-
if (idMap.isEmpty()) {
57-
LOG.info("setUp::carServiceBean: {}", carServiceBean.getId());
58-
idMap.put("carServiceBeanId", carServiceBean.getId());
59-
60-
LOG.info("setUp::carServiceSingleton: {}", carServiceSingleton.getId());
61-
idMap.put("carServiceSingletonId", carServiceSingleton.getId());
62-
63-
LOG.info("setUp::carServiceEjbSingleton: {}", carServiceEjbSingleton.getId());
64-
idMap.put("carServiceEjbSingletonId", carServiceEjbSingleton.getId());
65-
}
66-
}
67-
54+
6855
@Test
69-
public void givenRun1_whenGetId_thenSingletonIdEqual() {
70-
int testRun = 1;
71-
72-
assertNotNull(carServiceBean);
73-
assertNotNull(carServiceSingleton);
74-
assertNotNull(carServiceEjbSingleton);
75-
76-
UUID carServiceBeanId = carServiceBean.getId();
77-
assertEquals(idMap.get("carServiceBeanId"), carServiceBeanId);
78-
LOG.info("Test run {}::carServiceBeanId: {}", testRun, carServiceBeanId);
79-
80-
UUID carServiceSingletonId = carServiceSingleton.getId();
81-
assertEquals(idMap.get("carServiceSingletonId"), carServiceSingletonId);
82-
LOG.info("Test run {}::carServiceSingletonId: {}", testRun, carServiceSingletonId);
83-
84-
UUID carServiceEjbSingletonId = carServiceEjbSingleton.getId();
85-
assertEquals(idMap.get("carServiceEjbSingletonId"), carServiceEjbSingletonId);
86-
LOG.info("Test run {}::carServiceEjbSingletonId: {}", testRun, carServiceEjbSingletonId);
56+
public void givenASingleton_whenGetBeanIsCalledTwice_thenTheSameInstanceIsReturned() {
57+
CarServiceSingleton one = getBean(CarServiceSingleton.class);
58+
CarServiceSingleton two = getBean(CarServiceSingleton.class);
59+
assertTrue(one == two);
8760
}
88-
61+
8962
@Test
90-
public void givenRun2_whenGetId_thenSingletonIdEqual() {
91-
int testRun = 2;
92-
93-
assertNotNull(carServiceBean);
94-
assertNotNull(carServiceSingleton);
95-
assertNotNull(carServiceEjbSingleton);
96-
97-
UUID carServiceBeanId = carServiceBean.getId();
98-
assertNotEquals(idMap.get("carServiceBeanId"), carServiceBeanId);
99-
LOG.info("Test run {}::carServiceBeanId: {}", testRun, carServiceBeanId);
100-
101-
UUID carServiceSingletonId = carServiceSingleton.getId();
102-
assertEquals(idMap.get("carServiceSingletonId"), carServiceSingletonId);
103-
LOG.info("Test run {}::carServiceSingletonId: {}", testRun, carServiceSingletonId);
63+
public void givenAPojo_whenGetBeanIsCalledTwice_thenDifferentInstancesAreReturned() {
64+
CarServiceBean one = getBean(CarServiceBean.class);
65+
CarServiceBean two = getBean(CarServiceBean.class);
66+
assertTrue(one != two);
67+
}
10468

105-
UUID carServiceEjbSingletonId = carServiceEjbSingleton.getId();
106-
assertEquals(idMap.get("carServiceEjbSingletonId"), carServiceEjbSingletonId);
107-
LOG.info("Test run {}::carServiceEjbSingletonId: {}", testRun, carServiceEjbSingletonId);
69+
@SuppressWarnings("unchecked")
70+
private <T> T getBean(Class<T> beanClass) {
71+
BeanManager bm = CDI.current().getBeanManager();
72+
Bean<T> bean = (Bean<T>) bm.getBeans(beanClass).iterator().next();
73+
CreationalContext<T> ctx = bm.createCreationalContext(bean);
74+
return (T) bm.getReference(bean, beanClass, ctx);
10875
}
10976

11077
@Test
111-
public void givenRun3_whenSingleton_thenNoLocking() {
78+
public void givenCDI_whenConcurrentAccess_thenLockingIsNotProvided() {
11279
for (int i = 0; i < 10; i++) {
11380
new Thread(new Runnable() {
11481
@Override
@@ -124,7 +91,7 @@ public void run() {
12491
}
12592

12693
@Test
127-
public void givenRun4_whenEjb_thenLocking() {
94+
public void givenEJB_whenConcurrentAccess_thenLockingIsProvided() {
12895
for (int i = 0; i < 10; i++) {
12996
new Thread(new Runnable() {
13097
@Override

0 commit comments

Comments
 (0)