1 16 package com.jdon.model.handler; 17 18 import java.util.Collections ; 19 import java.util.HashMap ; 20 import java.util.LinkedList ; 21 import java.util.Map ; 22 import java.util.concurrent.ConcurrentHashMap ; 23 24 import com.jdon.model.ModelHandler; 25 import com.jdon.model.config.PoolParameter; 26 import com.jdon.model.factory.ModelHandlerClassBuilder; 27 import com.jdon.util.Debug; 28 29 33 public class HandlerObjectFactory { 34 public final static String module = HandlerObjectFactory.class.getName(); 35 36 private final static int HANDLER_INSTANCE_COUNT = 10; 37 38 private int poolSize; 39 40 private ModelHandlerClassBuilder modelHandlerClassBuilder; 41 42 private Map handlerFreePool = new ConcurrentHashMap (); 45 46 private Map handlerUsedPool = new ConcurrentHashMap (); 49 50 public HandlerObjectFactory(ModelHandlerClassBuilder modelXmlConfig, PoolParameter poolParameter) { 51 this.modelHandlerClassBuilder = modelXmlConfig; 52 this.poolSize = poolParameter.getHandlerPoolSize(); 53 } 54 55 63 public ModelHandler borrowHandlerObject(String formName) { 64 65 ModelHandler modelHandler = null; 66 try { 67 String poolKey = (modelHandlerClassBuilder.getModelMapping(formName)).getHandler(); 68 69 LinkedList listFree = (LinkedList ) handlerFreePool.get(poolKey); 70 if ((listFree == null) || (listFree.isEmpty())) { listFree = makeHandlerObjects(formName); 72 handlerFreePool.put(poolKey, listFree); 73 } 74 modelHandler = (ModelHandler) listFree.removeFirst(); 75 76 LinkedList listUsed = (LinkedList ) handlerUsedPool.get(poolKey); 78 if (listUsed == null) { 79 listUsed = new LinkedList (); 80 handlerUsedPool.put(poolKey, listUsed); 81 } 82 listUsed.add(modelHandler); 83 84 Debug.logVerbose("[JdonFramework]--> borrow Modelhandler instance " + poolKey + listFree.size() + " for " + formName, module); 85 } catch (Exception e) { 86 Debug.logError("[JdonFramework]borrowHandlerObject error:" + e, module); 87 } 88 89 return modelHandler; 90 } 91 92 99 private synchronized LinkedList makeHandlerObjects(String formName) throws Exception { 100 Debug.logVerbose("[JdonFramework]--> create Modelhandler instance " + poolSize, module); 101 int count = 0; 102 ModelHandler modelHandler = null; 103 LinkedList list = new LinkedList (); 104 while (count < poolSize) { 105 modelHandler = makeHandlerObject(formName); 106 list.add(modelHandler); 107 count++; 108 } 109 return list; 110 } 111 112 118 public void returnHandlerObject(ModelHandler modelHandler) { 119 try { 120 String poolKey = modelHandler.getClass().getName(); 121 LinkedList listUsed = (LinkedList ) handlerUsedPool.get(poolKey); 122 if (listUsed == null) { 123 Debug.logError("[JdonFramework]ERROR:not find the used pool: class = " + poolKey, module); 124 return; 125 } 126 listUsed.remove(modelHandler); 127 LinkedList listFree = (LinkedList ) handlerFreePool.get(poolKey); 128 if (listFree == null) { 129 Debug.logError("[JdonFramework]ERROR:not find the free pool: class = " + poolKey, module); 130 return; 131 } 132 listFree.add(modelHandler); 133 Debug.logVerbose("[JdonFramework]--> return Modelhandler instance successfully" + poolKey + listFree.size(), module); 134 } catch (Exception e) { 135 Debug.logError("[JdonFramework]returnHandlerObject error:" + e, module); 136 } 137 } 138 139 private synchronized ModelHandler makeHandlerObject(String formName) throws Exception { 140 ModelHandler object = null; 141 Class handlerClass = null; 142 try { 143 handlerClass = modelHandlerClassBuilder.getHandlerClasses(formName); 144 if (handlerClass == null) { 145 throw new Exception (" not found the handler in config xml formName=" + formName); 146 } 147 object = (ModelHandler) handlerClass.newInstance(); 148 } catch (Exception e) { 149 Debug.logError("[JdonFramework]--> call Handler: " + handlerClass + " error:" + e, module); 150 throw new Exception (e); 151 } 152 return object; 153 } 154 155 } 156 | Popular Tags |