39
39
import javax .enterprise .context .spi .CreationalContext ;
40
40
import javax .enterprise .inject .spi .Bean ;
41
41
import javax .enterprise .inject .spi .BeanManager ;
42
+ import javax .transaction .UserTransaction ;
42
43
43
44
/**
44
45
* Populates a cache with initial data. We need to obtain BeanManager from JNDI and create an instance of CacheContainerProvider
@@ -52,6 +53,8 @@ public class PopulateCache implements SystemEventListener {
52
53
private Logger log = Logger .getLogger (this .getClass ().getName ());
53
54
54
55
private CacheContainerProvider provider ;
56
+
57
+ private UserTransaction utx ;
55
58
56
59
@ Override
57
60
public void processEvent (SystemEvent event ) throws AbortProcessingException {
@@ -60,27 +63,51 @@ public void processEvent(SystemEvent event) throws AbortProcessingException {
60
63
}
61
64
62
65
public void startup () {
63
- BasicCache <String , Object > cars = provider .getCacheContainer ().getCache (CarManager .CACHE_NAME );
66
+ BasicCache <String , Object > cars = provider .getCacheContainer ().getCache (CarManager .CAR_CACHE_NAME );
67
+ BasicCache <String , Object > carList = provider .getCacheContainer ().getCache (CarManager .CAR_LIST_CACHE_NAME );
64
68
List <String > carNumbers = new ArrayList <String >();
65
-
66
- Car c = new Car ("Ford Focus" , 1.6 , CarType .COMBI , "white" , "FML 23-25" , Country .CZECH_REPUBLIC );
67
- carNumbers .add (c .getNumberPlate ());
68
- cars .put (CarManager .encode (c .getNumberPlate ()), c );
69
- c = new Car ("BMW X3" , 2.0 , CarType .SEDAN , "gray" , "1P3 2632" , Country .CZECH_REPUBLIC );
70
- carNumbers .add (c .getNumberPlate ());
71
- cars .put (CarManager .encode (c .getNumberPlate ()), c );
72
- c = new Car ("Ford Mondeo" , 2.2 , CarType .COMBI , "blue" , "1B2 1111" , Country .USA );
73
- carNumbers .add (c .getNumberPlate ());
74
- cars .put (CarManager .encode (c .getNumberPlate ()), c );
75
- c = new Car ("Mazda MX-5" , 1.8 , CarType .CABRIO , "red" , "6T4 2526" , Country .USA );
76
- carNumbers .add (c .getNumberPlate ());
77
- cars .put (CarManager .encode (c .getNumberPlate ()), c );
78
- c = new Car ("VW Golf" , 1.6 , CarType .HATCHBACK , "yellow" , "2B2 4946" , Country .GERMANY );
79
- carNumbers .add (c .getNumberPlate ());
80
- cars .put (CarManager .encode (c .getNumberPlate ()), c );
81
- // insert a list of cars' number plates
82
- cars .put (CarManager .CAR_NUMBERS_KEY , carNumbers );
83
- log .info ("Successfully imported data!" );
69
+
70
+ utx = getUserTransactionFromJNDI ();
71
+
72
+ try {
73
+ utx .begin ();
74
+ Car c = new Car ("Ford Focus" , 1.6 , CarType .COMBI , "white" , "FML 23-25" , Country .CZECH_REPUBLIC );
75
+ carNumbers .add (c .getNumberPlate ());
76
+ cars .put (CarManager .encode (c .getNumberPlate ()), c );
77
+ c = new Car ("BMW X3" , 2.0 , CarType .SEDAN , "gray" , "1P3 2632" , Country .CZECH_REPUBLIC );
78
+ carNumbers .add (c .getNumberPlate ());
79
+ cars .put (CarManager .encode (c .getNumberPlate ()), c );
80
+ c = new Car ("Ford Mondeo" , 2.2 , CarType .COMBI , "blue" , "1B2 1111" , Country .USA );
81
+ carNumbers .add (c .getNumberPlate ());
82
+ cars .put (CarManager .encode (c .getNumberPlate ()), c );
83
+ c = new Car ("Mazda MX-5" , 1.8 , CarType .CABRIO , "red" , "6T4 2526" , Country .USA );
84
+ carNumbers .add (c .getNumberPlate ());
85
+ cars .put (CarManager .encode (c .getNumberPlate ()), c );
86
+ c = new Car ("VW Golf" , 1.6 , CarType .HATCHBACK , "yellow" , "2B2 4946" , Country .GERMANY );
87
+ carNumbers .add (c .getNumberPlate ());
88
+ cars .put (CarManager .encode (c .getNumberPlate ()), c );
89
+ c = new Car ("VW Passat" , 2.0 , CarType .COMBI , "black" , "7T7 7777" , Country .GERMANY );
90
+ carNumbers .add (c .getNumberPlate ());
91
+ cars .put (CarManager .encode (c .getNumberPlate ()), c );
92
+ c = new Car ("Renault Clio" , 1.8 , CarType .HATCHBACK , "blue" , "8E6 8456" , Country .CZECH_REPUBLIC );
93
+ carNumbers .add (c .getNumberPlate ());
94
+ cars .put (CarManager .encode (c .getNumberPlate ()), c );
95
+ c = new Car ("Renault Megane" , 2.0 , CarType .SEDAN , "red" , "6A6 6666" , Country .CZECH_REPUBLIC );
96
+ carNumbers .add (c .getNumberPlate ());
97
+ cars .put (CarManager .encode (c .getNumberPlate ()), c );
98
+ // insert a list of cars' number plates
99
+ carList .put (CarManager .CAR_NUMBERS_KEY , carNumbers );
100
+ utx .commit ();
101
+ log .info ("Successfully imported data!" );
102
+ } catch (Exception e ) {
103
+ log .warning ("An exception occured while populating the database! Rolling back the transaction." );
104
+ if (utx != null ) {
105
+ try {
106
+ utx .rollback ();
107
+ } catch (Exception e1 ) {
108
+ }
109
+ }
110
+ }
84
111
}
85
112
86
113
private BeanManager getBeanManagerFromJNDI () {
@@ -94,6 +121,18 @@ private BeanManager getBeanManagerFromJNDI() {
94
121
}
95
122
return (BeanManager ) result ;
96
123
}
124
+
125
+ private UserTransaction getUserTransactionFromJNDI () {
126
+ InitialContext context ;
127
+ Object result ;
128
+ try {
129
+ context = new InitialContext ();
130
+ result = context .lookup ("java:comp/UserTransaction" ); // lookup in JBossAS
131
+ } catch (NamingException ex ) {
132
+ throw new RuntimeException ("UserTransaction could not be found in JNDI" , ex );
133
+ }
134
+ return (UserTransaction ) result ;
135
+ }
97
136
98
137
@ SuppressWarnings ("unchecked" )
99
138
public <T > T getContextualInstance (final BeanManager manager , final Class <T > type ) {
0 commit comments