From 94a67165e140f64b1f3fd6485422bed117249122 Mon Sep 17 00:00:00 2001 From: "yihua.huang" Date: Sat, 26 Apr 2014 20:17:52 +0800 Subject: [PATCH] remove jmx server for simplify #98 --- .../webmagic/example/MonitorExample.java | 12 +- .../webmagic/monitor/SpiderMonitor.java | 141 +----------------- .../webmagic/monitor/SpiderMonitorTest.java | 1 - .../webmagic/model/samples/Kr36NewsModel.java | 2 +- 4 files changed, 8 insertions(+), 148 deletions(-) diff --git a/webmagic-extension/src/main/java/us/codecraft/webmagic/example/MonitorExample.java b/webmagic-extension/src/main/java/us/codecraft/webmagic/example/MonitorExample.java index 60f62b0..55fa0c8 100644 --- a/webmagic-extension/src/main/java/us/codecraft/webmagic/example/MonitorExample.java +++ b/webmagic-extension/src/main/java/us/codecraft/webmagic/example/MonitorExample.java @@ -18,16 +18,8 @@ public class MonitorExample { Spider githubSpider = Spider.create(new GithubRepoPageProcessor()) .addUrl("https://github.com/code4craft"); - SpiderMonitor spiderMonitor = SpiderMonitor.instance(); - spiderMonitor.register(oschinaSpider); - spiderMonitor.register(githubSpider); - //If you want to connect it from remote, use spiderMonitor.server().jmxStart(); - //ONLY ONE server can start for a machine. - //Others will be registered without start a server. - //You can also register a server by spiderMonitor.client(host,port).jmxStart(). - spiderMonitor.server().jmxStart(); - oschinaSpider.start(); - githubSpider.start(); + SpiderMonitor.instance().register(oschinaSpider); + SpiderMonitor.instance().register(githubSpider); } } diff --git a/webmagic-extension/src/main/java/us/codecraft/webmagic/monitor/SpiderMonitor.java b/webmagic-extension/src/main/java/us/codecraft/webmagic/monitor/SpiderMonitor.java index 10ca508..a870c1d 100644 --- a/webmagic-extension/src/main/java/us/codecraft/webmagic/monitor/SpiderMonitor.java +++ b/webmagic-extension/src/main/java/us/codecraft/webmagic/monitor/SpiderMonitor.java @@ -6,17 +6,9 @@ import us.codecraft.webmagic.Request; import us.codecraft.webmagic.Spider; import us.codecraft.webmagic.SpiderListener; import us.codecraft.webmagic.utils.Experimental; -import us.codecraft.webmagic.utils.IPUtils; import javax.management.*; -import javax.management.remote.JMXConnectorServer; -import javax.management.remote.JMXConnectorServerFactory; -import javax.management.remote.JMXServiceURL; -import java.io.IOException; import java.lang.management.ManagementFactory; -import java.rmi.registry.LocateRegistry; -import java.rmi.registry.Registry; -import java.rmi.server.ExportException; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -30,41 +22,21 @@ import java.util.concurrent.atomic.AtomicInteger; @Experimental public class SpiderMonitor { - private enum Type { - Server, Client, Local; - } - private static SpiderMonitor INSTANCE = new SpiderMonitor(); private AtomicBoolean started = new AtomicBoolean(false); private Logger logger = LoggerFactory.getLogger(getClass()); - private static final int DEFAULT_SERVER_PORT = 14721; - - private static final String DEFAULT_SERVER_HOST = "localhost"; - - private int serverPort; - private MBeanServer mbeanServer; private String jmxServerName; - private String serverHost; - - private Type type = Type.Local; - private List spiderStatuses = new ArrayList(); - public List getSpiders() { - return spiderStatuses; - } - - public SpiderStatusMXBean getSpider() { - return spiderStatuses.get(0); - } - - private SpiderMonitor() { + protected SpiderMonitor() { + jmxServerName = "WebMagic"; + mbeanServer = ManagementFactory.getPlatformMBeanServer(); } /** @@ -84,9 +56,7 @@ public class SpiderMonitor { spider.getSpiderListeners().add(monitorSpiderListener); } SpiderStatusMXBean spiderStatusMBean = getSpiderStatusMBean(spider, monitorSpiderListener); - if (started.get()) { - registerMBean(spiderStatusMBean); - } + registerMBean(spiderStatusMBean); spiderStatuses.add(spiderStatusMBean); } return this; @@ -132,109 +102,8 @@ public class SpiderMonitor { } } - - /** - * Start monitor as server mode. - * - * @param port - * @return - * @throws IOException - * @throws JMException - */ - public synchronized SpiderMonitor server(int port) throws IOException, JMException { - try { - Registry registry = LocateRegistry.createRegistry(port); - } catch (ExportException e) { - logger.warn("Start server fail, maybe the address is in using.", e); - } - serverPort = port; - serverHost = "localhost"; - type = Type.Server; - return this; - } - - /** - * Start monitor as server mode. - * - * @return - * @throws IOException - * @throws JMException - */ - public SpiderMonitor server() throws IOException, JMException { - return server(DEFAULT_SERVER_PORT); - } - - /** - * Local mode: the monitor will be bound to the JVM instance.

- * Use jconsole to check your application. - * - * @return - */ - public synchronized SpiderMonitor local() { - this.type = Type.Local; - return this; - } - - - /** - * Start monitor as client mode. - * - * @param serverHost - * @param serverPort - * @return - * @throws IOException - * @throws JMException - */ - public synchronized SpiderMonitor client(String serverHost, int serverPort) throws IOException, JMException { - type = Type.Client; - this.serverHost = serverHost; - this.serverPort = serverPort; - return this; - } - - /** - * Start monitor as client mode. - * - * @return - * @throws IOException - * @throws JMException - */ - public SpiderMonitor client() throws IOException, JMException { - return client(DEFAULT_SERVER_HOST, DEFAULT_SERVER_PORT); - } - - public synchronized SpiderMonitor jmxStart() throws IOException, JMException { - if (!started.compareAndSet(false, true)) { - logger.error("Monitor has already started!"); - return this; - } - jmxServerName = "WebMagic-" + IPUtils.getFirstNoLoopbackIPAddresses(); - - // start JNDI - mbeanServer = ManagementFactory.getPlatformMBeanServer(); - - ObjectName objName; - - if (type != Type.Local) { - JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://" + serverHost + ":" + serverPort + "/" + jmxServerName); - System.out.println("JMXServiceURL: " + url.toString()); - System.out.println("Please replace localhost of your ip if you want to connect it in remote server."); - JMXConnectorServer jmxConnServer = JMXConnectorServerFactory.newJMXConnectorServer(url, null, mbeanServer); - jmxConnServer.start(); - objName = new ObjectName(jmxServerName + ":name=WebMagicMonitor"); - mbeanServer.registerMBean(jmxConnServer, objName); - } - - for (SpiderStatusMXBean spiderStatus : spiderStatuses) { - registerMBean(spiderStatus); - } - - return this; - } - protected void registerMBean(SpiderStatusMXBean spiderStatus) throws MalformedObjectNameException, InstanceAlreadyExistsException, MBeanRegistrationException, NotCompliantMBeanException { - ObjectName objName; - objName = new ObjectName(jmxServerName + ":name=" + spiderStatus.getName()); + ObjectName objName = new ObjectName(jmxServerName + ":name=" + spiderStatus.getName()); mbeanServer.registerMBean(spiderStatus, objName); } diff --git a/webmagic-extension/src/test/java/us/codecraft/webmagic/monitor/SpiderMonitorTest.java b/webmagic-extension/src/test/java/us/codecraft/webmagic/monitor/SpiderMonitorTest.java index d1065f9..3baa0d6 100644 --- a/webmagic-extension/src/test/java/us/codecraft/webmagic/monitor/SpiderMonitorTest.java +++ b/webmagic-extension/src/test/java/us/codecraft/webmagic/monitor/SpiderMonitorTest.java @@ -26,7 +26,6 @@ public class SpiderMonitorTest { .addUrl("https://github.com/code4craft"); spiderMonitor.register(oschinaSpider, githubSpider); - spiderMonitor.jmxStart(); } } diff --git a/webmagic-samples/src/main/java/us/codecraft/webmagic/model/samples/Kr36NewsModel.java b/webmagic-samples/src/main/java/us/codecraft/webmagic/model/samples/Kr36NewsModel.java index 6208f68..a1ef3fd 100644 --- a/webmagic-samples/src/main/java/us/codecraft/webmagic/model/samples/Kr36NewsModel.java +++ b/webmagic-samples/src/main/java/us/codecraft/webmagic/model/samples/Kr36NewsModel.java @@ -40,7 +40,7 @@ public class Kr36NewsModel { }, Kr36NewsModel.class).thread(20); thread.start(); SpiderMonitor spiderMonitor = SpiderMonitor.instance(); - spiderMonitor.server().register(thread).jmxStart(); + spiderMonitor.register(thread); } public String getTitle() {