OSDN Git Service

track
[luz/luz.git] / src / com / lavans / luz2 / lremote / service / ServiceManagerXml.java
diff --git a/src/com/lavans/luz2/lremote/service/ServiceManagerXml.java b/src/com/lavans/luz2/lremote/service/ServiceManagerXml.java
new file mode 100644 (file)
index 0000000..937dcf1
--- /dev/null
@@ -0,0 +1,75 @@
+package com.lavans.luz2.lremote.service;\r
+\r
+import java.util.Collections;\r
+import java.util.HashMap;\r
+import java.util.Map;\r
+\r
+import net.sf.cglib.proxy.Enhancer;\r
+\r
+import com.lavans.luz2.lremote.intercetor.RemoteInterceptor;\r
+import com.lavans.luz2.util.BeanManager;\r
+\r
+/**\r
+ * Service Manager Implementation for XML file(default).\r
+ * @author dobashi\r
+ *\r
+ */\r
+public class ServiceManagerXml implements ServiceManager{\r
+       /** logger */\r
+       //private static final Log logger = LogFactory.getLog(ServiceManagerXml.class);\r
+       /** singleton instance */\r
+       private static ServiceManager instance = new ServiceManagerXml();\r
+\r
+       /** cache of all service */\r
+       private Map<String, Object> serviceMap = Collections.synchronizedMap(new HashMap<String, Object>());\r
+\r
+       /**\r
+        * constructor\r
+        */\r
+       public static ServiceManager getInstance(){\r
+               return instance;\r
+       }\r
+\r
+       private ServiceManagerXml(){\r
+               init();\r
+       }\r
+\r
+       /** initialize */\r
+       public void init(){\r
+       }\r
+\r
+       public Object getService(String group, String id) {\r
+               return getService(BeanManager.toFullId(group, id));\r
+       }\r
+       public Object getService(String id) {\r
+               // search from cache\r
+               Object service = serviceMap.get(id);\r
+               // If service is found, return cache.\r
+               if(service!=null){\r
+                       return service;\r
+               }\r
+\r
+               // If the service is not cached then create new one.\r
+               Class<? extends Object> clazz = BeanManager.getBeanClass(id);\r
+\r
+               // intercept by CGLIB\r
+               Enhancer enhancer = new Enhancer();\r
+               enhancer.setSuperclass(clazz);\r
+               enhancer.setCallback(new RemoteInterceptor());\r
+               service = enhancer.create();\r
+               serviceMap.put(id, service);\r
+\r
+        return service;\r
+       }\r
+\r
+       /**\r
+        * Get for local. Never set Interceptor. This methos equals to BeanManager.\r
+        */\r
+       public Object getServiceLocal(String group, String id) {\r
+               return BeanManager.getBean(group, id);\r
+       }\r
+       public Object getServiceLocal(String id) {\r
+               return BeanManager.getBean(id);\r
+       }\r
+\r
+}\r