1   /**
2    * Licensed to Neo Technology under one or more contributor
3    * license agreements. See the NOTICE file distributed with
4    * this work for additional information regarding copyright
5    * ownership. Neo Technology licenses this file to you under
6    * the Apache License, Version 2.0 (the "License"); you may
7    * not use this file except in compliance with the License.
8    * You may obtain a copy of the License at
9    *
10   * http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied. See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  
20  package org.neo4j.examples;
21  
22  import org.neo4j.graphdb.Direction;
23  import org.neo4j.graphdb.GraphDatabaseService;
24  import org.neo4j.graphdb.Node;
25  import org.neo4j.graphdb.RelationshipType;
26  import org.neo4j.graphdb.Transaction;
27  import org.neo4j.kernel.EmbeddedGraphDatabase;
28  
29  public class EmbeddedNeo4j
30  {
31      private static final String DB_PATH = "neo4j-store";
32      private static final String NAME_KEY = "name";
33  
34      // START SNIPPET: createReltype
35      private static enum ExampleRelationshipTypes implements RelationshipType
36      {
37          EXAMPLE
38      }
39      // END SNIPPET: createReltype
40  
41      public static void main( final String[] args )
42      {
43          // START SNIPPET: startDb
44          GraphDatabaseService graphDb = new EmbeddedGraphDatabase( DB_PATH );
45          registerShutdownHook( graphDb );
46          // END SNIPPET: startDb
47  
48          // START SNIPPET: operationsInATransaction
49          // Encapsulate operations in a transaction
50          Transaction tx = graphDb.beginTx();
51          try
52          {
53              Node firstNode = graphDb.createNode();
54              firstNode.setProperty( NAME_KEY, "Hello" );
55              Node secondNode = graphDb.createNode();
56              secondNode.setProperty( NAME_KEY, "World" );
57  
58              firstNode.createRelationshipTo( secondNode,
59                  ExampleRelationshipTypes.EXAMPLE );
60  
61              String greeting = firstNode.getProperty( NAME_KEY ) + " "
62                  + secondNode.getProperty( NAME_KEY );
63              System.out.println( greeting );
64              // END SNIPPET: operationsInATransaction
65  
66              // START SNIPPET: removingData
67              // let's remove the data before committing
68              firstNode.getSingleRelationship( ExampleRelationshipTypes.EXAMPLE,
69                      Direction.OUTGOING ).delete();
70              firstNode.delete();
71              secondNode.delete();
72  
73              tx.success();
74          }
75          finally
76          {
77              tx.finish();
78          }
79          // END SNIPPET: removingData
80  
81          System.out.println( "Shutting down database ..." );
82          // START SNIPPET: shutdownServer
83          graphDb.shutdown();
84          // END SNIPPET: shutdownServer
85      }
86  
87      private static void registerShutdownHook( final GraphDatabaseService graphDb )
88      {
89          // Registers a shutdown hook for the Neo4j instance so that it
90          // shuts down nicely when the VM exits (even if you "Ctrl-C" the
91          // running example before it's completed)
92          Runtime.getRuntime().addShutdownHook( new Thread()
93          {
94              @Override
95              public void run()
96              {
97                  graphDb.shutdown();
98              }
99          } );
100     }
101 }