1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.neo4j.server.database;
21
22 import java.util.HashMap;
23 import java.util.Map;
24
25 import org.neo4j.ext.udc.UdcProperties;
26 import org.neo4j.graphdb.Node;
27 import org.neo4j.graphdb.Relationship;
28 import org.neo4j.graphdb.index.IndexManager;
29 import org.neo4j.graphdb.index.RelationshipIndex;
30 import org.neo4j.kernel.AbstractGraphDatabase;
31 import org.neo4j.server.logging.Logger;
32 import org.rrd4j.core.RrdDb;
33
34 public class Database
35 {
36 public static Logger log = Logger.getLogger( Database.class );
37
38 public AbstractGraphDatabase graph;
39
40 private final String databaseStoreDirectory;
41 private RrdDb rrdDb;
42
43 public Database( AbstractGraphDatabase db )
44 {
45 this.databaseStoreDirectory = db.getStoreDir();
46 graph = db;
47 }
48
49 public Database( GraphDatabaseFactory factory, String databaseStoreDirectory )
50 {
51 this( createDatabase( factory, databaseStoreDirectory, null ) );
52 log.warn( "No database tuning properties set in the property file, using defaults. Please specify the performance properties file with org.neo4j.server.db.tuning.properties in the server properties file [%s].", System.getProperty( "org.neo4j.server.properties" ) );
53 }
54
55 public Database( GraphDatabaseFactory factory, String databaseStoreDirectory,
56 Map<String, String> databaseTuningProperties )
57 {
58 this( createDatabase( factory, databaseStoreDirectory, databaseTuningProperties ) );
59 }
60
61 private static AbstractGraphDatabase createDatabase( GraphDatabaseFactory factory,
62 String databaseStoreDirectory, Map<String, String> databaseProperties )
63 {
64 log.info( "Creating database at " + databaseStoreDirectory );
65
66 if ( databaseProperties == null )
67 {
68 databaseProperties = new HashMap<String, String>();
69 }
70
71 databaseProperties.put( org.neo4j.kernel.Config.ENABLE_REMOTE_SHELL, "true" );
72 databaseProperties.put( org.neo4j.kernel.Config.KEEP_LOGICAL_LOGS, "true" );
73 databaseProperties.put( UdcProperties.UDC_SOURCE_KEY, "server" );
74
75 return factory.createDatabase( databaseStoreDirectory, databaseProperties );
76 }
77
78
79 public void startup()
80 {
81 if ( graph != null )
82 {
83 log.info( "Successfully started database" );
84 }
85 else
86 {
87 log.error( "Failed to start database. GraphDatabaseService has not been properly initialized." );
88 }
89 }
90
91 public void shutdown()
92 {
93 try
94 {
95 if ( rrdDb != null )
96 {
97 rrdDb.close();
98 }
99 if ( graph != null )
100 {
101 graph.shutdown();
102 }
103 log.info( "Successfully shutdown database" );
104 } catch ( Exception e )
105 {
106 log.error( "Database did not shut down cleanly. Reason [%s]", e.getMessage() );
107 throw new RuntimeException( e );
108 }
109 }
110
111 public String getLocation()
112 {
113 return databaseStoreDirectory;
114 }
115
116 public org.neo4j.graphdb.index.Index<Relationship> getRelationshipIndex( String name )
117 {
118 RelationshipIndex index = graph.index().forRelationships( name );
119 if ( index == null )
120 {
121 throw new RuntimeException( "No index for [" + name + "]" );
122 }
123 return index;
124 }
125
126 public org.neo4j.graphdb.index.Index<Node> getNodeIndex( String name )
127 {
128 org.neo4j.graphdb.index.Index<Node> index = graph.index().forNodes( name );
129 if ( index == null )
130 {
131 throw new RuntimeException( "No index for [" + name + "]" );
132 }
133 return index;
134 }
135
136 public RrdDb rrdDb()
137 {
138
139
140 return rrdDb;
141 }
142
143 public void setRrdDb( RrdDb rrdDb )
144 {
145 this.rrdDb = rrdDb;
146 }
147
148
149
150 public IndexManager getIndexManager()
151 {
152 return graph.index();
153 }
154 }