org.neo4j.graphdb.factory.GraphDatabaseFactory Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of neo4j-kernel Show documentation
Show all versions of neo4j-kernel Show documentation
Neo4j kernel is a lightweight, embedded Java database designed to
store data structured as graphs rather than tables. For more
information, see http://neo4j.org.
/**
* Copyright (c) 2002-2013 "Neo Technology,"
* Network Engine for Objects in Lund AB [http://neotechnology.com]
*
* This file is part of Neo4j.
*
* Neo4j is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
package org.neo4j.graphdb.factory;
import static org.neo4j.graphdb.factory.GraphDatabaseSetting.TRUE;
import static org.neo4j.graphdb.factory.GraphDatabaseSettings.read_only;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.neo4j.graphdb.GraphDatabaseService;
import org.neo4j.graphdb.index.IndexIterable;
import org.neo4j.graphdb.index.IndexProvider;
import org.neo4j.helpers.Service;
import org.neo4j.helpers.collection.Iterables;
import org.neo4j.kernel.EmbeddedGraphDatabase;
import org.neo4j.kernel.EmbeddedReadOnlyGraphDatabase;
import org.neo4j.kernel.extension.KernelExtensionFactory;
import org.neo4j.kernel.impl.cache.CacheProvider;
import org.neo4j.kernel.impl.nioneo.store.FileSystemAbstraction;
import org.neo4j.kernel.impl.transaction.xaframework.TransactionInterceptorProvider;
/**
* Creates a {@link org.neo4j.graphdb.GraphDatabaseService}.
*
* Use {@link #newEmbeddedDatabase(String)} or
* {@link #newEmbeddedDatabaseBuilder(String)} to create a database instance.
*/
public class GraphDatabaseFactory
{
protected List indexProviders;
protected List> kernelExtensions;
protected List cacheProviders;
protected List txInterceptorProviders;
protected FileSystemAbstraction fileSystem;
public GraphDatabaseFactory()
{
indexProviders = Iterables.toList( Service.load( IndexProvider.class ) );
kernelExtensions = new ArrayList>();
for ( KernelExtensionFactory factory : Service.load( KernelExtensionFactory.class ) )
{
kernelExtensions.add( factory );
}
cacheProviders = Iterables.toList( Service.load( CacheProvider.class ) );
txInterceptorProviders = Iterables.toList( Service.load( TransactionInterceptorProvider.class ) );
}
public GraphDatabaseService newEmbeddedDatabase( String path )
{
return newEmbeddedDatabaseBuilder( path ).newGraphDatabase();
}
public GraphDatabaseBuilder newEmbeddedDatabaseBuilder( final String path )
{
return new GraphDatabaseBuilder( new GraphDatabaseBuilder.DatabaseCreator()
{
@Override
public GraphDatabaseService newDatabase( Map config )
{
config.put( "ephemeral", "false" );
if ( TRUE.equalsIgnoreCase( config.get( read_only.name() ) ) )
{
return new EmbeddedReadOnlyGraphDatabase( path, config, indexProviders, kernelExtensions,
cacheProviders, txInterceptorProviders );
}
else
{
return new EmbeddedGraphDatabase( path, config, indexProviders, kernelExtensions, cacheProviders,
txInterceptorProviders );
}
}
} );
}
public Iterable getIndexProviders()
{
return indexProviders;
}
/**
* Sets an {@link org.neo4j.graphdb.index.IndexProvider} iterable source.
* {@link org.neo4j.kernel.ListIndexIterable} is a flexible provider that works well with
* dependency injection.
*
* @param indexIterable It's actually Iterable, but internally typecasted
* to workaround bug https://issues.apache.org/jira/browse/ARIES-834 .
*/
public void setIndexProviders( IndexIterable indexIterable )
{
indexProviders.clear();
for ( IndexProvider indexProvider : indexIterable )
{
this.indexProviders.add( indexProvider );
}
}
public Iterable> getKernelExtension()
{
return kernelExtensions;
}
public void setKernelExtensions( Iterable> newKernelExtensions )
{
kernelExtensions.clear();
for ( KernelExtensionFactory> newKernelExtension : newKernelExtensions )
{
kernelExtensions.add( newKernelExtension );
}
}
public void setCacheProviders( Iterable newCacheProviders )
{
cacheProviders.clear();
for ( CacheProvider newCacheProvider : newCacheProviders )
{
cacheProviders.add( newCacheProvider );
}
}
public void setTransactionInterceptorProviders( Iterable
transactionInterceptorProviders )
{
txInterceptorProviders.clear();
for ( TransactionInterceptorProvider newTxInterceptorProvider : transactionInterceptorProviders )
{
txInterceptorProviders.add( newTxInterceptorProvider );
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy