📄 messagelaunchercontrollerimpl.java.svn-base
字号:
package com.infobank.superchannel.admin.controller.implementation;import java.rmi.NoSuchObjectException;import java.rmi.NotBoundException;import java.rmi.RemoteException;import java.rmi.registry.LocateRegistry;import java.rmi.registry.Registry;import java.rmi.server.UnicastRemoteObject;import java.util.Hashtable;import java.util.LinkedList;import java.util.List;import java.util.UUID;import java.util.concurrent.atomic.AtomicReference;import org.apache.commons.configuration.Configuration;import com.infobank.superchannel.admin.controller.DatabaseCacheController;import com.infobank.superchannel.admin.controller.MessageLauncherController;import com.infobank.superchannel.admin.controller.SuperChannelController;import com.infobank.superchannel.admin.monitor.ChannelStatusMonitor;import com.infobank.superchannel.admin.monitor.MessageLauncherStatusMonitor;import com.infobank.superchannel.admin.monitor.implementation.ChannelStatusMonitorImpl;import com.infobank.superchannel.admin.monitor.implementation.MessageLauncherStatusMonitorImpl;import com.infobank.superchannel.daemon.messagelauncher.MessageLauncherDaemon;import com.infobank.superchannel.daemon.messagelauncher.channel.ChannelManager;import com.infobank.superchannel.daemon.messagelauncher.channel.ChannelPlugin;import com.infobank.superchannel.pojo.ControllerUserToken;import com.infobank.superchannel.util.DaemonConfiguration;/** * @author Xiaoguang Sun * @version 类说明: 消息发送服务器的控制器实现 */public class MessageLauncherControllerImpl implements com.infobank.superchannel.admin.controller.MessageLauncherController { // 消息发送服务器对象 private AtomicReference<MessageLauncherDaemon> daemon=new AtomicReference<MessageLauncherDaemon>(); // 通道监控器列表 private ChannelStatusMonitor channelMonitor=null; // 消息发送服务器状态监控器 private MessageLauncherStatusMonitor statusMonitor=null; private SuperChannelController superChannelController=null; /** * 验证当前用户访问令牌的合法性 * @param token 用户访问令牌 * @return 是否合法 */ private boolean verify(ControllerUserToken token){ if(daemon.get()==null) return false; try{ return superChannelController.isValidToken(token); }catch(RemoteException ex){ return false; } } /** * 构造函数 * @param daemon 信息发送服务器对象 */ public MessageLauncherControllerImpl(MessageLauncherDaemon daemon){ DaemonConfiguration config=DaemonConfiguration.getInstance(); String superChannelControllerEndpoint=config.getString("/daemon[@type='SuperChannel']/endpoint/@name"); this.daemon.set(daemon); try{ Registry registry = LocateRegistry.getRegistry(); superChannelController=(SuperChannelController) registry.lookup(superChannelControllerEndpoint); ChannelManager manager=ChannelManager.getInstance(); channelMonitor=new ChannelStatusMonitorImpl(daemon,manager.getChannelPlugin()); statusMonitor=new MessageLauncherStatusMonitorImpl(daemon); MessageLauncherController ctrl=(MessageLauncherController)UnicastRemoteObject.exportObject(this, 0); superChannelController.setMessageLauncherController(daemon.getInternalUserToken(),ctrl,daemon.getTag()); } catch(NotBoundException ex){ throw new RuntimeException("fatal error: could not locate super channel controller from registry"); } catch(RemoteException ex){ throw new RuntimeException("fatal error: could not bind controller to registry"); } } /** * 获取所有通道的状态监控器对象列表 * @param token 用户访问令牌 * @return 所有通道的状态监控器对象列表 */ public ChannelStatusMonitor getChannelMonitor(ControllerUserToken token) { if(!verify(token)) return null; return channelMonitor; } /** * 获取消息发送服务器的状态监控器对象 * @param token 用户访问令牌 * @return 状态监控器对象 */ public MessageLauncherStatusMonitor getStatusMonitor(ControllerUserToken token){ if(!verify(token)) return null; return statusMonitor; } /** * 暂停信息发送服务器 * @param token 用户访问令牌 * @return 操作是否成功 */ public boolean pause(ControllerUserToken token){ if(!verify(token)) return false; return daemon.get().pause(); } /** * 重新读取信息发送服务器配置 * @param token 用户访问令牌 * @return 操作是否成功 */ public boolean reload(ControllerUserToken token){ if(!verify(token)) return false; return daemon.get().reload(); } /** * 重新启动信息发送服务器 * @param token 用户访问令牌 * @return 操作是否成功 */ public boolean restart(ControllerUserToken token){ if(!verify(token)) return false; return daemon.get().restart(); } /** * 继续暂停的信息发送服务器 * @param token 用户访问令牌 * @return 操作是否成功 */ public boolean resume(ControllerUserToken token){ if(!verify(token)) return false; return daemon.get().resume(); } /** * 停止信息发送服务器 * @param token 用户访问令牌 * @return 操作是否成功 */ public boolean stop(ControllerUserToken token){ if(!verify(token)) return false; boolean result=daemon.get().stop(); if(result){ try{ while(!UnicastRemoteObject.unexportObject(this, true)){ Thread.sleep(1000); } }catch(NoSuchObjectException ex){ return false; } catch(InterruptedException ex){ return false; } System.exit(0); } return result; } public String getMessageLauncherTag(ControllerUserToken token) { if(verify(token)){ return daemon.get().getTag(); } else{ return null; } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -