All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.logicbus.backend.ServantFactory Maven / Gradle / Ivy

There is a newer version: 1.6.16
Show newest version
package com.logicbus.backend;

import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

import com.anysoft.util.Configurable;
import com.anysoft.util.Factory;
import com.anysoft.util.IOTools;
import com.anysoft.util.JsonTools;
import com.anysoft.util.Properties;
import com.anysoft.util.Reportable;
import com.anysoft.util.Settings;
import com.anysoft.util.XMLConfigurable;
import com.anysoft.util.XmlElementProperties;
import com.anysoft.util.XmlTools;
import com.anysoft.util.resource.ResourceFactory;
import com.logicbus.models.catalog.Path;
import com.logicbus.models.servant.ServantManager;
import com.logicbus.models.servant.ServiceDescriptionWatcher;


/**
 * 服务员工厂
 * @author duanyy
 * @version 1.2.0 [20140607 duanyy]修正无法reload的bug
 * @version 1.2.2 [20140617 duanyy]
 * - 改进同步模型 
* * @version 1.2.6 [20140807 duanyy] * - 修改为interface
* * @version 1.6.7.20
* - 改造为通过XML配置文件进行配置
* - 改造ServantManager模型,增加服务配置监控机制
*/ public interface ServantFactory extends ServiceDescriptionWatcher,AutoCloseable, XMLConfigurable,Configurable,Reportable{ /** * 获得服务资源池列表 * @return 服务资源池列表 */ public ServantPool [] getPools(); /** * 重新装入指定服务的资源池 * @param _id 服务id * @return 服务资源池 */ public ServantPool reloadPool(Path _id); /** * 获取指定服务的的服务资源池 * @param _id 服务Id * @return 服务资源池 */ public ServantPool getPool(Path _id); /** * 获取服务注册表 * @return 服务注册表 */ public ServantRegistry getServantRegistry(); /** * 虚基类 * @author duanyy * */ public static abstract class Abstract implements ServantFactory{ /** * a slf4j logger */ protected static final Logger logger = LoggerFactory.getLogger(ServantFactory.class); /** * 服务注册表 */ protected ServantRegistry servantRegistry = null; @Override public void configure(Element e, Properties p) { Properties props = new XmlElementProperties(e,p); configure(props); Element registry = XmlTools.getFirstElementByPath(e, "registry"); if (registry != null){ try{ Factory f = new Factory(); servantRegistry = f.newInstance(registry, props, "module", ServantManager.class.getName()); servantRegistry.addWatcher(this); }catch (Exception ex){ logger.error("Can not create servent registry,Using default.",ex); } } if (servantRegistry == null){ servantRegistry = new ServantManager(); servantRegistry.addWatcher(this); servantRegistry.configure(e, p); } logger.info("Using servant registry:" + servantRegistry.getClass().getName()); } @Override public void report(Element xml) { if (xml != null){ xml.setAttribute("module", getClass().getName()); if (servantRegistry != null){ Document doc = xml.getOwnerDocument(); Element registry = doc.createElement("registry"); servantRegistry.report(registry); } } } @Override public void report(Map json) { if (json != null){ JsonTools.setString(json,"module",getClass().getName()); if (servantRegistry != null){ Map map = new HashMap(); servantRegistry.report(map); json.put("registry", map); } } } @Override public ServantRegistry getServantRegistry() { return servantRegistry; } public void close(){ IOTools.close(servantRegistry); } } public static class TheFactory extends Factory{ /** * 缺省配置文件 */ public static final String DEFAULT = "java:///com/logicbus/backend/servantfactory.default.xml#com.logicbus.backend.ServantFactory"; /** * a logger of log4j */ protected static final Logger LOG = LoggerFactory.getLogger(ServantFactory.class); public static ServantFactory get(){ return get(Settings.get()); } public static ServantFactory get(Properties props){ String master = props.GetValue("servant.factory.master",DEFAULT); String secondary = props.GetValue("servant.factory.secondary",DEFAULT); ResourceFactory rf = Settings.getResourceFactory(); InputStream in = null; try { in = rf.load(master,secondary, null); Document doc = XmlTools.loadFromInputStream(in); if (doc != null){ return getServantFactory(doc.getDocumentElement(),props); } }catch (Exception ex){ LOG.error("Error occurs when load xml file,source=" + master, ex); }finally { IOTools.closeStream(in); } return null; } public static ServantFactory getServantFactory(Element e,Properties p){ TheFactory factory = new TheFactory(); return factory.newInstance(e, p); } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy