Author: rob.stryker(a)jboss.com
Date: 2011-07-15 05:48:07 -0400 (Fri, 15 Jul 2011)
New Revision: 32935
Added:
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/IServerStatePoller2.java
Modified:
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/extensions/polling/WebPortPoller.java
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/v7/JBoss7ManagerServicePoller.java
trunk/as/plugins/org.jboss.ide.eclipse.as.jmx.integration/src/org/jboss/ide/eclipse/as/jmx/integration/JMXPoller.java
Log:
/JBIDE-9350 - new API addition for pollers
Modified:
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/extensions/polling/WebPortPoller.java
===================================================================
---
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/extensions/polling/WebPortPoller.java 2011-07-15
09:24:06 UTC (rev 32934)
+++
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/extensions/polling/WebPortPoller.java 2011-07-15
09:48:07 UTC (rev 32935)
@@ -9,13 +9,15 @@
import java.util.Properties;
import org.eclipse.wst.server.core.IServer;
-import org.jboss.ide.eclipse.as.core.server.IServerStatePoller;
+import org.jboss.ide.eclipse.as.core.server.IServerStatePoller.PollingException;
+import org.jboss.ide.eclipse.as.core.server.IServerStatePoller.RequiresInfoException;
+import org.jboss.ide.eclipse.as.core.server.IServerStatePoller2;
import org.jboss.ide.eclipse.as.core.server.internal.JBossServer;
import org.jboss.ide.eclipse.as.core.server.internal.PollThread;
import org.jboss.ide.eclipse.as.core.server.internal.ServerStatePollerType;
import org.jboss.ide.eclipse.as.core.util.ServerConverter;
-public class WebPortPoller implements IServerStatePoller {
+public class WebPortPoller implements IServerStatePoller2 {
public static final String WEB_POLLER_ID =
"org.jboss.ide.eclipse.as.core.runtime.server.WebPoller"; //$NON-NLS-1$
private IServer server;
@@ -66,7 +68,7 @@
return onePing(getURL(server));
}
- public static boolean onePing(String url) {
+ private static boolean onePing(String url) {
try {
URL pingUrl = new URL(url);
URLConnection conn = pingUrl.openConnection();
@@ -117,4 +119,8 @@
return TIMEOUT_BEHAVIOR_FAIL;
}
+ public boolean getCurrentStateSynchronous(IServer server) {
+ return onePing(server);
+ }
+
}
Added:
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/IServerStatePoller2.java
===================================================================
---
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/IServerStatePoller2.java
(rev 0)
+++
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/IServerStatePoller2.java 2011-07-15
09:48:07 UTC (rev 32935)
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * Copyright (c) 2011 Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at
http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.ide.eclipse.as.core.server;
+
+import org.eclipse.wst.server.core.IServer;
+
+/**
+ * This interface is an addition to the IServerStatePoller
+ * for pollers which can be forced immediately to poll the server.
+ * Some pollers, such as timeout poller or processTerminated poller,
+ * have no such ability.
+ */
+public interface IServerStatePoller2 extends IServerStatePoller {
+ /**
+ * Get the current state of the server via a forced
+ * poll request.
+ *
+ * This API is required because the structure of the poller API
+ * allows some pollers to launch their own threads, and respond to
+ * getState() as the answer comes in.
+ *
+ * This method, in contrast, initiates an immediate and synchronous
+ * poll attempt to determine the current state.
+ *
+ * @return IServerStatePoller.SERVER_UP or SERVER_DOWN
+ */
+ public boolean getCurrentStateSynchronous(IServer server);
+}
Modified:
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/v7/JBoss7ManagerServicePoller.java
===================================================================
---
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/v7/JBoss7ManagerServicePoller.java 2011-07-15
09:24:06 UTC (rev 32934)
+++
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/v7/JBoss7ManagerServicePoller.java 2011-07-15
09:48:07 UTC (rev 32935)
@@ -19,13 +19,14 @@
import org.eclipse.wst.server.core.IServer;
import org.jboss.ide.eclipse.as.core.server.IJBoss7ManagerService;
import org.jboss.ide.eclipse.as.core.server.IServerStatePoller;
+import org.jboss.ide.eclipse.as.core.server.IServerStatePoller2;
import org.jboss.ide.eclipse.as.core.server.internal.PollThread;
import org.jboss.ide.eclipse.as.core.server.internal.ServerStatePollerType;
/**
* @author André Dietisheim
*/
-public class JBoss7ManagerServicePoller implements IServerStatePoller {
+public class JBoss7ManagerServicePoller implements IServerStatePoller2 {
public static final String POLLER_ID =
"org.jboss.ide.eclipse.as.core.server.JBoss7ManagerServicePoller";
//$NON-NLS-1$
private IServer server;
@@ -125,4 +126,13 @@
public int getTimeoutBehavior() {
return TIMEOUT_BEHAVIOR_FAIL;
}
+
+ public boolean getCurrentStateSynchronous(IServer server) {
+ try {
+ JBoss7ServerState state = service.getServerState(getServer().getHost(),
getManagementPort());
+ return state == JBoss7ServerState.RUNNING ? IServerStatePoller.SERVER_UP :
IServerStatePoller.SERVER_DOWN;
+ } catch(Exception e) {
+ }
+ return IServerStatePoller.SERVER_DOWN;
+ }
}
Modified:
trunk/as/plugins/org.jboss.ide.eclipse.as.jmx.integration/src/org/jboss/ide/eclipse/as/jmx/integration/JMXPoller.java
===================================================================
---
trunk/as/plugins/org.jboss.ide.eclipse.as.jmx.integration/src/org/jboss/ide/eclipse/as/jmx/integration/JMXPoller.java 2011-07-15
09:24:06 UTC (rev 32934)
+++
trunk/as/plugins/org.jboss.ide.eclipse.as.jmx.integration/src/org/jboss/ide/eclipse/as/jmx/integration/JMXPoller.java 2011-07-15
09:48:07 UTC (rev 32935)
@@ -30,6 +30,7 @@
import org.jboss.ide.eclipse.as.core.extensions.events.IEventCodes;
import org.jboss.ide.eclipse.as.core.extensions.events.ServerLogger;
import org.jboss.ide.eclipse.as.core.server.IServerStatePoller;
+import org.jboss.ide.eclipse.as.core.server.IServerStatePoller2;
import org.jboss.ide.eclipse.as.core.server.internal.PollThread;
import org.jboss.ide.eclipse.as.core.server.internal.ServerStatePollerType;
import org.jboss.ide.eclipse.as.core.util.IJBossRuntimeConstants;
@@ -40,7 +41,7 @@
* @author Rob rob.stryker(a)redhat.com
*
*/
-public class JMXPoller implements IServerStatePoller {
+public class JMXPoller implements IServerStatePoller2 {
public static final String POLLER_ID =
"org.jboss.ide.eclipse.as.core.runtime.server.JMXPoller"; //$NON-NLS-1$
public static final int JMXPOLLER_CODE = IEventCodes.JMXPOLLER_CODE;
@@ -75,20 +76,13 @@
launchJMXPoller();
}
- private class JMXPollerRunnable implements IJMXRunnable {
+ private static class JMXPollerRunnable implements IJMXRunnable {
+ private boolean result;
public void run(MBeanServerConnection connection) throws Exception {
Object attInfo = connection.getAttribute(
new ObjectName(IJBossRuntimeConstants.SYSTEM_MBEAN),
IJBossRuntimeConstants.STARTED_METHOD);
- boolean b = ((Boolean) attInfo).booleanValue();
- started = b ? STATE_STARTED : STATE_TRANSITION;
- done = b;
- if( !startingFound ) {
- startingFound = true;
- IStatus s = new Status(IStatus.INFO, JBossServerCorePlugin.PLUGIN_ID,
- JMXPOLLER_CODE|started, Messages.ServerStarting, null);
- log(s);
- }
+ result = ((Boolean) attInfo).booleanValue();
}
}
@@ -100,6 +94,14 @@
while( !done && !canceled) {
try {
runner.run(runnable);
+ started = runnable.result ? STATE_STARTED : STATE_TRANSITION;
+ done = runnable.result;
+ if( !startingFound ) {
+ startingFound = true;
+ IStatus s = new Status(IStatus.INFO, JBossServerCorePlugin.PLUGIN_ID,
+ JMXPOLLER_CODE|started, Messages.ServerStarting, null);
+ log(s);
+ }
} catch(CoreException ce) {
handleException(ce.getCause());
}
@@ -247,4 +249,20 @@
if( !canceled )
ServerLogger.getDefault().log(server,s);
}
+
+ public boolean getCurrentStateSynchronous(IServer server) {
+ JMXClassLoaderRepository.getDefault().addConcerned(server, this);
+ JMXPollerRunnable runnable2 = new JMXPollerRunnable();
+ JMXSafeRunner runner2 = new JMXSafeRunner(server);
+ try {
+ runner2.run(runnable);
+ int started2 = runnable2.result ? STATE_STARTED : STATE_TRANSITION;
+ if( started2 == STATE_STARTED )
+ return IServerStatePoller.SERVER_UP;
+ } catch(CoreException ce) {
+ } finally {
+ JMXClassLoaderRepository.getDefault().removeConcerned(server, this);
+ }
+ return IServerStatePoller.SERVER_DOWN;
+ }
}