📄 databasecachedaemonstoppedstate.java
字号:
package com.infobank.superchannel.daemon.databasecache;import java.rmi.RemoteException;import java.rmi.registry.LocateRegistry;import java.rmi.registry.Registry;import java.rmi.server.UnicastRemoteObject;import java.util.List;import java.util.Properties;import java.util.Queue;import java.util.concurrent.atomic.AtomicReference;import com.infobank.superchannel.daemon.GenericState;import com.infobank.superchannel.daemon.GenericDaemon;import com.infobank.superchannel.admin.controller.SuperChannelController;import com.infobank.superchannel.database.DAO;import com.infobank.superchannel.pojo.BlackList;import com.infobank.superchannel.pojo.TextMessage;import com.infobank.superchannel.pojo.TextMessageResultSetting;import com.infobank.superchannel.pojo.TextMessageStatusSetting;import com.infobank.superchannel.util.DaemonConfiguration;import com.infobank.superchannel.util.DatabaseConnectionPool;import org.apache.commons.configuration.Configuration;/** * @author Xiaoguang Sun * @version 类说明: 数据库缓冲服务器停止状态 */public class DatabaseCacheDaemonStoppedState extends DatabaseCacheDaemonState { // 当前状态说明 private final static String state="Stopped"; /** * 私有构造函数,保证此类只能拥有单个实例存在 */ private DatabaseCacheDaemonStoppedState(){ } /** * 取得此状态机的单件实例 * @return 此状态机的单件实例 */ public static DatabaseCacheDaemonState getInstance(){ return instance.get(); } /** * 此状态机的单件实例 */ private static AtomicReference<DatabaseCacheDaemonStoppedState> instance= new AtomicReference<DatabaseCacheDaemonStoppedState>(new DatabaseCacheDaemonStoppedState()); /** * 暂停守护进程 */ public boolean pause() { return false; } /** * 重新启动守护进程 */ public boolean restart() { return false; } /** * 继续运行暂停中的守护进程 */ public boolean resume() { return false; } /** * 启动守护进程 */ public boolean start() { // 取得当前配置 DaemonConfiguration config=DaemonConfiguration.getInstance(); // 取得服务器状态 DatabaseCacheDaemon daemon=getDaemon(); // 将状态更新为停止到运行的转换态 daemon.setState(DatabaseCacheDaemonStoppedToRunningTransitionState.getInstance()); // 取得需要扫描的表格数目 int numberOfTables=config.getMaxIndex("/daemon[@type='DatabaseCache']/task/reader/tables/table")+1; if(numberOfTables<=0) return false; // 取得SuperChannel服务器的RMI名称,默认为类名称 String endPoint=config.getString("/daemon[@type='SuperChannel']/endpoint/@name",SuperChannelController.class.getSimpleName()); // 取得数据访问对象以及数据库连接池 DAO dao=DAO.getInstance(); DatabaseConnectionPool dbcp=DatabaseConnectionPool.getInstance(); // 新增黑名单刷新任务 daemon.stateAddTask(LoadBlackListTask.getInstance()); // 新增新短信读取任务 for(int idx=1;idx<=numberOfTables;++idx){ StringBuilder sb=new StringBuilder(); sb.append("/daemon[@type='DatabaseCache']/task/reader/tables/table["); sb.append(idx); sb.append("]/"); String basePath=sb.toString(); // 取得表格名称 sb=new StringBuilder(); sb.append(basePath); sb.append("name"); String tableName=config.getString(sb.toString()); // 取得数据源名称 sb=new StringBuilder(); sb.append(basePath); sb.append("@datasource"); String dataSource=config.getString(sb.toString()); if(dataSource==null) dataSource="default"; // 回调号码匹配 sb=new StringBuilder(); sb.append(basePath); sb.append("@callback"); String callback=config.getString(sb.toString()); if(callback==null) callback="default"; sb=new StringBuilder(); sb.append("/daemon[@type='DatabaseCache']/message/callback[@name='"); sb.append(callback); sb.append("']/pattern"); String callbackPattern=config.getString(sb.toString()); // 一次最多读取信息条数 sb=new StringBuilder(); sb.append(basePath); sb.append("maxRecordNumber"); int maxRecordNumber=config.getInt(sb.toString()); // 每次扫描间隔时间 sb=new StringBuilder(); sb.append(basePath); sb.append("interval"); int interval=config.getInt(sb.toString()); // 信息标签 sb=new StringBuilder(); sb.append(basePath); sb.append("tag"); String tag=config.getString(sb.toString()); // status setting sb=new StringBuilder(); sb.append(basePath); sb.append("@status"); String status=config.getString(sb.toString()); if(status==null) status="default"; sb=new StringBuilder(); sb.append("/daemon[@type='DatabaseCache']/message/status[@name='"); sb.append(status); sb.append("']/"); String statusBasePath=sb.toString(); // status waiting sb=new StringBuilder(); sb.append(statusBasePath); sb.append("waiting"); int statusWaiting=config.getInt(sb.toString()); // status sending sb=new StringBuilder(); sb.append(statusBasePath); sb.append("sending"); int statusSending=config.getInt(sb.toString()); // status delivered sb=new StringBuilder(); sb.append(statusBasePath); sb.append("delivered"); int statusDelivered=config.getInt(sb.toString()); // status blocked sb=new StringBuilder(); sb.append(statusBasePath); sb.append("blocked"); int statusBlocked=config.getInt(sb.toString()); TextMessageStatusSetting statusSetting=new TextMessageStatusSetting(statusWaiting, statusSending, statusDelivered, statusBlocked); sb=new StringBuilder(); sb.append(basePath); sb.append("@result"); String result=config.getString(sb.toString()); if(result==null) result="default"; sb=new StringBuilder(); sb.append("/daemon[@type='DatabaseCache']/message/result[@name='"); sb.append(result); sb.append("']/"); String resultBasePath=sb.toString(); // successful result sb=new StringBuilder(); sb.append(resultBasePath); sb.append("successful"); int resultSuccessful=config.getInt(sb.toString()); // failed result sb=new StringBuilder(); sb.append(resultBasePath); sb.append("failed"); int resultFailed=config.getInt(sb.toString()); // overflow result sb=new StringBuilder(); sb.append(resultBasePath); sb.append("overflow"); int resultOverflow=config.getInt(sb.toString()); TextMessageResultSetting resultSetting=new TextMessageResultSetting(resultSuccessful, resultFailed, resultOverflow); daemon.stateAddTask(new ReadMessageTask(daemon,tableName,dataSource, callbackPattern,maxRecordNumber,interval,statusSetting,resultSetting,tag)); } // 新增状态回写任务 daemon.stateAddTask(new UpdateStatusTask(daemon)); // 新增上行短信回写任务 daemon.stateAddTask(new SaveIncomingMessageTask(daemon)); getDaemon().setState(DatabaseCacheDaemonRunningState.getInstance()); return true; } /** * 停止守护进程 */ public boolean stop() { return false; } /** * 新增待发信息到待发信息队列 * @param messages 待发消息 * @param tag message tag * @return 操作是否成功 */ @Override public boolean addNewMessage(Queue<TextMessage> messages, String tag) { return false; } /** * 取出信息状态待更新队列中所有状态待更新的信息 * @return 信息状态待更新队列中所有状态待更新的信息 */ @Override public Queue<TextMessage> getPendingStatusUpdate() { return null; } /** * 将所给信息的新状态更新回数据库 * @param status 信息新状态更新请求 * @return 操作是否成功 */ @Override public boolean updateMessageStatus(Queue<TextMessage> status) { return false; } /** * 取出待发短信息队列中所有的信息 * @param tag message tag * @return 待发短信息队列中所有的信息 */ @Override public Queue<TextMessage> getNewMessage(String tag) { return null; } /** * 当前数据库缓冲服务器是否可运行 * @return 当前数据库缓冲服务器是否可运行 */ @Override public boolean isRunnable() { // TODO Auto-generated method stub return false; } /** * 当前数据库缓冲服务器是否出于暂停态 * @return 当前数据库缓冲服务器是否出于暂停态 */ @Override public boolean isPaused() { return false; } /** * 重新加载守护进程配置 */ public boolean reload() { return false; } /** * 获取守护进程当前状态 */ public String getState(){ return state; } @Override public void setBlackList(BlackList blacklist) { } @Override public boolean newIncomingMessage(Queue<TextMessage> messages) { return false; } @Override public Queue<TextMessage> getNewIncomingMessage() { return null; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -