1 package com.lavans.luz2.lremote.service;
\r
3 import java.util.Collections;
\r
4 import java.util.HashMap;
\r
5 import java.util.Map;
\r
7 import net.sf.cglib.proxy.Enhancer;
\r
9 import com.lavans.luz2.lremote.intercetor.RemoteInterceptor;
\r
10 import com.lavans.luz2.util.BeanManager;
\r
13 * Service Manager Implementation for XML file(default).
\r
17 public class ServiceManagerXml implements ServiceManager{
\r
19 //private static final Log logger = LogFactory.getLog(ServiceManagerXml.class);
\r
20 /** singleton instance */
\r
21 private static ServiceManager instance = new ServiceManagerXml();
\r
23 /** cache of all service */
\r
24 private Map<String, Object> serviceMap = Collections.synchronizedMap(new HashMap<String, Object>());
\r
29 public static ServiceManager getInstance(){
\r
33 private ServiceManagerXml(){
\r
41 public Object getService(String group, String id) {
\r
42 return getService(BeanManager.toFullId(group, id));
\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
52 // If the service is not cached then create new one.
\r
53 Class<? extends Object> clazz = BeanManager.getBeanClass(id);
\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
66 * Get for local. Never set Interceptor. This methos equals to BeanManager.
\r
68 public Object getServiceLocal(String group, String id) {
\r
69 return BeanManager.getBean(group, id);
\r
71 public Object getServiceLocal(String id) {
\r
72 return BeanManager.getBean(id);
\r