@@ -44,6 +44,14 @@ | |||
<groupId>org.springframework</groupId> | |||
<artifactId>spring-context</artifactId> | |||
</dependency> | |||
<dependency> | |||
<groupId>org.apache.archiva</groupId> | |||
<artifactId>archiva-common</artifactId> | |||
</dependency> | |||
<dependency> | |||
<groupId>org.apache.archiva</groupId> | |||
<artifactId>archiva-storage-api</artifactId> | |||
</dependency> | |||
<dependency> | |||
<groupId>org.apache.archiva</groupId> | |||
<artifactId>archiva-configuration</artifactId> | |||
@@ -58,11 +66,28 @@ | |||
</dependency> | |||
<dependency> | |||
<groupId>org.apache.archiva.maven</groupId> | |||
<artifactId>archiva-maven-proxy</artifactId> | |||
<artifactId>archiva-maven-common</artifactId> | |||
</dependency> | |||
<dependency> | |||
<groupId>org.apache.archiva</groupId> | |||
<artifactId>archiva-repository-admin-api</artifactId> | |||
<artifactId>archiva-repository-api</artifactId> | |||
</dependency> | |||
<dependency> | |||
<groupId>org.apache.archiva</groupId> | |||
<artifactId>archiva-proxy-api</artifactId> | |||
</dependency> | |||
<dependency> | |||
<groupId>org.apache.archiva.components</groupId> | |||
<artifactId>archiva-components-spring-taskqueue</artifactId> | |||
</dependency> | |||
<dependency> | |||
<groupId>javax.annotation</groupId> | |||
<artifactId>javax.annotation-api</artifactId> | |||
</dependency> | |||
<dependency> | |||
<groupId>javax.inject</groupId> | |||
<artifactId>javax.inject</artifactId> | |||
</dependency> | |||
<dependency> | |||
@@ -72,51 +97,44 @@ | |||
</dependency> | |||
<dependency> | |||
<groupId>org.apache.maven.wagon</groupId> | |||
<artifactId>wagon-http</artifactId> | |||
<artifactId>wagon-http-shared</artifactId> | |||
<scope>provided</scope> | |||
</dependency> | |||
<dependency> | |||
<groupId>org.apache.maven.wagon</groupId> | |||
<artifactId>wagon-http-lightweight</artifactId> | |||
<scope>provided</scope> | |||
<artifactId>wagon-provider-api</artifactId> | |||
</dependency> | |||
<!-- Test dependencies --> | |||
<dependency> | |||
<groupId>javax.persistence</groupId> | |||
<artifactId>javax.persistence-api</artifactId> | |||
<scope>test</scope> | |||
<groupId>org.apache.commons</groupId> | |||
<artifactId>commons-lang3</artifactId> | |||
</dependency> | |||
<!-- Test dependencies --> | |||
<dependency> | |||
<groupId>org.apache.archiva.redback</groupId> | |||
<artifactId>redback-keys-jpa</artifactId> | |||
<groupId>org.apache.archiva</groupId> | |||
<artifactId>repository-statistics</artifactId> | |||
<scope>test</scope> | |||
</dependency> | |||
<dependency> | |||
<groupId>org.apache.archiva.redback</groupId> | |||
<artifactId>redback-keys-cached</artifactId> | |||
<groupId>org.apache.maven.wagon</groupId> | |||
<artifactId>wagon-http</artifactId> | |||
<scope>test</scope> | |||
</dependency> | |||
<dependency> | |||
<groupId>javax.transaction</groupId> | |||
<artifactId>javax.transaction-api</artifactId> | |||
<groupId>org.apache.maven.wagon</groupId> | |||
<artifactId>wagon-http-lightweight</artifactId> | |||
<scope>test</scope> | |||
</dependency> | |||
<dependency> | |||
<groupId>org.apache.archiva.redback</groupId> | |||
<artifactId>redback-common-jpa</artifactId> | |||
<version>${redback.version}</version> | |||
<groupId>org.apache.archiva.maven</groupId> | |||
<artifactId>archiva-maven-proxy</artifactId> | |||
<scope>test</scope> | |||
</dependency> | |||
<dependency> | |||
<groupId>org.springframework</groupId> | |||
<artifactId>spring-tx</artifactId> | |||
<version>${spring.version}</version> | |||
<scope>test</scope> | |||
</dependency> | |||
<dependency> | |||
<groupId>org.apache.archiva</groupId> | |||
<artifactId>archiva-repository-admin-default</artifactId> | |||
<artifactId>spring-test</artifactId> | |||
<scope>test</scope> | |||
</dependency> | |||
<dependency> | |||
@@ -135,6 +153,12 @@ | |||
<version>${project.version}</version> | |||
<scope>test</scope> | |||
</dependency> | |||
<dependency> | |||
<groupId>org.eclipse.jetty</groupId> | |||
<artifactId>jetty-servlet</artifactId> | |||
<version>${jetty.version}</version> | |||
<scope>test</scope> | |||
</dependency> | |||
<dependency> | |||
<groupId>org.eclipse.jetty</groupId> | |||
<artifactId>jetty-server</artifactId> | |||
@@ -152,19 +176,6 @@ | |||
<artifactId>assertj-core</artifactId> | |||
<scope>test</scope> | |||
</dependency> | |||
<dependency> | |||
<groupId>org.apache.archiva</groupId> | |||
<artifactId>archiva-mock</artifactId> | |||
<scope>test</scope> | |||
</dependency> | |||
<dependency> | |||
<groupId>org.apache.archiva.redback</groupId> | |||
<artifactId>redback-rbac-cached</artifactId> | |||
<scope>test</scope> | |||
<version>${redback.version}</version> | |||
</dependency> | |||
<dependency> | |||
<groupId>org.apache.archiva</groupId> | |||
@@ -173,21 +184,11 @@ | |||
</dependency> | |||
<dependency> | |||
<groupId>org.apache.logging.log4j</groupId> | |||
<artifactId>log4j-slf4j-impl</artifactId> | |||
</dependency> | |||
<dependency> | |||
<groupId>org.apache.archiva.redback</groupId> | |||
<artifactId>redback-common-test-resources</artifactId> | |||
<groupId>org.apache.archiva</groupId> | |||
<artifactId>archiva-mock</artifactId> | |||
<scope>test</scope> | |||
</dependency> | |||
<dependency> | |||
<groupId>org.ow2.asm</groupId> | |||
<artifactId>asm</artifactId> | |||
<scope>test</scope> | |||
</dependency> | |||
</dependencies> | |||
<build> |
@@ -22,7 +22,6 @@ import org.apache.archiva.proxy.ProxyRegistry; | |||
import org.apache.archiva.proxy.model.NetworkProxy; | |||
import org.apache.archiva.scheduler.indexing.DownloadRemoteIndexException; | |||
import org.apache.archiva.scheduler.indexing.DownloadRemoteIndexScheduler; | |||
import org.apache.archiva.admin.model.RepositoryAdminException; | |||
import org.apache.archiva.configuration.ArchivaConfiguration; | |||
import org.apache.archiva.configuration.ConfigurationEvent; | |||
import org.apache.archiva.configuration.ConfigurationListener; |
@@ -18,10 +18,19 @@ package org.apache.archiva.scheduler.indexing.maven; | |||
* under the License. | |||
*/ | |||
import org.apache.archiva.admin.model.beans.RemoteRepository; | |||
import org.apache.archiva.admin.model.remote.RemoteRepositoryAdmin; | |||
import org.apache.archiva.common.utils.FileUtils; | |||
import org.apache.archiva.indexer.ArchivaIndexManager; | |||
import org.apache.archiva.indexer.IndexCreationFailedException; | |||
import org.apache.archiva.repository.EditableRemoteRepository; | |||
import org.apache.archiva.repository.EditableRepository; | |||
import org.apache.archiva.repository.RemoteRepository; | |||
import org.apache.archiva.repository.RepositoryException; | |||
import org.apache.archiva.repository.RepositoryProvider; | |||
import org.apache.archiva.repository.RepositoryRegistry; | |||
import org.apache.archiva.repository.RepositoryType; | |||
import org.apache.archiva.repository.UnsupportedURIException; | |||
import org.apache.archiva.repository.features.IndexCreationFeature; | |||
import org.apache.archiva.repository.features.RemoteIndexFeature; | |||
import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner; | |||
import org.apache.maven.index.FlatSearchRequest; | |||
import org.apache.maven.index.FlatSearchResponse; | |||
@@ -49,15 +58,14 @@ import org.springframework.test.context.ContextConfiguration; | |||
import javax.inject.Inject; | |||
import java.io.IOException; | |||
import java.net.URI; | |||
import java.net.URISyntaxException; | |||
import java.nio.file.Files; | |||
import java.nio.file.Path; | |||
import java.nio.file.Paths; | |||
import java.util.Arrays; | |||
import java.util.Locale; | |||
import java.util.concurrent.TimeUnit; | |||
import static org.assertj.core.api.Assertions.assertThat; | |||
/** | |||
* @author Olivier Lamy | |||
*/ | |||
@@ -73,9 +81,6 @@ public class DownloadRemoteIndexTaskTest | |||
private Logger log = LoggerFactory.getLogger( getClass() ); | |||
@Inject | |||
RemoteRepositoryAdmin remoteRepositoryAdmin; | |||
@Inject | |||
DefaultDownloadRemoteIndexScheduler downloadRemoteIndexScheduler; | |||
@@ -85,6 +90,9 @@ public class DownloadRemoteIndexTaskTest | |||
@Inject | |||
RepositoryRegistry repositoryRegistry; | |||
@Inject | |||
RepositoryProvider repositoryProvider; | |||
@Before | |||
public void initialize() | |||
throws Exception | |||
@@ -94,7 +102,7 @@ public class DownloadRemoteIndexTaskTest | |||
Files.delete(cfgFile); | |||
} | |||
try { | |||
remoteRepositoryAdmin.deleteRemoteRepository("test-repo-re", null); | |||
repositoryRegistry.removeRepository( "test-repo-re" ); | |||
} catch (Exception e) { | |||
// Ignore | |||
} | |||
@@ -136,9 +144,12 @@ public class DownloadRemoteIndexTaskTest | |||
public void downloadAndMergeRemoteIndexInEmptyIndex() | |||
throws Exception | |||
{ | |||
RemoteRepository remoteRepository = getRemoteRepository(); | |||
Path repoDirectory = Paths.get( FileUtils.getBasedir( ), "target/repo-" + Long.toString( System.currentTimeMillis( ) ) ); | |||
RemoteRepository remoteRepository = getRemoteRepository(repoDirectory); | |||
remoteRepositoryAdmin.addRemoteRepository( remoteRepository, null ); | |||
repositoryRegistry.putRepository( remoteRepository); | |||
repositoryRegistry.reload(); | |||
downloadRemoteIndexScheduler.startup(); | |||
@@ -147,17 +158,17 @@ public class DownloadRemoteIndexTaskTest | |||
( (ThreadPoolTaskScheduler) downloadRemoteIndexScheduler.getTaskScheduler() ).getScheduledExecutor().awaitTermination( | |||
10, TimeUnit.SECONDS ); | |||
remoteRepositoryAdmin.deleteRemoteRepository( "test-repo-re", null ); | |||
repositoryRegistry.removeRepository( "test-repo-re" ); | |||
// search | |||
BooleanQuery.Builder iQuery = new BooleanQuery.Builder(); | |||
iQuery.add( indexer.constructQuery( MAVEN.GROUP_ID, new StringSearchExpression( "commons-logging" ) ), | |||
BooleanClause.Occur.SHOULD ); | |||
remoteRepositoryAdmin.addRemoteRepository(remoteRepository, null); | |||
remoteRepository = getRemoteRepository( repoDirectory ); | |||
FlatSearchRequest rq = new FlatSearchRequest( iQuery.build() ); | |||
rq.setContexts( | |||
Arrays.asList( repositoryRegistry.getRemoteRepository(remoteRepository.getId()).getIndexingContext().getBaseContext(IndexingContext.class) ) ); | |||
Arrays.asList( remoteRepository.getIndexingContext().getBaseContext(IndexingContext.class) ) ); | |||
FlatSearchResponse response = indexer.searchFlat(rq); | |||
@@ -166,22 +177,38 @@ public class DownloadRemoteIndexTaskTest | |||
} | |||
protected RemoteRepository getRemoteRepository() throws IOException | |||
protected RemoteRepository getRemoteRepository(Path repoDirectory) throws IOException, URISyntaxException, UnsupportedURIException, RepositoryException | |||
{ | |||
RemoteRepository remoteRepository = new RemoteRepository( Locale.getDefault()); | |||
Path indexDirectory = | |||
Paths.get( FileUtils.getBasedir(), "target/index/test-" + Long.toString( System.currentTimeMillis() ) ); | |||
Files.createDirectories( indexDirectory ); | |||
indexDirectory.toFile().deleteOnExit(); | |||
remoteRepository.setName( "foo" ); | |||
remoteRepository.setIndexDirectory( indexDirectory.toAbsolutePath().toString() ); | |||
remoteRepository.setDownloadRemoteIndex( true ); | |||
remoteRepository.setId( "test-repo-re" ); | |||
remoteRepository.setUrl( "http://localhost:" + port ); | |||
remoteRepository.setRemoteIndexUrl( "http://localhost:" + port + "/index-updates/" ); | |||
EditableRemoteRepository remoteRepository = repositoryProvider.createRemoteInstance( "test-repo-re", "foo" ); | |||
Path indexDirectory = repoDirectory.resolve( "index" ); | |||
Files.createDirectories( indexDirectory ); | |||
remoteRepository.setLocation( new URI( "http://localhost:" + port ) ); | |||
repoDirectory.toFile().deleteOnExit(); | |||
createIndexingContext( remoteRepository ); | |||
RemoteIndexFeature rif = remoteRepository.getFeature( RemoteIndexFeature.class ).get(); | |||
rif.setDownloadRemoteIndex( true ); | |||
rif.setIndexUri( new URI("http://localhost:" + port + "/index-updates/" ) ); | |||
IndexCreationFeature icf = remoteRepository.getFeature( IndexCreationFeature.class ).get( ); | |||
icf.setLocalIndexPath( remoteRepository.getAsset( "index" ) ); | |||
return remoteRepository; | |||
} | |||
private void createIndexingContext( EditableRepository editableRepo) throws RepositoryException | |||
{ | |||
if (editableRepo.supportsFeature(IndexCreationFeature.class)) { | |||
ArchivaIndexManager idxManager = getIndexManager(editableRepo.getType()); | |||
try { | |||
editableRepo.setIndexingContext(idxManager.createContext(editableRepo)); | |||
idxManager.updateLocalIndexPath(editableRepo); | |||
} catch ( IndexCreationFailedException e) { | |||
throw new RepositoryException("Could not create index for repository " + editableRepo.getId() + ": " + e.getMessage(), e); | |||
} | |||
} | |||
} | |||
public ArchivaIndexManager getIndexManager( RepositoryType type ) { | |||
return repositoryRegistry.getIndexManager( type ); | |||
} | |||
} |
@@ -19,13 +19,12 @@ | |||
~ under the License. | |||
--> | |||
<beans xmlns="http://www.springframework.org/schema/beans" | |||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" | |||
xmlns:context="http://www.springframework.org/schema/context" | |||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" | |||
xsi:schemaLocation="http://www.springframework.org/schema/beans | |||
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd" | |||
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd" | |||
default-lazy-init="true"> | |||
<context:component-scan base-package="org.apache.archiva.repository.content.maven2,org.apache.archiva.indexer.maven" /> | |||
<context:component-scan base-package="org.apache.archiva.indexer.maven" /> | |||
<bean name="scheduler" class="org.apache.archiva.components.scheduler.DefaultScheduler"> | |||
<property name="properties"> | |||
@@ -39,7 +38,6 @@ | |||
</property> | |||
</bean> | |||
<!-- wire up more basic configuration so it doesn't overwrite any config files --> | |||
<bean name="archivaConfiguration#default" class="org.apache.archiva.configuration.DefaultArchivaConfiguration"> | |||
<property name="registry" ref="registry#default"/> | |||
@@ -62,38 +60,7 @@ | |||
</property> | |||
</bean> | |||
<alias name="userConfiguration#redback" alias="userConfiguration#default"/> | |||
<!-- *** | |||
JPA settings | |||
*** --> | |||
<bean name="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> | |||
<property name="jpaVendorAdapter" > | |||
<bean class="org.springframework.orm.jpa.vendor.OpenJpaVendorAdapter" /> | |||
</property> | |||
<property name="persistenceXmlLocation" value="classpath:META-INF/persistence-hsqldb.xml" /> | |||
<property name="jpaPropertyMap"> | |||
<map> | |||
<entry key="openjpa.ConnectionURL" value="jdbc:hsqldb:mem:redback_database" /> | |||
<entry key="openjpa.ConnectionDriverName" value="org.hsqldb.jdbcDriver" /> | |||
<entry key="openjpa.ConnectionUserName" value="sa" /> | |||
<entry key="openjpa.ConnectionPassword" value="" /> | |||
<entry key="openjpa.Log" value="${openjpa.Log:DefaultLevel=INFO,Runtime=ERROR,Tool=ERROR,SQL=ERROR,Schema=ERROR,MetaData=ERROR}" /> | |||
<entry key="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)" /> | |||
<entry key="openjpa.jdbc.MappingDefaults" | |||
value="ForeignKeyDeleteAction=restrict,JoinForeignKeyDeleteAction=restrict"/> | |||
</map> | |||
</property> | |||
</bean> | |||
<bean name="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager" > | |||
<property name="entityManagerFactory" ref="entityManagerFactory" /> | |||
</bean> | |||
<tx:annotation-driven /> | |||
<!-- *** | |||
End of JPA settings | |||
*** --> | |||
</beans> |
@@ -46,6 +46,7 @@ archiva-modules | |||
archiva-maven-proxy | |||
archiva-maven-indexer | |||
archiva-maven-repository | |||
archiva-maven-scheduler | |||