create cassandra entity manager only on start

git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1491787 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Olivier Lamy 2013-06-11 13:18:25 +00:00
parent b12f9ebd18
commit 970e6faffa
6 changed files with 309 additions and 244 deletions

View File

@ -20,6 +20,13 @@ package org.apache.archiva.metadata.repository.cassandra;
*/ */
import com.netflix.astyanax.Keyspace; import com.netflix.astyanax.Keyspace;
import com.netflix.astyanax.entitystore.EntityManager;
import org.apache.archiva.metadata.repository.cassandra.model.ArtifactMetadataModel;
import org.apache.archiva.metadata.repository.cassandra.model.MetadataFacetModel;
import org.apache.archiva.metadata.repository.cassandra.model.Namespace;
import org.apache.archiva.metadata.repository.cassandra.model.Project;
import org.apache.archiva.metadata.repository.cassandra.model.ProjectVersionMetadataModel;
import org.apache.archiva.metadata.repository.cassandra.model.Repository;
/** /**
* @author Olivier Lamy * @author Olivier Lamy
@ -28,4 +35,17 @@ public interface CassandraEntityManagerFactory
{ {
Keyspace getKeyspace(); Keyspace getKeyspace();
EntityManager<Repository, String> getRepositoryEntityManager();
EntityManager<Namespace, String> getNamespaceEntityManager();
EntityManager<Project, String> getProjectEntityManager();
EntityManager<ArtifactMetadataModel, String> getArtifactMetadataModelEntityManager();
EntityManager<MetadataFacetModel, String> getMetadataFacetModelEntityManager();
EntityManager<ProjectVersionMetadataModel, String> getProjectVersionMetadataModelEntityManager();
} }

View File

@ -75,190 +75,46 @@ public class CassandraMetadataRepository
private final Map<String, MetadataFacetFactory> metadataFacetFactories; private final Map<String, MetadataFacetFactory> metadataFacetFactories;
private Keyspace keyspace; private CassandraEntityManagerFactory cassandraEntityManagerFactory;
private EntityManager<Repository, String> repositoryEntityManager;
private EntityManager<Namespace, String> namespaceEntityManager;
private EntityManager<Project, String> projectEntityManager;
private EntityManager<ArtifactMetadataModel, String> artifactMetadataModelEntityManager;
private EntityManager<MetadataFacetModel, String> metadataFacetModelEntityManager;
private EntityManager<ProjectVersionMetadataModel, String> projectVersionMetadataModelEntityManager;
public CassandraMetadataRepository( Map<String, MetadataFacetFactory> metadataFacetFactories, public CassandraMetadataRepository( Map<String, MetadataFacetFactory> metadataFacetFactories,
ArchivaConfiguration configuration, Keyspace keyspace ) ArchivaConfiguration configuration, CassandraEntityManagerFactory cassandraEntityManagerFactory )
{ {
this.metadataFacetFactories = metadataFacetFactories; this.metadataFacetFactories = metadataFacetFactories;
this.configuration = configuration; this.configuration = configuration;
this.cassandraEntityManagerFactory = cassandraEntityManagerFactory;
this.keyspace = keyspace;
try
{
Properties properties = keyspace.getKeyspaceProperties();
logger.info( "keyspace properties: {}", properties );
}
catch ( ConnectionException e )
{
// FIXME better logging !
logger.warn( e.getMessage(), e );
}
try
{
repositoryEntityManager =
new DefaultEntityManager.Builder<Repository, String>().withEntityType( Repository.class ).withKeyspace(
keyspace ).build();
boolean exists = columnFamilyExists( "repository" );
// TODO very basic test we must test model change too
if ( !exists )
{
repositoryEntityManager.createStorage( null );
}
namespaceEntityManager =
new DefaultEntityManager.Builder<Namespace, String>().withEntityType( Namespace.class ).withKeyspace(
keyspace ).build();
exists = columnFamilyExists( "namespace" );
if ( !exists )
{
namespaceEntityManager.createStorage( null );
}
projectEntityManager =
new DefaultEntityManager.Builder<Project, String>().withEntityType( Project.class ).withKeyspace(
keyspace ).build();
exists = columnFamilyExists( "project" );
if ( !exists )
{
projectEntityManager.createStorage( null );
}
artifactMetadataModelEntityManager =
new DefaultEntityManager.Builder<ArtifactMetadataModel, String>().withEntityType(
ArtifactMetadataModel.class ).withKeyspace( keyspace ).build();
exists = columnFamilyExists( "artifactmetadatamodel" );
if ( !exists )
{
artifactMetadataModelEntityManager.createStorage( null );
}
metadataFacetModelEntityManager =
new DefaultEntityManager.Builder<MetadataFacetModel, String>().withEntityType(
MetadataFacetModel.class ).withKeyspace( keyspace ).build();
exists = columnFamilyExists( "metadatafacetmodel" );
if ( !exists )
{
metadataFacetModelEntityManager.createStorage( null );
}
projectVersionMetadataModelEntityManager =
new DefaultEntityManager.Builder<ProjectVersionMetadataModel, String>().withEntityType(
ProjectVersionMetadataModel.class ).withKeyspace( keyspace ).build();
exists = columnFamilyExists( "projectversionmetadatamodel" );
if ( !exists )
{
projectVersionMetadataModelEntityManager.createStorage( null );
}
}
catch ( PersistenceException e )
{
// FIXME report exception
logger.error( e.getMessage(), e );
}
catch ( ConnectionException e )
{
// FIXME report exception
logger.error( e.getMessage(), e );
}
} }
private boolean columnFamilyExists( String columnFamilyName )
throws ConnectionException
{
try
{
Properties properties = keyspace.getColumnFamilyProperties( columnFamilyName );
logger.debug( "getColumnFamilyProperties for {}: {}", columnFamilyName, properties );
return true;
}
catch ( NotFoundException e )
{
return false;
}
}
public EntityManager<Repository, String> getRepositoryEntityManager() public EntityManager<Repository, String> getRepositoryEntityManager()
{ {
return repositoryEntityManager; return this.cassandraEntityManagerFactory.getRepositoryEntityManager();
} }
public EntityManager<Namespace, String> getNamespaceEntityManager() public EntityManager<Namespace, String> getNamespaceEntityManager()
{ {
return namespaceEntityManager; return this.cassandraEntityManagerFactory.getNamespaceEntityManager();
}
public void setRepositoryEntityManager( EntityManager<Repository, String> repositoryEntityManager )
{
this.repositoryEntityManager = repositoryEntityManager;
}
public void setNamespaceEntityManager( EntityManager<Namespace, String> namespaceEntityManager )
{
this.namespaceEntityManager = namespaceEntityManager;
} }
public EntityManager<Project, String> getProjectEntityManager() public EntityManager<Project, String> getProjectEntityManager()
{ {
return projectEntityManager; return this.cassandraEntityManagerFactory.getProjectEntityManager();
}
public void setProjectEntityManager( EntityManager<Project, String> projectEntityManager )
{
this.projectEntityManager = projectEntityManager;
} }
public EntityManager<ArtifactMetadataModel, String> getArtifactMetadataModelEntityManager() public EntityManager<ArtifactMetadataModel, String> getArtifactMetadataModelEntityManager()
{ {
return artifactMetadataModelEntityManager; return cassandraEntityManagerFactory.getArtifactMetadataModelEntityManager();
}
public void setArtifactMetadataModelEntityManager(
EntityManager<ArtifactMetadataModel, String> artifactMetadataModelEntityManager )
{
this.artifactMetadataModelEntityManager = artifactMetadataModelEntityManager;
} }
public EntityManager<MetadataFacetModel, String> getMetadataFacetModelEntityManager() public EntityManager<MetadataFacetModel, String> getMetadataFacetModelEntityManager()
{ {
return metadataFacetModelEntityManager; return this.cassandraEntityManagerFactory.getMetadataFacetModelEntityManager();
}
public void setMetadataFacetModelEntityManager(
EntityManager<MetadataFacetModel, String> metadataFacetModelEntityManager )
{
this.metadataFacetModelEntityManager = metadataFacetModelEntityManager;
} }
public EntityManager<ProjectVersionMetadataModel, String> getProjectVersionMetadataModelEntityManager() public EntityManager<ProjectVersionMetadataModel, String> getProjectVersionMetadataModelEntityManager()
{ {
return projectVersionMetadataModelEntityManager; return this.cassandraEntityManagerFactory.getProjectVersionMetadataModelEntityManager();
}
public void setProjectVersionMetadataModelEntityManager(
EntityManager<ProjectVersionMetadataModel, String> projectVersionMetadataModelEntityManager )
{
this.projectVersionMetadataModelEntityManager = projectVersionMetadataModelEntityManager;
} }
@Override @Override
@ -274,24 +130,24 @@ public class CassandraMetadataRepository
{ {
try try
{ {
Repository repository = this.repositoryEntityManager.get( repositoryId ); Repository repository = this.getRepositoryEntityManager().get( repositoryId );
if ( repository == null ) if ( repository == null )
{ {
repository = new Repository( repositoryId ); repository = new Repository( repositoryId );
Namespace namespace = new Namespace( namespaceId, repository ); Namespace namespace = new Namespace( namespaceId, repository );
this.repositoryEntityManager.put( repository ); this.getRepositoryEntityManager().put( repository );
this.namespaceEntityManager.put( namespace ); this.getNamespaceEntityManager().put( namespace );
} }
// FIXME add a Namespace id builder // FIXME add a Namespace id builder
Namespace namespace = namespaceEntityManager.get( Namespace namespace = getNamespaceEntityManager().get(
new Namespace.KeyBuilder().withNamespace( namespaceId ).withRepositoryId( repositoryId ).build() ); new Namespace.KeyBuilder().withNamespace( namespaceId ).withRepositoryId( repositoryId ).build() );
if ( namespace == null ) if ( namespace == null )
{ {
namespace = new Namespace( namespaceId, repository ); namespace = new Namespace( namespaceId, repository );
namespaceEntityManager.put( namespace ); getNamespaceEntityManager().put( namespace );
} }
return namespace; return namespace;
} }
@ -309,11 +165,11 @@ public class CassandraMetadataRepository
{ {
try try
{ {
Namespace namespace = namespaceEntityManager.get( Namespace namespace = getNamespaceEntityManager().get(
new Namespace.KeyBuilder().withNamespace( namespaceId ).withRepositoryId( repositoryId ).build() ); new Namespace.KeyBuilder().withNamespace( namespaceId ).withRepositoryId( repositoryId ).build() );
if ( namespace != null ) if ( namespace != null )
{ {
namespaceEntityManager.remove( namespace ); getNamespaceEntityManager().remove( namespace );
} }
} }
catch ( PersistenceException e ) catch ( PersistenceException e )
@ -332,7 +188,7 @@ public class CassandraMetadataRepository
final List<ArtifactMetadataModel> artifactMetadataModels = new ArrayList<ArtifactMetadataModel>(); final List<ArtifactMetadataModel> artifactMetadataModels = new ArrayList<ArtifactMetadataModel>();
// remove data related to the repository // remove data related to the repository
this.artifactMetadataModelEntityManager.visitAll( new Function<ArtifactMetadataModel, Boolean>() this.getArtifactMetadataModelEntityManager().visitAll( new Function<ArtifactMetadataModel, Boolean>()
{ {
@Override @Override
public Boolean apply( ArtifactMetadataModel artifactMetadataModel ) public Boolean apply( ArtifactMetadataModel artifactMetadataModel )
@ -348,11 +204,11 @@ public class CassandraMetadataRepository
} }
} ); } );
artifactMetadataModelEntityManager.remove( artifactMetadataModels ); getArtifactMetadataModelEntityManager().remove( artifactMetadataModels );
final List<Namespace> namespaces = new ArrayList<Namespace>(); final List<Namespace> namespaces = new ArrayList<Namespace>();
namespaceEntityManager.visitAll( new Function<Namespace, Boolean>() getNamespaceEntityManager().visitAll( new Function<Namespace, Boolean>()
{ {
@Override @Override
public Boolean apply( Namespace namespace ) public Boolean apply( Namespace namespace )
@ -368,10 +224,10 @@ public class CassandraMetadataRepository
} }
} ); } );
namespaceEntityManager.remove( namespaces ); getNamespaceEntityManager().remove( namespaces );
final List<Project> projects = new ArrayList<Project>(); final List<Project> projects = new ArrayList<Project>();
projectEntityManager.visitAll( new Function<Project, Boolean>() getProjectEntityManager().visitAll( new Function<Project, Boolean>()
{ {
@Override @Override
public Boolean apply( Project project ) public Boolean apply( Project project )
@ -387,16 +243,16 @@ public class CassandraMetadataRepository
} }
} ); } );
projectEntityManager.remove( projects ); getProjectEntityManager().remove( projects );
// TODO cleanup or not // TODO cleanup or not
//final List<MetadataFacetModel> metadataFacetModels = new ArrayList<MetadataFacetModel>( ); //final List<MetadataFacetModel> metadataFacetModels = new ArrayList<MetadataFacetModel>( );
//metadataFacetModelEntityManager.visitAll( new Function<MetadataFacetModel, Boolean>() //getMetadataFacetModelEntityManager().visitAll( new Function<MetadataFacetModel, Boolean>()
final List<ProjectVersionMetadataModel> projectVersionMetadataModels = final List<ProjectVersionMetadataModel> projectVersionMetadataModels =
new ArrayList<ProjectVersionMetadataModel>(); new ArrayList<ProjectVersionMetadataModel>();
projectVersionMetadataModelEntityManager.visitAll( new Function<ProjectVersionMetadataModel, Boolean>() getProjectVersionMetadataModelEntityManager().visitAll( new Function<ProjectVersionMetadataModel, Boolean>()
{ {
@Override @Override
public Boolean apply( ProjectVersionMetadataModel projectVersionMetadataModel ) public Boolean apply( ProjectVersionMetadataModel projectVersionMetadataModel )
@ -413,12 +269,12 @@ public class CassandraMetadataRepository
} }
} ); } );
projectVersionMetadataModelEntityManager.remove( projectVersionMetadataModels ); getProjectVersionMetadataModelEntityManager().remove( projectVersionMetadataModels );
Repository repository = repositoryEntityManager.get( repositoryId ); Repository repository = getRepositoryEntityManager().get( repositoryId );
if ( repository != null ) if ( repository != null )
{ {
repositoryEntityManager.remove( repository ); getRepositoryEntityManager().remove( repository );
} }
} }
@ -436,7 +292,7 @@ public class CassandraMetadataRepository
{ {
logger.debug( "getRepositories" ); logger.debug( "getRepositories" );
List<Repository> repositories = repositoryEntityManager.getAll(); List<Repository> repositories = getRepositoryEntityManager().getAll();
if ( repositories == null ) if ( repositories == null )
{ {
return Collections.emptyList(); return Collections.emptyList();
@ -465,7 +321,7 @@ public class CassandraMetadataRepository
{ {
final Set<String> namespaces = new HashSet<String>(); final Set<String> namespaces = new HashSet<String>();
namespaceEntityManager.visitAll( new Function<Namespace, Boolean>() getNamespaceEntityManager().visitAll( new Function<Namespace, Boolean>()
{ {
// @Nullable add dependency ? // @Nullable add dependency ?
@Override @Override
@ -500,7 +356,7 @@ public class CassandraMetadataRepository
{ {
final Set<String> namespaces = new HashSet<String>(); final Set<String> namespaces = new HashSet<String>();
namespaceEntityManager.visitAll( new Function<Namespace, Boolean>() getNamespaceEntityManager().visitAll( new Function<Namespace, Boolean>()
{ {
// @Nullable add dependency ? // @Nullable add dependency ?
@Override @Override
@ -550,7 +406,7 @@ public class CassandraMetadataRepository
//List<Repository> namespaces = typedQuery.setParameter( "id", repoId ).getResultList(); //List<Repository> namespaces = typedQuery.setParameter( "id", repoId ).getResultList();
Repository repository = repositoryEntityManager.get( repoId ); Repository repository = getRepositoryEntityManager().get( repoId );
if ( repository == null ) if ( repository == null )
{ {
@ -560,11 +416,11 @@ public class CassandraMetadataRepository
// FIXME find correct cql query // FIXME find correct cql query
//String query = "select * from namespace where repository.id = '" + repoId + "';"; //String query = "select * from namespace where repository.id = '" + repoId + "';";
//List<Namespace> namespaces = namespaceEntityManager.find( query ); //List<Namespace> namespaces = getNamespaceEntityManager().find( query );
final Set<Namespace> namespaces = new HashSet<Namespace>(); final Set<Namespace> namespaces = new HashSet<Namespace>();
namespaceEntityManager.visitAll( new Function<Namespace, Boolean>() getNamespaceEntityManager().visitAll( new Function<Namespace, Boolean>()
{ {
// @Nullable add dependency ? // @Nullable add dependency ?
@Override @Override
@ -611,7 +467,7 @@ public class CassandraMetadataRepository
String projectKey = new Project.KeyBuilder().withProjectId( projectMetadata.getId() ).withNamespace( String projectKey = new Project.KeyBuilder().withProjectId( projectMetadata.getId() ).withNamespace(
new Namespace( projectMetadata.getNamespace(), new Repository( repositoryId ) ) ).build(); new Namespace( projectMetadata.getNamespace(), new Repository( repositoryId ) ) ).build();
Project project = projectEntityManager.get( projectKey ); Project project = getProjectEntityManager().get( projectKey );
if ( project != null ) if ( project != null )
{ {
return; return;
@ -619,7 +475,7 @@ public class CassandraMetadataRepository
String namespaceKey = new Namespace.KeyBuilder().withRepositoryId( repositoryId ).withNamespace( String namespaceKey = new Namespace.KeyBuilder().withRepositoryId( repositoryId ).withNamespace(
projectMetadata.getNamespace() ).build(); projectMetadata.getNamespace() ).build();
Namespace namespace = namespaceEntityManager.get( namespaceKey ); Namespace namespace = getNamespaceEntityManager().get( namespaceKey );
if ( namespace == null ) if ( namespace == null )
{ {
namespace = updateOrAddNamespace( repositoryId, projectMetadata.getNamespace() ); namespace = updateOrAddNamespace( repositoryId, projectMetadata.getNamespace() );
@ -629,7 +485,7 @@ public class CassandraMetadataRepository
try try
{ {
projectEntityManager.put( project ); getProjectEntityManager().put( project );
} }
catch ( PersistenceException e ) catch ( PersistenceException e )
{ {
@ -646,7 +502,7 @@ public class CassandraMetadataRepository
// cleanup ArtifactMetadataModel // cleanup ArtifactMetadataModel
final List<ArtifactMetadataModel> artifactMetadataModels = new ArrayList<ArtifactMetadataModel>(); final List<ArtifactMetadataModel> artifactMetadataModels = new ArrayList<ArtifactMetadataModel>();
artifactMetadataModelEntityManager.visitAll( new Function<ArtifactMetadataModel, Boolean>() getArtifactMetadataModelEntityManager().visitAll( new Function<ArtifactMetadataModel, Boolean>()
{ {
@Override @Override
public Boolean apply( ArtifactMetadataModel artifactMetadataModel ) public Boolean apply( ArtifactMetadataModel artifactMetadataModel )
@ -664,14 +520,14 @@ public class CassandraMetadataRepository
} }
} ); } );
artifactMetadataModelEntityManager.remove( artifactMetadataModels ); getArtifactMetadataModelEntityManager().remove( artifactMetadataModels );
Namespace namespace = new Namespace( namespaceId, new Repository( repositoryId ) ); Namespace namespace = new Namespace( namespaceId, new Repository( repositoryId ) );
final List<ProjectVersionMetadataModel> projectVersionMetadataModels = final List<ProjectVersionMetadataModel> projectVersionMetadataModels =
new ArrayList<ProjectVersionMetadataModel>(); new ArrayList<ProjectVersionMetadataModel>();
projectVersionMetadataModelEntityManager.visitAll( new Function<ProjectVersionMetadataModel, Boolean>() getProjectVersionMetadataModelEntityManager().visitAll( new Function<ProjectVersionMetadataModel, Boolean>()
{ {
@Override @Override
public Boolean apply( ProjectVersionMetadataModel projectVersionMetadataModel ) public Boolean apply( ProjectVersionMetadataModel projectVersionMetadataModel )
@ -692,12 +548,12 @@ public class CassandraMetadataRepository
if ( !projectVersionMetadataModels.isEmpty() ) if ( !projectVersionMetadataModels.isEmpty() )
{ {
projectVersionMetadataModelEntityManager.remove( projectVersionMetadataModels ); getProjectVersionMetadataModelEntityManager().remove( projectVersionMetadataModels );
} }
String key = new Project.KeyBuilder().withNamespace( namespace ).withProjectId( projectId ).build(); String key = new Project.KeyBuilder().withNamespace( namespace ).withProjectId( projectId ).build();
Project project = projectEntityManager.get( key ); Project project = getProjectEntityManager().get( key );
if ( project == null ) if ( project == null )
{ {
logger.debug( "removeProject notfound" ); logger.debug( "removeProject notfound" );
@ -705,7 +561,7 @@ public class CassandraMetadataRepository
} }
logger.debug( "removeProject {}", project ); logger.debug( "removeProject {}", project );
projectEntityManager.remove( project ); getProjectEntityManager().remove( project );
} }
@Override @Override
@ -713,7 +569,7 @@ public class CassandraMetadataRepository
throws MetadataResolutionException throws MetadataResolutionException
{ {
final Set<String> versions = new HashSet<String>(); final Set<String> versions = new HashSet<String>();
projectVersionMetadataModelEntityManager.visitAll( new Function<ProjectVersionMetadataModel, Boolean>() getProjectVersionMetadataModelEntityManager().visitAll( new Function<ProjectVersionMetadataModel, Boolean>()
{ {
@Override @Override
public Boolean apply( ProjectVersionMetadataModel projectVersionMetadataModel ) public Boolean apply( ProjectVersionMetadataModel projectVersionMetadataModel )
@ -732,7 +588,7 @@ public class CassandraMetadataRepository
} }
} ); } );
// FIXME use cql query // FIXME use cql query
artifactMetadataModelEntityManager.visitAll( new Function<ArtifactMetadataModel, Boolean>() getArtifactMetadataModelEntityManager().visitAll( new Function<ArtifactMetadataModel, Boolean>()
{ {
@Override @Override
public Boolean apply( ArtifactMetadataModel artifactMetadataModel ) public Boolean apply( ArtifactMetadataModel artifactMetadataModel )
@ -761,7 +617,7 @@ public class CassandraMetadataRepository
String namespaceKey = String namespaceKey =
new Namespace.KeyBuilder().withRepositoryId( repositoryId ).withNamespace( namespaceId ).build(); new Namespace.KeyBuilder().withRepositoryId( repositoryId ).withNamespace( namespaceId ).build();
// create the namespace if not exists // create the namespace if not exists
Namespace namespace = namespaceEntityManager.get( namespaceKey ); Namespace namespace = getNamespaceEntityManager().get( namespaceKey );
if ( namespace == null ) if ( namespace == null )
{ {
namespace = updateOrAddNamespace( repositoryId, namespaceId ); namespace = updateOrAddNamespace( repositoryId, namespaceId );
@ -770,13 +626,13 @@ public class CassandraMetadataRepository
// create the project if not exist // create the project if not exist
String projectKey = new Project.KeyBuilder().withNamespace( namespace ).withProjectId( projectId ).build(); String projectKey = new Project.KeyBuilder().withNamespace( namespace ).withProjectId( projectId ).build();
Project project = projectEntityManager.get( projectKey ); Project project = getProjectEntityManager().get( projectKey );
if ( project == null ) if ( project == null )
{ {
project = new Project( projectKey, projectId, namespace ); project = new Project( projectKey, projectId, namespace );
try try
{ {
projectEntityManager.put( project ); getProjectEntityManager().put( project );
} }
catch ( PersistenceException e ) catch ( PersistenceException e )
{ {
@ -787,7 +643,7 @@ public class CassandraMetadataRepository
String key = new ArtifactMetadataModel.KeyBuilder().withNamespace( namespace ).withProject( projectId ).withId( String key = new ArtifactMetadataModel.KeyBuilder().withNamespace( namespace ).withProject( projectId ).withId(
artifactMeta.getId() ).withProjectVersion( projectVersion ).build(); artifactMeta.getId() ).withProjectVersion( projectVersion ).build();
ArtifactMetadataModel artifactMetadataModel = artifactMetadataModelEntityManager.get( key ); ArtifactMetadataModel artifactMetadataModel = getArtifactMetadataModelEntityManager().get( key );
if ( artifactMetadataModel == null ) if ( artifactMetadataModel == null )
{ {
artifactMetadataModel = new ArtifactMetadataModel( key, artifactMeta.getId(), repositoryId, namespaceId, artifactMetadataModel = new ArtifactMetadataModel( key, artifactMeta.getId(), repositoryId, namespaceId,
@ -810,7 +666,7 @@ public class CassandraMetadataRepository
try try
{ {
artifactMetadataModelEntityManager.put( artifactMetadataModel ); getArtifactMetadataModelEntityManager().put( artifactMetadataModel );
} }
catch ( PersistenceException e ) catch ( PersistenceException e )
{ {
@ -820,7 +676,7 @@ public class CassandraMetadataRepository
key = new ProjectVersionMetadataModel.KeyBuilder().withRepository( repositoryId ).withNamespace( key = new ProjectVersionMetadataModel.KeyBuilder().withRepository( repositoryId ).withNamespace(
namespace ).withProjectId( projectId ).withId( projectVersion ).build(); namespace ).withProjectId( projectId ).withId( projectVersion ).build();
ProjectVersionMetadataModel projectVersionMetadataModel = projectVersionMetadataModelEntityManager.get( key ); ProjectVersionMetadataModel projectVersionMetadataModel = getProjectVersionMetadataModelEntityManager().get( key );
if ( projectVersionMetadataModel == null ) if ( projectVersionMetadataModel == null )
{ {
@ -830,7 +686,7 @@ public class CassandraMetadataRepository
projectVersionMetadataModel.setId( projectVersion ); projectVersionMetadataModel.setId( projectVersion );
projectVersionMetadataModel.setNamespace( namespace ); projectVersionMetadataModel.setNamespace( namespace );
projectVersionMetadataModelEntityManager.put( projectVersionMetadataModel ); getProjectVersionMetadataModelEntityManager().put( projectVersionMetadataModel );
} }
@ -846,7 +702,7 @@ public class CassandraMetadataRepository
{ {
final Set<String> versions = new HashSet<String>(); final Set<String> versions = new HashSet<String>();
// FIXME use cql query // FIXME use cql query
artifactMetadataModelEntityManager.visitAll( new Function<ArtifactMetadataModel, Boolean>() getArtifactMetadataModelEntityManager().visitAll( new Function<ArtifactMetadataModel, Boolean>()
{ {
@Override @Override
public Boolean apply( ArtifactMetadataModel artifactMetadataModel ) public Boolean apply( ArtifactMetadataModel artifactMetadataModel )
@ -889,7 +745,7 @@ public class CassandraMetadataRepository
final List<MetadataFacetModel> metadataFacetModels = new ArrayList<MetadataFacetModel>(); final List<MetadataFacetModel> metadataFacetModels = new ArrayList<MetadataFacetModel>();
metadataFacetModelEntityManager.visitAll( new Function<MetadataFacetModel, Boolean>() getMetadataFacetModelEntityManager().visitAll( new Function<MetadataFacetModel, Boolean>()
{ {
@Override @Override
public Boolean apply( MetadataFacetModel metadataFacetModel ) public Boolean apply( MetadataFacetModel metadataFacetModel )
@ -906,7 +762,7 @@ public class CassandraMetadataRepository
} }
} ); } );
metadataFacetModelEntityManager.remove( metadataFacetModels ); getMetadataFacetModelEntityManager().remove( metadataFacetModels );
Map<String, String> properties = metadataFacet.toProperties(); Map<String, String> properties = metadataFacet.toProperties();
@ -923,7 +779,7 @@ public class CassandraMetadataRepository
metadataFacetModelsToAdd.add( metadataFacetModel ); metadataFacetModelsToAdd.add( metadataFacetModel );
} }
metadataFacetModelEntityManager.put( metadataFacetModelsToAdd ); getMetadataFacetModelEntityManager().put( metadataFacetModelsToAdd );
} }
} }
@ -935,7 +791,7 @@ public class CassandraMetadataRepository
{ {
String namespaceKey = String namespaceKey =
new Namespace.KeyBuilder().withRepositoryId( repositoryId ).withNamespace( namespaceId ).build(); new Namespace.KeyBuilder().withRepositoryId( repositoryId ).withNamespace( namespaceId ).build();
Namespace namespace = namespaceEntityManager.get( namespaceKey ); Namespace namespace = getNamespaceEntityManager().get( namespaceKey );
if ( namespace == null ) if ( namespace == null )
{ {
namespace = updateOrAddNamespace( repositoryId, namespaceId ); namespace = updateOrAddNamespace( repositoryId, namespaceId );
@ -943,18 +799,18 @@ public class CassandraMetadataRepository
String key = new Project.KeyBuilder().withNamespace( namespace ).withProjectId( projectId ).build(); String key = new Project.KeyBuilder().withNamespace( namespace ).withProjectId( projectId ).build();
Project project = projectEntityManager.get( key ); Project project = getProjectEntityManager().get( key );
if ( project == null ) if ( project == null )
{ {
project = new Project( key, projectId, namespace ); project = new Project( key, projectId, namespace );
projectEntityManager.put( project ); getProjectEntityManager().put( project );
} }
// we don't test of repository and namespace really exist ! // we don't test of repository and namespace really exist !
key = new ProjectVersionMetadataModel.KeyBuilder().withRepository( repositoryId ).withNamespace( key = new ProjectVersionMetadataModel.KeyBuilder().withRepository( repositoryId ).withNamespace(
namespaceId ).withProjectId( projectId ).withId( versionMetadata.getId() ).build(); namespaceId ).withProjectId( projectId ).withId( versionMetadata.getId() ).build();
ProjectVersionMetadataModel projectVersionMetadataModel = projectVersionMetadataModelEntityManager.get( key ); ProjectVersionMetadataModel projectVersionMetadataModel = getProjectVersionMetadataModelEntityManager().get( key );
if ( projectVersionMetadataModel == null ) if ( projectVersionMetadataModel == null )
{ {
@ -976,7 +832,7 @@ public class CassandraMetadataRepository
try try
{ {
projectVersionMetadataModelEntityManager.put( projectVersionMetadataModel ); getProjectVersionMetadataModelEntityManager().put( projectVersionMetadataModel );
ArtifactMetadataModel artifactMetadataModel = new ArtifactMetadataModel(); ArtifactMetadataModel artifactMetadataModel = new ArtifactMetadataModel();
artifactMetadataModel.setArtifactMetadataModelId( artifactMetadataModel.setArtifactMetadataModelId(
@ -1009,7 +865,7 @@ public class CassandraMetadataRepository
{ {
// FIXME use cql query !! // FIXME use cql query !!
final List<String> facets = new ArrayList<String>(); final List<String> facets = new ArrayList<String>();
this.metadataFacetModelEntityManager.visitAll( new Function<MetadataFacetModel, Boolean>() this.getMetadataFacetModelEntityManager().visitAll( new Function<MetadataFacetModel, Boolean>()
{ {
@Override @Override
public Boolean apply( MetadataFacetModel metadataFacetModel ) public Boolean apply( MetadataFacetModel metadataFacetModel )
@ -1044,7 +900,7 @@ public class CassandraMetadataRepository
{ {
// FIXME use cql query !! // FIXME use cql query !!
final List<MetadataFacetModel> facets = new ArrayList<MetadataFacetModel>(); final List<MetadataFacetModel> facets = new ArrayList<MetadataFacetModel>();
this.metadataFacetModelEntityManager.visitAll( new Function<MetadataFacetModel, Boolean>() this.getMetadataFacetModelEntityManager().visitAll( new Function<MetadataFacetModel, Boolean>()
{ {
@Override @Override
public Boolean apply( MetadataFacetModel metadataFacetModel ) public Boolean apply( MetadataFacetModel metadataFacetModel )
@ -1097,7 +953,7 @@ public class CassandraMetadataRepository
{ {
String key = new MetadataFacetModel.KeyBuilder().withRepositoryId( repositoryId ).withFacetId( String key = new MetadataFacetModel.KeyBuilder().withRepositoryId( repositoryId ).withFacetId(
metadataFacet.getFacetId() ).withName( metadataFacet.getName() ).build(); metadataFacet.getFacetId() ).withName( metadataFacet.getName() ).build();
MetadataFacetModel metadataFacetModel = metadataFacetModelEntityManager.get( key ); MetadataFacetModel metadataFacetModel = getMetadataFacetModelEntityManager().get( key );
if ( metadataFacetModel == null ) if ( metadataFacetModel == null )
{ {
metadataFacetModel = new MetadataFacetModel(); metadataFacetModel = new MetadataFacetModel();
@ -1112,7 +968,7 @@ public class CassandraMetadataRepository
try try
{ {
metadataFacetModelEntityManager.put( metadataFacetModel ); getMetadataFacetModelEntityManager().put( metadataFacetModel );
} }
catch ( PersistenceException e ) catch ( PersistenceException e )
{ {
@ -1127,7 +983,7 @@ public class CassandraMetadataRepository
String key = new MetadataFacetModel.KeyBuilder().withRepositoryId( repositoryId ).withFacetId( String key = new MetadataFacetModel.KeyBuilder().withRepositoryId( repositoryId ).withFacetId(
metadataFacet.getFacetId() ).withName( metadataFacet.getName() ).withKey( entry.getKey() ).build(); metadataFacet.getFacetId() ).withName( metadataFacet.getName() ).withKey( entry.getKey() ).build();
MetadataFacetModel metadataFacetModel = metadataFacetModelEntityManager.get( key ); MetadataFacetModel metadataFacetModel = getMetadataFacetModelEntityManager().get( key );
if ( metadataFacetModel == null ) if ( metadataFacetModel == null )
{ {
metadataFacetModel = new MetadataFacetModel(); metadataFacetModel = new MetadataFacetModel();
@ -1143,7 +999,7 @@ public class CassandraMetadataRepository
metadataFacetModel.setValue( entry.getValue() ); metadataFacetModel.setValue( entry.getValue() );
try try
{ {
metadataFacetModelEntityManager.put( metadataFacetModel ); getMetadataFacetModelEntityManager().put( metadataFacetModel );
} }
catch ( PersistenceException e ) catch ( PersistenceException e )
{ {
@ -1162,7 +1018,7 @@ public class CassandraMetadataRepository
final List<MetadataFacetModel> toRemove = new ArrayList<MetadataFacetModel>(); final List<MetadataFacetModel> toRemove = new ArrayList<MetadataFacetModel>();
// FIXME cql query // FIXME cql query
metadataFacetModelEntityManager.visitAll( new Function<MetadataFacetModel, Boolean>() getMetadataFacetModelEntityManager().visitAll( new Function<MetadataFacetModel, Boolean>()
{ {
@Override @Override
public Boolean apply( MetadataFacetModel metadataFacetModel ) public Boolean apply( MetadataFacetModel metadataFacetModel )
@ -1181,7 +1037,7 @@ public class CassandraMetadataRepository
} ); } );
logger.debug( "removeMetadataFacets repositoryId: '{}', facetId: '{}', toRemove: {}", repositoryId, facetId, logger.debug( "removeMetadataFacets repositoryId: '{}', facetId: '{}', toRemove: {}", repositoryId, facetId,
toRemove ); toRemove );
metadataFacetModelEntityManager.remove( toRemove ); getMetadataFacetModelEntityManager().remove( toRemove );
} }
@Override @Override
@ -1192,7 +1048,7 @@ public class CassandraMetadataRepository
final List<MetadataFacetModel> toRemove = new ArrayList<MetadataFacetModel>(); final List<MetadataFacetModel> toRemove = new ArrayList<MetadataFacetModel>();
// FIXME cql query // FIXME cql query
metadataFacetModelEntityManager.visitAll( new Function<MetadataFacetModel, Boolean>() getMetadataFacetModelEntityManager().visitAll( new Function<MetadataFacetModel, Boolean>()
{ {
@Override @Override
public Boolean apply( MetadataFacetModel metadataFacetModel ) public Boolean apply( MetadataFacetModel metadataFacetModel )
@ -1212,7 +1068,7 @@ public class CassandraMetadataRepository
} ); } );
logger.debug( "removeMetadataFacets repositoryId: '{}', facetId: '{}', toRemove: {}", repositoryId, facetId, logger.debug( "removeMetadataFacets repositoryId: '{}', facetId: '{}', toRemove: {}", repositoryId, facetId,
toRemove ); toRemove );
metadataFacetModelEntityManager.remove( toRemove ); getMetadataFacetModelEntityManager().remove( toRemove );
} }
@Override @Override
@ -1224,7 +1080,7 @@ public class CassandraMetadataRepository
final List<ArtifactMetadataModel> artifactMetadataModels = new ArrayList<ArtifactMetadataModel>(); final List<ArtifactMetadataModel> artifactMetadataModels = new ArrayList<ArtifactMetadataModel>();
// FIXME cql query // FIXME cql query
artifactMetadataModelEntityManager.visitAll( new Function<ArtifactMetadataModel, Boolean>() getArtifactMetadataModelEntityManager().visitAll( new Function<ArtifactMetadataModel, Boolean>()
{ {
@Override @Override
public Boolean apply( ArtifactMetadataModel artifactMetadataModel ) public Boolean apply( ArtifactMetadataModel artifactMetadataModel )
@ -1269,7 +1125,7 @@ public class CassandraMetadataRepository
{ {
final List<MetadataFacetModel> metadataFacetModels = new ArrayList<MetadataFacetModel>(); final List<MetadataFacetModel> metadataFacetModels = new ArrayList<MetadataFacetModel>();
metadataFacetModelEntityManager.visitAll( new Function<MetadataFacetModel, Boolean>() getMetadataFacetModelEntityManager().visitAll( new Function<MetadataFacetModel, Boolean>()
{ {
@Override @Override
public Boolean apply( MetadataFacetModel metadataFacetModel ) public Boolean apply( MetadataFacetModel metadataFacetModel )
@ -1329,11 +1185,11 @@ public class CassandraMetadataRepository
if ( logger.isDebugEnabled() ) if ( logger.isDebugEnabled() )
{ {
logger.debug( "all ArtifactMetadataModel: {}", artifactMetadataModelEntityManager.getAll() ); logger.debug( "all ArtifactMetadataModel: {}", getArtifactMetadataModelEntityManager().getAll() );
} }
// FIXME cql query // FIXME cql query
artifactMetadataModelEntityManager.visitAll( new Function<ArtifactMetadataModel, Boolean>() getArtifactMetadataModelEntityManager().visitAll( new Function<ArtifactMetadataModel, Boolean>()
{ {
@Override @Override
public Boolean apply( ArtifactMetadataModel artifactMetadataModel ) public Boolean apply( ArtifactMetadataModel artifactMetadataModel )
@ -1384,7 +1240,7 @@ public class CassandraMetadataRepository
ArtifactMetadataModel artifactMetadataModel = new ArtifactMetadataModel(); ArtifactMetadataModel artifactMetadataModel = new ArtifactMetadataModel();
artifactMetadataModel.setArtifactMetadataModelId( key ); artifactMetadataModel.setArtifactMetadataModelId( key );
artifactMetadataModelEntityManager.remove( artifactMetadataModel ); getArtifactMetadataModelEntityManager().remove( artifactMetadataModel );
key = key =
new ProjectVersionMetadataModel.KeyBuilder().withId( version ).withRepository( repositoryId ).withNamespace( new ProjectVersionMetadataModel.KeyBuilder().withId( version ).withRepository( repositoryId ).withNamespace(
@ -1393,7 +1249,7 @@ public class CassandraMetadataRepository
ProjectVersionMetadataModel projectVersionMetadataModel = new ProjectVersionMetadataModel(); ProjectVersionMetadataModel projectVersionMetadataModel = new ProjectVersionMetadataModel();
projectVersionMetadataModel.setRowId( key ); projectVersionMetadataModel.setRowId( key );
projectVersionMetadataModelEntityManager.remove( projectVersionMetadataModel ); getProjectVersionMetadataModelEntityManager().remove( projectVersionMetadataModel );
} }
@Override @Override
@ -1411,7 +1267,7 @@ public class CassandraMetadataRepository
ArtifactMetadataModel artifactMetadataModel = new ArtifactMetadataModel(); ArtifactMetadataModel artifactMetadataModel = new ArtifactMetadataModel();
artifactMetadataModel.setArtifactMetadataModelId( key ); artifactMetadataModel.setArtifactMetadataModelId( key );
artifactMetadataModelEntityManager.remove( artifactMetadataModel ); getArtifactMetadataModelEntityManager().remove( artifactMetadataModel );
} }
@Override @Override
@ -1420,7 +1276,7 @@ public class CassandraMetadataRepository
throws MetadataRepositoryException throws MetadataRepositoryException
{ {
final List<ArtifactMetadataModel> artifactMetadataModels = new ArrayList<ArtifactMetadataModel>(); final List<ArtifactMetadataModel> artifactMetadataModels = new ArrayList<ArtifactMetadataModel>();
artifactMetadataModelEntityManager.visitAll( new Function<ArtifactMetadataModel, Boolean>() getArtifactMetadataModelEntityManager().visitAll( new Function<ArtifactMetadataModel, Boolean>()
{ {
@Override @Override
public Boolean apply( ArtifactMetadataModel artifactMetadataModel ) public Boolean apply( ArtifactMetadataModel artifactMetadataModel )
@ -1438,9 +1294,9 @@ public class CassandraMetadataRepository
return Boolean.TRUE; return Boolean.TRUE;
} }
} ); } );
artifactMetadataModelEntityManager.remove( artifactMetadataModels ); getArtifactMetadataModelEntityManager().remove( artifactMetadataModels );
/* /*
metadataFacetModelEntityManager.visitAll( new Function<MetadataFacetModel, Boolean>() getMetadataFacetModelEntityManager().visitAll( new Function<MetadataFacetModel, Boolean>()
{ {
@Override @Override
public Boolean apply( MetadataFacetModel metadataFacetModel ) public Boolean apply( MetadataFacetModel metadataFacetModel )
@ -1466,7 +1322,7 @@ public class CassandraMetadataRepository
return Boolean.TRUE; return Boolean.TRUE;
} }
} ); } );
metadataFacetModelEntityManager.remove( metadataFacetModels ); getMetadataFacetModelEntityManager().remove( metadataFacetModels );
*/ */
} }
@ -1477,7 +1333,7 @@ public class CassandraMetadataRepository
{ {
final List<ArtifactMetadataModel> artifactMetadataModels = new ArrayList<ArtifactMetadataModel>(); final List<ArtifactMetadataModel> artifactMetadataModels = new ArrayList<ArtifactMetadataModel>();
// FIXME use cql query ! // FIXME use cql query !
artifactMetadataModelEntityManager.visitAll( new Function<ArtifactMetadataModel, Boolean>() getArtifactMetadataModelEntityManager().visitAll( new Function<ArtifactMetadataModel, Boolean>()
{ {
@Override @Override
public Boolean apply( ArtifactMetadataModel artifactMetadataModel ) public Boolean apply( ArtifactMetadataModel artifactMetadataModel )
@ -1515,7 +1371,7 @@ public class CassandraMetadataRepository
final BooleanHolder booleanHolder = new BooleanHolder(); final BooleanHolder booleanHolder = new BooleanHolder();
projectEntityManager.visitAll( new Function<Project, Boolean>() getProjectEntityManager().visitAll( new Function<Project, Boolean>()
{ {
@Override @Override
public Boolean apply( Project project ) public Boolean apply( Project project )
@ -1556,7 +1412,7 @@ public class CassandraMetadataRepository
String key = new ProjectVersionMetadataModel.KeyBuilder().withRepository( repoId ).withNamespace( String key = new ProjectVersionMetadataModel.KeyBuilder().withRepository( repoId ).withNamespace(
namespace ).withProjectId( projectId ).withId( projectVersion ).build(); namespace ).withProjectId( projectId ).withId( projectVersion ).build();
ProjectVersionMetadataModel projectVersionMetadataModel = projectVersionMetadataModelEntityManager.get( key ); ProjectVersionMetadataModel projectVersionMetadataModel = getProjectVersionMetadataModelEntityManager().get( key );
if ( projectVersionMetadataModel == null ) if ( projectVersionMetadataModel == null )
{ {
@ -1582,7 +1438,7 @@ public class CassandraMetadataRepository
// facets // facets
final List<MetadataFacetModel> metadataFacetModels = new ArrayList<MetadataFacetModel>(); final List<MetadataFacetModel> metadataFacetModels = new ArrayList<MetadataFacetModel>();
// FIXME use cql query // FIXME use cql query
metadataFacetModelEntityManager.visitAll( new Function<MetadataFacetModel, Boolean>() getMetadataFacetModelEntityManager().visitAll( new Function<MetadataFacetModel, Boolean>()
{ {
@Override @Override
public Boolean apply( MetadataFacetModel metadataFacetModel ) public Boolean apply( MetadataFacetModel metadataFacetModel )
@ -1649,7 +1505,7 @@ public class CassandraMetadataRepository
final Set<String> projects = new HashSet<String>(); final Set<String> projects = new HashSet<String>();
// FIXME use cql query // FIXME use cql query
projectEntityManager.visitAll( new Function<Project, Boolean>() getProjectEntityManager().visitAll( new Function<Project, Boolean>()
{ {
@Override @Override
public Boolean apply( Project project ) public Boolean apply( Project project )
@ -1667,7 +1523,7 @@ public class CassandraMetadataRepository
} ); } );
/* /*
artifactMetadataModelEntityManager.visitAll( new Function<ArtifactMetadataModel, Boolean>() getArtifactMetadataModelEntityManager().visitAll( new Function<ArtifactMetadataModel, Boolean>()
{ {
@Override @Override
public Boolean apply( ArtifactMetadataModel artifactMetadataModel ) public Boolean apply( ArtifactMetadataModel artifactMetadataModel )
@ -1698,7 +1554,7 @@ public class CassandraMetadataRepository
// FIXME use cql query // FIXME use cql query
artifactMetadataModelEntityManager.visitAll( new Function<ArtifactMetadataModel, Boolean>() getArtifactMetadataModelEntityManager().visitAll( new Function<ArtifactMetadataModel, Boolean>()
{ {
@Override @Override
public Boolean apply( ArtifactMetadataModel artifactMetadataModel ) public Boolean apply( ArtifactMetadataModel artifactMetadataModel )
@ -1723,7 +1579,7 @@ public class CassandraMetadataRepository
return; return;
} }
artifactMetadataModelEntityManager.remove( artifactMetadataModels ); getArtifactMetadataModelEntityManager().remove( artifactMetadataModels );
String key = new ProjectVersionMetadataModel.KeyBuilder().withProjectId( projectId ).withId( String key = new ProjectVersionMetadataModel.KeyBuilder().withProjectId( projectId ).withId(
projectVersion ).withRepository( repoId ).withNamespace( namespace ).build(); projectVersion ).withRepository( repoId ).withNamespace( namespace ).build();
@ -1731,7 +1587,7 @@ public class CassandraMetadataRepository
ProjectVersionMetadataModel projectVersionMetadataModel = new ProjectVersionMetadataModel(); ProjectVersionMetadataModel projectVersionMetadataModel = new ProjectVersionMetadataModel();
projectVersionMetadataModel.setRowId( key ); projectVersionMetadataModel.setRowId( key );
projectVersionMetadataModelEntityManager.remove( projectVersionMetadataModel ); getProjectVersionMetadataModelEntityManager().remove( projectVersionMetadataModel );
} }
@Override @Override
@ -1741,7 +1597,7 @@ public class CassandraMetadataRepository
{ {
final List<ArtifactMetadataModel> artifactMetadataModels = new ArrayList<ArtifactMetadataModel>(); final List<ArtifactMetadataModel> artifactMetadataModels = new ArrayList<ArtifactMetadataModel>();
// FIXME use cql query ! // FIXME use cql query !
artifactMetadataModelEntityManager.visitAll( new Function<ArtifactMetadataModel, Boolean>() getArtifactMetadataModelEntityManager().visitAll( new Function<ArtifactMetadataModel, Boolean>()
{ {
@Override @Override
public Boolean apply( ArtifactMetadataModel artifactMetadataModel ) public Boolean apply( ArtifactMetadataModel artifactMetadataModel )
@ -1772,7 +1628,7 @@ public class CassandraMetadataRepository
// retrieve facets // retrieve facets
final List<MetadataFacetModel> metadataFacetModels = new ArrayList<MetadataFacetModel>(); final List<MetadataFacetModel> metadataFacetModels = new ArrayList<MetadataFacetModel>();
metadataFacetModelEntityManager.visitAll( new Function<MetadataFacetModel, Boolean>() getMetadataFacetModelEntityManager().visitAll( new Function<MetadataFacetModel, Boolean>()
{ {
@Override @Override
public Boolean apply( MetadataFacetModel metadataFacetModel ) public Boolean apply( MetadataFacetModel metadataFacetModel )

View File

@ -37,7 +37,7 @@ import java.util.Map;
/** /**
* @author Olivier Lamy * @author Olivier Lamy
*/ */
@Service( "repositorySessionFactory#cassandra" ) @Service("repositorySessionFactory#cassandra")
public class CassandraRepositorySessionFactory public class CassandraRepositorySessionFactory
implements RepositorySessionFactory implements RepositorySessionFactory
{ {
@ -45,7 +45,7 @@ public class CassandraRepositorySessionFactory
private Map<String, MetadataFacetFactory> metadataFacetFactories; private Map<String, MetadataFacetFactory> metadataFacetFactories;
@Inject @Inject
@Named( value = "archivaConfiguration#default" ) @Named(value = "archivaConfiguration#default")
private ArchivaConfiguration configuration; private ArchivaConfiguration configuration;
@Inject @Inject
@ -79,8 +79,7 @@ public class CassandraRepositorySessionFactory
public RepositorySession createSession() public RepositorySession createSession()
{ {
CassandraMetadataRepository metadataRepository = CassandraMetadataRepository metadataRepository =
new CassandraMetadataRepository( metadataFacetFactories, configuration, new CassandraMetadataRepository( metadataFacetFactories, configuration, cassandraEntityManagerFactory );
cassandraEntityManagerFactory.getKeyspace() );
return new RepositorySession( metadataRepository, metadataResolver ); return new RepositorySession( metadataRepository, metadataResolver );
} }

View File

@ -24,17 +24,30 @@ import com.netflix.astyanax.AstyanaxContext;
import com.netflix.astyanax.Keyspace; import com.netflix.astyanax.Keyspace;
import com.netflix.astyanax.connectionpool.NodeDiscoveryType; import com.netflix.astyanax.connectionpool.NodeDiscoveryType;
import com.netflix.astyanax.connectionpool.exceptions.ConnectionException; import com.netflix.astyanax.connectionpool.exceptions.ConnectionException;
import com.netflix.astyanax.connectionpool.exceptions.NotFoundException;
import com.netflix.astyanax.connectionpool.impl.ConnectionPoolConfigurationImpl; import com.netflix.astyanax.connectionpool.impl.ConnectionPoolConfigurationImpl;
import com.netflix.astyanax.connectionpool.impl.ConnectionPoolType; import com.netflix.astyanax.connectionpool.impl.ConnectionPoolType;
import com.netflix.astyanax.connectionpool.impl.CountingConnectionPoolMonitor; import com.netflix.astyanax.connectionpool.impl.CountingConnectionPoolMonitor;
import com.netflix.astyanax.ddl.KeyspaceDefinition; import com.netflix.astyanax.ddl.KeyspaceDefinition;
import com.netflix.astyanax.entitystore.DefaultEntityManager;
import com.netflix.astyanax.entitystore.EntityManager;
import com.netflix.astyanax.impl.AstyanaxConfigurationImpl; import com.netflix.astyanax.impl.AstyanaxConfigurationImpl;
import com.netflix.astyanax.thrift.ThriftFamilyFactory; import com.netflix.astyanax.thrift.ThriftFamilyFactory;
import org.apache.archiva.metadata.repository.cassandra.model.ArtifactMetadataModel;
import org.apache.archiva.metadata.repository.cassandra.model.MetadataFacetModel;
import org.apache.archiva.metadata.repository.cassandra.model.Namespace;
import org.apache.archiva.metadata.repository.cassandra.model.Project;
import org.apache.archiva.metadata.repository.cassandra.model.ProjectVersionMetadataModel;
import org.apache.archiva.metadata.repository.cassandra.model.Repository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
import javax.inject.Inject; import javax.inject.Inject;
import javax.persistence.PersistenceException;
import java.util.Properties;
/** /**
* FIXME make all configuration not hardcoded :-) * FIXME make all configuration not hardcoded :-)
@ -46,6 +59,8 @@ public class DefaultCassandraEntityManagerFactory
implements CassandraEntityManagerFactory implements CassandraEntityManagerFactory
{ {
private Logger logger = LoggerFactory.getLogger( getClass() );
@Inject @Inject
private ApplicationContext applicationContext; private ApplicationContext applicationContext;
@ -53,9 +68,21 @@ public class DefaultCassandraEntityManagerFactory
private static final String KEYSPACE_NAME = "ArchivaKeySpace"; private static final String KEYSPACE_NAME = "ArchivaKeySpace";
private AstyanaxContext<Keyspace> keyspaceContext;
private Keyspace keyspace; private Keyspace keyspace;
private AstyanaxContext<Keyspace> keyspaceContext; private EntityManager<Repository, String> repositoryEntityManager;
private EntityManager<Namespace, String> namespaceEntityManager;
private EntityManager<Project, String> projectEntityManager;
private EntityManager<ArtifactMetadataModel, String> artifactMetadataModelEntityManager;
private EntityManager<MetadataFacetModel, String> metadataFacetModelEntityManager;
private EntityManager<ProjectVersionMetadataModel, String> projectVersionMetadataModelEntityManager;
@PostConstruct @PostConstruct
@ -104,6 +131,106 @@ public class DefaultCassandraEntityManagerFactory
} }
try
{
Properties properties = keyspace.getKeyspaceProperties();
logger.info( "keyspace properties: {}", properties );
}
catch ( ConnectionException e )
{
// FIXME better logging !
logger.warn( e.getMessage(), e );
}
try
{
repositoryEntityManager =
new DefaultEntityManager.Builder<Repository, String>().withEntityType( Repository.class ).withKeyspace(
keyspace ).build();
boolean exists = columnFamilyExists( "repository" );
// TODO very basic test we must test model change too
if ( !exists )
{
repositoryEntityManager.createStorage( null );
}
namespaceEntityManager =
new DefaultEntityManager.Builder<Namespace, String>().withEntityType( Namespace.class ).withKeyspace(
keyspace ).build();
exists = columnFamilyExists( "namespace" );
if ( !exists )
{
namespaceEntityManager.createStorage( null );
}
projectEntityManager =
new DefaultEntityManager.Builder<Project, String>().withEntityType( Project.class ).withKeyspace(
keyspace ).build();
exists = columnFamilyExists( "project" );
if ( !exists )
{
projectEntityManager.createStorage( null );
}
artifactMetadataModelEntityManager =
new DefaultEntityManager.Builder<ArtifactMetadataModel, String>().withEntityType(
ArtifactMetadataModel.class ).withKeyspace( keyspace ).build();
exists = columnFamilyExists( "artifactmetadatamodel" );
if ( !exists )
{
artifactMetadataModelEntityManager.createStorage( null );
}
metadataFacetModelEntityManager =
new DefaultEntityManager.Builder<MetadataFacetModel, String>().withEntityType(
MetadataFacetModel.class ).withKeyspace( keyspace ).build();
exists = columnFamilyExists( "metadatafacetmodel" );
if ( !exists )
{
metadataFacetModelEntityManager.createStorage( null );
}
projectVersionMetadataModelEntityManager =
new DefaultEntityManager.Builder<ProjectVersionMetadataModel, String>().withEntityType(
ProjectVersionMetadataModel.class ).withKeyspace( keyspace ).build();
exists = columnFamilyExists( "projectversionmetadatamodel" );
if ( !exists )
{
projectVersionMetadataModelEntityManager.createStorage( null );
}
}
catch ( PersistenceException e )
{
// FIXME report exception
logger.error( e.getMessage(), e );
}
catch ( ConnectionException e )
{
// FIXME report exception
logger.error( e.getMessage(), e );
}
}
private boolean columnFamilyExists( String columnFamilyName )
throws ConnectionException
{
try
{
Properties properties = keyspace.getColumnFamilyProperties( columnFamilyName );
logger.debug( "getColumnFamilyProperties for {}: {}", columnFamilyName, properties );
return true;
}
catch ( NotFoundException e )
{
return false;
}
} }
@ -112,4 +239,67 @@ public class DefaultCassandraEntityManagerFactory
{ {
return keyspace; return keyspace;
} }
public EntityManager<Repository, String> getRepositoryEntityManager()
{
return repositoryEntityManager;
}
public void setRepositoryEntityManager( EntityManager<Repository, String> repositoryEntityManager )
{
this.repositoryEntityManager = repositoryEntityManager;
}
public EntityManager<Namespace, String> getNamespaceEntityManager()
{
return namespaceEntityManager;
}
public void setNamespaceEntityManager( EntityManager<Namespace, String> namespaceEntityManager )
{
this.namespaceEntityManager = namespaceEntityManager;
}
public EntityManager<Project, String> getProjectEntityManager()
{
return projectEntityManager;
}
public void setProjectEntityManager( EntityManager<Project, String> projectEntityManager )
{
this.projectEntityManager = projectEntityManager;
}
public EntityManager<ArtifactMetadataModel, String> getArtifactMetadataModelEntityManager()
{
return artifactMetadataModelEntityManager;
}
public void setArtifactMetadataModelEntityManager(
EntityManager<ArtifactMetadataModel, String> artifactMetadataModelEntityManager )
{
this.artifactMetadataModelEntityManager = artifactMetadataModelEntityManager;
}
public EntityManager<MetadataFacetModel, String> getMetadataFacetModelEntityManager()
{
return metadataFacetModelEntityManager;
}
public void setMetadataFacetModelEntityManager(
EntityManager<MetadataFacetModel, String> metadataFacetModelEntityManager )
{
this.metadataFacetModelEntityManager = metadataFacetModelEntityManager;
}
public EntityManager<ProjectVersionMetadataModel, String> getProjectVersionMetadataModelEntityManager()
{
return projectVersionMetadataModelEntityManager;
}
public void setProjectVersionMetadataModelEntityManager(
EntityManager<ProjectVersionMetadataModel, String> projectVersionMetadataModelEntityManager )
{
this.projectVersionMetadataModelEntityManager = projectVersionMetadataModelEntityManager;
}
} }

View File

@ -67,7 +67,7 @@ public class CassandraMetadataRepositoryTest
Map<String, MetadataFacetFactory> factories = createTestMetadataFacetFactories(); Map<String, MetadataFacetFactory> factories = createTestMetadataFacetFactories();
this.cmr = new CassandraMetadataRepository( factories, null, cassandraEntityManagerFactory.getKeyspace() ); this.cmr = new CassandraMetadataRepository( factories, null, cassandraEntityManagerFactory );
this.repository = this.cmr; this.repository = this.cmr;
clearReposAndNamespace(); clearReposAndNamespace();

View File

@ -58,7 +58,7 @@ public class RepositoriesNamespaceTest
throws Exception throws Exception
{ {
cmr = new CassandraMetadataRepository( null, null, cassandraEntityManagerFactory.getKeyspace() ); cmr = new CassandraMetadataRepository( null, null, cassandraEntityManagerFactory );
clearReposAndNamespace(); clearReposAndNamespace();
} }