[jbosstools-issues] [JBoss JIRA] Commented: (JBDS-1155) EAR deployment problems when variables are used in Eclipse 3.5.2/WTP 3.1.2

Max Rydahl Andersen (JIRA) jira-events at lists.jboss.org
Fri Mar 12 04:00:38 EST 2010


    [ https://jira.jboss.org/jira/browse/JBDS-1155?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12519563#action_12519563 ] 

Max Rydahl Andersen commented on JBDS-1155:
-------------------------------------------

### Eclipse Workspace Patch 1.0
#P org.jboss.ide.eclipse.as.core
Index: jbosscore/org/jboss/ide/eclipse/as/core/Messages.java
===================================================================
--- jbosscore/org/jboss/ide/eclipse/as/core/Messages.java	(revision 20521)
+++ jbosscore/org/jboss/ide/eclipse/as/core/Messages.java	(working copy)
@@ -28,6 +28,8 @@
 	public static String saveXMLDocumentFailed;
 	public static String loadJMXClassesFailed;
 	public static String securityException;
+	public static String JBossServerCorePlugin_Fix_component_xml;
+
 	public static String JMXPoller;
 	public static String XPathLoadFailure;
 	
Index: META-INF/MANIFEST.MF
===================================================================
--- META-INF/MANIFEST.MF	(revision 20521)
+++ META-INF/MANIFEST.MF	(working copy)
@@ -13,6 +13,7 @@
  org.eclipse.wst.server.core,
  org.eclipse.jst.j2ee,
  org.eclipse.wst.xml.core,
+ org.eclipse.wst.sse.core,
  org.apache.ant,
  org.jboss.tools.jmx.core,
  org.eclipse.core.variables,
Index: jbosscore/org/jboss/ide/eclipse/as/core/JBossServerCorePlugin.java
===================================================================
--- jbosscore/org/jboss/ide/eclipse/as/core/JBossServerCorePlugin.java	(revision 20521)
+++ jbosscore/org/jboss/ide/eclipse/as/core/JBossServerCorePlugin.java	(working copy)
@@ -10,21 +10,49 @@
  ******************************************************************************/ 
 package org.jboss.ide.eclipse.as.core;
 
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IResourceChangeListener;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.IResourceDeltaVisitor;
 import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.resources.WorkspaceJob;
+import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IExtension;
 import org.eclipse.core.runtime.IExtensionPoint;
 import org.eclipse.core.runtime.IExtensionRegistry;
 import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.Plugin;
+import org.eclipse.core.runtime.Status;
 import org.eclipse.wst.common.project.facet.core.FacetedProjectFramework;
 import org.eclipse.wst.common.project.facet.core.events.IFacetedProjectEvent;
 import org.eclipse.wst.server.core.IServer;
+import org.eclipse.wst.sse.core.StructuredModelManager;
+import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel;
+import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument;
+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMDocument;
+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel;
 import org.jboss.ide.eclipse.as.core.extensions.descriptors.XPathModel;
 import org.jboss.ide.eclipse.as.core.server.UnitedServerListenerManager;
 import org.jboss.ide.eclipse.as.core.server.internal.ServerListener;
 import org.jboss.ide.eclipse.as.core.util.ServerUtil;
+import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
+import org.osgi.framework.Version;
+import org.w3c.dom.Attr;
+import org.w3c.dom.Element;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
 
 /**
  * The main plugin class to be used in the desktop.
@@ -33,7 +61,7 @@
 	//The shared instance.
 	private static JBossServerCorePlugin plugin;
 	public static final String PLUGIN_ID = "org.jboss.ide.eclipse.as.core"; //$NON-NLS-1$
-	
+	private static IResourceChangeListener listener;
 	/**
 	 * The constructor.
 	 */
@@ -61,8 +89,71 @@
 		UnitedServerListenerManager.getDefault().addListener(XPathModel.getDefault());
 		UnitedServerListenerManager.getDefault().addListener(ServerListener.getDefault());
 		FacetedProjectFramework.addListener( JBoss4xEarFacetInstallListener.getDefault(), IFacetedProjectEvent.Type.POST_INSTALL);
+		// A workaround for https://bugs.eclipse.org/bugs/show_bug.cgi?id=305306
+		if (isGalileoSR2()) {
+			addResourceChangeListener();
+		}
 	}
 
+	private void addResourceChangeListener() {
+		listener = new IResourceChangeListener() {
+			
+			public void resourceChanged(IResourceChangeEvent event) {
+				if (event.getType() != IResourceChangeEvent.POST_CHANGE)
+		            return;
+		         IResourceDelta delta = event.getDelta();
+		         final List<IResource> components = new ArrayList<IResource>();
+		         IResourceDeltaVisitor visitor = new IResourceDeltaVisitor() {
+		            public boolean visit(IResourceDelta delta) {
+						IResource resource = delta.getResource();
+						if (resource.getType() == IResource.PROJECT) {
+							IProject project = resource.getProject();
+							try {
+								return FacetedProjectFramework.hasProjectFacet(
+										project, "jst.ear"); //$NON-NLS-1$
+							} catch (CoreException e) {
+								return true;
+							}
+						}
+						if (resource.getType() == IResource.FOLDER) {
+							return resource.getName().equals(".settings"); //$NON-NLS-1$
+						}
+						if (resource.getType() == IResource.FILE
+								&& resource.getName().equals("org.eclipse.wst.common.component")) { //$NON-NLS-1$
+							components.add(resource);
+						}
+						return true;
+		            }
+		         };
+		         try {
+		             delta.accept(visitor);
+		          } catch (CoreException ignore) {
+		          }
+		          WorkspaceJob job = new WorkspaceJob(Messages.JBossServerCorePlugin_Fix_component_xml) {
+					
+					@Override
+					public IStatus runInWorkspace(IProgressMonitor monitor)
+							throws CoreException {
+						fixComponents(components);
+						return Status.OK_STATUS;
+					}
+				};
+		        job.schedule(100);
+			}
+		};
+		ResourcesPlugin.getWorkspace().addResourceChangeListener(listener, IResourceChangeEvent.POST_CHANGE);
+	}
+
+	public Boolean isGalileoSR2() {
+		Bundle bundle = Platform.getBundle("org.eclipse.wst.common.modulecore"); //$NON-NLS-1$
+		if (bundle != null) {
+			Version version = bundle.getVersion();
+			if (version.toString().equals("1.1.301.v201001252130")) { //$NON-NLS-1$
+				return Boolean.TRUE;
+			}
+		}
+		return Boolean.FALSE;
+	}
 	/**
 	 * This method is called when the plug-in is stopped
 	 */
@@ -71,8 +162,72 @@
 		UnitedServerListenerManager.getDefault().removeListener(ServerListener.getDefault());
 		UnitedServerListenerManager.getDefault().removeListener(XPathModel.getDefault());
 		FacetedProjectFramework.removeListener(JBoss4xEarFacetInstallListener.getDefault());
+		if (isGalileoSR2()) {
+			ResourcesPlugin.getWorkspace().removeResourceChangeListener(listener);
+		}
 	}
 
+	private void fixComponents(final List<IResource> components) {
+		for(IResource resource:components) {
+			  IStructuredModel model = null;
+			  boolean saveNeeded = false;
+			  try {
+				model = StructuredModelManager.getModelManager()
+						.getModelForEdit((IFile) resource);
+				if (model instanceof IDOMModel) {
+					IDOMModel xmlModel = (IDOMModel) model;
+					IDOMDocument document = xmlModel.getDocument();
+					Element root = document.getDocumentElement();
+					NodeList elements = root
+							.getElementsByTagName("dependent-module"); //$NON-NLS-1$
+					for (int i = 0; i < elements.getLength(); i++) {
+						Node element = elements.item(i);
+						NamedNodeMap attributes = element
+								.getAttributes();
+						boolean deployToLib = false;
+						String archiveName = null;
+						boolean isClasspath = false;
+						for (int j = 0; j < attributes.getLength(); j++) {
+							Attr attr = (Attr) attributes.item(j);
+							String name = attr.getName();
+							if ("deploy-path".equals(name)) { //$NON-NLS-1$
+								String value = attr.getValue();
+								if (value != null && "/lib".equals(value)) { //$NON-NLS-1$
+									deployToLib = true;
+								}
+							}
+							if ("archiveName".equals(name)) { //$NON-NLS-1$
+								archiveName = name;
+							}
+							if ("handle".equals(name)) { //$NON-NLS-1$
+								String value = attr.getValue();
+								if (value != null && value.startsWith("module:/classpath")) { //$NON-NLS-1$
+									isClasspath = true;
+								}
+							}
+						}
+						if (deployToLib && isClasspath && archiveName != null) {
+							attributes.removeNamedItem(archiveName);
+							saveNeeded = true;
+						}
+					}
+					if (saveNeeded) {
+						xmlModel.save();
+					}
+				}
+				
+			} catch (Exception e) {
+				IStatus status = new Status(IStatus.WARNING, PLUGIN_ID, e.getLocalizedMessage(),e);
+				getDefault().getLog().log(status);
+			} 
+			finally {
+				if (model != null) {
+					model.releaseFromEdit();
+				}
+			}
+		  }
+	}
+
 	/**
 	 * Returns the shared instance.
 	 */
Index: jbosscore/org/jboss/ide/eclipse/as/core/Messages.properties
===================================================================
--- jbosscore/org/jboss/ide/eclipse/as/core/Messages.properties	(revision 20521)
+++ jbosscore/org/jboss/ide/eclipse/as/core/Messages.properties	(working copy)
@@ -5,6 +5,7 @@
 serverCountName={0} ({1})
 runtime=Runtime
 securityException=Security Exception: {0}
+JBossServerCorePlugin_Fix_component_xml=Fix component.xml
 JMXPoller=JMX Poller
 loadJMXClassesFailed=Could not load JMX classes for server {0}
 PollingStartupSuccess=Server Startup Succeeded


> EAR deployment problems when variables are used in Eclipse 3.5.2/WTP 3.1.2
> --------------------------------------------------------------------------
>
>                 Key: JBDS-1155
>                 URL: https://jira.jboss.org/jira/browse/JBDS-1155
>             Project: Developer Studio (JBoss Developer Studio)
>          Issue Type: Bug
>          Components: integration
>    Affects Versions: 3.0.0.M4
>            Reporter: Max Rydahl Andersen
>            Assignee: Rob Stryker
>            Priority: Critical
>             Fix For: 3.0.0.GA
>
>
> https://issues.sonatype.org/browse/MNGECLIPSE-2150 and https://bugs.eclipse.org/bugs/show_bug.cgi?id=305306 indicates big regression bug in WTP EAR deployment that uses variables.
> What is the cause ? can we fix it ?

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://jira.jboss.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the jbosstools-issues mailing list