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
This commit is contained in:
Olivier Lamy 2011-08-16 13:50:45 +00:00
parent 5c5c959a14
commit c7607a63e5
12 changed files with 154 additions and 35 deletions

View 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()

View 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">

View 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();
}

View 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 + '\'' + '}';
}
}

View 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>

View File

@ -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;
}
}

View 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 );

View 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 )

View 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();

View 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 );
}

View 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;

View File

@ -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">