1010import java .util .UUID ;
1111
1212import 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 ;
1317import javax .inject .Inject ;
1418
1519import 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