You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@archiva.apache.org by ol...@apache.org on 2013/05/16 14:12:22 UTC
svn commit: r1483314 - in /archiva/sandbox/trunk/metadata-store-cassandra:
./ src/main/java/org/apache/archiva/metadata/repository/jpa/
src/main/java/org/apache/archiva/metadata/repository/jpa/model/
src/test/java/org/apache/archiva/metadata/repository...
Author: olamy
Date: Thu May 16 12:12:21 2013
New Revision: 1483314
URL: http://svn.apache.org/r1483314
Log:
use astyanax
Modified:
archiva/sandbox/trunk/metadata-store-cassandra/pom.xml
archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/jpa/ArchivaEntityManagerFactory.java
archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/jpa/CassandraMetadataRepository.java
archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/jpa/CassandraRepositorySessionFactory.java
archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/jpa/DefaultArchivaEntityManagerFactory.java
archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/jpa/model/Namespace.java
archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/jpa/model/Repository.java
archiva/sandbox/trunk/metadata-store-cassandra/src/test/java/org/apache/archiva/metadata/repository/jpa/RepositoriesNamespaceTest.java
Modified: archiva/sandbox/trunk/metadata-store-cassandra/pom.xml
URL: http://svn.apache.org/viewvc/archiva/sandbox/trunk/metadata-store-cassandra/pom.xml?rev=1483314&r1=1483313&r2=1483314&view=diff
==============================================================================
--- archiva/sandbox/trunk/metadata-store-cassandra/pom.xml (original)
+++ archiva/sandbox/trunk/metadata-store-cassandra/pom.xml Thu May 16 12:12:21 2013
@@ -89,9 +89,9 @@
</dependency>
<dependency>
- <groupId>com.alvazan</groupId>
- <artifactId>playorm</artifactId>
- <version>1.5</version>
+ <groupId>com.netflix.astyanax</groupId>
+ <artifactId>astyanax-entity-mapper</artifactId>
+ <version>1.56.37</version>
<exclusions>
<exclusion>
<groupId>stax</groupId>
@@ -101,6 +101,18 @@
</dependency>
<dependency>
+ <groupId>com.netflix.astyanax</groupId>
+ <artifactId>astyanax-core</artifactId>
+ <version>1.56.37</version>
+ </dependency>
+
+ <dependency>
+ <groupId>com.netflix.astyanax</groupId>
+ <artifactId>astyanax-thrift</artifactId>
+ <version>1.56.37</version>
+ </dependency>
+
+ <dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-jcl</artifactId>
</dependency>
Modified: archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/jpa/ArchivaEntityManagerFactory.java
URL: http://svn.apache.org/viewvc/archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/jpa/ArchivaEntityManagerFactory.java?rev=1483314&r1=1483313&r2=1483314&view=diff
==============================================================================
--- archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/jpa/ArchivaEntityManagerFactory.java (original)
+++ archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/jpa/ArchivaEntityManagerFactory.java Thu May 16 12:12:21 2013
@@ -19,6 +19,8 @@ package org.apache.archiva.metadata.repo
* under the License.
*/
+import com.netflix.astyanax.Keyspace;
+
import javax.persistence.EntityManager;
/**
@@ -27,4 +29,7 @@ import javax.persistence.EntityManager;
public interface ArchivaEntityManagerFactory
{
EntityManager getEntityManager();
+
+ Keyspace getKeyspace();
+
}
Modified: archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/jpa/CassandraMetadataRepository.java
URL: http://svn.apache.org/viewvc/archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/jpa/CassandraMetadataRepository.java?rev=1483314&r1=1483313&r2=1483314&view=diff
==============================================================================
--- archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/jpa/CassandraMetadataRepository.java (original)
+++ archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/jpa/CassandraMetadataRepository.java Thu May 16 12:12:21 2013
@@ -19,6 +19,9 @@ package org.apache.archiva.metadata.repo
* under the License.
*/
+import com.google.common.base.Function;
+import com.netflix.astyanax.Keyspace;
+import com.netflix.astyanax.entitystore.DefaultEntityManager;
import org.apache.archiva.configuration.ArchivaConfiguration;
import org.apache.archiva.metadata.model.ArtifactMetadata;
import org.apache.archiva.metadata.model.MetadataFacet;
@@ -31,21 +34,21 @@ import org.apache.archiva.metadata.repos
import org.apache.archiva.metadata.repository.MetadataResolutionException;
import org.apache.archiva.metadata.repository.jpa.model.Namespace;
import org.apache.archiva.metadata.repository.jpa.model.Repository;
+import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.springframework.stereotype.Service;
-import javax.annotation.PostConstruct;
import javax.persistence.EntityManager;
-import javax.persistence.Persistence;
+import javax.persistence.PersistenceException;
import javax.persistence.TypedQuery;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
-import java.util.Properties;
+import java.util.Set;
/**
* @author Olivier Lamy
@@ -62,26 +65,83 @@ public class CassandraMetadataRepository
private final Map<String, MetadataFacetFactory> metadataFacetFactories;
+ private Keyspace keyspace;
+
+ com.netflix.astyanax.entitystore.EntityManager<Repository, String> repositoryEntityManager;
+
+ com.netflix.astyanax.entitystore.EntityManager<Namespace, String> namespaceEntityManager;
+
public CassandraMetadataRepository( Map<String, MetadataFacetFactory> metadataFacetFactories,
- ArchivaConfiguration configuration, EntityManager entityManager )
+ ArchivaConfiguration configuration, EntityManager entityManager,
+ Keyspace keyspace )
{
this.metadataFacetFactories = metadataFacetFactories;
this.configuration = configuration;
this.entityManager = entityManager;
+ this.keyspace = keyspace;
+
+ repositoryEntityManager =
+ new DefaultEntityManager.Builder<Repository, String>().withEntityType( Repository.class ).withKeyspace(
+ keyspace ).build();
+
+ repositoryEntityManager.createStorage( null );
+
+ namespaceEntityManager =
+ new DefaultEntityManager.Builder<Namespace, String>().withEntityType( Namespace.class ).withKeyspace(
+ keyspace ).build();
+
+ namespaceEntityManager.createStorage( null );
+ }
+
+ public com.netflix.astyanax.entitystore.EntityManager<Repository, String> getRepositoryEntityManager()
+ {
+ return repositoryEntityManager;
+ }
+
+ public com.netflix.astyanax.entitystore.EntityManager<Namespace, String> getNamespaceEntityManager()
+ {
+ return namespaceEntityManager;
}
@Override
public void updateNamespace( String repositoryId, String namespaceId )
throws MetadataRepositoryException
{
+ Repository repository = this.repositoryEntityManager.get( repositoryId );
+
+ if ( repository == null )
+ {
+ repository = new Repository( repositoryId );
+
+ Namespace namespace = new Namespace( namespaceId, repository );
+ //namespace.setRepository( repository );
+ //repository.getNamespaces().add( namespace );
+ this.repositoryEntityManager.put( repository );
+ this.namespaceEntityManager.put( namespace );
+ }
+ // FIXME add a Namespace id builder
+ Namespace namespace = namespaceEntityManager.get( namespaceId + "-" + repositoryId );
+ if ( namespace == null )
+ {
+ namespace = new Namespace( namespaceId, repository );
+ namespaceEntityManager.put( namespace );
+ }
+
+ }
+
+
+ public void updateNamespaceKundera( String repositoryId, String namespaceId )
+ throws MetadataRepositoryException
+ {
+
Repository repository = this.entityManager.find( Repository.class, repositoryId );
if ( repository == null )
{
repository = new Repository( repositoryId );
- Namespace namespace = new Namespace( namespaceId );
- namespace.setRepository( repository );
+ Namespace namespace = new Namespace( namespaceId, repository );
+ //namespace.setRepository( repository );
//repository.getNamespaces().add( namespace );
this.entityManager.persist( repository );
this.entityManager.persist( namespace );
@@ -89,8 +149,8 @@ public class CassandraMetadataRepository
else
{
- Namespace namespace = new Namespace( namespaceId );
- namespace.setRepository( repository );
+ Namespace namespace = new Namespace( namespaceId, repository );
+ //namespace.setRepository( repository );
entityManager.persist( namespace );
// contains the namespace ?
/*
@@ -105,7 +165,18 @@ public class CassandraMetadataRepository
}
@Override
- public void removeNamespace( String repositoryId, String namespace )
+ public void removeNamespace( String repositoryId, String namespaceId )
+ throws MetadataRepositoryException
+ {
+ Namespace namespace = namespaceEntityManager.get( namespaceId + "-" + repositoryId );
+ if ( namespace != null )
+ {
+ namespaceEntityManager.remove( namespace );
+ }
+ }
+
+
+ public void removeNamespaceKundera( String repositoryId, String namespace )
throws MetadataRepositoryException
{
TypedQuery<Namespace> typedQuery =
@@ -123,7 +194,11 @@ public class CassandraMetadataRepository
public void removeRepository( String repositoryId )
throws MetadataRepositoryException
{
- //To change body of implemented methods use File | Settings | File Templates.
+ Repository repository = repositoryEntityManager.get( repositoryId );
+ if ( repository != null )
+ {
+ repositoryEntityManager.remove( repository );
+ }
}
@Override
@@ -131,6 +206,27 @@ public class CassandraMetadataRepository
throws MetadataRepositoryException
{
logger.debug( "getRepositories" );
+
+ List<Repository> repositories = repositoryEntityManager.getAll();
+ if ( repositories == null )
+ {
+ return Collections.emptyList();
+ }
+ List<String> repoIds = new ArrayList<String>( repositories.size() );
+ for ( Repository repository : repositories )
+ {
+ repoIds.add( repository.getName() );
+ }
+ logger.debug( "getRepositories found: {}", repoIds );
+ return repoIds;
+
+ }
+
+
+ public Collection<String> getRepositoriesKundera()
+ throws MetadataRepositoryException
+ {
+ logger.debug( "getRepositories" );
TypedQuery<Repository> typedQuery = entityManager.createQuery( "select r from Repository r", Repository.class );
List<Repository> repositories = typedQuery.getResultList();
if ( repositories == null )
@@ -161,8 +257,69 @@ public class CassandraMetadataRepository
return null; //To change body of implemented methods use File | Settings | File Templates.
}
+ public List<String> getNamespaces( final String repoId )
+ throws MetadataResolutionException
+ {
+ try
+ {
+ logger.debug( "getNamespaces for repository '{}'", repoId );
+ //TypedQuery<Repository> typedQuery =
+ // entityManager.createQuery( "select n from Namespace n where n.repository_id=:id", Namespace.class );
+
+ //List<Repository> namespaces = typedQuery.setParameter( "id", repoId ).getResultList();
+
+ Repository repository = repositoryEntityManager.get( repoId );
+
+ if ( repository == null )
+ {
+ return Collections.emptyList();
+ }
+
+ // FIXME find correct cql query
+ //String query = "select * from namespace where repository.id = '" + repoId + "';";
+
+ //List<Namespace> namespaces = namespaceEntityManager.find( query );
+
+ final Set<Namespace> namespaces = new HashSet<Namespace>();
+
+ namespaceEntityManager.visitAll( new Function<Namespace, Boolean>()
+ {
+ // @Nullable add dependency ?
+ @Override
+ public Boolean apply( Namespace namespace )
+ {
+ if ( namespace != null && namespace.getRepository() != null && StringUtils.equalsIgnoreCase( repoId,
+ namespace.getRepository().getId() ) )
+ {
+ namespaces.add( namespace );
+ }
+ return Boolean.TRUE;
+ }
+ } );
+
+ repository.setNamespaces( new ArrayList<Namespace>( namespaces ) );
+
+ if ( repository == null || repository.getNamespaces().isEmpty() )
+ {
+ return Collections.emptyList();
+ }
+ List<String> namespaceIds = new ArrayList<String>( repository.getNamespaces().size() );
+
+ for ( Namespace n : repository.getNamespaces() )
+ {
+ namespaceIds.add( n.getName() );
+ }
+
+ logger.debug( "getNamespaces for repository '{}' found {}", repoId, namespaceIds.size() );
+ return namespaceIds;
+ }
+ catch ( PersistenceException e )
+ {
+ throw new MetadataResolutionException( e.getMessage(), e );
+ }
+ }
- public List<String> getNamespaces( String repoId )
+ public List<String> getNamespacesKundera( String repoId )
throws MetadataResolutionException
{
logger.debug( "getNamespaces for repository '{}'", repoId );
@@ -173,7 +330,7 @@ public class CassandraMetadataRepository
Repository repository = entityManager.find( Repository.class, repoId );
- if ( repository == null || repository.getNamespaces().isEmpty())
+ if ( repository == null || repository.getNamespaces().isEmpty() )
{
return Collections.emptyList();
}
Modified: archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/jpa/CassandraRepositorySessionFactory.java
URL: http://svn.apache.org/viewvc/archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/jpa/CassandraRepositorySessionFactory.java?rev=1483314&r1=1483313&r2=1483314&view=diff
==============================================================================
--- archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/jpa/CassandraRepositorySessionFactory.java (original)
+++ archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/jpa/CassandraRepositorySessionFactory.java Thu May 16 12:12:21 2013
@@ -19,6 +19,16 @@ package org.apache.archiva.metadata.repo
* under the License.
*/
+import com.google.common.collect.ImmutableMap;
+import com.netflix.astyanax.AstyanaxContext;
+import com.netflix.astyanax.Keyspace;
+import com.netflix.astyanax.connectionpool.NodeDiscoveryType;
+import com.netflix.astyanax.connectionpool.exceptions.ConnectionException;
+import com.netflix.astyanax.connectionpool.impl.ConnectionPoolConfigurationImpl;
+import com.netflix.astyanax.connectionpool.impl.ConnectionPoolType;
+import com.netflix.astyanax.connectionpool.impl.CountingConnectionPoolMonitor;
+import com.netflix.astyanax.impl.AstyanaxConfigurationImpl;
+import com.netflix.astyanax.thrift.ThriftFamilyFactory;
import org.apache.archiva.configuration.ArchivaConfiguration;
import org.apache.archiva.metadata.model.MetadataFacetFactory;
import org.apache.archiva.metadata.repository.MetadataRepository;
@@ -33,10 +43,8 @@ import javax.annotation.PostConstruct;
import javax.inject.Inject;
import javax.inject.Named;
import javax.persistence.EntityManager;
-import javax.persistence.Persistence;
import java.util.HashMap;
import java.util.Map;
-import java.util.Properties;
/**
* @author Olivier Lamy
@@ -63,6 +71,7 @@ public class CassandraRepositorySessionF
private EntityManager entityManager;
+
@PostConstruct
public void initialize()
{
@@ -78,15 +87,18 @@ public class CassandraRepositorySessionF
{
metadataFacetFactories.put( StringUtils.substringAfterLast( entry.getKey(), "#" ), entry.getValue() );
}
+
+
}
@Override
public RepositorySession createSession()
{
- MetadataRepository metadataRepository =
- new CassandraMetadataRepository( metadataFacetFactories, configuration, entityManager );
-
+ CassandraMetadataRepository metadataRepository =
+ new CassandraMetadataRepository( metadataFacetFactories, configuration, entityManager,
+ archivaEntityManagerFactory.getKeyspace() );
return new RepositorySession( metadataRepository, metadataResolver );
}
+
}
Modified: archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/jpa/DefaultArchivaEntityManagerFactory.java
URL: http://svn.apache.org/viewvc/archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/jpa/DefaultArchivaEntityManagerFactory.java?rev=1483314&r1=1483313&r2=1483314&view=diff
==============================================================================
--- archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/jpa/DefaultArchivaEntityManagerFactory.java (original)
+++ archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/jpa/DefaultArchivaEntityManagerFactory.java Thu May 16 12:12:21 2013
@@ -19,6 +19,16 @@ package org.apache.archiva.metadata.repo
* under the License.
*/
+import com.google.common.collect.ImmutableMap;
+import com.netflix.astyanax.AstyanaxContext;
+import com.netflix.astyanax.Keyspace;
+import com.netflix.astyanax.connectionpool.NodeDiscoveryType;
+import com.netflix.astyanax.connectionpool.exceptions.ConnectionException;
+import com.netflix.astyanax.connectionpool.impl.ConnectionPoolConfigurationImpl;
+import com.netflix.astyanax.connectionpool.impl.ConnectionPoolType;
+import com.netflix.astyanax.connectionpool.impl.CountingConnectionPoolMonitor;
+import com.netflix.astyanax.impl.AstyanaxConfigurationImpl;
+import com.netflix.astyanax.thrift.ThriftFamilyFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Service;
@@ -41,10 +51,43 @@ public class DefaultArchivaEntityManager
private EntityManager entityManager;
+ private static final String CLUSTER_NAME = "archiva";
+
+ private static final String KEYSPACE_NAME = "ArchivaKeySpace";
+
+ private Keyspace keyspace;
+
+ private AstyanaxContext<Keyspace> keyspaceContext;
+
+
@PostConstruct
public void initialize()
+ throws ConnectionException
{
- entityManager = Persistence.createEntityManagerFactory( "archiva", new Properties() ).createEntityManager();
+
+ //entityManager = Persistence.createEntityManagerFactory( "archiva", new Properties() ).createEntityManager();
+
+ keyspaceContext = new AstyanaxContext.Builder().forCluster( CLUSTER_NAME ).forKeyspace(
+ KEYSPACE_NAME ).withAstyanaxConfiguration(
+ new AstyanaxConfigurationImpl().setDiscoveryType( NodeDiscoveryType.RING_DESCRIBE ).setConnectionPoolType(
+ ConnectionPoolType.TOKEN_AWARE ) ).withConnectionPoolConfiguration(
+ new ConnectionPoolConfigurationImpl( CLUSTER_NAME + "_" + KEYSPACE_NAME ).setSocketTimeout(
+ 30000 ).setMaxTimeoutWhenExhausted( 2000 ).setMaxConnsPerHost( 20 ).setInitConnsPerHost( 10 ).setSeeds(
+ "localhost:9160" ) ).withConnectionPoolMonitor( new CountingConnectionPoolMonitor() ).buildKeyspace(
+ ThriftFamilyFactory.getInstance() );
+
+ keyspaceContext.start();
+
+ keyspace = keyspaceContext.getClient();
+
+ ImmutableMap<String, Object> options = ImmutableMap.<String, Object>builder().put( "strategy_options",
+ ImmutableMap.<String, Object>builder().put(
+ "replication_factor",
+ "1" ).build() ).put(
+ "strategy_class", "SimpleStrategy" ).build();
+
+ keyspace.createKeyspace( options );
+
}
@Override
@@ -52,4 +95,10 @@ public class DefaultArchivaEntityManager
{
return entityManager;
}
+
+ @Override
+ public Keyspace getKeyspace()
+ {
+ return keyspace;
+ }
}
Modified: archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/jpa/model/Namespace.java
URL: http://svn.apache.org/viewvc/archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/jpa/model/Namespace.java?rev=1483314&r1=1483313&r2=1483314&view=diff
==============================================================================
--- archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/jpa/model/Namespace.java (original)
+++ archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/jpa/model/Namespace.java Thu May 16 12:12:21 2013
@@ -19,22 +19,13 @@ package org.apache.archiva.metadata.repo
* under the License.
*/
-import com.alvazan.orm.api.base.anno.NoSqlId;
-import com.alvazan.orm.api.base.anno.NoSqlIndexed;
-import com.alvazan.orm.api.base.anno.NoSqlManyToOne;
-
-import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
-import javax.persistence.Embeddable;
-import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
-import javax.persistence.JoinTable;
import javax.persistence.ManyToOne;
-import javax.persistence.OneToOne;
import javax.persistence.Table;
import java.io.Serializable;
@@ -43,7 +34,7 @@ import java.io.Serializable;
* @author Olivier Lamy
*/
@Entity
-@Table( name = "namespace", schema = "ArchivaKeySpace@archiva")
+//@Table( name = "namespace", schema = "ArchivaKeySpace@archiva")
public class Namespace
implements Serializable
{
@@ -51,19 +42,19 @@ public class Namespace
private static final long serialVersionUID = 1L;
@Id
- @NoSqlId
@Column(name = "id")
private String id;
@Column(name = "name")
- @NoSqlIndexed
private String name;
- @ManyToOne(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER)
- @JoinColumn(name = "repository_id")
- @NoSqlManyToOne(columnName = "repository_id")
+ @Column(name = "repository")
private Repository repository;
+ //@ManyToOne(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER)
+ //@JoinColumn(name = "repository_id")
+ //private transient Repository repository;
+
public Namespace()
{
@@ -71,10 +62,11 @@ public class Namespace
}
- public Namespace( String id )
+ public Namespace( String id, Repository repository )
{
- this.id = id;
+ this.id = id + "-" + repository.getId();
this.name = id;
+ this.repository = repository;
}
public String getId()
@@ -97,7 +89,6 @@ public class Namespace
this.name = name;
}
-
public Repository getRepository()
{
return repository;
@@ -108,6 +99,17 @@ public class Namespace
this.repository = repository;
}
+ /*
+ public String getRepositoryId()
+ {
+ return repositoryId;
+ }
+
+ public void setRepositoryId( String repositoryId )
+ {
+ this.repositoryId = repositoryId;
+ }*/
+
@Override
public boolean equals( Object o )
{
@@ -126,6 +128,10 @@ public class Namespace
{
return false;
}
+ if ( !repository.getId().equals( namespace.repository.getId() ) )
+ {
+ return false;
+ }
return true;
}
@@ -133,7 +139,9 @@ public class Namespace
@Override
public int hashCode()
{
- return id.hashCode();
+ int result = id.hashCode();
+ result = 31 * result + repository.getId().hashCode();
+ return result;
}
@Override
@@ -142,7 +150,8 @@ public class Namespace
final StringBuilder sb = new StringBuilder( "Namespace{" );
sb.append( "id='" ).append( id ).append( '\'' );
sb.append( ", name='" ).append( name ).append( '\'' );
- sb.append( ", repository=" ).append( repository );
+ sb.append( ", repository='" ).append( repository ).append( '\'' );
+ //sb.append( ", repository=" ).append( repository );
sb.append( '}' );
return sb.toString();
}
Modified: archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/jpa/model/Repository.java
URL: http://svn.apache.org/viewvc/archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/jpa/model/Repository.java?rev=1483314&r1=1483313&r2=1483314&view=diff
==============================================================================
--- archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/jpa/model/Repository.java (original)
+++ archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/jpa/model/Repository.java Thu May 16 12:12:21 2013
@@ -19,20 +19,10 @@ package org.apache.archiva.metadata.repo
* under the License.
*/
-import com.alvazan.orm.api.base.anno.NoSqlId;
-import com.alvazan.orm.api.base.anno.NoSqlIndexed;
-import com.alvazan.orm.api.base.anno.NoSqlOneToMany;
-
-import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.JoinTable;
-import javax.persistence.ManyToMany;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import java.io.Serializable;
@@ -52,17 +42,13 @@ public class Repository
private static final long serialVersionUID = 1L;
@Id
- @NoSqlId
@Column( name = "id" )
private String id;
@Column(name = "name")
- @NoSqlIndexed
private String name;
- @OneToMany( fetch = FetchType.EAGER, mappedBy = "namespace")
- @NoSqlOneToMany(columnName = "repository_id")
- private List<Namespace> namespaces = new ArrayList<Namespace>();
+ private transient List<Namespace> namespaces = new ArrayList<Namespace>();
public Repository()
{
@@ -145,7 +131,7 @@ public class Repository
final StringBuilder sb = new StringBuilder( "Repository{" );
sb.append( "id='" ).append( id ).append( '\'' );
sb.append( ", name='" ).append( name ).append( '\'' );
- //sb.append( ", namespaces=" ).append( namespaces );
+ sb.append( ", namespaces=" ).append( namespaces );
sb.append( '}' );
return sb.toString();
}
Modified: archiva/sandbox/trunk/metadata-store-cassandra/src/test/java/org/apache/archiva/metadata/repository/jpa/RepositoriesNamespaceTest.java
URL: http://svn.apache.org/viewvc/archiva/sandbox/trunk/metadata-store-cassandra/src/test/java/org/apache/archiva/metadata/repository/jpa/RepositoriesNamespaceTest.java?rev=1483314&r1=1483313&r2=1483314&view=diff
==============================================================================
--- archiva/sandbox/trunk/metadata-store-cassandra/src/test/java/org/apache/archiva/metadata/repository/jpa/RepositoriesNamespaceTest.java (original)
+++ archiva/sandbox/trunk/metadata-store-cassandra/src/test/java/org/apache/archiva/metadata/repository/jpa/RepositoriesNamespaceTest.java Thu May 16 12:12:21 2013
@@ -22,11 +22,9 @@ package org.apache.archiva.metadata.repo
import org.apache.archiva.metadata.repository.jpa.model.Namespace;
import org.apache.archiva.metadata.repository.jpa.model.Repository;
import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
-import org.apache.cassandra.dht.BootStrapper;
import org.fest.assertions.api.Assertions;
import org.junit.After;
import org.junit.Before;
-import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
@@ -35,10 +33,6 @@ import org.springframework.test.context.
import javax.inject.Inject;
import javax.inject.Named;
-import javax.persistence.EntityManager;
-import javax.persistence.Query;
-import javax.persistence.TypedQuery;
-import java.util.List;
/**
* @author Olivier Lamy
@@ -58,7 +52,6 @@ public class RepositoriesNamespaceTest
@Named( value = "archivaEntityManagerFactory#jpa-archiva" )
ArchivaEntityManagerFactory archivaEntityManagerFactory;
- EntityManager em;
CassandraMetadataRepository cmr;
@@ -66,8 +59,9 @@ public class RepositoriesNamespaceTest
public void setup()
throws Exception
{
- em = archivaEntityManagerFactory.getEntityManager();
- cmr = new CassandraMetadataRepository( null, null, em );
+
+ cmr = new CassandraMetadataRepository( null, null, null, archivaEntityManagerFactory.getKeyspace() );
+
}
@After
@@ -83,7 +77,7 @@ public class RepositoriesNamespaceTest
public void testMetadataRepo()
throws Exception
{
- //com.alvazan.orm.api.base.Bootstrap.create( null ).createEntityManager().
+
Repository r = null;
Namespace n = null;
@@ -92,25 +86,29 @@ public class RepositoriesNamespaceTest
cmr.updateNamespace( "release", "org" );
- r = em.find( Repository.class, "release" );
+ r = cmr.getRepositoryEntityManager().get( "release" );
Assertions.assertThat( r ).isNotNull();
- Assertions.assertThat( cmr.getRepositories()).isNotEmpty().hasSize( 1 );
+ Assertions.assertThat( cmr.getRepositories() ).isNotEmpty().hasSize( 1 );
Assertions.assertThat( cmr.getNamespaces( "release" ) ).isNotEmpty().hasSize( 1 );
- n = em.find( Namespace.class, "org" );
+ n = cmr.getNamespaceEntityManager().get( "org" + "-" + "release" );
Assertions.assertThat( n ).isNotNull();
Assertions.assertThat( n.getRepository() ).isNotNull();
cmr.updateNamespace( "release", "org.apache" );
- r = em.find( Repository.class, "release" );
+ r = cmr.getRepositoryEntityManager().get( "release" );
Assertions.assertThat( r ).isNotNull();
Assertions.assertThat( cmr.getNamespaces( "release" ) ).isNotEmpty().hasSize( 2 );
-
+ }
+ catch ( Exception e )
+ {
+ logger.error( e.getMessage(), e );
+ throw e;
}
finally
{
@@ -121,19 +119,9 @@ public class RepositoriesNamespaceTest
protected void clearReposAndNamespace()
throws Exception
{
- TypedQuery<Repository> queryR = em.createQuery( "SELECT r FROM Repository r", Repository.class );
- for ( Repository r : queryR.getResultList() )
+ if ( true )
{
- em.remove( r );
+ return;
}
-
- TypedQuery<Namespace> query = em.createQuery( "SELECT n FROM Namespace n", Namespace.class );
- for ( Namespace n : query.getResultList() )
- {
- em.remove( n );
- }
-
-
- em.clear();
}
}