diff options
author | Olivier Lamy <olamy@apache.org> | 2011-08-16 13:50:45 +0000 |
---|---|---|
committer | Olivier Lamy <olamy@apache.org> | 2011-08-16 13:50:45 +0000 |
commit | c7607a63e569a4bbe271fdcf8744d5ba909652a5 (patch) | |
tree | 32f02dc3eb37a2b6d5ca6f6110305cd0d5ff4c4e | |
parent | 5c5c959a14ddfe946368026858b06223bcad5230 (diff) | |
download | archiva-c7607a63e569a4bbe271fdcf8744d5ba909652a5.tar.gz archiva-c7607a63e569a4bbe271fdcf8744d5ba909652a5.zip |
a little hackhish but fix use with tomcat maven plugin, sisu need a URLClassLoader as TCL to be able to use lookupList
git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1158272 13f79535-47bb-0310-9956-ffa450edef68
12 files changed, 154 insertions, 35 deletions
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-lucene-consumers/src/main/java/org/apache/archiva/consumers/lucene/NexusIndexerConsumer.java b/archiva-modules/archiva-base/archiva-consumers/archiva-lucene-consumers/src/main/java/org/apache/archiva/consumers/lucene/NexusIndexerConsumer.java index ccdb2c493..960adfbd8 100644 --- a/archiva-modules/archiva-base/archiva-consumers/archiva-lucene-consumers/src/main/java/org/apache/archiva/consumers/lucene/NexusIndexerConsumer.java +++ b/archiva-modules/archiva-base/archiva-consumers/archiva-lucene-consumers/src/main/java/org/apache/archiva/consumers/lucene/NexusIndexerConsumer.java @@ -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(); } diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-lucene-consumers/src/main/resources/META-INF/spring-context.xml b/archiva-modules/archiva-base/archiva-consumers/archiva-lucene-consumers/src/main/resources/META-INF/spring-context.xml index c9268894a..cf23270e5 100644 --- a/archiva-modules/archiva-base/archiva-consumers/archiva-lucene-consumers/src/main/resources/META-INF/spring-context.xml +++ b/archiva-modules/archiva-base/archiva-consumers/archiva-lucene-consumers/src/main/resources/META-INF/spring-context.xml @@ -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"> diff --git a/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/NexusRepositorySearch.java b/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/NexusRepositorySearch.java index a22b599e9..6cba688d6 100644 --- a/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/NexusRepositorySearch.java +++ b/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/NexusRepositorySearch.java @@ -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(); } diff --git a/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/SearchFields.java b/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/SearchFields.java index fac51e112..808a19cbd 100644 --- a/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/SearchFields.java +++ b/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/SearchFields.java @@ -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 + '\'' + '}'; + } } diff --git a/archiva-modules/archiva-base/archiva-plexus-bridge/pom.xml b/archiva-modules/archiva-base/archiva-plexus-bridge/pom.xml index 8f4fe3a4d..0da840e23 100644 --- a/archiva-modules/archiva-base/archiva-plexus-bridge/pom.xml +++ b/archiva-modules/archiva-base/archiva-plexus-bridge/pom.xml @@ -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 index 000000000..4992dcf02 --- /dev/null +++ b/archiva-modules/archiva-base/archiva-plexus-bridge/src/main/java/org/apache/archiva/common/plexusbridge/MavenIndexerUtils.java @@ -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; + } +} diff --git a/archiva-modules/archiva-base/archiva-plexus-bridge/src/main/java/org/apache/archiva/common/plexusbridge/PlexusSisuBridgeException.java b/archiva-modules/archiva-base/archiva-plexus-bridge/src/main/java/org/apache/archiva/common/plexusbridge/PlexusSisuBridgeException.java index 7b67fdf6a..c963b609f 100644 --- a/archiva-modules/archiva-base/archiva-plexus-bridge/src/main/java/org/apache/archiva/common/plexusbridge/PlexusSisuBridgeException.java +++ b/archiva-modules/archiva-base/archiva-plexus-bridge/src/main/java/org/apache/archiva/common/plexusbridge/PlexusSisuBridgeException.java @@ -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 ); diff --git a/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/main/java/org/apache/archiva/scheduler/indexing/ArchivaIndexingTaskExecutor.java b/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/main/java/org/apache/archiva/scheduler/indexing/ArchivaIndexingTaskExecutor.java index ba1988a7b..75a607ed6 100644 --- a/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/main/java/org/apache/archiva/scheduler/indexing/ArchivaIndexingTaskExecutor.java +++ b/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/main/java/org/apache/archiva/scheduler/indexing/ArchivaIndexingTaskExecutor.java @@ -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 ) diff --git a/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/main/java/org/apache/archiva/scheduler/indexing/ArtifactIndexingTask.java b/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/main/java/org/apache/archiva/scheduler/indexing/ArtifactIndexingTask.java index 7d07560a1..baabc6045 100644 --- a/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/main/java/org/apache/archiva/scheduler/indexing/ArtifactIndexingTask.java +++ b/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/main/java/org/apache/archiva/scheduler/indexing/ArtifactIndexingTask.java @@ -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(); diff --git a/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/test/java/org/apache/archiva/scheduler/indexing/ArchivaIndexingTaskExecutorTest.java b/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/test/java/org/apache/archiva/scheduler/indexing/ArchivaIndexingTaskExecutorTest.java index 4c312da0c..23f265803 100644 --- a/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/test/java/org/apache/archiva/scheduler/indexing/ArchivaIndexingTaskExecutorTest.java +++ b/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/test/java/org/apache/archiva/scheduler/indexing/ArchivaIndexingTaskExecutorTest.java @@ -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 ); } diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/SearchAction.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/SearchAction.java index 4900ee370..1fe763096 100644 --- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/SearchAction.java +++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/SearchAction.java @@ -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; diff --git a/archiva-modules/archiva-web/archiva-webapp/src/test/resources/log4j.xml b/archiva-modules/archiva-web/archiva-webapp/src/test/resources/log4j.xml index b683ef676..664d39de0 100644 --- a/archiva-modules/archiva-web/archiva-webapp/src/test/resources/log4j.xml +++ b/archiva-modules/archiva-web/archiva-webapp/src/test/resources/log4j.xml @@ -27,7 +27,10 @@ <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"> |