You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by me...@apache.org on 2006/10/07 23:19:51 UTC

svn commit: r454023 - in /incubator/tuscany/java/sca/services/maven/src: main/java/org/apache/tuscany/services/maven/MavenHelper.java test/java/org/apache/tuscany/services/maven/MavenArtifactRepositoryTestCase.java

Author: meerajk
Date: Sat Oct  7 14:19:50 2006
New Revision: 454023

URL: http://svn.apache.org/viewvc?view=rev&rev=454023
Log:
Evil hack for working around Tomcat classloader issue and classworlds.

Modified:
    incubator/tuscany/java/sca/services/maven/src/main/java/org/apache/tuscany/services/maven/MavenHelper.java
    incubator/tuscany/java/sca/services/maven/src/test/java/org/apache/tuscany/services/maven/MavenArtifactRepositoryTestCase.java

Modified: incubator/tuscany/java/sca/services/maven/src/main/java/org/apache/tuscany/services/maven/MavenHelper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/maven/src/main/java/org/apache/tuscany/services/maven/MavenHelper.java?view=diff&rev=454023&r1=454022&r2=454023
==============================================================================
--- incubator/tuscany/java/sca/services/maven/src/main/java/org/apache/tuscany/services/maven/MavenHelper.java (original)
+++ incubator/tuscany/java/sca/services/maven/src/main/java/org/apache/tuscany/services/maven/MavenHelper.java Sat Oct  7 14:19:50 2006
@@ -19,10 +19,13 @@
 package org.apache.tuscany.services.maven;
 
 import java.io.File;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
 import java.net.MalformedURLException;
-import java.net.URL;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Map;
 
 import org.apache.maven.artifact.factory.ArtifactFactory;
 import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException;
@@ -38,6 +41,7 @@
 import org.apache.maven.artifact.resolver.ArtifactResolver;
 import org.apache.tuscany.spi.services.artifact.Artifact;
 import org.codehaus.classworlds.ClassWorld;
+import org.codehaus.classworlds.DefaultClassRealm;
 import org.codehaus.classworlds.DuplicateRealmException;
 import org.codehaus.plexus.PlexusContainerException;
 import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
@@ -95,8 +99,25 @@
 
             Embedder embedder = new Embedder();
             ClassWorld classWorld = new ClassWorld();
+            
             classWorld.newRealm("plexus.core", getClass().getClassLoader());
-
+            
+            // Evil hack for Tomcat classloader issue - starts
+            Field realmsField = ClassWorld.class.getDeclaredField("realms");
+            realmsField.setAccessible(true);
+            Map realms = (Map)realmsField.get(classWorld);
+            DefaultClassRealm realm = (DefaultClassRealm) realms.get("plexus.core");
+
+            Class clazz = Class.forName("org.codehaus.classworlds.RealmClassLoader");
+            Constructor ctr = clazz.getDeclaredConstructor(new Class[] {DefaultClassRealm.class, ClassLoader.class});
+            ctr.setAccessible(true);
+            Object realmClassLoader = ctr.newInstance(realm, getClass().getClassLoader());
+            
+            Field realmClassLoaderField = DefaultClassRealm.class.getDeclaredField("classLoader");
+            realmClassLoaderField.setAccessible(true);
+            realmClassLoaderField.set(realm, realmClassLoader);
+            // Evil hack for Tomcat classloader issue - ends
+            
             embedder.start(classWorld);
 
             metadataSource = (ArtifactMetadataSource) embedder.lookup(ArtifactMetadataSource.ROLE);
@@ -113,6 +134,18 @@
             throw new TuscanyDependencyException(ex);
         } catch (ComponentLookupException ex) {
             throw new TuscanyDependencyException(ex);
+        } catch (NoSuchFieldException ex) {
+            throw new TuscanyDependencyException(ex);
+        } catch (IllegalAccessException ex) {
+            throw new TuscanyDependencyException(ex);
+        } catch (ClassNotFoundException ex) {
+            throw new TuscanyDependencyException(ex);
+        } catch (NoSuchMethodException ex) {
+            throw new TuscanyDependencyException(ex);
+        } catch (InstantiationException ex) {
+            throw new TuscanyDependencyException(ex);
+        } catch (InvocationTargetException ex) {
+            throw new TuscanyDependencyException(ex);
         }
 
     }
@@ -161,6 +194,7 @@
      * Resolves the artifact.
      */
     private boolean resolve(org.apache.maven.artifact.Artifact mavenRootArtifact) {
+        
         try {
             artifactResolver.resolve(mavenRootArtifact, remoteRepositories, localRepository);
             return true;
@@ -169,6 +203,7 @@
         } catch (ArtifactNotFoundException ex) {
             return false;
         }
+        
     }
 
     /*

Modified: incubator/tuscany/java/sca/services/maven/src/test/java/org/apache/tuscany/services/maven/MavenArtifactRepositoryTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/maven/src/test/java/org/apache/tuscany/services/maven/MavenArtifactRepositoryTestCase.java?view=diff&rev=454023&r1=454022&r2=454023
==============================================================================
--- incubator/tuscany/java/sca/services/maven/src/test/java/org/apache/tuscany/services/maven/MavenArtifactRepositoryTestCase.java (original)
+++ incubator/tuscany/java/sca/services/maven/src/test/java/org/apache/tuscany/services/maven/MavenArtifactRepositoryTestCase.java Sat Oct  7 14:19:50 2006
@@ -49,6 +49,8 @@
      * Test method for 'org.apache.tuscany.services.maven.MavenArtifactRepository.resolve(Artifact)'
      */
     public void testResolveArtifact() throws Exception {
+        
+        System.err.println(getClass().getClassLoader().getResource("META-INF/maven/plugin.xml"));
 
         final URL BASE_URL = new File(System.getProperty("user.home") + File.separator + ".m2").toURL();
         String remoteRepoUrl = "http://repo1.maven.org/maven2/";



---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org