01: /**
02: * Licensed to the Apache Software Foundation (ASF) under one or more
03: * contributor license agreements. See the NOTICE file distributed with
04: * this work for additional information regarding copyright ownership.
05: * The ASF licenses this file to You under the Apache License, Version 2.0
06: * (the "License"); you may not use this file except in compliance with
07: * the License. You may obtain a copy of the License at
08: *
09: * http://www.apache.org/licenses/LICENSE-2.0
10: *
11: * Unless required by applicable law or agreed to in writing, software
12: * distributed under the License is distributed on an "AS IS" BASIS,
13: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14: * See the License for the specific language governing permissions and
15: * limitations under the License.
16: */package org.apache.geronimo.persistence;
17:
18: import java.util.Map;
19: import java.util.HashMap;
20: import java.util.Iterator;
21:
22: import javax.transaction.Transaction;
23:
24: /**
25: * @version $Rev: 476049 $ $Date: 2006-11-16 20:35:17 -0800 (Thu, 16 Nov 2006) $
26: */
27: public class EntityManagerExtendedRegistry {
28:
29: private static final ThreadLocal<Map<String, InternalCMPEntityManagerExtended>> entityManagerMaps = new ThreadLocal<Map<String, InternalCMPEntityManagerExtended>>() {
30: protected Map<String, InternalCMPEntityManagerExtended> initialValue() {
31: return new HashMap<String, InternalCMPEntityManagerExtended>();
32: }
33: };
34:
35: public static InternalCMPEntityManagerExtended getEntityManager(
36: String persistenceUnit) {
37: Map<String, InternalCMPEntityManagerExtended> entityManagerMap = entityManagerMaps
38: .get();
39: return entityManagerMap.get(persistenceUnit);
40: }
41:
42: public static void putEntityManager(String persistenceUnit,
43: InternalCMPEntityManagerExtended entityManager) {
44: Map<String, InternalCMPEntityManagerExtended> entityManagerMap = entityManagerMaps
45: .get();
46: InternalCMPEntityManagerExtended oldEntityManager = entityManagerMap
47: .put(persistenceUnit, entityManager);
48: if (oldEntityManager != null) {
49: throw new IllegalStateException(
50: "There was already an EntityManager registered for persistenceUnit "
51: + persistenceUnit);
52: }
53: }
54:
55: public static void clearEntityManager(String persistenceUnit) {
56: Map<String, InternalCMPEntityManagerExtended> entityManagerMap = entityManagerMaps
57: .get();
58: entityManagerMap.remove(persistenceUnit);
59: }
60:
61: public static void threadAssociated(Transaction transaction) {
62: Map<String, InternalCMPEntityManagerExtended> entityManagerMap = entityManagerMaps
63: .get();
64: for (Iterator i = entityManagerMap.values().iterator(); i
65: .hasNext();) {
66: InternalCMPEntityManagerExtended entityManager = (InternalCMPEntityManagerExtended) i
67: .next();
68: entityManager.joinTransaction();
69: }
70: }
71:
72: public static void threadUnassociated(Transaction transaction) {
73: //Any way to unassociate?
74: }
75: }
|