Author: rob.stryker(a)jboss.com
Date: 2009-10-12 17:53:18 -0400 (Mon, 12 Oct 2009)
New Revision: 18052
Modified:
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/JBossServerBehavior.java
Log:
JBIDE-4925 - significant discussion with Darryl Miles led to this crafted solution.
Modified:
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/JBossServerBehavior.java
===================================================================
---
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/JBossServerBehavior.java 2009-10-12
19:38:21 UTC (rev 18051)
+++
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/JBossServerBehavior.java 2009-10-12
21:53:18 UTC (rev 18052)
@@ -245,25 +245,40 @@
protected void launchDeployCommand(final MBeanServerConnection connection, final
ObjectName objectName,
final String methodName, IProgressMonitor monitor) throws Exception {
final Exception[] e = new Exception[1];
+ final Object waitObject = new Object();
+ final Boolean[] subtaskComplete = new Boolean[1];
+ subtaskComplete[0] = new Boolean(false);
Thread t = new Thread() {
public void run() {
+ Exception exception = null;
try {
executeDeploymentCommand(connection, objectName, methodName);
} catch( Exception ex ) {
- e[0] = ex;
+ exception = ex;
}
+ synchronized(waitObject) {
+ e[0] = exception;
+ subtaskComplete[0] = new Boolean(true);
+ waitObject.notifyAll();
+ }
}
};
t.start();
int count = 0;
while(t.isAlive() && !monitor.isCanceled() && count <= 4000) {
- count+= 100;
- Thread.sleep(100);
+ count+= 1000;
+ synchronized(waitObject) {
+ if( subtaskComplete[0].booleanValue() )
+ break;
+ waitObject.wait(1000);
+ }
}
- if( t.isAlive()) {
- t.interrupt();
- IStatus status = new Status(IStatus.WARNING, JBossServerCorePlugin.PLUGIN_ID,
IEventCodes.DEPLOYMENT_SCANNER_TRANSITION_CANCELED, Messages.JMXScannerCanceled, null);
- ServerLogger.getDefault().log(getServer(), status);
+ synchronized(waitObject) {
+ if( !subtaskComplete[0].booleanValue()) {
+ t.interrupt();
+ IStatus status = new Status(IStatus.WARNING, JBossServerCorePlugin.PLUGIN_ID,
IEventCodes.DEPLOYMENT_SCANNER_TRANSITION_CANCELED, Messages.JMXScannerCanceled, null);
+ ServerLogger.getDefault().log(getServer(), status);
+ }
}
}
Show replies by date