You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@archiva.apache.org by br...@apache.org on 2011/03/26 12:54:11 UTC
svn commit: r1085704 - in /archiva: sandbox/populate-jcr-repo/src/main/
trunk/archiva-modules/metadata/metadata-repository-api/src/test/java/org/apache/archiva/metadata/repository/
trunk/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apac...
Author: brett
Date: Sat Mar 26 11:54:11 2011
New Revision: 1085704
URL: http://svn.apache.org/viewvc?rev=1085704&view=rev
Log:
[MRM-1327] use nodes for dependencies, make several notes about fixes required to properly isolate maven2 pieces
Modified:
archiva/sandbox/populate-jcr-repo/src/main/repository.xml
archiva/trunk/archiva-modules/metadata/metadata-repository-api/src/test/java/org/apache/archiva/metadata/repository/AbstractMetadataRepositoryTest.java
archiva/trunk/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java
Modified: archiva/sandbox/populate-jcr-repo/src/main/repository.xml
URL: http://svn.apache.org/viewvc/archiva/sandbox/populate-jcr-repo/src/main/repository.xml?rev=1085704&r1=1085703&r2=1085704&view=diff
==============================================================================
--- archiva/sandbox/populate-jcr-repo/src/main/repository.xml (original)
+++ archiva/sandbox/populate-jcr-repo/src/main/repository.xml Sat Mar 26 11:54:11 2011
@@ -46,5 +46,23 @@
</FileSystem>
<PersistenceManager class="org.apache.jackrabbit.core.persistence.bundle.H2PersistenceManager"/>
<!--<PersistenceManager class="org.apache.jackrabbit.core.persistence.bundle.BundleFsPersistenceManager"/>-->
+
+ <!--
+ Note about choice of persistence manager: aside from the potential integrity issues listed for the
+ BundleFsPersistenceManager, it is inefficient on storage. Processing 272 files from org/apache/archiva creates
+ the following number of files:
+ - 919 (5m) when using properties to represent dependencies
+ - 6402 (27m) when using a node for each level of a dependency
+ - 3494 (15m) when only using node levels of group ID & artifact name
+ - 2513 (11m) when group ID & artifact name are one node per dependency
+
+ This compares to the following for H2:
+ - 29 (3m) when using properties to represent dependencies
+ - 36 (5m) when using a node for each level of a dependency
+ - 32 (4m) when only using node levels of group ID & artifact name
+ - 28 (3m) when group ID & artifact name are one node per dependency
+
+ It is 190 files (1m) for the FileMetadataRepository.
+ -->
</Versioning>
</Repository>
Modified: archiva/trunk/archiva-modules/metadata/metadata-repository-api/src/test/java/org/apache/archiva/metadata/repository/AbstractMetadataRepositoryTest.java
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/metadata/metadata-repository-api/src/test/java/org/apache/archiva/metadata/repository/AbstractMetadataRepositoryTest.java?rev=1085704&r1=1085703&r2=1085704&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/metadata/metadata-repository-api/src/test/java/org/apache/archiva/metadata/repository/AbstractMetadataRepositoryTest.java (original)
+++ archiva/trunk/archiva-modules/metadata/metadata-repository-api/src/test/java/org/apache/archiva/metadata/repository/AbstractMetadataRepositoryTest.java Sat Mar 26 11:54:11 2011
@@ -261,6 +261,7 @@ public abstract class AbstractMetadataRe
d.setSystemPath( "system path" );
d.setType( "type" );
d.setVersion( "version" );
+ d.setOptional( true );
metadata.addDependency( d );
repository.updateProjectVersion( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, metadata );
@@ -303,6 +304,7 @@ public abstract class AbstractMetadataRe
assertEquals( "system path", d.getSystemPath() );
assertEquals( "type", d.getType() );
assertEquals( "version", d.getVersion() );
+ assertTrue( d.isOptional() );
}
public void testUpdateProjectReference()
Modified: archiva/trunk/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java?rev=1085704&r1=1085703&r2=1085704&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java (original)
+++ archiva/trunk/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java Sat Mar 26 11:54:11 2011
@@ -85,6 +85,8 @@ public class JcrMetadataRepository
static final String FACET_NODE_TYPE = "archiva:facet";
+ private static final String DEPENDENCY_NODE_TYPE = "archiva:dependency";
+
private final Map<String, MetadataFacetFactory> metadataFacetFactories;
private static final Logger log = LoggerFactory.getLogger( JcrMetadataRepository.class );
@@ -126,6 +128,7 @@ public class JcrMetadataRepository
registerMixinNodeType( nodeTypeManager, JcrMetadataRepository.PROJECT_VERSION_NODE_TYPE );
registerMixinNodeType( nodeTypeManager, JcrMetadataRepository.ARTIFACT_NODE_TYPE );
registerMixinNodeType( nodeTypeManager, JcrMetadataRepository.FACET_NODE_TYPE );
+ registerMixinNodeType( nodeTypeManager, JcrMetadataRepository.DEPENDENCY_NODE_TYPE );
}
private static void registerMixinNodeType( NodeTypeManager nodeTypeManager, String name )
@@ -269,17 +272,55 @@ public class JcrMetadataRepository
mailingList.getOtherArchives() ) );
i++;
}
- i = 0;
- for ( Dependency dependency : versionMetadata.getDependencies() )
+
+ if ( !versionMetadata.getDependencies().isEmpty() )
{
- versionNode.setProperty( "dependency." + i + ".classifier", dependency.getClassifier() );
- versionNode.setProperty( "dependency." + i + ".scope", dependency.getScope() );
- versionNode.setProperty( "dependency." + i + ".systemPath", dependency.getSystemPath() );
- versionNode.setProperty( "dependency." + i + ".artifactId", dependency.getArtifactId() );
- versionNode.setProperty( "dependency." + i + ".groupId", dependency.getGroupId() );
- versionNode.setProperty( "dependency." + i + ".version", dependency.getVersion() );
- versionNode.setProperty( "dependency." + i + ".type", dependency.getType() );
- i++;
+ Node dependenciesNode = JcrUtils.getOrAddNode( versionNode, "dependencies" );
+
+ for ( Dependency dependency : versionMetadata.getDependencies() )
+ {
+ // Note that we deliberately don't alter the namespace path - not enough dependencies for
+ // number of nodes at a given depth to be an issue. Similarly, we don't add subnodes for each
+ // component of the ID as that creates extra depth and causes a great cost in space and memory
+
+ // FIXME: change group ID to namespace
+ // FIXME: change to artifact's ID - this is constructed by the Maven 2 format for now.
+ // This won't support types where the extension doesn't match the type.
+ // (see also Maven2RepositoryStorage#readProjectVersionMetadata construction of POM)
+ String id =
+ dependency.getGroupId() + ";" + dependency.getArtifactId() + "-" + dependency.getVersion();
+ if ( dependency.getClassifier() != null )
+ {
+ id += "-" + dependency.getClassifier();
+ }
+ id += "." + dependency.getType();
+
+ Node n = JcrUtils.getOrAddNode( dependenciesNode, id );
+ n.addMixin( DEPENDENCY_NODE_TYPE );
+
+ // FIXME: remove temp code just to make it keep working
+ n.setProperty( "groupId", dependency.getGroupId() );
+ n.setProperty( "artifactId", dependency.getArtifactId() );
+ n.setProperty( "version", dependency.getVersion() );
+ n.setProperty( "type", dependency.getType() );
+ n.setProperty( "classifier", dependency.getClassifier() );
+ n.setProperty( "scope", dependency.getScope() );
+ n.setProperty( "systemPath", dependency.getSystemPath() );
+ n.setProperty( "optional", dependency.isOptional() );
+
+ // node has no native content at this time, just facets
+ // no need to list a type as it's implied by the path. Parents are Maven specific.
+
+ // FIXME: add scope, systemPath, type, version, classifier & maven2 specific IDs as a facet
+ // (should also have been added to the Dependency)
+
+ // TODO: add a property that is a weak reference to the originating artifact, creating it if
+ // necessary (without adding the archiva:artifact mixin so that it doesn't get listed as an
+ // artifact, which gives a different meaning to "incomplete" which is a known local project
+ // that doesn't have metadata yet but has artifacts). (Though we may want to give it the
+ // artifact mixin and another property to identify all non-local artifacts for the closure
+ // reports)
+ }
}
for ( MetadataFacet facet : versionMetadata.getFacetList() )
@@ -304,6 +345,7 @@ public class JcrMetadataRepository
}
}
+ // FIXME: remove this and projectversionreference
public void updateProjectReference( String repositoryId, String namespace, String projectId, String projectVersion,
ProjectVersionReference reference )
throws MetadataRepositoryException
@@ -808,30 +850,26 @@ public class JcrMetadataRepository
i++;
}
- done = false;
- i = 0;
- while ( !done )
+ if ( node.hasNode( "dependencies" ) )
{
- String dependencyArtifactId = getPropertyString( node, "dependency." + i + ".artifactId" );
- if ( dependencyArtifactId != null )
- {
- Dependency dependency = new Dependency();
- dependency.setArtifactId( dependencyArtifactId );
- dependency.setGroupId( getPropertyString( node, "dependency." + i + ".groupId" ) );
- dependency.setClassifier( getPropertyString( node, "dependency." + i + ".classifier" ) );
- dependency.setOptional( Boolean.valueOf( getPropertyString( node,
- "dependency." + i + ".optional" ) ) );
- dependency.setScope( getPropertyString( node, "dependency." + i + ".scope" ) );
- dependency.setSystemPath( getPropertyString( node, "dependency." + i + ".systemPath" ) );
- dependency.setType( getPropertyString( node, "dependency." + i + ".type" ) );
- dependency.setVersion( getPropertyString( node, "dependency." + i + ".version" ) );
- versionMetadata.addDependency( dependency );
- }
- else
+ Node dependenciesNode = node.getNode( "dependencies" );
+ for ( Node n : JcrUtils.getChildNodes( dependenciesNode ) )
{
- done = true;
+ if ( n.isNodeType( DEPENDENCY_NODE_TYPE ) )
+ {
+ Dependency dependency = new Dependency();
+ // FIXME: correct these properties
+ dependency.setArtifactId( getPropertyString( n, "artifactId" ) );
+ dependency.setGroupId( getPropertyString( n, "groupId" ) );
+ dependency.setClassifier( getPropertyString( n, "classifier" ) );
+ dependency.setOptional( Boolean.valueOf( getPropertyString( n, "optional" ) ) );
+ dependency.setScope( getPropertyString( n, "scope" ) );
+ dependency.setSystemPath( getPropertyString( n, "systemPath" ) );
+ dependency.setType( getPropertyString( n, "type" ) );
+ dependency.setVersion( getPropertyString( n, "version" ) );
+ versionMetadata.addDependency( dependency );
+ }
}
- i++;
}
for ( Node n : JcrUtils.getChildNodes( node ) )