package com.dy.testClient; import java.util.ArrayList; import java.util.List; import com.dy.testClient.tcpClient.TcpClUnit; import com.dy.testClient.tcpClient.TcpClUnitConfigVo; import org.jdom2.Document; import com.dy.testClient.rmiClient.RmiClUnit; import com.dy.testClient.rmiClient.RmiClUnitConfigVo; import com.dy.common.mw.UnitInterface; import com.dy.common.mw.support.SupportUnit; import com.dy.common.mw.support.SupportUnitConfigVo; import com.dy.common.util.ConfigXml; public class Server { private ConfigXml conf = null ; private Document doc = null ; private boolean showStartInfo = false ; private final List units = new ArrayList() ; /** * @param args */ public static void main(String[] args) { Server sv = new Server(); Long start = System.currentTimeMillis() ; try { sv.conf = new ConfigXml() ; sv.doc = sv.conf.createDom(sv.getClass(), "/config.xml") ; //////////////// //服务 配置 sv.showStartInfo = sv.conf.getSetAttrBoolean(sv.doc, "config.server", "showStartInfo", null, null) ; sv.startUnits() ; String svName = null ; try{ svName = sv.conf.getSetAttrTxt(sv.doc, "config.server", "name", null, false, null) ; }catch(Exception e){ svName = "" ; } System.out.println("OOOOOOOOOO OOOOOOOO OOOOOOOO") ; System.out.println("@@@@@@@@@@@@@@@@#O $@@@@@@@@& @@@@@@@@#") ; System.out.println("@@@@@@@@@@@@@@@@@@@# @@@@@@@@# $@@@@@@@@&") ; System.out.println("@@@@@@@@@@@@@@@@@@@@@# #@@@@@@@@@@@@@@@@O") ; System.out.println("@@@@@@@@@@@@@@@@@@@@@@@ &@@@@@@@@@@@@@@") ; System.out.println("@@@@@@$ $@@@@@@@@@& O@@@@@@@@@@@#") ; System.out.println("@@@@@@$ @@@@@@@@@ @@@@@@@@@& " + svName + "tcpTestClient " ) ; System.out.println("@@@@@@$ @@@@@@@@@ &@@@@@@@@") ; System.out.println("@@@@@@$ O@@@@@@@@@ &@@@@@@@@") ; System.out.println("@@@@@@$ #@@@@@@@@@$ &@@@@@@@@" ) ; System.out.println("@@@@@@@@@@@@@@@@@@@@@@# &@@@@@@@@ Runing in standalone mode" ) ; System.out.println("@@@@@@@@@@@@@@@@@@@@@& &@@@@@@@@ Startup in " + (System.currentTimeMillis() - start) + " MS" ) ; System.out.println("@@@@@@@@@@@@@@@@@@@# &@@@@@@@@") ; System.out.println("@@@@@@@@@@@@@@@@#O &@@@@@@@@") ; }catch(Exception e){ e.printStackTrace(); } } private void startUnits(){ try { //////////////////////////////////////////////////////// //支持模块: springHibernate和 线程池 SupportUnitConfigVo supVo = new SupportUnitConfigVo() ; //短工作时长线程池,线程负责用时较短的工作任务 supVo.short_maxThread = conf.getSetAttrPlusInt(doc, "config.support", "short_maxThread", null, 1, 1000, null) ;//池中最大线程数为所有CPU核数+1 supVo.short_minThread = conf.getSetAttrPlusInt(doc, "config.support", "short_minThread", null, 1, 5, null) ;//池中最小线程数 supVo.short_freeTimeout = conf.getSetAttrPlusInt(doc, "config.support", "short_freeTimeout", null, 1, 90, null) * 1000 ;//线程数空闲时长,若池中线程数量大于minThread,且有的线程空闲时长超过freeTimeout,则清除该线程,为了不清除,把minThread与maxThread设置相等 supVo.short_busyTimeout = conf.getSetAttrPlusInt(doc, "config.support", "short_busyTimeout", null, 1, 10, null) * 1000 ;//线程不间断工作时长(单位为秒)超时限,认为线程已经了崩溃,将强制清除,短工作时长设置为5秒 //长工作时长线程池,线程负责用时较长的工作任务 supVo.long_maxThread = conf.getSetAttrInt(doc, "config.support", "long_maxThread", null, -1, 1000, null) ;//池中最大线程数,若为-1,不受限制 if(supVo.long_maxThread < 0){ supVo.long_maxThread = -1 ; } supVo.long_minThread = conf.getSetAttrPlusInt(doc, "config.support", "long_minThread", null, 0, 5, null) ;//池中最小线程数 supVo.long_freeTimeout = conf.getSetAttrPlusInt(doc, "config.support", "long_freeTimeout", null, 1, 90, null) * 1000 ;//线程数空闲时长,若池中线程数量大于minThread,且有的线程空闲时长超过freeTimeout,则清除该线程 supVo.long_busyTimeout = conf.getSetAttrInt(doc, "config.support", "long_busyTimeout", null, -1, 10, null) ;//线程不间断工作时长(单位为秒)超时限,若为-1,不受限制 if(supVo.long_busyTimeout < 0){ supVo.long_busyTimeout = -1 ; } supVo.showStartInfo = showStartInfo ; AdapterImp_SupportUnit supAdap = new AdapterImp_SupportUnit() ; supAdap.setConfig(supVo); SupportUnit supUnit = SupportUnit.getInstance() ; supUnit.setAdapter(supAdap); supUnit.start(obj -> { }); units.add(supUnit) ; // /////////////// // rmi 模块 RmiClUnitConfigVo rmiClVo = new RmiClUnitConfigVo(); rmiClVo.svUrl = conf.getSetAttrTxt(doc, "config.rmiCl", "rmiSvUrl", null, false, null) ; rmiClVo.svContext = conf.getSetAttrTxt(doc, "config.rmiCl", "rmiSvContext", null, false, null) ; rmiClVo.svPort = conf.getSetAttrPlusInt(doc, "config.rmiCl", "rmiSvPort", null, 0, 65535, null) ; AdapterImp_RmiClUnit rmiClAdap = new AdapterImp_RmiClUnit(); rmiClAdap.setConfig(rmiClVo); RmiClUnit rmiClUnit = RmiClUnit.getInstance(); rmiClUnit.setAdapter(rmiClAdap); rmiClUnit.start(obj -> { }); units.add(rmiClUnit) ; // /////////////// // Tcp Client 模块 TcpClUnitConfigVo tcpClVo = new TcpClUnitConfigVo(); tcpClVo.enable = conf.getSetAttrBoolean(doc, "config.tcpCl", "enable", null, null) ; tcpClVo.heartbeatTimes = conf.getSetAttrPlusInt(doc, "config.tcpCl", "heartbeatTimes", null, 1, 10, null) ;//连续配置次数心跳后发送一次数据 tcpClVo.sendInterval = conf.getSetAttrPlusInt(doc, "config.tcpCl", "sendInterval", null, 1, 60, null) ;//发送心跳或数据的时间间隔 if(tcpClVo.enable){ AdapterImp_TcpClUnit httpClAdap = new AdapterImp_TcpClUnit(); httpClAdap.setConfig(tcpClVo); TcpClUnit httpClUnit = TcpClUnit.getInstance(); httpClUnit.setAdapter(httpClAdap); httpClUnit.start(obj -> { }); units.add(httpClUnit) ; } } catch (Exception e) { e.printStackTrace(); } } }