X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=src%2Fcom%2Flavans%2Fluz2%2Flremote%2Fservice%2FServiceManagerXml.java;fp=src%2Fcom%2Flavans%2Fluz2%2Flremote%2Fservice%2FServiceManagerXml.java;h=937dcf1866d641ade8308465fcf00da66f9b32f7;hb=11666b431416722fb17b32ce82bbfb817fcd7482;hp=0000000000000000000000000000000000000000;hpb=20726656a3267f6bb2897f287f3c7e1330f17816;p=luz%2Fluz.git diff --git a/src/com/lavans/luz2/lremote/service/ServiceManagerXml.java b/src/com/lavans/luz2/lremote/service/ServiceManagerXml.java new file mode 100644 index 0000000..937dcf1 --- /dev/null +++ b/src/com/lavans/luz2/lremote/service/ServiceManagerXml.java @@ -0,0 +1,75 @@ +package com.lavans.luz2.lremote.service; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +import net.sf.cglib.proxy.Enhancer; + +import com.lavans.luz2.lremote.intercetor.RemoteInterceptor; +import com.lavans.luz2.util.BeanManager; + +/** + * Service Manager Implementation for XML file(default). + * @author dobashi + * + */ +public class ServiceManagerXml implements ServiceManager{ + /** logger */ + //private static final Log logger = LogFactory.getLog(ServiceManagerXml.class); + /** singleton instance */ + private static ServiceManager instance = new ServiceManagerXml(); + + /** cache of all service */ + private Map serviceMap = Collections.synchronizedMap(new HashMap()); + + /** + * constructor + */ + public static ServiceManager getInstance(){ + return instance; + } + + private ServiceManagerXml(){ + init(); + } + + /** initialize */ + public void init(){ + } + + public Object getService(String group, String id) { + return getService(BeanManager.toFullId(group, id)); + } + public Object getService(String id) { + // search from cache + Object service = serviceMap.get(id); + // If service is found, return cache. + if(service!=null){ + return service; + } + + // If the service is not cached then create new one. + Class clazz = BeanManager.getBeanClass(id); + + // intercept by CGLIB + Enhancer enhancer = new Enhancer(); + enhancer.setSuperclass(clazz); + enhancer.setCallback(new RemoteInterceptor()); + service = enhancer.create(); + serviceMap.put(id, service); + + return service; + } + + /** + * Get for local. Never set Interceptor. This methos equals to BeanManager. + */ + public Object getServiceLocal(String group, String id) { + return BeanManager.getBean(group, id); + } + public Object getServiceLocal(String id) { + return BeanManager.getBean(id); + } + +}