[MRM-1345] update use of Nexus indexer to use Maven indexer

remove the per-lookup component
refactor test to use only NexusIndexer facade

git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1139940 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Olivier Lamy 2011-06-26 20:54:21 +00:00
parent 1eeba6ab68
commit a20d601f8e
9 changed files with 138 additions and 68 deletions

View File

@ -57,8 +57,8 @@
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.sonatype.nexus</groupId>
<artifactId>nexus-indexer</artifactId>
<groupId>org.apache.maven.indexer</groupId>
<artifactId>indexer-core</artifactId>
</dependency>
<dependency>
<groupId>javax.inject</groupId>

View File

@ -22,10 +22,10 @@ package org.apache.maven.archiva.common.utils;
import java.util.Arrays;
import java.util.List;
import org.sonatype.nexus.index.context.IndexCreator;
import org.sonatype.nexus.index.creator.JarFileContentsIndexCreator;
import org.sonatype.nexus.index.creator.MavenPluginArtifactInfoIndexCreator;
import org.sonatype.nexus.index.creator.MinimalArtifactInfoIndexCreator;
import org.apache.maven.index.context.IndexCreator;
import org.apache.maven.index.creator.JarFileContentsIndexCreator;
import org.apache.maven.index.creator.MavenPluginArtifactInfoIndexCreator;
import org.apache.maven.index.creator.MinimalArtifactInfoIndexCreator;
/**
* ArchivaNexusIndexerUtil

View File

@ -63,8 +63,8 @@
<artifactId>commons-io</artifactId>
</dependency>
<dependency>
<groupId>org.sonatype.nexus</groupId>
<artifactId>nexus-indexer</artifactId>
<groupId>org.apache.maven.indexer</groupId>
<artifactId>indexer-core</artifactId>
</dependency>
<dependency>
<groupId>javax.inject</groupId>

View File

@ -63,8 +63,8 @@
<artifactId>commons-io</artifactId>
</dependency>
<dependency>
<groupId>org.sonatype.nexus</groupId>
<artifactId>nexus-indexer</artifactId>
<groupId>org.apache.maven.indexer</groupId>
<artifactId>indexer-core</artifactId>
</dependency>
<dependency>
<groupId>org.sonatype.sisu</groupId>

View File

@ -28,14 +28,17 @@ import org.apache.maven.archiva.common.utils.ArchivaNexusIndexerUtil;
import org.apache.maven.archiva.configuration.ArchivaConfiguration;
import org.apache.maven.archiva.configuration.Configuration;
import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
import org.apache.maven.index.ArtifactInfo;
import org.apache.maven.index.Field;
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.IndexingContext;
import org.apache.maven.index.context.UnsupportedExistingLuceneIndexException;
import org.apache.maven.index.expr.StringSearchExpression;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.sonatype.nexus.index.ArtifactInfo;
import org.sonatype.nexus.index.FlatSearchRequest;
import org.sonatype.nexus.index.FlatSearchResponse;
import org.sonatype.nexus.index.NexusIndexer;
import org.sonatype.nexus.index.context.IndexingContext;
import org.sonatype.nexus.index.context.UnsupportedExistingLuceneIndexException;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
@ -120,27 +123,27 @@ public class NexusRepositorySearch
BooleanQuery q = new BooleanQuery();
if ( searchFields.getGroupId() != null && !"".equals( searchFields.getGroupId() ) )
{
q.add( indexer.constructQuery( ArtifactInfo.GROUP_ID, searchFields.getGroupId() ), Occur.MUST );
q.add( indexer.constructQuery( MAVEN.GROUP_ID, new StringSearchExpression( searchFields.getGroupId() ) ), Occur.MUST );
}
if ( searchFields.getArtifactId() != null && !"".equals( searchFields.getArtifactId() ) )
{
q.add( indexer.constructQuery( ArtifactInfo.ARTIFACT_ID, searchFields.getArtifactId() ), Occur.MUST );
q.add( indexer.constructQuery( MAVEN.ARTIFACT_ID, new StringSearchExpression( searchFields.getArtifactId() ) ), Occur.MUST );
}
if ( searchFields.getVersion() != null && !"".equals( searchFields.getVersion() ) )
{
q.add( indexer.constructQuery( ArtifactInfo.VERSION, searchFields.getVersion() ), Occur.MUST );
q.add( indexer.constructQuery( MAVEN.VERSION, new StringSearchExpression( searchFields.getVersion() ) ), Occur.MUST );
}
if ( searchFields.getPackaging() != null && !"".equals( searchFields.getPackaging() ) )
{
q.add( indexer.constructQuery( ArtifactInfo.PACKAGING, searchFields.getPackaging() ), Occur.MUST );
q.add( indexer.constructQuery( MAVEN.PACKAGING, new StringSearchExpression( searchFields.getPackaging() ) ), Occur.MUST );
}
if ( searchFields.getClassName() != null && !"".equals( searchFields.getClassName() ) )
{
q.add( indexer.constructQuery( ArtifactInfo.NAMES, searchFields.getClassName() ), Occur.MUST );
q.add( indexer.constructQuery( MAVEN.CLASSNAMES, new StringSearchExpression( searchFields.getClassName( ) ) ), Occur.MUST );
}
if ( q.getClauses() == null || q.getClauses().length <= 0 )
@ -194,11 +197,11 @@ public class NexusRepositorySearch
private void constructQuery( String term, BooleanQuery q )
{
q.add( indexer.constructQuery( ArtifactInfo.GROUP_ID, term ), Occur.SHOULD );
q.add( indexer.constructQuery( ArtifactInfo.ARTIFACT_ID, term ), Occur.SHOULD );
q.add( indexer.constructQuery( ArtifactInfo.VERSION, term ), Occur.SHOULD );
q.add( indexer.constructQuery( ArtifactInfo.PACKAGING, term ), Occur.SHOULD );
q.add( indexer.constructQuery( ArtifactInfo.NAMES, term ), Occur.SHOULD );
q.add( indexer.constructQuery( MAVEN.GROUP_ID, new StringSearchExpression( term ) ), Occur.SHOULD );
q.add( indexer.constructQuery( MAVEN.ARTIFACT_ID, new StringSearchExpression( term ) ), Occur.SHOULD );
q.add( indexer.constructQuery( MAVEN.VERSION, new StringSearchExpression( term ) ), Occur.SHOULD );
q.add( indexer.constructQuery( MAVEN.PACKAGING, new StringSearchExpression( term ) ), Occur.SHOULD );
q.add( indexer.constructQuery( MAVEN.CLASSNAMES, new StringSearchExpression( term ) ), Occur.SHOULD );
}

View File

@ -17,39 +17,37 @@
~ specific language governing permissions and limitations
~ under the License.
-->
<component-set>
<!--
<components>
<component>
<role>org.sonatype.nexus.index.NexusIndexer</role>
<role>org.apache.maven.index.NexusIndexer</role>
<role-hint>archiva</role-hint>
<implementation>org.sonatype.nexus.index.DefaultNexusIndexer</implementation>
<implementation>org.apache.maven.index.DefaultNexusIndexer</implementation>
<description>The default nexus indexer implementation.</description>
<instantiation-strategy>per-lookup</instantiation-strategy>
<isolated-realm>false</isolated-realm>
<requirements>
<requirement>
<role>org.sonatype.nexus.index.scan.Scanner</role>
<role>org.apache.maven.index.scan.Scanner</role>
<role-hint>default</role-hint>
<field-name>scanner</field-name>
</requirement>
<requirement>
<role>org.sonatype.nexus.index.search.SearchEngine</role>
<role>org.apache.maven.index.SearchEngine</role>
<role-hint>default</role-hint>
<field-name>searcher</field-name>
</requirement>
<requirement>
<role>org.sonatype.nexus.index.creator.IndexerEngine</role>
<role>org.apache.maven.index.IndexerEngine</role>
<role-hint>default</role-hint>
<field-name>indexerEngine</field-name>
</requirement>
<requirement>
<role>org.sonatype.nexus.index.QueryCreator</role>
<role>org.apache.maven.index.QueryCreator</role>
<role-hint>default</role-hint>
<field-name>queryCreator</field-name>
</requirement>
</requirements>
</component>
</components>
-->
</component-set>

View File

@ -27,19 +27,19 @@ import org.apache.maven.archiva.common.utils.FileUtil;
import org.apache.maven.archiva.configuration.ArchivaConfiguration;
import org.apache.maven.archiva.configuration.Configuration;
import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
import org.apache.maven.index.ArtifactContext;
import org.apache.maven.index.ArtifactContextProducer;
import org.apache.maven.index.IndexerEngine;
import org.apache.maven.index.NexusIndexer;
import org.apache.maven.index.artifact.IllegalArtifactCoordinateException;
import org.apache.maven.index.context.DefaultIndexingContext;
import org.apache.maven.index.context.IndexingContext;
import org.apache.maven.index.context.UnsupportedExistingLuceneIndexException;
import org.easymock.MockControl;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.sonatype.nexus.artifact.IllegalArtifactCoordinateException;
import org.sonatype.nexus.index.ArtifactContext;
import org.sonatype.nexus.index.ArtifactContextProducer;
import org.sonatype.nexus.index.IndexerEngine;
import org.sonatype.nexus.index.NexusIndexer;
import org.sonatype.nexus.index.context.DefaultIndexingContext;
import org.sonatype.nexus.index.context.IndexingContext;
import org.sonatype.nexus.index.context.UnsupportedExistingLuceneIndexException;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@ -59,11 +59,9 @@ public class NexusRepositorySearchTest
private ArchivaConfiguration archivaConfig;
private NexusIndexer indexer;
//private DefaultIndexingContext context;
private IndexingContext context;
private IndexerEngine indexerEngine;
//private IndexerEngine indexerEngine;
private ArtifactContextProducer artifactContextProducer;
@ -71,20 +69,40 @@ public class NexusRepositorySearchTest
private Configuration config;
private final static String TEST_REPO_1 = "nexus-search-test-repo";
private static String TEST_REPO_1 = "nexus-search-test-repo";
private final static String TEST_REPO_2 = "nexus-search-test-repo-2";
private static String TEST_REPO_2 = "nexus-search-test-repo-2";
private static int TEST_NUMBER = 0;
@Inject
PlexusSisuBridge plexusSisuBridge;
NexusIndexer nexusIndexer;
@Before
public void setUp()
throws Exception
{
super.setUp();
indexer = plexusSisuBridge.lookup( NexusIndexer.class );
//to prevent failure during obtain lock change name
System.gc();
TEST_NUMBER++;
//TEST_REPO_1 = TEST_REPO_1 + TEST_NUMBER;
//TEST_REPO_2 = TEST_REPO_2 + TEST_NUMBER;
FileUtils.deleteDirectory(
new File( FileUtil.getBasedir(), "/target/test-classes/" + TEST_REPO_1 + "/.indexer" ) );
assertFalse( new File( FileUtil.getBasedir(), "/target/test-classes/" + TEST_REPO_1 + "/.indexer" ).exists() );
FileUtils.deleteDirectory(
new File( FileUtil.getBasedir(), "/target/test-classes/" + TEST_REPO_2 + "/.indexer" ) );
assertFalse( new File( FileUtil.getBasedir(), "/target/test-classes/" + TEST_REPO_2 + "/.indexer" ).exists() );
archivaConfigControl = MockControl.createControl( ArchivaConfiguration.class );
@ -92,7 +110,9 @@ public class NexusRepositorySearchTest
search = new NexusRepositorySearch( plexusSisuBridge, archivaConfig );
indexerEngine = plexusSisuBridge.lookup( IndexerEngine.class );
//indexerEngine = plexusSisuBridge.lookup( IndexerEngine.class );
nexusIndexer = plexusSisuBridge.lookup( NexusIndexer.class );
artifactContextProducer = plexusSisuBridge.lookup( ArtifactContextProducer.class );
@ -155,10 +175,30 @@ public class NexusRepositorySearchTest
public void tearDown()
throws Exception
{
FileUtils.deleteDirectory( new File( FileUtil.getBasedir(), "/target/test-classes/" + TEST_REPO_1 + "/.indexer" ) );
/*
if ( context != null )
{
context.unlock();
context.unlockExclusively();
context.close( true );
}
*/
for (IndexingContext indexingContext : nexusIndexer.getIndexingContexts().values())
{
//indexingContext.close( true );
nexusIndexer.removeIndexingContext( indexingContext, true );
}
FileUtils.deleteDirectory(
new File( FileUtil.getBasedir(), "/target/test-classes/" + TEST_REPO_1 + "/.indexer" ) );
assertFalse( new File( FileUtil.getBasedir(), "/target/test-classes/" + TEST_REPO_1 + "/.indexer" ).exists() );
FileUtils.deleteDirectory( new File( FileUtil.getBasedir(), "/target/test-classes/" + TEST_REPO_2 + "/.indexer" ) );
FileUtils.deleteDirectory(
new File( FileUtil.getBasedir(), "/target/test-classes/" + TEST_REPO_2 + "/.indexer" ) );
assertFalse( new File( FileUtil.getBasedir(), "/target/test-classes/" + TEST_REPO_2 + "/.indexer" ).exists() );
super.tearDown();
@ -167,28 +207,57 @@ public class NexusRepositorySearchTest
private void createIndex( String repository, List<File> filesToBeIndexed )
throws IOException, UnsupportedExistingLuceneIndexException, IllegalArtifactCoordinateException
{
File indexerDirectory = new File( FileUtil.getBasedir(), "/target/test-classes/" + repository + "/.indexer" );
if ( indexerDirectory.exists() )
{
FileUtils.deleteDirectory( indexerDirectory );
}
assertFalse( indexerDirectory.exists() );
File lockFile =
new File( FileUtil.getBasedir(), "/target/test-classes/" + repository + "/.indexer/write.lock" );
if ( lockFile.exists() )
{
lockFile.delete();
}
//IndexWriter.unlock( FSDirectory.open( lockFile.getParentFile()) );
assertFalse( lockFile.exists() );
/*
context = new DefaultIndexingContext( repository, repository,
new File( FileUtil.getBasedir(), "/target/test-classes/" + repository ),
new File( FileUtil.getBasedir(),
"/target/test-classes/" + repository + "/.indexer" ), null,
null, ArchivaNexusIndexerUtil.FULL_INDEX, false );
//indexer.addIndexingContext( repository, repository, new File( getBasedir(), "/target/test-classes/" +
// repository ), new File( getBasedir(), "/target/test-classes/" + repository + "/.indexer" ), null, null,
// NexusIndexer.FULL_INDEX );
context.setSearchable( true );
*/
//indexerEngine.beginIndexing( context );
File repo = new File( FileUtil.getBasedir(), "/target/test-classes/" + repository );
File indexDirectory = new File( FileUtil.getBasedir(), "/target/test-classes/" + repository + "/.indexer" );
//String id, String repositoryId, File repository, File indexDirectory,
// String repositoryUrl, String indexUpdateUrl,
// List<? extends IndexCreator > indexers
IndexingContext context = nexusIndexer.addIndexingContext( repository, repository, repo, indexDirectory,
repo.toURI().toURL().toExternalForm(),
indexDirectory.toURI().toURL().toString(), ArchivaNexusIndexerUtil.FULL_INDEX );
List<ArtifactContext> artifactContexts = new ArrayList<ArtifactContext>( filesToBeIndexed.size() );
for ( File artifactFile : filesToBeIndexed )
{
ArtifactContext ac = artifactContextProducer.getArtifactContext( context, artifactFile );
indexerEngine.index( context, ac );
artifactContexts.add( ac );
}
context.close( false );
//indexerEngine.endIndexing( context );
//indexer.removeIndexingContext( context, false );
nexusIndexer.addArtifactsToIndex( artifactContexts, context );
nexusIndexer.scan( context );
//context.close( false );
assertTrue( new File( FileUtil.getBasedir(), "/target/test-classes/" + repository + "/.indexer" ).exists() );
}

View File

@ -19,8 +19,8 @@
<artifactId>archiva-configuration</artifactId>
</dependency>
<dependency>
<groupId>org.sonatype.nexus</groupId>
<artifactId>nexus-indexer</artifactId>
<groupId>org.apache.maven.indexer</groupId>
<artifactId>indexer-core</artifactId>
</dependency>
<dependency>
<groupId>javax.inject</groupId>

View File

@ -74,7 +74,7 @@
<jackrabbit.version>2.2.5</jackrabbit.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<surefire.redirectTestOutputToFile>true</surefire.redirectTestOutputToFile>
<lucene.version>2.4.1</lucene.version>
<lucene.version>3.0.3</lucene.version>
</properties>
<dependencyManagement>
@ -235,9 +235,9 @@
<version>1.4-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.sonatype.nexus</groupId>
<artifactId>nexus-indexer</artifactId>
<version>3.0.1</version>
<groupId>org.apache.maven.indexer</groupId>
<artifactId>indexer-core</artifactId>
<version>4.1.1</version>
<exclusions>
<exclusion>
<groupId>org.codehaus.plexus</groupId>