OSDN Git Service

i
[luz/luz.git] / luz2 / src / com / lavans / luz2 / lremote / service / ServiceManagerXml.java
1 package com.lavans.luz2.lremote.service;\r
2 \r
3 import java.util.Collections;\r
4 import java.util.HashMap;\r
5 import java.util.Map;\r
6 \r
7 import net.sf.cglib.proxy.Enhancer;\r
8 \r
9 import com.lavans.luz2.lremote.intercetor.RemoteInterceptor;\r
10 import com.lavans.luz2.util.BeanManager;\r
11 \r
12 /**\r
13  * Service Manager Implementation for XML file(default).\r
14  * @author dobashi\r
15  *\r
16  */\r
17 public class ServiceManagerXml implements ServiceManager{\r
18         /** logger */\r
19         //private static final Log logger = LogFactory.getLog(ServiceManagerXml.class);\r
20         /** singleton instance */\r
21         private static ServiceManager instance = new ServiceManagerXml();\r
22 \r
23         /** cache of all service */\r
24         private Map<String, Object> serviceMap = Collections.synchronizedMap(new HashMap<String, Object>());\r
25 \r
26         /**\r
27          * constructor\r
28          */\r
29         public static ServiceManager getInstance(){\r
30                 return instance;\r
31         }\r
32 \r
33         private ServiceManagerXml(){\r
34                 init();\r
35         }\r
36 \r
37         /** initialize */\r
38         public void init(){\r
39         }\r
40 \r
41         public Object getService(String group, String id) {\r
42                 return getService(BeanManager.toFullId(group, id));\r
43         }\r
44         public Object getService(String id) {\r
45                 // search from cache\r
46                 Object service = serviceMap.get(id);\r
47                 // If service is found, return cache.\r
48                 if(service!=null){\r
49                         return service;\r
50                 }\r
51 \r
52                 // If the service is not cached then create new one.\r
53                 Class<? extends Object> clazz = BeanManager.getBeanClass(id);\r
54 \r
55                 // intercept by CGLIB\r
56                 Enhancer enhancer = new Enhancer();\r
57                 enhancer.setSuperclass(clazz);\r
58                 enhancer.setCallback(new RemoteInterceptor());\r
59                 service = enhancer.create();\r
60                 serviceMap.put(id, service);\r
61 \r
62         return service;\r
63         }\r
64 \r
65         /**\r
66          * Get for local. Never set Interceptor. This methos equals to BeanManager.\r
67          */\r
68         public Object getServiceLocal(String group, String id) {\r
69                 return BeanManager.getBean(group, id);\r
70         }\r
71         public Object getServiceLocal(String id) {\r
72                 return BeanManager.getBean(id);\r
73         }\r
74 \r
75 }\r