aboutsummaryrefslogtreecommitdiffstats
path: root/archiva-modules/plugins
diff options
context:
space:
mode:
authorMartin Stockhammer <martin_s@apache.org>2017-06-21 23:52:17 +0200
committerolivier lamy <olamy@apache.org>2017-06-24 09:05:49 +1000
commit7d2cc26b4bf41a5e9429aba3a54665669cf6cf79 (patch)
tree5c06c9cb818b8ec661ab058d32adf9ba6b097eb5 /archiva-modules/plugins
parent42df217cd095a98ab935885a1c6e6e4f10a37954 (diff)
downloadarchiva-7d2cc26b4bf41a5e9429aba3a54665669cf6cf79.tar.gz
archiva-7d2cc26b4bf41a5e9429aba3a54665669cf6cf79.zip
Adding jcr oak implementation
Diffstat (limited to 'archiva-modules/plugins')
-rw-r--r--archiva-modules/plugins/metadata-store-jcr/pom.xml85
-rw-r--r--archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/ArchivaJcrRepositoryConfig.java64
-rw-r--r--archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java22
-rw-r--r--archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/RepositoryFactory.java285
-rw-r--r--archiva-modules/plugins/metadata-store-jcr/src/main/resources/log4j2-test.xml42
-rw-r--r--archiva-modules/plugins/metadata-store-jcr/src/test/filtered-resources/META-INF/spring-context.xml14
-rw-r--r--archiva-modules/plugins/metadata-store-jcr/src/test/resources/log4j2-test.xml42
-rw-r--r--archiva-modules/plugins/repository-statistics/pom.xml16
8 files changed, 469 insertions, 101 deletions
diff --git a/archiva-modules/plugins/metadata-store-jcr/pom.xml b/archiva-modules/plugins/metadata-store-jcr/pom.xml
index 8fa30860c..831b639b0 100644
--- a/archiva-modules/plugins/metadata-store-jcr/pom.xml
+++ b/archiva-modules/plugins/metadata-store-jcr/pom.xml
@@ -28,6 +28,9 @@
<artifactId>metadata-store-jcr</artifactId>
<packaging>bundle</packaging>
<name>Archiva Core Plugins :: JCR Storage for Metadata</name>
+ <properties>
+ <jcr-oak.version>1.7.1</jcr-oak.version>
+ </properties>
<dependencies>
<dependency>
<groupId>org.apache.archiva</groupId>
@@ -48,6 +51,12 @@
<artifactId>archiva-test-utils</artifactId>
<version>${project.version}</version>
<scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-simple</artifactId>
+ </exclusion>
+ </exclusions>
</dependency>
<dependency>
<groupId>javax.jcr</groupId>
@@ -55,25 +64,42 @@
</dependency>
<dependency>
<groupId>org.apache.jackrabbit</groupId>
- <artifactId>jackrabbit-jcr-commons</artifactId>
+ <artifactId>oak-jcr</artifactId>
+ <version>${jcr-oak.version}</version>
</dependency>
<dependency>
<groupId>org.apache.jackrabbit</groupId>
- <artifactId>jackrabbit-core</artifactId>
- <scope>provided</scope>
- <!-- could trim more, but since it's just for test we don't need to worry -->
+ <artifactId>oak-segment-tar</artifactId>
+ <version>${jcr-oak.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.jackrabbit</groupId>
+ <artifactId>oak-lucene</artifactId>
+ <version>${jcr-oak.version}</version>
<exclusions>
<exclusion>
- <groupId>org.slf4j</groupId>
- <artifactId>jcl-over-slf4j</artifactId>
+ <groupId>org.apache.lucene</groupId>
+ <artifactId>lucene-misc</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.apache.lucene</groupId>
+ <artifactId>lucene-facet</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
+ <artifactId>log4j-core</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-jcl</artifactId>
</dependency>
<dependency>
+ <groupId>org.apache.logging.log4j</groupId>
+ <artifactId>log4j-slf4j-impl</artifactId>
+ </dependency>
+ <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<scope>test</scope>
@@ -98,6 +124,51 @@
<artifactId>xercesImpl</artifactId>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.apache.lucene</groupId>
+ <artifactId>lucene-core</artifactId>
+ <version>${lucene.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.lucene</groupId>
+ <artifactId>lucene-misc</artifactId>
+ <version>${lucene.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.lucene</groupId>
+ <artifactId>lucene-facet</artifactId>
+ <version>${lucene.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.lucene</groupId>
+ <artifactId>lucene-codecs</artifactId>
+ <version>${lucene.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.lucene</groupId>
+ <artifactId>lucene-queryparser</artifactId>
+ <version>${lucene.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.lucene</groupId>
+ <artifactId>lucene-sandbox</artifactId>
+ <version>${lucene.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.lucene</groupId>
+ <artifactId>lucene-highlighter</artifactId>
+ <version>${lucene.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.lucene</groupId>
+ <artifactId>lucene-memory</artifactId>
+ <version>${lucene.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.lucene</groupId>
+ <artifactId>lucene-analyzers-common</artifactId>
+ <version>${lucene.version}</version>
+ </dependency>
</dependencies>
<build>
<testResources>
@@ -126,8 +197,6 @@
org.apache.archiva.metadata.model;version=${project.version},
org.apache.archiva.metadata.repository;version=${project.version},
org.apache.commons.lang;version="[2.4,3)",
- org.apache.jackrabbit.commons;version="[2.3,3)",
- org.apache.jackrabbit.core.config,
org.springframework*;version="[3,4)",
org.slf4j;resolution:=optional,
org.apache.commons.lang.time
diff --git a/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/ArchivaJcrRepositoryConfig.java b/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/ArchivaJcrRepositoryConfig.java
deleted file mode 100644
index 8271e2bec..000000000
--- a/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/ArchivaJcrRepositoryConfig.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package org.apache.archiva.metadata.repository.jcr;
-/*
- * 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.jackrabbit.core.config.ConfigurationException;
-import org.apache.jackrabbit.core.config.RepositoryConfig;
-import org.slf4j.LoggerFactory;
-
-import java.io.File;
-
-/**
- * @author Olivier Lamy
- * @since 1.4-M1
- */
-public class ArchivaJcrRepositoryConfig
-{
- // Recommended to avoid inconsistencies caused by race conditions.
- static
- {
- if ( !System.getProperties( ).containsKey( "org.apache.jackrabbit.core.state.validatehierarchy" ) )
- {
- System.setProperty( "org.apache.jackrabbit.core.state.validatehierarchy", "true" );
- }
- }
-
- public static RepositoryConfig create( String file, String home )
- throws ConfigurationException
- {
- File homeFile = new File( home );
- if ( !homeFile.exists( ) )
- {
- homeFile.mkdirs( );
- }
-
- File configurationFile = new File( file );
- if ( !configurationFile.exists( ) )
- {
- String resourcePath = "org/apache/archiva/metadata/repository/jcr/repository.xml";
- LoggerFactory.getLogger( ArchivaJcrRepositoryConfig.class ).info(
- "no repository.xml file in path {} so use default from resources path {}", file, resourcePath );
- // use bundled repository.xml
- return RepositoryConfig.create(
- Thread.currentThread( ).getContextClassLoader( ).getResourceAsStream( resourcePath ), home );
- }
-
- return RepositoryConfig.create( file, home );
- }
-}
diff --git a/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java b/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java
index 364930998..2bf94063f 100644
--- a/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java
+++ b/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java
@@ -37,6 +37,8 @@ import org.apache.archiva.metadata.repository.MetadataRepositoryException;
import org.apache.archiva.metadata.repository.MetadataResolutionException;
import org.apache.commons.lang.StringUtils;
import org.apache.jackrabbit.commons.JcrUtils;
+import org.apache.jackrabbit.oak.plugins.index.IndexUtils;
+import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -139,6 +141,8 @@ public class JcrMetadataRepository
registerMixinNodeType( nodeTypeManager, JcrMetadataRepository.FACET_NODE_TYPE );
registerMixinNodeType( nodeTypeManager, JcrMetadataRepository.DEPENDENCY_NODE_TYPE );
+
+
}
private static void registerMixinNodeType( NodeTypeManager nodeTypeManager, String name )
@@ -156,6 +160,8 @@ public class JcrMetadataRepository
}
}
+
+
@Override
public void updateProject( String repositoryId, ProjectMetadata project )
throws MetadataRepositoryException
@@ -755,6 +761,10 @@ public class JcrMetadataRepository
{
throw new MetadataRepositoryException( e.getMessage(), e );
}
+ log.info("Artifacts found {}", artifacts.size());
+ for (ArtifactMetadata meta : artifacts) {
+ log.info("Artifact: "+meta.getVersion()+" "+meta.getFacetList());
+ }
return artifacts;
}
@@ -1418,11 +1428,9 @@ public class JcrMetadataRepository
}
@Override
- public List<ArtifactMetadata> searchArtifacts( String key, String text, String repositoryId, boolean exact )
+ public List<ArtifactMetadata> searchArtifacts( String key, String text, String repositoryId, boolean e )
throws MetadataRepositoryException
{
- // we can't do exact search in any property (*), we need a key
- boolean e = exact && key != null;
String theKey = key == null ? "*" : "[" + key + "]";
String projectVersionCondition =
e ? "(projectVersion." + theKey + " = $value)" : "contains([projectVersion]." + theKey + ", $value)";
@@ -1432,7 +1440,6 @@ public class JcrMetadataRepository
+ ARTIFACT_NODE_TYPE + "] AS artifact ON ISCHILDNODE(artifact, projectVersion) LEFT OUTER JOIN ["
+ FACET_NODE_TYPE + "] AS facet ON ISCHILDNODE(facet, projectVersion) WHERE ("
+ projectVersionCondition + " OR " + facetCondition + ")";
-
return runJcrQuery( repositoryId, q, ImmutableMap.of( "value", text ) );
}
@@ -1555,7 +1562,7 @@ public class JcrMetadataRepository
private static String getRepositoryContentPath( String repositoryId )
{
- return getRepositoryPath( repositoryId ) + "/content/";
+ return getRepositoryPath( repositoryId ) + "/content";
}
private static String getFacetPath( String repositoryId, String facetId )
@@ -1565,7 +1572,7 @@ public class JcrMetadataRepository
private static String getNamespacePath( String repositoryId, String namespace )
{
- return getRepositoryContentPath( repositoryId ) + namespace.replace( '.', '/' );
+ return getRepositoryContentPath( repositoryId ) + "/" + namespace.replace( '.', '/' );
}
private static String getProjectPath( String repositoryId, String namespace, String projectId )
@@ -1594,6 +1601,7 @@ public class JcrMetadataRepository
private Node getOrAddNodeByPath( Node baseNode, String name, String nodeType )
throws RepositoryException
{
+ log.debug("getOrAddNodeByPath"+baseNode+" "+name+" "+nodeType);
Node node = baseNode;
for ( String n : name.split( "/" ) )
{
@@ -1614,8 +1622,10 @@ public class JcrMetadataRepository
private Node getOrAddRepositoryNode( String repositoryId )
throws RepositoryException
{
+ log.debug("getOrAddRepositoryNode "+repositoryId);
Node root = getJcrSession().getRootNode();
Node node = JcrUtils.getOrAddNode( root, "repositories" );
+ log.debug("Repositories "+node);
node = JcrUtils.getOrAddNode( node, repositoryId );
return node;
}
diff --git a/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/RepositoryFactory.java b/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/RepositoryFactory.java
new file mode 100644
index 000000000..65e1acec8
--- /dev/null
+++ b/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/RepositoryFactory.java
@@ -0,0 +1,285 @@
+package org.apache.archiva.metadata.repository.jcr;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.util.concurrent.MoreExecutors;
+import org.apache.jackrabbit.JcrConstants;
+import org.apache.jackrabbit.oak.Oak;
+import org.apache.jackrabbit.oak.api.Type;
+import org.apache.jackrabbit.oak.jcr.Jcr;
+import org.apache.jackrabbit.oak.plugins.index.IndexConstants;
+import org.apache.jackrabbit.oak.plugins.index.IndexUtils;
+import org.apache.jackrabbit.oak.plugins.index.lucene.ExtractedTextCache;
+import org.apache.jackrabbit.oak.plugins.index.lucene.IndexCopier;
+import org.apache.jackrabbit.oak.plugins.index.lucene.IndexTracker;
+import org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexEditorProvider;
+import org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexProvider;
+import org.apache.jackrabbit.oak.plugins.index.lucene.hybrid.DocumentQueue;
+import org.apache.jackrabbit.oak.plugins.index.lucene.hybrid.ExternalObserverBuilder;
+import org.apache.jackrabbit.oak.plugins.index.lucene.hybrid.LocalIndexObserver;
+import org.apache.jackrabbit.oak.plugins.index.lucene.hybrid.NRTIndexFactory;
+import org.apache.jackrabbit.oak.plugins.index.lucene.reader.DefaultIndexReaderFactory;
+import org.apache.jackrabbit.oak.plugins.index.lucene.util.LuceneInitializerHelper;
+import org.apache.jackrabbit.oak.segment.SegmentNodeStore;
+import org.apache.jackrabbit.oak.segment.SegmentNodeStoreBuilders;
+import org.apache.jackrabbit.oak.segment.file.FileStore;
+import org.apache.jackrabbit.oak.segment.file.FileStoreBuilder;
+import org.apache.jackrabbit.oak.segment.file.InvalidFileStoreVersionException;
+import org.apache.jackrabbit.oak.spi.commit.Observer;
+import org.apache.jackrabbit.oak.spi.lifecycle.RepositoryInitializer;
+import org.apache.jackrabbit.oak.spi.mount.MountInfoProvider;
+import org.apache.jackrabbit.oak.spi.mount.Mounts;
+import org.apache.jackrabbit.oak.spi.query.QueryIndexProvider;
+import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
+import org.apache.jackrabbit.oak.spi.state.NodeStore;
+import org.apache.jackrabbit.oak.stats.StatisticsProvider;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.annotation.Nonnull;
+import javax.jcr.Repository;
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.concurrent.Executor;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledThreadPoolExecutor;
+import java.util.concurrent.ThreadFactory;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import static org.apache.jackrabbit.oak.plugins.index.IndexConstants.INDEX_DEFINITIONS_NAME;
+import static org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexConstants.INCLUDE_PROPERTY_TYPES;
+
+/**
+ * Created by martin on 14.06.17.
+ *
+ * @author Martin Stockhammer
+ * @since 3.0.0
+ */
+public class RepositoryFactory
+{
+
+ Logger log = LoggerFactory.getLogger( RepositoryFactory.class );
+
+ public static final String SEGMENT_FILE_TYPE = "oak-segment-tar";
+ public static final String IN_MEMORY_TYPE = "oak-memory";
+
+ String storeType = SEGMENT_FILE_TYPE;
+
+ Path repositoryPath = Paths.get( "repository" );
+
+ public Repository createRepository( ) throws IOException, InvalidFileStoreVersionException
+ {
+ NodeStore nodeStore;
+ if ( SEGMENT_FILE_TYPE.equals( storeType ) )
+ {
+ FileStore fs = FileStoreBuilder.fileStoreBuilder( repositoryPath.toFile( ) ).build( );
+ nodeStore = SegmentNodeStoreBuilders.builder( fs ).build( );
+ } else if (IN_MEMORY_TYPE.equals(storeType)) {
+ nodeStore = null;
+ } else {
+ throw new IllegalArgumentException( "Store type "+storeType+" not recognized" );
+ }
+
+ Oak oak = nodeStore==null ? new Oak() : new Oak(nodeStore);
+ oak.with( new RepositoryInitializer( )
+ {
+ @Override
+ public void initialize( @Nonnull NodeBuilder root )
+ {
+ log.info("Creating index ");
+
+ NodeBuilder lucene = IndexUtils.getOrCreateOakIndex( root ).child("lucene");
+ lucene.setProperty( JcrConstants.JCR_PRIMARYTYPE, "oak:QueryIndexDefinition", Type.NAME);
+
+ lucene.setProperty("compatVersion", 2);
+ lucene.setProperty("type", "lucene");
+ // lucene.setProperty("async", "async");
+ lucene.setProperty(INCLUDE_PROPERTY_TYPES,
+ ImmutableSet.of("String"), Type.STRINGS);
+ // lucene.setProperty("refresh",true);
+ lucene.setProperty("async",ImmutableSet.of("async", "sync"), Type.STRINGS);
+ NodeBuilder rules = lucene.child("indexRules").
+ setProperty(JcrConstants.JCR_PRIMARYTYPE, JcrConstants.NT_UNSTRUCTURED, Type.NAME);
+ rules.setProperty(":childOrder",ImmutableSet.of("archiva:projectVersion","archiva:artifact",
+ "archiva:facet","archiva:namespace", "archiva:project"), Type.STRINGS);
+ NodeBuilder allProps = rules.child("archiva:projectVersion")
+ .child("properties").setProperty( JcrConstants.JCR_PRIMARYTYPE,
+ "nt:unstructured", Type.NAME)
+ .setProperty( ":childOrder", ImmutableSet.of("allProps"), Type.STRINGS )
+ .setProperty("indexNodeName",true)
+ .child("allProps").setProperty(JcrConstants.JCR_PRIMARYTYPE, JcrConstants.NT_UNSTRUCTURED, Type.NAME);
+ allProps.setProperty("name", ".*");
+ allProps.setProperty("isRegexp", true);
+ allProps.setProperty("nodeScopeIndex", true);
+ allProps.setProperty("index",true);
+ allProps.setProperty("analyzed",true);
+ // allProps.setProperty("propertyIndex",true);
+ allProps = rules.child("archiva:artifact")
+ .child("properties").setProperty( JcrConstants.JCR_PRIMARYTYPE,
+ "nt:unstructured", Type.NAME)
+ .setProperty( ":childOrder", ImmutableSet.of("allProps"), Type.STRINGS )
+ .setProperty("indexNodeName",true)
+ .child("allProps").setProperty(JcrConstants.JCR_PRIMARYTYPE, JcrConstants.NT_UNSTRUCTURED, Type.NAME);
+ allProps.setProperty("name", ".*");
+ allProps.setProperty("isRegexp", true);
+ allProps.setProperty("nodeScopeIndex", true);
+ allProps.setProperty("index",true);
+ allProps.setProperty("analyzed",true);
+ allProps = rules.child("archiva:facet")
+ .child("properties").setProperty( JcrConstants.JCR_PRIMARYTYPE,
+ "nt:unstructured", Type.NAME)
+ .setProperty( ":childOrder", ImmutableSet.of("allProps"), Type.STRINGS )
+ .setProperty("indexNodeName",true)
+ .child("allProps").setProperty(JcrConstants.JCR_PRIMARYTYPE, JcrConstants.NT_UNSTRUCTURED, Type.NAME);
+ allProps.setProperty("name", ".*");
+ allProps.setProperty("isRegexp", true);
+ allProps.setProperty("nodeScopeIndex", true);
+ allProps.setProperty("index",true);
+ allProps.setProperty("analyzed",true);
+ allProps = rules.child("archiva:namespace")
+ .child("properties").setProperty( JcrConstants.JCR_PRIMARYTYPE,
+ "nt:unstructured", Type.NAME)
+ .setProperty( ":childOrder", ImmutableSet.of("allProps"), Type.STRINGS )
+ .setProperty("indexNodeName",true)
+ .child("allProps").setProperty(JcrConstants.JCR_PRIMARYTYPE, JcrConstants.NT_UNSTRUCTURED, Type.NAME);
+ allProps.setProperty("name", ".*");
+ allProps.setProperty("isRegexp", true);
+ allProps.setProperty("nodeScopeIndex", true);
+ allProps.setProperty("index",true);
+ allProps.setProperty("analyzed",true);
+ allProps = rules.child("archiva:project")
+ .child("properties").setProperty( JcrConstants.JCR_PRIMARYTYPE,
+ "nt:unstructured", Type.NAME)
+ .setProperty( ":childOrder", ImmutableSet.of("allProps"), Type.STRINGS )
+ .setProperty("indexNodeName",true)
+ .child("allProps").setProperty(JcrConstants.JCR_PRIMARYTYPE, JcrConstants.NT_UNSTRUCTURED, Type.NAME);
+ allProps.setProperty("name", ".*");
+ allProps.setProperty("isRegexp", true);
+ allProps.setProperty("nodeScopeIndex", true);
+ allProps.setProperty("index",true);
+ allProps.setProperty("analyzed",true);
+
+ log.info("Index: "+lucene+" myIndex "+lucene.getChildNode( "myIndex" ));
+ log.info("myIndex "+lucene.getChildNode( "myIndex" ).getProperties());
+ // IndexUtils.createIndexDefinition( )
+
+ }
+ } );
+
+ ExecutorService executorService = createExecutor();
+ StatisticsProvider statsProvider = StatisticsProvider.NOOP;
+ int queueSize = Integer.getInteger("queueSize", 10000);
+ File indexDir = Files.createTempDirectory( "archiva_index" ).toFile();
+ log.info("Queue Index "+indexDir.toString());
+ IndexCopier indexCopier = new IndexCopier( executorService, indexDir, true );
+ NRTIndexFactory nrtIndexFactory = new NRTIndexFactory( indexCopier, statsProvider);
+ MountInfoProvider mountInfoProvider = Mounts.defaultMountInfoProvider( );
+ IndexTracker tracker = new IndexTracker(new DefaultIndexReaderFactory( mountInfoProvider, indexCopier ), nrtIndexFactory);
+ DocumentQueue queue = new DocumentQueue(queueSize, tracker, executorService, statsProvider);
+ LocalIndexObserver localIndexObserver = new LocalIndexObserver( queue, statsProvider);
+ LuceneIndexProvider provider = new LuceneIndexProvider(tracker);
+
+ // ExternalObserverBuilder builder = new ExternalObserverBuilder(queue, tracker, statsProvider,
+// executorService, queueSize);
+// Observer observer = builder.build();
+// builder.getBackgroundObserver();
+
+ LuceneIndexEditorProvider editorProvider = new LuceneIndexEditorProvider(null,
+ tracker, new ExtractedTextCache(0, 0), null, mountInfoProvider);
+ editorProvider.setIndexingQueue(queue);
+
+
+ log.info("Oak: "+oak+" with nodeStore "+nodeStore);
+ Jcr jcr = new Jcr(oak).with( editorProvider ).with( (Observer) provider )
+ .with(localIndexObserver)
+ // .with(observer)
+ .with( ( QueryIndexProvider) provider )
+ .withAsyncIndexing("async",5 );
+ Repository r = jcr.createRepository();
+ try
+ {
+ Thread.currentThread().sleep(1000);
+ }
+ catch ( InterruptedException e )
+ {
+ e.printStackTrace( );
+ }
+ return r;
+
+
+ }
+
+ public String getStoreType( )
+ {
+ return storeType;
+ }
+
+ public void setStoreType( String storeType )
+ {
+ this.storeType = storeType;
+ }
+
+ public Path getRepositoryPath( )
+ {
+ return repositoryPath;
+ }
+
+ public void setRepositoryPath( Path repositoryPath )
+ {
+ this.repositoryPath = repositoryPath;
+ }
+
+ public void setRepositoryPath( String repositoryPath )
+ {
+ this.repositoryPath = Paths.get( repositoryPath );
+ if ( !Files.exists( this.repositoryPath ) )
+ {
+ try
+ {
+ Files.createDirectories( this.repositoryPath );
+ }
+ catch ( IOException e )
+ {
+ e.printStackTrace( );
+ }
+ }
+ }
+
+ private ExecutorService createExecutor() {
+ ThreadPoolExecutor executor = new ThreadPoolExecutor(0, 5, 60L, TimeUnit.SECONDS,
+ new LinkedBlockingQueue<Runnable>(), new ThreadFactory() {
+ private final AtomicInteger counter = new AtomicInteger();
+ private final Thread.UncaughtExceptionHandler handler = new Thread.UncaughtExceptionHandler() {
+ @Override
+ public void uncaughtException(Thread t, Throwable e) {
+ log.warn("Error occurred in asynchronous processing ", e);
+ }
+ };
+ @Override
+ public Thread newThread(@Nonnull Runnable r) {
+ Thread thread = new Thread(r, createName());
+ thread.setDaemon(true);
+ thread.setPriority(Thread.MIN_PRIORITY);
+ thread.setUncaughtExceptionHandler(handler);
+ return thread;
+ }
+
+ private String createName() {
+ return "oak-lucene-" + counter.getAndIncrement();
+ }
+ });
+ executor.setKeepAliveTime(1, TimeUnit.MINUTES);
+ executor.allowCoreThreadTimeOut(true);
+ return executor;
+ }
+
+}
diff --git a/archiva-modules/plugins/metadata-store-jcr/src/main/resources/log4j2-test.xml b/archiva-modules/plugins/metadata-store-jcr/src/main/resources/log4j2-test.xml
new file mode 100644
index 000000000..74dd0773f
--- /dev/null
+++ b/archiva-modules/plugins/metadata-store-jcr/src/main/resources/log4j2-test.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+ ~ 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.
+ -->
+
+
+<configuration status="debug">
+
+
+
+ <appenders>
+ <Console name="console" target="SYSTEM_OUT">
+ <!--PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/-->
+ <PatternLayout pattern="%highlight{%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n}" />
+ </Console>
+
+ </appenders>
+ <loggers>
+
+
+ <logger name="org.apache.jackrabbit" level="trace"/>
+
+ <root level="debug" includeLocation="true">
+ <appender-ref ref="console"/>
+ </root>
+ </loggers>
+</configuration> \ No newline at end of file
diff --git a/archiva-modules/plugins/metadata-store-jcr/src/test/filtered-resources/META-INF/spring-context.xml b/archiva-modules/plugins/metadata-store-jcr/src/test/filtered-resources/META-INF/spring-context.xml
index 43f6d0829..f98b79bd1 100644
--- a/archiva-modules/plugins/metadata-store-jcr/src/test/filtered-resources/META-INF/spring-context.xml
+++ b/archiva-modules/plugins/metadata-store-jcr/src/test/filtered-resources/META-INF/spring-context.xml
@@ -19,14 +19,14 @@
-->
<beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
- <bean id="repository" class="org.apache.jackrabbit.core.RepositoryImpl" destroy-method="shutdown">
- <constructor-arg ref="config"/>
+ <bean id="repositoryFactory" class="org.apache.archiva.metadata.repository.jcr.RepositoryFactory" >
+ <property name="storeType" value="oak-segment-tar" />
</bean>
- <bean id="config" class="org.apache.jackrabbit.core.config.RepositoryConfig" factory-method="create">
- <constructor-arg value="${basedir}/src/test/repository.xml"/>
- <constructor-arg value="${project.build.directory}/jcr"/>
+
+ <bean id="repository" class="org.apache.archiva.metadata.repository.jcr.RepositoryFactory" factory-method="createRepository"
+ factory-bean="repositoryFactory">
</bean>
</beans> \ No newline at end of file
diff --git a/archiva-modules/plugins/metadata-store-jcr/src/test/resources/log4j2-test.xml b/archiva-modules/plugins/metadata-store-jcr/src/test/resources/log4j2-test.xml
new file mode 100644
index 000000000..74dd0773f
--- /dev/null
+++ b/archiva-modules/plugins/metadata-store-jcr/src/test/resources/log4j2-test.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+ ~ 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.
+ -->
+
+
+<configuration status="debug">
+
+
+
+ <appenders>
+ <Console name="console" target="SYSTEM_OUT">
+ <!--PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/-->
+ <PatternLayout pattern="%highlight{%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n}" />
+ </Console>
+
+ </appenders>
+ <loggers>
+
+
+ <logger name="org.apache.jackrabbit" level="trace"/>
+
+ <root level="debug" includeLocation="true">
+ <appender-ref ref="console"/>
+ </root>
+ </loggers>
+</configuration> \ No newline at end of file
diff --git a/archiva-modules/plugins/repository-statistics/pom.xml b/archiva-modules/plugins/repository-statistics/pom.xml
index 2d20acacb..ccbdbfc49 100644
--- a/archiva-modules/plugins/repository-statistics/pom.xml
+++ b/archiva-modules/plugins/repository-statistics/pom.xml
@@ -45,10 +45,6 @@
<artifactId>jcr</artifactId>
</dependency>
<dependency>
- <groupId>org.apache.jackrabbit</groupId>
- <artifactId>jackrabbit-jcr-commons</artifactId>
- </dependency>
- <dependency>
<groupId>org.apache.archiva</groupId>
<artifactId>archiva-test-utils</artifactId>
<version>${project.version}</version>
@@ -60,17 +56,6 @@
<scope>test</scope>
</dependency>
<dependency>
- <groupId>org.apache.jackrabbit</groupId>
- <artifactId>jackrabbit-core</artifactId>
- <scope>test</scope>
- <exclusions>
- <exclusion>
- <groupId>org.slf4j</groupId>
- <artifactId>jcl-over-slf4j</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<scope>test</scope>
@@ -96,7 +81,6 @@
<Import-Package>
javax.jcr,
javax.jcr.query,
- org.apache.jackrabbit.commons;version="[2.3,3)",
org.apache.archiva.metadata.model;version=${project.version},
org.apache.archiva.metadata.repository;version=${project.version},
org.apache.archiva.metadata.repository.storage.maven2;version=${project.version},