package jdepend.server.service.start; import java.io.IOException; import java.rmi.Naming; import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; import java.rmi.server.UnicastRemoteObject; import jdepend.framework.config.PropertyConfigurator; import jdepend.framework.context.JDependContext; import jdepend.framework.exception.JDependException; import jdepend.framework.log.BusiLogUtil; import jdepend.framework.log.LogUtil; import jdepend.framework.persistent.ConnectionFactory; import jdepend.framework.util.JDependUtil; import jdepend.framework.util.VersionUtil; import jdepend.server.service.JDependRemoteService; import jdepend.server.service.RemoteServiceFactory; import jdepend.server.service.analyzer.AnalyzerService; import jdepend.server.service.persistent.ServerConnectionProvider; import jdepend.server.service.score.ScoreRemoteService; import jdepend.server.service.session.JDependSessionService; import jdepend.server.service.user.UserRemoteService; /** * 后台启动远程服务 * * @author wangdg * */ public final class RemoteServiceStart { private Registry registry; private JDependRemoteService service; /** * @param args * @throws JDependException */ public static void main(String[] args) throws JDependException { initEnv(args); RemoteServiceStart start = new RemoteServiceStart(); System.out.println("启动服务[版本:" + VersionUtil.getVersion() + " 构建时间:" + VersionUtil.getBuildDate() + "]。。。"); start.startService(); System.out.println("启动服务完成,按[q]或[Q]退出服务。。。"); int i; try { while (true) { i = System.in.read(); if ((char) i == 'q' || (char) i == 'Q') break; if (i == 13 || i == 10) continue; } System.out.println("停止服务。。。"); start.stopService(); System.exit(0); } catch (IOException e) { e.printStackTrace(); } } public static void initEnv(String[] args) { // 设置workspacePath String workspacePath = JDependUtil.getArg(args, "-workspacePath"); if (workspacePath != null) { JDependContext.setWorkspacePath(args[2]); } else { JDependContext.setWorkspacePath(System.getProperty("user.dir")); } // 设置RunningPath JDependContext.setRunningPath(System.getProperty("user.dir")); // 设置ConnectionProvider ConnectionFactory.setProvider(new ServerConnectionProvider()); // 设置日志是否打印 PropertyConfigurator conf = new PropertyConfigurator(); BusiLogUtil.BUSINESSLOG = conf.isPrintBusiLog(); LogUtil.SYSTEMLOG = conf.isPrintSystemLog(); LogUtil.SYSTEMWARNING = conf.isPrintSystemWarning(); // ServiceFactory.initClassList(); } public synchronized void startService() throws JDependException { try { // 创建远程服务端口 this.registry = LocateRegistry.createRegistry(1099); // 绑定Session服务 LogUtil.getInstance(RemoteServiceStart.class).systemLog("绑定Session服务"); JDependSessionService sessionService = RemoteServiceFactory.createJDependSessionService(); Naming.rebind("rmi://localhost:1099/JDependSessionService", sessionService); // 绑定解析服务 LogUtil.getInstance(RemoteServiceStart.class).systemLog("绑定解析服务"); this.service = RemoteServiceFactory.createJDependRemoteService(); Naming.rebind("rmi://localhost:1099/JDependRemoteService", service); // 分析器远程服务 LogUtil.getInstance(RemoteServiceStart.class).systemLog("分析器远程服务"); AnalyzerService analyzerService = RemoteServiceFactory.createAnalyzerService(); Naming.rebind("rmi://localhost:1099/AnalyzerService", analyzerService); // 用户远程服务 LogUtil.getInstance(RemoteServiceStart.class).systemLog("用户远程服务"); UserRemoteService userRemoteService = RemoteServiceFactory.createUserRemoteService(); Naming.rebind("rmi://localhost:1099/UserRemoteService", userRemoteService); // 分数远程服务 LogUtil.getInstance(RemoteServiceStart.class).systemLog("分数远程服务"); ScoreRemoteService scoreRemoteService = RemoteServiceFactory.createScoreRemoteService(); Naming.rebind("rmi://localhost:1099/ScoreRemoteService", scoreRemoteService); } catch (Exception e) { throw new JDependException("启动远程服务错误!", e); } } public synchronized void stopService() throws JDependException { try { // 解除解析服务 LogUtil.getInstance(RemoteServiceStart.class).systemLog("解除解析服务"); Naming.unbind("rmi://localhost:1099/JDependRemoteService"); // 解除Session服务 LogUtil.getInstance(RemoteServiceStart.class).systemLog("解除Session服务"); Naming.unbind("rmi://localhost:1099/JDependSessionService"); // 解除分析器远程服务 LogUtil.getInstance(RemoteServiceStart.class).systemLog("解除分析器远程服务"); Naming.unbind("rmi://localhost:1099/AnalyzerService"); // 解除用户远程服务 LogUtil.getInstance(RemoteServiceStart.class).systemLog("解除用户远程服务"); Naming.unbind("rmi://localhost:1099/UserRemoteService"); // 解除分数远程服务 LogUtil.getInstance(RemoteServiceStart.class).systemLog("解除分数远程服务"); Naming.unbind("rmi://localhost:1099/ScoreRemoteService"); // 停止服务 UnicastRemoteObject.unexportObject(registry, true); } catch (Exception e) { throw new JDependException("解除解析服务绑定错误!", e); } } }