Skip to content

Commit

Permalink
Merge pull request #744 from mneedham/aura-example
Browse files Browse the repository at this point in the history
Aura example
  • Loading branch information
mneedham authored Jul 1, 2020
2 parents 9ed7d75 + 0559fac commit a5b8145
Show file tree
Hide file tree
Showing 2 changed files with 140 additions and 6 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
/*
* Copyright (c) 2002-2020 "Neo4j,"
* Neo4j Sweden AB [http://neo4j.com]
*
* This file is part of Neo4j.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.neo4j.docs.driver;

// tag::driver-introduction-example-import[]

import org.neo4j.driver.*;
import org.neo4j.driver.exceptions.Neo4jException;

import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;

import static org.neo4j.driver.Config.TrustStrategy.trustAllCertificates;
// end::driver-introduction-example-import[]

// tag::driver-introduction-example[]
public class DriverIntroductionExample implements AutoCloseable {
private static final Logger LOGGER = Logger.getLogger(DriverIntroductionExample.class.getName());
private final Driver driver;

public DriverIntroductionExample(String uri, String user, String password, Config config) {
// The driver is a long living object and should be opened during the start of your application
driver = GraphDatabase.driver(uri, AuthTokens.basic(user, password), config);
}

@Override
public void close() throws Exception {
// The driver object should be closed before the application ends.
driver.close();
}

public void createFriendship(final String person1Name, final String person2Name) {
// To learn more about the Cypher syntax, see https://neo4j.com/docs/cypher-manual/current/
// The Reference Card is also a good resource for keywords https://neo4j.com/docs/cypher-refcard/current/
String createFriendshipQuery = "CREATE (p1:Person { name: $person1_name })\n" +
"CREATE (p2:Person { name: $person2_name })\n" +
"CREATE (p1)-[:KNOWS]->(p2)\n" +
"RETURN p1, p2";

Map<String, Object> params = new HashMap<>();
params.put("person1_name", person1Name);
params.put("person2_name", person2Name);

try (Session session = driver.session()) {
// Write transactions allow the driver to handle retries and transient errors
Record record = session.writeTransaction(tx -> {
Result result = tx.run(createFriendshipQuery, params);
return result.single();
});
System.out.println(String.format("Created friendship between: %s, %s",
record.get("p1").get("name").asString(),
record.get("p2").get("name").asString()));
// You should capture any errors along with the query and data for traceability
} catch (Neo4jException ex) {
LOGGER.log(Level.SEVERE, createFriendshipQuery + " raised an exception", ex);
throw ex;
}
}

public void findPerson(final String personName) {
String readPersonByNameQuery = "MATCH (p:Person)\n" +
"WHERE p.name = $person_name\n" +
"RETURN p.name AS name";

Map<String, Object> params = Collections.singletonMap("person_name", personName);

try (Session session = driver.session()) {
Record record = session.readTransaction(tx -> {
Result result = tx.run(readPersonByNameQuery, params);
return result.single();
});
System.out.println(String.format("Found person: %s", record.get("name").asString()));
// You should capture any errors along with the query and data for traceability
} catch (Neo4jException ex) {
LOGGER.log(Level.SEVERE, readPersonByNameQuery + " raised an exception", ex);
throw ex;
}
}

public static void main(String... args) throws Exception {
// Aura queries use an encrypted connection using the "neo4j+s" protocol
String boltUrl = "%%BOLT_URL_PLACEHOLDER%%";

String user = "<Username for Neo4j Aura database>";
String password = "<Password for Neo4j Aura database>";

// Aura queries use an encrypted connection
Config config = Config.builder().withEncryption().build();

try (DriverIntroductionExample app = new DriverIntroductionExample(boltUrl, user, password, Config.defaultConfig())) {
app.createFriendship("Alice", "David");
app.findPerson("Alice");
}
}
}
// end::driver-introduction-example[]
31 changes: 25 additions & 6 deletions examples/src/test/java/org/neo4j/docs/driver/ExamplesIT.java
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,7 @@
import java.util.Set;
import java.util.UUID;

import org.neo4j.driver.Driver;
import org.neo4j.driver.Session;
import org.neo4j.driver.SessionConfig;
import org.neo4j.driver.Value;
import org.neo4j.driver.Values;
import org.neo4j.driver.*;
import org.neo4j.driver.internal.util.EnabledOnNeo4jWith;
import org.neo4j.driver.summary.QueryType;
import org.neo4j.driver.summary.ResultSummary;
Expand All @@ -57,14 +53,14 @@
import static org.hamcrest.junit.MatcherAssert.assertThat;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.neo4j.driver.Config.TrustStrategy.trustAllCertificates;
import static org.neo4j.driver.Values.parameters;
import static org.neo4j.driver.internal.util.Neo4jEdition.ENTERPRISE;
import static org.neo4j.driver.internal.util.Neo4jFeature.BOLT_V4;
import static org.neo4j.driver.util.Neo4jRunner.PASSWORD;
import static org.neo4j.driver.util.Neo4jRunner.USER;
import static org.neo4j.driver.util.TestUtil.await;
import static org.neo4j.driver.util.TestUtil.createDatabase;
import static org.neo4j.driver.util.TestUtil.databaseExists;
import static org.neo4j.driver.util.TestUtil.dropDatabase;

@ParallelizableIT
Expand Down Expand Up @@ -304,6 +300,29 @@ void testShouldRunHelloWorld() throws Exception
}
}

@Test
void testShouldRunDriverIntroduction() throws Exception
{
// Given
Config config = Config.builder().withEncryption().withTrustStrategy(trustAllCertificates()).build();
try (DriverIntroductionExample intro = new DriverIntroductionExample( uri, USER, PASSWORD, config) )
{
// When
StdIOCapture stdIO = new StdIOCapture();

try ( AutoCloseable ignored = stdIO.capture() )
{
intro.createFriendship( "Alice", "David" );
intro.findPerson( "Alice" );
}

// Then
assertThat( stdIO.stdout().size(), equalTo( 2 ) );
assertThat( stdIO.stdout().get( 0 ), containsString( "Created friendship between: Alice, David" ) );
assertThat( stdIO.stdout().get( 1 ), containsString( "Found person: Alice" ) );
}
}

@Test
void testShouldRunReadWriteTransactionExample() throws Exception
{
Expand Down

0 comments on commit a5b8145

Please sign in to comment.