[261093] Publish occurs during run on server even the server is synchronized.
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/RunOnServerActionDelegate.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/RunOnServerActionDelegate.java
index 6304836..6df0cf2 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/RunOnServerActionDelegate.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/RunOnServerActionDelegate.java
@@ -422,21 +422,31 @@
 						final IServer server3 = server;
 						server.restart(launchMode, new IServer.IOperationListener() {
 							public void done(IStatus result) {
-								server3.publish(IServer.PUBLISH_INCREMENTAL, null, info, new IServer.IOperationListener() {
-									public void done(IStatus result2) {
-										if (result2.isOK())
-											clientJob.schedule();
-									}
-								});
+								// Only publish if the server requires publish before launching the client.
+								if (server3.shouldPublish()) {
+									server3.publish(IServer.PUBLISH_INCREMENTAL, null, info, new IServer.IOperationListener() {
+										public void done(IStatus result2) {
+											if (result2.isOK())
+												clientJob.schedule();
+										}
+									});
+								} else {
+									clientJob.schedule();
+								}
 							}
 						});
 					} else {
-						server.publish(IServer.PUBLISH_INCREMENTAL, null, info, new IServer.IOperationListener() {
-							public void done(IStatus result) {
-								if (result.isOK())
-									clientJob.schedule();
-							}
-						});
+						// Only publish if the server requires publish before launching the client.
+						if (server.shouldPublish()) {
+							server.publish(IServer.PUBLISH_INCREMENTAL, null, info, new IServer.IOperationListener() {
+								public void done(IStatus result) {
+									if (result.isOK())
+										clientJob.schedule();
+								}
+							});
+						} else {
+							clientJob.schedule();
+						}
 					}
 				} else if (state != IServer.STATE_STOPPING) {
 					final LaunchClientJob clientJob = new LaunchClientJob(server, modules, launchMode, moduleArtifact, launchableAdapter, client);
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/RunOnServerLaunchConfigurationDelegate.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/RunOnServerLaunchConfigurationDelegate.java
index 1c01ae3..4a4303a 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/RunOnServerLaunchConfigurationDelegate.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/RunOnServerLaunchConfigurationDelegate.java
@@ -220,21 +220,31 @@
 				final IServer server2 = server;
 				server.restart(launchMode, new IServer.IOperationListener() {
 					public void done(IStatus result) {
-						server2.publish(IServer.PUBLISH_INCREMENTAL, null, info, new IServer.IOperationListener() {
-							public void done(IStatus result2) {
-								if (result2.isOK())
-									clientJob.schedule();
-							}
-						});
+						// Only publish if the server requires publish before launching the client.
+						if (server2.shouldPublish()) {
+							server2.publish(IServer.PUBLISH_INCREMENTAL, null, info, new IServer.IOperationListener() {
+								public void done(IStatus result2) {
+									if (result2.isOK())
+										clientJob.schedule();
+								}
+							});
+						} else {
+							clientJob.schedule();
+						}
 					}
 				});
 			} else {
-				server.publish(IServer.PUBLISH_INCREMENTAL, null, info, new IServer.IOperationListener() {
-					public void done(IStatus result) {
-						if (result.isOK())
-							clientJob.schedule();
-					}
-				});
+				// Only publish if the server requires publish before launching the client.
+				if (server.shouldPublish()) {
+					server.publish(IServer.PUBLISH_INCREMENTAL, null, info, new IServer.IOperationListener() {
+						public void done(IStatus result) {
+							if (result.isOK())
+								clientJob.schedule();
+						}
+					});
+				} else {
+					clientJob.schedule();
+				}
 			}
 		} else if (state != IServer.STATE_STOPPING) {
 			final LaunchClientJob clientJob = new LaunchClientJob(server, modules, launchMode, moduleArtifact, launchableAdapter, client);