7
7
package org .hibernate .event .service .internal ;
8
8
9
9
import java .lang .reflect .Array ;
10
- import java .util .Collections ;
11
10
import java .util .HashMap ;
12
11
import java .util .Map ;
13
12
80
79
public class EventListenerRegistryImpl implements EventListenerRegistry {
81
80
private Map <Class ,Object > listenerClassToInstanceMap = new HashMap <Class , Object >();
82
81
83
- private Map < EventType , EventListenerGroupImpl > registeredEventListenersMap = prepareListenerMap ();
82
+ private EventListenerGroupImpl [] registeredEventListeners = prepareListenerAssociation ();
84
83
85
84
@ SuppressWarnings ({ "unchecked" })
86
85
public <T > EventListenerGroupImpl <T > getEventListenerGroup (EventType <T > eventType ) {
87
- EventListenerGroupImpl <T > listeners = registeredEventListenersMap . get ( eventType ) ;
86
+ EventListenerGroupImpl <T > listeners = registeredEventListeners [ eventType . ordinal () ] ;
88
87
if ( listeners == null ) {
89
88
throw new HibernateException ( "Unable to find listeners for type [" + eventType .eventName () + "]" );
90
89
}
@@ -93,8 +92,10 @@ public <T> EventListenerGroupImpl<T> getEventListenerGroup(EventType<T> eventTyp
93
92
94
93
@ Override
95
94
public void addDuplicationStrategy (DuplicationStrategy strategy ) {
96
- for ( EventListenerGroupImpl group : registeredEventListenersMap .values () ) {
97
- group .addDuplicationStrategy ( strategy );
95
+ for ( EventListenerGroupImpl group : registeredEventListeners ) {
96
+ if ( group != null ) {
97
+ group .addDuplicationStrategy ( strategy );
98
+ }
98
99
}
99
100
}
100
101
@@ -165,252 +166,252 @@ public <T> void prependListeners(EventType<T> type, T... listeners) {
165
166
getEventListenerGroup ( type ).prependListeners ( listeners );
166
167
}
167
168
168
- private static Map < EventType , EventListenerGroupImpl > prepareListenerMap () {
169
- final Map < EventType , EventListenerGroupImpl > workMap = new HashMap < EventType , EventListenerGroupImpl >() ;
169
+ private static EventListenerGroupImpl [] prepareListenerAssociation () {
170
+ EventListenerGroupImpl [] listenerArray = new EventListenerGroupImpl [ EventType . values (). size () ] ;
170
171
171
172
// auto-flush listeners
172
173
prepareListeners (
173
174
AUTO_FLUSH ,
174
175
new DefaultAutoFlushEventListener (),
175
- workMap
176
+ listenerArray
176
177
);
177
178
178
179
// create listeners
179
180
prepareListeners (
180
181
PERSIST ,
181
182
new DefaultPersistEventListener (),
182
- workMap
183
+ listenerArray
183
184
);
184
185
185
186
// create-onflush listeners
186
187
prepareListeners (
187
188
PERSIST_ONFLUSH ,
188
189
new DefaultPersistOnFlushEventListener (),
189
- workMap
190
+ listenerArray
190
191
);
191
192
192
193
// delete listeners
193
194
prepareListeners (
194
195
DELETE ,
195
196
new DefaultDeleteEventListener (),
196
- workMap
197
+ listenerArray
197
198
);
198
199
199
200
// dirty-check listeners
200
201
prepareListeners (
201
202
DIRTY_CHECK ,
202
203
new DefaultDirtyCheckEventListener (),
203
- workMap
204
+ listenerArray
204
205
);
205
206
206
207
// evict listeners
207
208
prepareListeners (
208
209
EVICT ,
209
210
new DefaultEvictEventListener (),
210
- workMap
211
+ listenerArray
211
212
);
212
213
213
214
prepareListeners (
214
215
CLEAR ,
215
- workMap
216
+ listenerArray
216
217
);
217
218
218
219
// flush listeners
219
220
prepareListeners (
220
221
FLUSH ,
221
222
new DefaultFlushEventListener (),
222
- workMap
223
+ listenerArray
223
224
);
224
225
225
226
// flush-entity listeners
226
227
prepareListeners (
227
228
FLUSH_ENTITY ,
228
229
new DefaultFlushEntityEventListener (),
229
- workMap
230
+ listenerArray
230
231
);
231
232
232
233
// load listeners
233
234
prepareListeners (
234
235
LOAD ,
235
236
new DefaultLoadEventListener (),
236
- workMap
237
+ listenerArray
237
238
);
238
239
239
240
// resolve natural-id listeners
240
241
prepareListeners (
241
242
RESOLVE_NATURAL_ID ,
242
243
new DefaultResolveNaturalIdEventListener (),
243
- workMap
244
+ listenerArray
244
245
);
245
246
246
247
// load-collection listeners
247
248
prepareListeners (
248
249
INIT_COLLECTION ,
249
250
new DefaultInitializeCollectionEventListener (),
250
- workMap
251
+ listenerArray
251
252
);
252
253
253
254
// lock listeners
254
255
prepareListeners (
255
256
LOCK ,
256
257
new DefaultLockEventListener (),
257
- workMap
258
+ listenerArray
258
259
);
259
260
260
261
// merge listeners
261
262
prepareListeners (
262
263
MERGE ,
263
264
new DefaultMergeEventListener (),
264
- workMap
265
+ listenerArray
265
266
);
266
267
267
268
// pre-collection-recreate listeners
268
269
prepareListeners (
269
270
PRE_COLLECTION_RECREATE ,
270
- workMap
271
+ listenerArray
271
272
);
272
273
273
274
// pre-collection-remove listeners
274
275
prepareListeners (
275
276
PRE_COLLECTION_REMOVE ,
276
- workMap
277
+ listenerArray
277
278
);
278
279
279
280
// pre-collection-update listeners
280
281
prepareListeners (
281
282
PRE_COLLECTION_UPDATE ,
282
- workMap
283
+ listenerArray
283
284
);
284
285
285
286
// pre-delete listeners
286
287
prepareListeners (
287
288
PRE_DELETE ,
288
- workMap
289
+ listenerArray
289
290
);
290
291
291
292
// pre-insert listeners
292
293
prepareListeners (
293
294
PRE_INSERT ,
294
- workMap
295
+ listenerArray
295
296
);
296
297
297
298
// pre-load listeners
298
299
prepareListeners (
299
300
PRE_LOAD ,
300
301
new DefaultPreLoadEventListener (),
301
- workMap
302
+ listenerArray
302
303
);
303
304
304
305
// pre-update listeners
305
306
prepareListeners (
306
307
PRE_UPDATE ,
307
- workMap
308
+ listenerArray
308
309
);
309
310
310
311
// post-collection-recreate listeners
311
312
prepareListeners (
312
313
POST_COLLECTION_RECREATE ,
313
- workMap
314
+ listenerArray
314
315
);
315
316
316
317
// post-collection-remove listeners
317
318
prepareListeners (
318
319
POST_COLLECTION_REMOVE ,
319
- workMap
320
+ listenerArray
320
321
);
321
322
322
323
// post-collection-update listeners
323
324
prepareListeners (
324
325
POST_COLLECTION_UPDATE ,
325
- workMap
326
+ listenerArray
326
327
);
327
328
328
329
// post-commit-delete listeners
329
330
prepareListeners (
330
331
POST_COMMIT_DELETE ,
331
- workMap
332
+ listenerArray
332
333
);
333
334
334
335
// post-commit-insert listeners
335
336
prepareListeners (
336
337
POST_COMMIT_INSERT ,
337
- workMap
338
+ listenerArray
338
339
);
339
340
340
341
// post-commit-update listeners
341
342
prepareListeners (
342
343
POST_COMMIT_UPDATE ,
343
- workMap
344
+ listenerArray
344
345
);
345
346
346
347
// post-delete listeners
347
348
prepareListeners (
348
349
POST_DELETE ,
349
- workMap
350
+ listenerArray
350
351
);
351
352
352
353
// post-insert listeners
353
354
prepareListeners (
354
355
POST_INSERT ,
355
- workMap
356
+ listenerArray
356
357
);
357
358
358
359
// post-load listeners
359
360
prepareListeners (
360
361
POST_LOAD ,
361
362
new DefaultPostLoadEventListener (),
362
- workMap
363
+ listenerArray
363
364
);
364
365
365
366
// post-update listeners
366
367
prepareListeners (
367
368
POST_UPDATE ,
368
- workMap
369
+ listenerArray
369
370
);
370
371
371
372
// update listeners
372
373
prepareListeners (
373
374
UPDATE ,
374
375
new DefaultUpdateEventListener (),
375
- workMap
376
+ listenerArray
376
377
);
377
378
378
379
// refresh listeners
379
380
prepareListeners (
380
381
REFRESH ,
381
382
new DefaultRefreshEventListener (),
382
- workMap
383
+ listenerArray
383
384
);
384
385
385
386
// replicate listeners
386
387
prepareListeners (
387
388
REPLICATE ,
388
389
new DefaultReplicateEventListener (),
389
- workMap
390
+ listenerArray
390
391
);
391
392
392
393
// save listeners
393
394
prepareListeners (
394
395
SAVE ,
395
396
new DefaultSaveEventListener (),
396
- workMap
397
+ listenerArray
397
398
);
398
399
399
400
// save-update listeners
400
401
prepareListeners (
401
402
SAVE_UPDATE ,
402
403
new DefaultSaveOrUpdateEventListener (),
403
- workMap
404
+ listenerArray
404
405
);
405
406
406
- return Collections . unmodifiableMap ( workMap ) ;
407
+ return listenerArray ;
407
408
}
408
409
409
- private static <T > void prepareListeners (EventType <T > type , Map < EventType , EventListenerGroupImpl > map ) {
410
- prepareListeners ( type , null , map );
410
+ private static <T > void prepareListeners (EventType <T > type , EventListenerGroupImpl [] listenerArray ) {
411
+ prepareListeners ( type , null , listenerArray );
411
412
}
412
413
413
- private static <T > void prepareListeners (EventType <T > type , T defaultListener , Map < EventType , EventListenerGroupImpl > map ) {
414
+ private static <T > void prepareListeners (EventType <T > type , T defaultListener , EventListenerGroupImpl [] listenerArray ) {
414
415
final EventListenerGroupImpl <T > listenerGroup ;
415
416
if ( type == EventType .POST_COMMIT_DELETE
416
417
|| type == EventType .POST_COMMIT_INSERT
@@ -424,7 +425,7 @@ private static <T> void prepareListeners(EventType<T> type, T defaultListener, M
424
425
if ( defaultListener != null ) {
425
426
listenerGroup .appendListener ( defaultListener );
426
427
}
427
- map . put ( type , listenerGroup ) ;
428
+ listenerArray [ type . ordinal () ] = listenerGroup ;
428
429
}
429
430
430
431
}
0 commit comments