]> source.dussan.org Git - archiva.git/commitdiff
a little hackhish but fix use with tomcat maven plugin, sisu need a URLClassLoader...
authorOlivier Lamy <olamy@apache.org>
Tue, 16 Aug 2011 13:50:45 +0000 (13:50 +0000)
committerOlivier Lamy <olamy@apache.org>
Tue, 16 Aug 2011 13:50:45 +0000 (13:50 +0000)
git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1158272 13f79535-47bb-0310-9956-ffa450edef68

12 files changed:
archiva-modules/archiva-base/archiva-consumers/archiva-lucene-consumers/src/main/java/org/apache/archiva/consumers/lucene/NexusIndexerConsumer.java
archiva-modules/archiva-base/archiva-consumers/archiva-lucene-consumers/src/main/resources/META-INF/spring-context.xml
archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/NexusRepositorySearch.java
archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/SearchFields.java
archiva-modules/archiva-base/archiva-plexus-bridge/pom.xml
archiva-modules/archiva-base/archiva-plexus-bridge/src/main/java/org/apache/archiva/common/plexusbridge/MavenIndexerUtils.java [new file with mode: 0644]
archiva-modules/archiva-base/archiva-plexus-bridge/src/main/java/org/apache/archiva/common/plexusbridge/PlexusSisuBridgeException.java
archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/main/java/org/apache/archiva/scheduler/indexing/ArchivaIndexingTaskExecutor.java
archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/main/java/org/apache/archiva/scheduler/indexing/ArtifactIndexingTask.java
archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/test/java/org/apache/archiva/scheduler/indexing/ArchivaIndexingTaskExecutorTest.java
archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/SearchAction.java
archiva-modules/archiva-web/archiva-webapp/src/test/resources/log4j.xml

index ccdb2c493173f496a627bb572b79fc9d6504e674..960adfbd83d91f9ddb019b265edf2226a9fbb83b 100644 (file)
@@ -19,13 +19,7 @@ package org.apache.archiva.consumers.lucene;
  * under the License.
  */
 
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
-
+import org.apache.archiva.common.plexusbridge.MavenIndexerUtils;
 import org.apache.archiva.common.plexusbridge.PlexusSisuBridge;
 import org.apache.archiva.common.plexusbridge.PlexusSisuBridgeException;
 import org.apache.archiva.scheduler.ArchivaTaskScheduler;
@@ -49,6 +43,13 @@ import org.codehaus.plexus.taskqueue.TaskQueueException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+
 /**
  * Consumer for indexing the repository to provide search and IDE integration features.
  */
@@ -77,14 +78,15 @@ public class NexusIndexerConsumer
     private List<IndexCreator> allIndexCreators;
 
     public NexusIndexerConsumer( ArchivaTaskScheduler<ArtifactIndexingTask> scheduler,
-                                 ArchivaConfiguration configuration, FileTypes filetypes, PlexusSisuBridge plexusSisuBridge )
+                                 ArchivaConfiguration configuration, FileTypes filetypes,
+                                 PlexusSisuBridge plexusSisuBridge, MavenIndexerUtils mavenIndexerUtils )
         throws PlexusSisuBridgeException
     {
         this.configuration = configuration;
         this.filetypes = filetypes;
         this.scheduler = scheduler;
         this.nexusIndexer = plexusSisuBridge.lookup( NexusIndexer.class );
-        this.allIndexCreators = plexusSisuBridge.lookupList( IndexCreator.class );
+        this.allIndexCreators = mavenIndexerUtils.getAllIndexCreators();
     }
 
     public String getDescription()
@@ -126,14 +128,14 @@ public class NexusIndexerConsumer
     public void beginScan( ManagedRepositoryConfiguration repository, Date whenGathered, boolean executeOnEntireRepo )
         throws ConsumerException
     {
-        if( executeOnEntireRepo )
+        if ( executeOnEntireRepo )
         {
             beginScan( repository, whenGathered );
         }
         else
         {
             this.repository = repository;
-            managedRepository = new File( repository.getLocation() );       
+            managedRepository = new File( repository.getLocation() );
         }
     }
 
@@ -158,7 +160,7 @@ public class NexusIndexerConsumer
     public void processFile( String path, boolean executeOnEntireRepo )
         throws Exception
     {
-        if( executeOnEntireRepo )
+        if ( executeOnEntireRepo )
         {
             processFile( path );
         }
@@ -199,7 +201,7 @@ public class NexusIndexerConsumer
 
     public void completeScan( boolean executeOnEntireRepo )
     {
-        if( executeOnEntireRepo )
+        if ( executeOnEntireRepo )
         {
             completeScan();
         }
index c9268894acf0d26dbe6f9f19307fc708ef0a9b88..cf23270e55fc61f6f0be17489481ec31f507ac72 100644 (file)
@@ -32,6 +32,7 @@
       <constructor-arg ref="archivaConfiguration"/>
       <constructor-arg ref="fileTypes"/>
       <constructor-arg ref="plexusSisuBridge"/>
+      <constructor-arg ref="mavenIndexerUtils"/>
     </bean>
 
     <bean id="logger" class="org.apache.maven.archiva.common.utils.Slf4JPlexusLogger">
index a22b599e99cbd10d5bcd897339503722ee98cc43..6cba688d62bcae100d2e8bfb326bb2841f91b5f6 100644 (file)
@@ -19,6 +19,7 @@ package org.apache.archiva.indexer.search;
  * under the License.
  */
 
+import org.apache.archiva.common.plexusbridge.MavenIndexerUtils;
 import org.apache.archiva.common.plexusbridge.PlexusSisuBridge;
 import org.apache.archiva.common.plexusbridge.PlexusSisuBridgeException;
 import org.apache.archiva.indexer.util.SearchUtil;
@@ -56,21 +57,23 @@ import java.util.Set;
 public class NexusRepositorySearch
     implements RepositorySearch
 {
-    private Logger log = LoggerFactory.getLogger( NexusRepositorySearch.class );
+    private Logger log = LoggerFactory.getLogger( getClass() );
 
     private NexusIndexer indexer;
 
     private ArchivaConfiguration archivaConfig;
 
-    private List<? extends IndexCreator> allIndexCreators;
+    private MavenIndexerUtils mavenIndexerUtils;
 
     @Inject
-    public NexusRepositorySearch( PlexusSisuBridge plexusSisuBridge, ArchivaConfiguration archivaConfig )
+    public NexusRepositorySearch( PlexusSisuBridge plexusSisuBridge, ArchivaConfiguration archivaConfig,
+                                  MavenIndexerUtils mavenIndexerUtils )
         throws PlexusSisuBridgeException
     {
         this.indexer = plexusSisuBridge.lookup( NexusIndexer.class );
         this.archivaConfig = archivaConfig;
-        allIndexCreators = plexusSisuBridge.lookupList( IndexCreator.class );
+        this.mavenIndexerUtils = mavenIndexerUtils;
+
     }
 
     /**
@@ -299,9 +302,9 @@ public class NexusRepositorySearch
     }
 
 
-    protected List<? extends IndexCreator> getAllIndexCreators()
+    protected List<IndexCreator> getAllIndexCreators()
     {
-        return allIndexCreators;
+        return mavenIndexerUtils.getAllIndexCreators();
     }
 
 
index fac51e11267785a386b00964b14d959357fc03e1..808a19cbd90e5e004d91ae168ee1d3e238b1a4ff 100644 (file)
@@ -199,4 +199,14 @@ public class SearchFields
     {
         this.bundleExportService = bundleExportService;
     }
+
+    @Override
+    public String toString()
+    {
+        return "SearchFields{" + "groupId='" + groupId + '\'' + ", artifactId='" + artifactId + '\'' + ", version='"
+            + version + '\'' + ", packaging='" + packaging + '\'' + ", className='" + className + '\''
+            + ", repositories=" + repositories + ", bundleVersion='" + bundleVersion + '\'' + ", bundleSymbolicName='"
+            + bundleSymbolicName + '\'' + ", bundleExportPackage='" + bundleExportPackage + '\''
+            + ", bundleExportService='" + bundleExportService + '\'' + '}';
+    }
 }
index 8f4fe3a4d8487bf98e8ee59b79e88a19ee298db4..0da840e23359d56e1eb7187d14b5023f83cfd631 100644 (file)
@@ -49,5 +49,9 @@
       <groupId>javax.annotation</groupId>
       <artifactId>jsr250-api</artifactId>
     </dependency>
+    <dependency>
+      <groupId>org.apache.maven.indexer</groupId>
+      <artifactId>indexer-core</artifactId>
+    </dependency>
   </dependencies>
 </project>
diff --git a/archiva-modules/archiva-base/archiva-plexus-bridge/src/main/java/org/apache/archiva/common/plexusbridge/MavenIndexerUtils.java b/archiva-modules/archiva-base/archiva-plexus-bridge/src/main/java/org/apache/archiva/common/plexusbridge/MavenIndexerUtils.java
new file mode 100644 (file)
index 0000000..4992dcf
--- /dev/null
@@ -0,0 +1,80 @@
+package org.apache.archiva.common.plexusbridge;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.index.context.IndexCreator;
+import org.apache.maven.index.creator.JarFileContentsIndexCreator;
+import org.apache.maven.index.creator.MavenArchetypeArtifactInfoIndexCreator;
+import org.apache.maven.index.creator.MavenPluginArtifactInfoIndexCreator;
+import org.apache.maven.index.creator.MinimalArtifactInfoIndexCreator;
+import org.apache.maven.index.creator.OSGIArtifactIndexCreator;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+
+import javax.inject.Inject;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * @author Olivier Lamy
+ * @since 1.4
+ */
+@Service("mavenIndexerUtils")
+public class MavenIndexerUtils
+{
+
+    private Logger log = LoggerFactory.getLogger( getClass() );
+
+    private List<? extends IndexCreator> allIndexCreators;
+
+    @Inject
+    public MavenIndexerUtils( PlexusSisuBridge plexusSisuBridge )
+        throws PlexusSisuBridgeException
+    {
+        allIndexCreators = new ArrayList( plexusSisuBridge.lookupList( IndexCreator.class ) );
+
+        if ( allIndexCreators == null || allIndexCreators.isEmpty() )
+        {
+            // olamy when the TCL is not a URLClassLoader lookupList fail !
+            // when using tomcat maven plugin so adding a simple hack
+            log.warn( "using lookList from sisu plexus failed so build indexCreator manually" );
+
+            allIndexCreators =
+                Arrays.asList( new OSGIArtifactIndexCreator(), new MavenArchetypeArtifactInfoIndexCreator(),
+                               new MinimalArtifactInfoIndexCreator(), new JarFileContentsIndexCreator(),
+                               new MavenPluginArtifactInfoIndexCreator() );
+
+        }
+
+        log.debug( "allIndexCreators {}", allIndexCreators );
+    }
+
+    public List<? extends IndexCreator> getAllIndexCreators()
+    {
+        return allIndexCreators;
+    }
+
+    public void setAllIndexCreators( List<IndexCreator> allIndexCreators )
+    {
+        this.allIndexCreators = allIndexCreators;
+    }
+}
index 7b67fdf6a215ab650140f4f2e950ac502ebbf678..c963b609f912bc973394529aa8b4de1d39cf5d19 100644 (file)
@@ -25,6 +25,12 @@ package org.apache.archiva.common.plexusbridge;
 public class PlexusSisuBridgeException
     extends Exception
 {
+
+    public PlexusSisuBridgeException( String message )
+    {
+        super( message );
+    }
+
     public PlexusSisuBridgeException( String message, Throwable throwable )
     {
         super( message, throwable );
index ba1988a7baf908603a02902930038404b83b68d0..75a607ed6e0dad888aeeb078928b317795ef36a8 100644 (file)
@@ -19,6 +19,7 @@ package org.apache.archiva.scheduler.indexing;
  * under the License.
  */
 
+import org.apache.archiva.common.plexusbridge.MavenIndexerUtils;
 import org.apache.archiva.common.plexusbridge.PlexusSisuBridge;
 import org.apache.archiva.common.plexusbridge.PlexusSisuBridgeException;
 import org.apache.lucene.search.BooleanClause;
@@ -75,6 +76,9 @@ public class ArchivaIndexingTaskExecutor
     @Inject
     private PlexusSisuBridge plexusSisuBridge;
 
+    @Inject
+    private MavenIndexerUtils mavenIndexerUtils;
+
     private NexusIndexer nexusIndexer;
 
     private List<IndexCreator> allIndexCreators;
@@ -91,7 +95,7 @@ public class ArchivaIndexingTaskExecutor
 
         nexusIndexer = plexusSisuBridge.lookup( NexusIndexer.class );
 
-        allIndexCreators = plexusSisuBridge.lookupList( IndexCreator.class );
+        allIndexCreators = mavenIndexerUtils.getAllIndexCreators();
     }
 
     public void executeTask( Task task )
index 7d07560a189350ca6bc0ff59397bae558e4c2048..baabc6045bf65d44462f8e7a6c920bef498bca64 100644 (file)
@@ -159,7 +159,7 @@ public class ArtifactIndexingTask
     }
 
     public static IndexingContext createContext( ManagedRepositoryConfiguration repository, NexusIndexer indexer,
-                                                 List<IndexCreator> indexCreators )
+                                                 List<? extends IndexCreator> indexCreators )
         throws IOException, UnsupportedExistingLuceneIndexException
     {
         String indexDir = repository.getIndexDir();
index 4c312da0c4ea9192991a773f8bbde65c7c8680b3..23f26580375521976f056659e41400ef7f8fb638 100644 (file)
@@ -20,6 +20,7 @@ package org.apache.archiva.scheduler.indexing;
  */
 
 import junit.framework.TestCase;
+import org.apache.archiva.common.plexusbridge.MavenIndexerUtils;
 import org.apache.archiva.common.plexusbridge.PlexusSisuBridge;
 import org.apache.commons.io.FileUtils;
 import org.apache.lucene.search.BooleanClause.Occur;
@@ -33,7 +34,6 @@ import org.apache.maven.index.FlatSearchRequest;
 import org.apache.maven.index.FlatSearchResponse;
 import org.apache.maven.index.MAVEN;
 import org.apache.maven.index.NexusIndexer;
-import org.apache.maven.index.context.IndexCreator;
 import org.apache.maven.index.context.IndexingContext;
 import org.apache.maven.index.expr.SourcedSearchExpression;
 import org.apache.maven.index.expr.StringSearchExpression;
@@ -76,6 +76,9 @@ public class ArchivaIndexingTaskExecutorTest
     @Inject
     PlexusSisuBridge plexusSisuBridge;
 
+    @Inject
+    MavenIndexerUtils mavenIndexerUtils;
+
     @Before
     public void setUp()
         throws Exception
@@ -96,8 +99,7 @@ public class ArchivaIndexingTaskExecutorTest
 
         indexer = plexusSisuBridge.lookup( NexusIndexer.class );
 
-        ArtifactIndexingTask.createContext( repositoryConfig, indexer,
-                                            plexusSisuBridge.lookupList( IndexCreator.class ) );
+        ArtifactIndexingTask.createContext( repositoryConfig, indexer, mavenIndexerUtils.getAllIndexCreators() );
     }
 
     @After
@@ -153,7 +155,7 @@ public class ArchivaIndexingTaskExecutorTest
                                                                   new File( repositoryConfig.getLocation() ),
                                                                   new File( repositoryConfig.getLocation(),
                                                                             ".indexer" ), null, null,
-                                                                  plexusSisuBridge.lookupList( IndexCreator.class ) );
+                                                                  mavenIndexerUtils.getAllIndexCreators() );
             context.setSearchable( true );
         }
 
index 4900ee370c98bd973e82f6f937fe6c6ee29fb560..1fe7630961d084caa326f634c5c7eae7dea0b7b2 100644 (file)
@@ -49,7 +49,7 @@ import java.util.Map;
 
 /**
  * Search all indexed fields by the given criteria.
- *
+ * <p/>
  * plexus.component role="com.opensymphony.xwork2.Action" role-hint="searchAction" instantiation-strategy="per-lookup"
  */
 @Controller( "searchAction" )
@@ -170,8 +170,8 @@ public class SearchAction
     public String filteredSearch()
         throws MalformedURLException
     {
-        if ( ( groupId == null || "".equals( groupId ) ) && ( artifactId == null || "".equals( artifactId ) ) &&
-            ( className == null || "".equals( className ) ) && ( version == null || "".equals( version ) ) )
+        if ( ( groupId == null || "".equals( groupId ) ) && ( artifactId == null || "".equals( artifactId ) )
+            && ( className == null || "".equals( className ) ) && ( version == null || "".equals( version ) ) )
         {
             addActionError( "Advanced Search - At least one search criteria must be provided." );
             return INPUT;
@@ -188,8 +188,8 @@ public class SearchAction
         limits.setPageSize( rowCount );
         List<String> selectedRepos = new ArrayList<String>();
 
-        if ( repositoryId == null || StringUtils.isBlank( repositoryId ) || "all".equals( StringUtils.stripToEmpty(
-            repositoryId ) ) )
+        if ( repositoryId == null || StringUtils.isBlank( repositoryId ) || "all".equals(
+            StringUtils.stripToEmpty( repositoryId ) ) )
         {
             selectedRepos = getObservableRepos();
         }
@@ -205,6 +205,8 @@ public class SearchAction
 
         SearchFields searchFields = new SearchFields( groupId, artifactId, version, null, className, selectedRepos );
 
+        log.debug( "filteredSearch with searchFields {}", searchFields );
+
         // TODO: add packaging in the list of fields for advanced search (UI)?
         try
         {
@@ -263,12 +265,14 @@ public class SearchAction
             return GlobalResults.ACCESS_TO_NO_REPOS;
         }
 
+        log.debug( "quickSearch with selectedRepos {} query {}", selectedRepos, q );
+
         try
         {
             if ( searchResultsOnly && !completeQueryString.equals( "" ) )
             {
-                results = getNexusSearch().search( getPrincipal(), selectedRepos, q, limits,
-                                                   parseCompleteQueryString() );
+                results =
+                    getNexusSearch().search( getPrincipal(), selectedRepos, q, limits, parseCompleteQueryString() );
             }
             else
             {
@@ -552,8 +556,8 @@ public class SearchAction
     {
         if ( nexusSearch == null )
         {
-            WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(
-                ServletActionContext.getServletContext() );
+            WebApplicationContext wac =
+                WebApplicationContextUtils.getRequiredWebApplicationContext( ServletActionContext.getServletContext() );
             nexusSearch = wac.getBean( "nexusSearch", RepositorySearch.class );
         }
         return nexusSearch;
index b683ef67611a766b314ed09ee5e41c6014d4211d..664d39de0126052bc045bcbe2a28ebecc074d071 100644 (file)
       <param name="ConversionPattern" value="%d [%t] %-5p %c %x - %m%n"/>
     </layout>
   </appender>
-  <logger name="com.opensymphony.xwork2.interceptor.ParametersInterceptor">
+  <logger name="org.apache.maven.archiva.web.action.SearchAction">
+    <level value="debug"/>
+  </logger>
+  <logger name="org.apache.archiva.indexer.search.NexusRepositorySearch">
     <level value="debug"/>
   </logger>
   <logger name="org.apache.commons.configuration.DefaultConfigurationBuilder">