package guang.crawler.controller.webservice; import guang.crawler.centerConfig.CenterConfig; import guang.crawler.controller.ControllerConfig; import guang.crawler.util.NetworkHelper; import java.io.IOException; import javax.xml.ws.Endpoint; import org.apache.zookeeper.KeeperException; /** * 对控制器发布的web service进行管理的类 * * @author sun * */ public class WebServiceDaemon { private static final String MANAGER_SERVICE = "managerService"; private static WebServiceDaemon webServiceDaemon; public static WebServiceDaemon me() { if (WebServiceDaemon.webServiceDaemon == null) { WebServiceDaemon.webServiceDaemon = new WebServiceDaemon(); } return WebServiceDaemon.webServiceDaemon; } private ControllerConfig controllerConfig; private Endpoint managerService; private WebServiceDaemon() { this.controllerConfig = ControllerConfig.me(); } /** * 启动web服务 * * @throws IOException * @throws InterruptedException * @throws KeeperException */ public void start() throws IOException, InterruptedException, KeeperException { // 先获取需要的端口号 int port = this.controllerConfig.getWebserviceSuggestPort(); // 启动服务端 String address = "http://" + NetworkHelper.getIPAddress() + ":" + port + "/crawler/controller/managerService"; this.managerService = Endpoint.publish(address, new SiteManagerServiceImp()); // 注册该服务 CenterConfig.me() .getControllerInfo() .getControllerServicesInfo() .registService(WebServiceDaemon.MANAGER_SERVICE, address); } /** * 停止web服务 */ public void stop() { try { CenterConfig.me() .getControllerInfo() .getControllerServicesInfo() .unRegistService(WebServiceDaemon.MANAGER_SERVICE); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } if (this.managerService != null) { this.managerService.stop(); } } }