1 4 package com.nightlabs.ipanema.jdo; 5 6 import java.util.HashMap ; 7 import java.util.Map ; 8 9 import org.apache.log4j.Logger; 10 11 import com.nightlabs.ipanema.base.login.Login; 12 13 16 public class JDOObjectID2PCClassMap 17 { 18 public static final Logger LOGGER = Logger.getLogger(JDOObjectID2PCClassMap.class); 19 20 private static JDOObjectID2PCClassMap _sharedInstance = null; 21 22 public static JDOObjectID2PCClassMap sharedInstance() 23 { 24 if (_sharedInstance == null) 25 _sharedInstance = new JDOObjectID2PCClassMap(); 26 27 return _sharedInstance; 28 } 29 30 private JDOManager jdoManager = null; 31 32 36 private Map objectID2PCClassMap = new HashMap (); 37 38 54 public synchronized void initPersistenceCapableClass(Object objectID, Class clazz) 55 { 56 if (objectID2PCClassMap.containsKey(objectID)) { 57 if (LOGGER.isDebugEnabled()) 58 LOGGER.debug("Won't do anything, because there is already a mapping for this objectID: " + objectID); 59 60 return; 61 } 62 63 if (LOGGER.isDebugEnabled()) 64 LOGGER.debug("Storing mapping on class \"" + clazz.getName() + "\" for objectID: " + objectID); 65 66 objectID2PCClassMap.put(objectID, clazz); 67 } 68 69 76 public synchronized Class getPersistenceCapableClass(Object objectID) 77 { 78 Class jdoObjectClass = (Class ) objectID2PCClassMap.get(objectID); 79 if (jdoObjectClass == null) { 80 int retry = 0; 81 String clazzName = null; 82 while (clazzName == null && retry < 2) { 83 try { 84 if (jdoManager == null) 85 jdoManager = JDOManagerUtil.getHome(Login.getLogin().getInitialContextProperties()).create(); 86 87 clazzName = jdoManager.getPersistenceCapableClassName(objectID); 88 } catch (Throwable t) { 89 if (++retry >= 2) 90 throw new RuntimeException (t); 91 clazzName = null; 92 jdoManager = null; 93 } 94 } 95 96 if (clazzName == null) 97 throw new IllegalStateException ("How the hell can clazzName be null?"); 98 99 try { 100 jdoObjectClass = Class.forName(clazzName); 101 } catch (ClassNotFoundException e) { 102 throw new RuntimeException (e); 103 } 104 105 objectID2PCClassMap.put(objectID, jdoObjectClass); 106 } 108 return jdoObjectClass; 109 } 110 } 111 | Popular Tags |