⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mmsservicemain.java

📁 MM7彩信对接网关示例
💻 JAVA
字号:
/*
 * Created on 2005-3-4
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package com.rainbow.mms.appframe;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Timer;
import java.util.TimerTask;

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;

import com.rainbow.mms.common.MMSServiceCode;
import com.rainbow.mms.common.MmsGatewayInfo;
import com.rainbow.util.tools.HibernateUtil;



/**
 * 应用程序主体类。负责启动并管理整个应用。启动顺序:读取配置文件中的配置,读取数据库中该应用的业务代码,
 * 读取平台中网关信息配置,启动工作者线程组,启动数据库定时读取Deliver消息的定时器。
 * @author Rainbow mms group leader —— TrWorks
 *
 */
public class MMSServiceMain {

	private Timer dbAccessTimer = null; 
	
	private static MMSServiceMain INSTANSE = new MMSServiceMain();
	
	private Logger log = Logger.getLogger(MMSServiceMain.class);
	
	private int workerNum = 4;
	
	private int dbAccessInterval = 1000*3;
	
	private int uniformServiceID = 0;
	
	private String workerClassName = "";
	
	private static Map serviceCodeMap = new HashMap();
	
	private static Map gateWayMap = new HashMap();
	
	/**
	 * 获得主程序实体
	 * @return 主程序实体
	 */
	public static MMSServiceMain getInstance(){
		// 加载Log4j的配置
		PropertyConfigurator.configure("conf/log4j.properties");
		return INSTANSE;
	}
	
	/**
	 * 运行主程序
	 */
	public void run() {
		
		log.info("启动彩信业务处理程序...");
		
		// 读取数据库配置
		ConfigEditor config = ConfigEditor.getInstance();
		if (false == config.loadConfig("conf/AppSysConfig.properties")){
			log.error("启动彩信业务处理程序失败,加载配置文件失败");
			return;
		}
		
		// 配置系统参数
		workerNum = config.getThreadNum();
		dbAccessInterval = config.getDbAccessInterval();
		uniformServiceID = config.getUniformServiceID();
		workerClassName = config.getWorkerClassName();
		log.info("系统配置信息,MmsApp dbAccessInterval: " + dbAccessInterval);
		log.info("系统配置信息,MmsApp workerNum: " + workerNum);
		log.info("系统配置信息,MmsApp uniformServiceID: " + uniformServiceID);
		log.info("系统配置信息,MmsApp workerClassName: " + workerClassName);
		
		// 读取与该业务相关的ServiceCode服务信息
		if (false == loadServiceCode()){
			log.error("读取与该业务相关的ServiceCode服务信息发生错误!");
			return;
		}
		
		// 读取与该业务相关的ServiceCode服务信息
		if (false == loadGateWayInfo()){
			log.error("读取与该业务相关的网关服务信息发生错误!");
			return;
		}
		
		// 启动工作者线程组
		MMSDataWorker[] workers = new MMSDataWorker[workerNum];
		Class threadClass = null;
		try {
			threadClass = Class.forName(workerClassName);
			for (int i = 0; i < workerNum; i++){
				MMSDataWorker w = (MMSDataWorker)threadClass.newInstance();
				w.initWorkers();
				Thread t = new Thread(w);
				t.setName(i + "号工作线程");
				t.start();
			}
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
			return;
		} catch (InstantiationException e) {
			e.printStackTrace();
			return;
		} catch (IllegalAccessException e) {
			e.printStackTrace();
			return;
		}
		
		log.info("启动了" + workerNum + "个处理线程.");
		
		// 启动数据库定时访问线程
		TimerTask dateGetter = new MMSDataGetter();
		dbAccessTimer = new Timer();
		dbAccessTimer.schedule(dateGetter, 0, dbAccessInterval);

		log.info("启动业务处理程序成功!");
	}
	
	/**
	 * 读取与该业务相关的ServiceCode服务信息
	 * @return true读取成功,false读取失败
	 */
	private boolean loadServiceCode(){
		
		boolean ok = false;
		try{
			Session sess = HibernateUtil.currentSession();
			Criteria cr = sess.createCriteria(MMSServiceCode.class);
			List serviceCodeList = cr.add(Restrictions.eq("uniformID", new Integer(uniformServiceID))).list();
			
			if (serviceCodeList == null || serviceCodeList.size() == 0){
				log.error("没有该业务(" + uniformServiceID + ")的ServiceCode信息");
				return false;
			}
			
			for (int i = 0; i < serviceCodeList.size(); i++){
				MMSServiceCode s = (MMSServiceCode)serviceCodeList.get(i);
				Integer gwid = new Integer(s.getGateWayID());
				serviceCodeMap.put(gwid, s);
			}
			
			ok = true;
		}
		catch(Exception e){
			e.printStackTrace();
			ok = false;
		}
		finally{
			HibernateUtil.closeSession();
		}
		
		return ok;
	}
	
	
	/**
	 * 读取与该业务相关的网关信息
	 * @return true读取成功,false读取失败
	 */
	private boolean loadGateWayInfo(){
		
		boolean ok = false;
		try{
			Session sess = HibernateUtil.currentSession();
			Criteria cr = sess.createCriteria(MmsGatewayInfo.class);
			List gatewayList = cr.list();
			
			if (gatewayList == null || gatewayList.size() == 0){
				log.error("没有该业务的网关信息");
				return false;
			}
			
			for (int i = 0; i < gatewayList.size(); i++){
				MmsGatewayInfo s = (MmsGatewayInfo)gatewayList.get(i);
				Integer gwid = new Integer(s.getGatewayID());
				gateWayMap.put(gwid, s);
			}
			
			ok = true;
		}
		catch(Exception e){
			e.printStackTrace();
			ok = false;
		}
		finally{
			HibernateUtil.closeSession();
		}
		
		return ok;
	}
	
	/**
	 * 根据网关号码获得下行的业务代码
	 * @param gateWayID
	 * @return
	 */
	public static String getMtServiceCodeByGatewayID(int gateWayID){
		MMSServiceCode s = (MMSServiceCode)MMSServiceMain.serviceCodeMap.get(new Integer(gateWayID));
		System.out.println("获得MTServiceCode:" + s.getMtServiceCode());
		return s.getMtServiceCode();
	}
	
	
	/**
	 * 根据网关号码获得下行的源号码
	 * @param gateWayID
	 * @return
	 */
	public static String getMtSrcNumByGatewayID(int gateWayID){
		MmsGatewayInfo s = (MmsGatewayInfo)MMSServiceMain.gateWayMap.get(new Integer(gateWayID));
		System.out.println("获得SrcNum:" + s.getServiceID());
		return s.getServiceID();
	}
	
	/**
	 * 获得工作者线程的数量
	 * @return
	 */
	public int getWorkerNum() {
		return workerNum;
	}
	
	/**
	 * 主运行
	 * @param args 暂无效
	 */
	public static void main(String[] args){
		MMSServiceMain app = MMSServiceMain.getInstance();
		app.run();
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -