================================================
FILE: listings/chap09/build/resources/main/META-INF/services/org.codehaus.groovy.transform.ASTTransformation
================================================
regina.CompiledAtASTTransformation
================================================
FILE: listings/chap09/build/test-results/TEST-regina.CompiledAtASTTransformationTest.xml
================================================
================================================
FILE: listings/chap09/build.gradle
================================================
apply plugin:'idea'
apply plugin:'groovy'
apply plugin:'java'
repositories {
mavenCentral()
}
dependencies {
compile "org.codehaus.groovy:groovy-all:$groovyVersion"
testCompile "org.codehaus.groovy:groovy-all:$groovyVersion"
testCompile "junit:junit:4.12"
}
[compileGroovy, compileTestGroovy]*.options*.encoding = 'UTF-8'
================================================
FILE: listings/chap09/gradle/wrapper/gradle-wrapper.properties
================================================
#Thu Apr 10 09:16:15 EST 2014
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=http\://services.gradle.org/distributions/gradle-2.2.1-bin.zip
================================================
FILE: listings/chap09/gradle.properties
================================================
version=1.0.0-SNAPSHOT
groovyVersion=2.4.0
================================================
FILE: listings/chap09/gradlew
================================================
#!/usr/bin/env bash
##############################################################################
##
## Gradle start up script for UN*X
##
##############################################################################
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS=""
APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
warn ( ) {
echo "$*"
}
die ( ) {
echo
echo "$*"
echo
exit 1
}
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
case "`uname`" in
CYGWIN* )
cygwin=true
;;
Darwin* )
darwin=true
;;
MINGW* )
msys=true
;;
esac
# For Cygwin, ensure paths are in UNIX format before anything is touched.
if $cygwin ; then
[ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
fi
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`"/$link"
fi
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >&-
APP_HOME="`pwd -P`"
cd "$SAVED" >&-
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD="java"
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
MAX_FD_LIMIT=`ulimit -H -n`
if [ $? -eq 0 ] ; then
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
MAX_FD="$MAX_FD_LIMIT"
fi
ulimit -n $MAX_FD
if [ $? -ne 0 ] ; then
warn "Could not set maximum file descriptor limit: $MAX_FD"
fi
else
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
fi
fi
# For Darwin, add options to specify how the application appears in the dock
if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
# For Cygwin, switch paths to Windows format before running java
if $cygwin ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
SEP=""
for dir in $ROOTDIRSRAW ; do
ROOTDIRS="$ROOTDIRS$SEP$dir"
SEP="|"
done
OURCYGPATTERN="(^($ROOTDIRS))"
# Add a user-defined pattern to the cygpath arguments
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
i=0
for arg in "$@" ; do
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
else
eval `echo args$i`="\"$arg\""
fi
i=$((i+1))
done
case $i in
(0) set -- ;;
(1) set -- "$args0" ;;
(2) set -- "$args0" "$args1" ;;
(3) set -- "$args0" "$args1" "$args2" ;;
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac
fi
# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
function splitJvmOpts() {
JVM_OPTS=("$@")
}
eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
================================================
FILE: listings/chap09/gradlew.bat
================================================
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS=
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto init
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:init
@rem Get command-line arguments, handling Windowz variants
if not "%OS%" == "Windows_NT" goto win9xME_args
if "%@eval[2+2]" == "4" goto 4NT_args
:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2
:win9xME_args_slurp
if "x%~1" == "x" goto execute
set CMD_LINE_ARGS=%*
goto execute
:4NT_args
@rem Get arguments from the 4NT Shell from JP Software
set CMD_LINE_ARGS=%$
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega
================================================
FILE: listings/chap09/settings.gradle
================================================
rootProject.name='regina-chap09'
================================================
FILE: listings/chap09/snippet0902_autoCloneDefault.txt
================================================
class Chef1 implements Cloneable {
...
Chef1 clone() throws CloneNotSupportedException {
Chef1 _result = (Chef1) super.clone()
if (recipes instanceof Cloneable) {
_result.recipes = (List) recipes.clone()
}
_result.born = (Date) born.clone()
return _result
}
}
================================================
FILE: listings/chap09/snippet0902_autoCloneSerialization.txt
================================================
class Chef1 implements Cloneable, Serializable {
...
Object clone() throws CloneNotSupportedException {
def baos = new ByteArrayOutputStream()
baos.withObjectOutputStream{ it.writeObject(this) }
def bais = new ByteArrayInputStream(baos.toByteArray())
bais.withObjectInputStream(getClass().classLoader){ it.readObject() }
}
}
================================================
FILE: listings/chap09/snippet0902_autoExternalize.txt
================================================
class Composer implements Externalizable {
...
void writeExternal(ObjectOutput out) throws IOException {
out.writeObject(name)
out.writeInt(born)
out.writeBoolean(married)
}
void readExternal(ObjectInput oin) {
name = (String) oin.readObject()
born = oin.readInt()
married = oin.readBoolean()
}
}
================================================
FILE: listings/chap09/snippet0902_fieldEquivalent.txt
================================================
class ScriptYYYYY extends Script {
List awe = [1, 2, 3]
public static void main(String[] args) {
new ScriptYYYYY().run() //#A
}
public awesum() {
awe.sum()
}
public run() {
assert awesum() == 6
}
}
//#A again slightly simplified
================================================
FILE: listings/chap09/snippet0902_mapCreation.txt
================================================
class Chemist {
String first, last
int born
}
def c = new Chemist(first: "Marie", last: "Curie", born: 1867)
assert c.first == "Marie"
assert c.last == "Curie"
assert c.born == 1867
================================================
FILE: listings/chap09/snippet0902_noisySetDelegateByHand.txt
================================================
class NoisySet implements Set {
private Set delegate = new HashSet()
@Override
boolean add(item) {
println "adding $item"
delegate.add(item)
}
@Override
boolean addAll(Collection items) {
items.each { println "adding $it" }
delegate.addAll(items)
}
@Override
boolean isEmpty() {
return delegate.isEmpty()
}
@Override
boolean contains(Object o) {
return delegate.contains(o)
}
// ... ditto for size, iterator, toArray, remove,
// containsAll, retainAll, removeAll, clear ...
@Override
int size() {
return delegate.size()
}
@Override
Iterator iterator() {
return delegate.iterator()
}
@Override
Object[] toArray() {
return delegate.toArray()
}
@Override
def Object[] toArray(Object[] a) {
return delegate.toArray(a)
}
@Override
boolean remove(Object o) {
return delegate.remove(o)
}
@Override
boolean containsAll(Collection> c) {
return delegate.containsAll(c)
}
@Override
boolean retainAll(Collection> c) {
return delegate.retainAll(c)
}
@Override
boolean removeAll(Collection> c) {
return delegate.removeAll(c)
}
@Override
void clear() {
delegate.clear()
}
}
Set ns = new NoisySet()
ns.add(1)
ns.addAll([2, 3])
assert ns.size() == 3
================================================
FILE: listings/chap09/snippet0902_noisySetInheritance.txt
================================================
class NoisySet extends HashSet {
@Override
boolean add(item) {
println "adding $item"
super.add(item)
}
@Override
boolean addAll(Collection items) {
items.each { println "adding $it" }
super.addAll(items)
}
}
new NoisySet().with{
add(1)
addAll([2, 3])
assert size() == 3
}
================================================
FILE: listings/chap09/snippet0902_nonTailCallReverseList.txt
================================================
class ListUtil {
static reverse(List list) {
if (list.isEmpty()) list
else reverse(list.tail()) + list.head()
}
}
assert ListUtil.reverse(['a', 'b', 'c']) == ['c', 'b', 'a']
================================================
FILE: listings/chap09/snippet0902_readWriteByHand.txt
================================================
import java.util.concurrent.locks.ReentrantReadWriteLock
class PhoneBook3 {
private final phoneNumbers = [:]
final private lock = new ReentrantReadWriteLock()
def getNumber(key) {
lock.readLock().lock()
try {
phoneNumbers[key]
} finally {
lock.readLock().unlock()
}
}
def addNumber(key, value) {
lock.writeLock().lock()
try {
phoneNumbers[key] = value
} finally {
lock.writeLock().unlock()
}
}
}
================================================
FILE: listings/chap09/snippet0902_readWriteLock.txt
================================================
import groovy.transform.*
class PhoneBook3 {
private final phoneNumbers = [:]
@WithReadLock
def getNumber(key) {
phoneNumbers[key]
}
@WithWriteLock
def addNumber(key, value) {
phoneNumbers[key] = value
}
}
================================================
FILE: listings/chap09/snippet0902_singletonByHand.txt
================================================
class Zeus {
static final Zeus instance = new Zeus()
private Zeus() { }
}
assert Zeus.instance
================================================
FILE: listings/chap09/snippet0902_toStringEquivalent.txt
================================================
import org.codehaus.groovy.runtime.InvokerHelper
class SleuthExpanded {
String firstName
String lastName
String toString() {
def _result = new StringBuilder()
def $toStringFirst = true
_result.append('Sleuth(')
def firstName = InvokerHelper.getProperty(this, 'firstName')
if (firstName != null) {
if ($toStringFirst) {
$toStringFirst = false
} else {
_result.append(', ')
}
_result.append('firstName:')
if (firstName.is(this)) {
_result.append('(this)')
} else {
_result.append(InvokerHelper.toString(firstName))
}
}
def lastName = InvokerHelper.getProperty(this, 'lastName')
if (lastName != null) {
if ($toStringFirst) {
$toStringFirst = false
} else {
_result.append(', ')
}
_result.append('lastName:')
if (lastName.is(this)) {
_result.append('(this)')
} else {
_result.append(InvokerHelper.toString(lastName))
}
}
_result.append(')')
return _result.toString()
}
}
def nancy = new SleuthExpanded(firstName: 'Nancy', lastName: 'Drew')
assert nancy.toString() == 'Sleuth(firstName:Nancy, lastName:Drew)'
nancy.lastName = null
assert nancy.toString() == 'Sleuth(firstName:Nancy)'
================================================
FILE: listings/chap09/snippet0903_greeterExpanded.txt
================================================
class Greeter {
def greet() {
println "Hello from the greet() method!"
}
public static void main(String[] args) {
new Greeter().greet()
}
}
================================================
FILE: listings/chap09/snippet0903_greeterScript.txt
================================================
class Greeter {
@Main
def greet() {
println "Hello from the greet() method!"
}
}
================================================
FILE: listings/chap09/snippet0903_localMain.txt
================================================
@Retention(RetentionPolicy.SOURCE)
@Target([ElementType.METHOD])
@GroovyASTTransformationClass(classes = [MainTransformation])
@interface Main {}
================================================
FILE: listings/chap09/snippet0903_localMainTransformation.txt
================================================
@GroovyASTTransformation(phase = CompilePhase.INSTRUCTION_SELECTION)
class MainTransformation implements ASTTransformation {
void visit(ASTNode[] astNodes, SourceUnit sourceUnit) {
// perform any checks
// construct appropriate main method
// add main method to class
}
}
================================================
FILE: listings/chap09/snippet0905_GetCompiledTimeScript.txt
================================================
println 'script compiled at: ' + compiledTime
class MyClass { }
println 'script class compiled at: ' + MyClass.compiledTime
================================================
FILE: listings/chap09/src/main/groovy/regina/CompiledAtASTTransformation.groovy
================================================
package regina
import org.codehaus.groovy.ast.*
import org.codehaus.groovy.transform.*
import org.codehaus.groovy.control.*
import org.codehaus.groovy.ast.builder.AstBuilder
import static groovyjarjarasm.asm.Opcodes.*
@GroovyASTTransformation(phase=CompilePhase.CONVERSION)
class CompiledAtASTTransformation implements ASTTransformation {
private static final compileTime = new Date().toString()
void visit(ASTNode[] astNodes, SourceUnit sourceUnit) {
List classes = sourceUnit.ast?.classes
classes.each { ClassNode clazz ->
clazz.addMethod(makeMethod())
}
}
MethodNode makeMethod() {
def ast = new AstBuilder().buildFromSpec {
method('getCompiledTime', ACC_PUBLIC | ACC_STATIC, String) {
parameters {}
exceptions {}
block {
returnStatement {
constant(compileTime)
}
}
annotations {}
}
}
ast[0]
}
}
================================================
FILE: listings/chap09/src/main/resources/META-INF/services/org.codehaus.groovy.transform.ASTTransformation
================================================
regina.CompiledAtASTTransformation
================================================
FILE: listings/chap09/src/test/groovy/regina/CompiledAtASTTransformationTest.groovy
================================================
package regina
class CompiledAtASTTransformationTest extends GroovyTestCase {
// matches format: EEE MMM dd HH:mm:ss zzz yyyy
static DATE_FMT = /\w{3} \w{3} \d\d \d\d:\d\d:\d\d \S{3,9} \d{4}/
@Override
protected void setUp() throws Exception {
super.setUp()
}
void testShouldApplyToThisTest() {
assert compiledTime.toString() =~ DATE_FMT
}
void testShouldApplyToScriptAndScriptClasses() {
assertScript '''
import static regina.CompiledAtASTTransformationTest.*
assert compiledTime.toString() =~ DATE_FMT
class MyClass { }
assert MyClass.compiledTime.toString() =~ DATE_FMT
'''
}
}
================================================
FILE: listings/chap10/Greeter.java
================================================
public class Greeter { // Java!
static void greet(Object o) {
System.out.println("Hello, object " + o);
}
static void greet(String s) {
System.out.println("Hello, string " + s);
}
public static void main(String... args) {
Object o = "Bob";
String s = "Bob";
greet(o);
greet(s);
}
}
================================================
FILE: listings/chap10/Listing_10_01_Duck.groovy
================================================
class Duck {
def methodMissing(String name, args) {
println "$name!"
}
}
def duck = new Duck()
duck.quack()
================================================
FILE: listings/chap10/Listing_10_02_failing_Typo.groovy
================================================
class Detective {
String firstName
String lastName
}
def sherlock = new Detective(firstname: 'Sherlock', lastname: 'Holmes')
assert sherlock.lastName == 'Holmes'
================================================
FILE: listings/chap10/Listing_10_03_ClassTC.groovy
================================================
import groovy.transform.TypeChecked
@TypeChecked //#A
class Sleuth {
String firstName
String lastName
String getFullName() { "$firstName $lastName" }
}
assert new Sleuth(firstName: 'Nancy',
lastName: 'Drew').fullName == 'Nancy Drew'
//#A Class annotation
================================================
FILE: listings/chap10/Listing_10_04_OneMethodTC.groovy
================================================
import groovy.transform.TypeChecked
class Actor {
String firstName, lastName
@TypeChecked
String getFullName() { "$firstName $lastName" } //#1
void makePeace() {
new AntBuilder().echo('Peace was never an option') //#2
}
}
def magneto = new Actor(firstName: 'Ian', lastName: 'McKellen')
assert magneto.fullName == 'Ian McKellen'
magneto.makePeace()
//#1 Checked
//#2 Dynamic features allowed
================================================
FILE: listings/chap10/Listing_10_05_CompileTimeTypo.groovy
================================================
import static groovy.test.GroovyAssert.shouldFail
def e = shouldFail '''
import groovy.transform.TypeChecked
@TypeChecked
class Sleuth {
String firstName
String lastName //#A
String getFullName() { "$firstName $lastname" } //#B
}
'''.trim()
println e.message
assert e.message.contains(
'[Static type checking] - The variable [lastname] is undeclared')
//#A Uppercase N in lastName
//#B Incorrect lowercase n in lastname
================================================
FILE: listings/chap10/Listing_10_06_MethodNameTypo.groovy
================================================
import static groovy.test.GroovyAssert.shouldFail
def e = shouldFail '''
@groovy.transform.TypeChecked
class Person {
String name
String getFullName() { name.toUppercase() } //#A
}
'''
println e.message
assert e.message.contains(
'Cannot find matching method java.lang.String#toUppercase()')
//#A Incorrect lowercase c
================================================
FILE: listings/chap10/Listing_10_07_MethodArgsFlipped.groovy
================================================
import static groovy.test.GroovyAssert.shouldFail
def e = shouldFail '''
@groovy.transform.TypeChecked
class Repeat {
static void repeat(int n, String message) {
n.times{ println message }
}
static void validateAll(String... args) {
repeat('Hello', 4)
}
}
'''
println e.message
assert e.message.contains(
'Cannot find matching method Repeat#repeat(java.lang.String, int)')
================================================
FILE: listings/chap10/Listing_10_08_InvalidAssignments.groovy
================================================
import static groovy.test.GroovyAssert.shouldFail
def e = shouldFail '''
@groovy.transform.TypeChecked
void testAssignmentsShouldThrowCompilationErrors() {
Set set = new Object() //#A
byte b = 200L //#B
List list = ['Richard', 'Mary'] //#C
int prim = null //#D
}
'''
// massage to account for error message typo fixed in 2.4.1
def message = e.message.replaceAll('loose of precision', 'loss of precision')
[
'Cannot assign value of type java.lang.Object to variable of ' +
'type java.util.Set',
// typo loose should be loss in 2.4.1
'Possible loss of precision from long to byte',
'Incompatible generic argument types. Cannot assign ' +
'java.util.List to: java.util.List ',
'Cannot assign value of type java.lang.Object to variable of type int'
].each{ assert message.contains(it) }
//#A Cannot cast Object into Set
//#B Possible loss of precision
//#C Wrong generics
//#D Primitives cannot be null
================================================
FILE: listings/chap10/Listing_10_09_AssignmentsWithCoercion.groovy
================================================
enum MyEnum {
var, val
}
@groovy.transform.TypeChecked
void testAssignmentsWithCoercion() {
MyEnum val = 'val' //#A
assert val == MyEnum.val
String blue = java.awt.Color.BLUE //#B
assert blue == 'java.awt.Color[r=0,g=0,b=255]'
boolean nonEmpty = new Date() //#C
Boolean empty = '' //#C
assert nonEmpty
assert !empty
Class stringClass = 'java.lang.String' //#D
assert stringClass.interfaces.size() == 3
}
testAssignmentsWithCoercion()
//#A Strings coerced to enum values
//#B Anything coerced to String
//#C Anything coerced to boolean/Boolean
//#D Strings coerced to classes
================================================
FILE: listings/chap10/Listing_10_10_DefField.groovy
================================================
class Holder {
def value = 'My value' //#1
}
@groovy.transform.TypeChecked
void testNoCompileTimeErrorDueToDef() {
def holder = new Holder() //#2
holder.value = 5 //#3
}
testNoCompileTimeErrorDueToDef()
//#1 Property declaration
//#2 Create Holder instance
//#3 Holder value type changes!
================================================
FILE: listings/chap10/Listing_10_11_InPlaceList.groovy
================================================
def authors = ['Dierk', 'Guillaume'] //#1
authors.each { println it } //#A
//#1 Declaration of a list
//#A List iteration
================================================
FILE: listings/chap10/Listing_10_12_Generics.groovy
================================================
import groovy.transform.TypeChecked
@TypeChecked
void printAuthors() {
def authors = ['Dierk', 'Guillaume']
printToUpperCase(authors)
}
void printToUpperCase(List authors) {
authors.each { println it.toUpperCase() }
}
printAuthors()
================================================
FILE: listings/chap10/Listing_10_13_ListStyleCtorRuntime.groovy
================================================
import static groovy.test.GroovyAssert.shouldFail
void oneDimensional() {
java.awt.Dimension d = [100] //#A
}
shouldFail(ClassCastException) {
oneDimensional()
}
//#A Two parameters required! Runtime error here!
================================================
FILE: listings/chap10/Listing_10_14_ListStyleCtorTC.groovy
================================================
import org.codehaus.groovy.control.CompilationFailedException
import static groovy.test.GroovyAssert.shouldFail
def e = shouldFail CompilationFailedException, '''
@groovy.transform.TypeChecked
void alsoOneDimensional() {
java.awt.Dimension d = [100] //#A
}
'''
assert e.message.contains(
'No matching constructor found: java.awt.Dimension(int)')
//#A Two parameters required. Compilation fails!
================================================
FILE: listings/chap10/Listing_10_15_MapStyleCtorBad.groovy
================================================
import static groovy.test.GroovyAssert.shouldFail
def e = shouldFail '''
import groovy.transform.TypeChecked
class Athlete {
String first
String last
int age
}
@TypeChecked
void ageInteger() {
Athlete ok = [first: 'Michael', last: 'Jordan', age: 52] //#A
}
@TypeChecked
void ageString() {
Athlete bad = [first: 'Michael', last: 'Jordan', age: '52'] //#B
}
@TypeChecked
void ageStringNormal() {
def alsoBad =
new Athlete(first: 'Michael', last: 'Jordan', age: '52') //#B
}
//#A Passes
//#B Fails
'''
assert e.message.contains(
'Cannot assign value of type java.lang.String to variable of type int')
================================================
FILE: listings/chap10/Listing_10_16_ListStyleCtor.groovy
================================================
import static groovy.test.GroovyAssert.shouldFail
def e = shouldFail '''
import groovy.transform.*
@TupleConstructor
class Author {
String first
String last
int born
}
@TypeChecked
Author createAuthor(List params) {
Author a = params //#A
a
}
createAuthor(['Agatha', 'Christie', 1890])
'''
assert e.message.contains('Cannot assign value of type java.util.List' +
' to variable of type Author')
//#A Compile-time error!
================================================
FILE: listings/chap10/Listing_10_17_ListStyleCtorFixed.groovy
================================================
import groovy.transform.*
@TupleConstructor
class Author {
String first
String last
int born
}
@TypeChecked
Author createAuthor(List params) {
if (params.size() != 3) {
throw new IllegalArgumentException('Incorrect number of arguments')
}
String first = params[0] //#A
String last = params[1] //#A
Integer age = (Integer) params[2] //#B
Author a = [first, last, age] //#C
a
}
assert createAuthor(['Agatha', 'Christie', 1890]).born == 1890
//#A no need to cast as String on LHS
//#B Cast required
//#C Passes
================================================
FILE: listings/chap10/Listing_10_18_CodeAsData.groovy
================================================
def sum1(int x, int y) { x + y } //#1
def sum2 = { int x, int y -> x + y } //#2
assert sum1(3, 4) == 7
assert sum2(4, 5) == 9
//#1 sum function defined using a method
//#2 sum function defined using a closure
================================================
FILE: listings/chap10/Listing_10_19_ClosuresBadReturnType.groovy
================================================
import static groovy.test.GroovyAssert.shouldFail
def e = shouldFail '''
import groovy.transform.TypeChecked
class Logger {
static void print(Closure messageProvider) {
println "Received message : ${messageProvider()}"
}
}
@TypeChecked
void testMessage() {
def returnsString = { 'Hello, Groovy!' }
def returnsInt = { int x, int y -> x + y }
Logger.print(returnsString) //#1
Logger.print(returnsInt) //#2
}
'''
println e.message.readLines().find{ it.contains('[Static ') }
assert e.message.contains(
'Cannot call Logger#print(groovy.lang.Closure )' +
' with arguments [groovy.lang.Closure ]')
//#1 Passes
//#2 Compilation fails
================================================
FILE: listings/chap10/Listing_10_20_UserValidation.groovy
================================================
void validate(User u, Closure rule) {
if (!rule.call(u)) { //#1
println "User $u.name $u.password rejected"
}
}
void validateAll(user) {
validate(user) { !it.name.isEmpty() } //#2
validate(user) { it.password.size() > 7 } //#3
}
def bob = new User(name: 'Bob', password: 'secr3t')
validateAll(bob)
//#1 Apply rule
//#2 Example passing rule
//#3 Example failing rule
================================================
FILE: listings/chap10/Listing_10_21_UserValidationTC.groovy
================================================
import static groovy.test.GroovyAssert.shouldFail
def e = shouldFail '''
class User { String name, password }
import groovy.transform.TypeChecked
void validate(User u, Closure rule) {
if (!rule.call(u)) {
println "User $u.name $u.password rejected"
}
}
@TypeChecked
void validateAll(user) { //#1
validate(user) { !it.name.isEmpty() } //#2
validate(user) { it.password.size() > 7 } //#3
}
def bob = new User(name: 'Bob', password: 'secr3t')
validateAll(bob)
'''
// println out just the error messages
println e.message.readLines().findAll{ it.contains('[Static type checking]') }*.replaceAll(/.*(\[Static type checking\])(.*)/, '$1$2').join('\n')
assert e.message.contains('No such property: name for class: java.lang.Object')
assert e.message.contains('No such property: password for class: java.lang.Object')
assert e.message =~ /Cannot find matching method.*validate\(java.lang.Object, groovy.lang.Closure\)/
//#1 Type of user is Object
//#2 No property name for Object
//#3 No property password for Object
================================================
FILE: listings/chap10/Listing_10_22_UserValidation_ExplicitTypes.groovy
================================================
import groovy.transform.TypeChecked
void validate(User u, Closure rule) {
if (!rule.call(u)) {
println "User $u.name $u.password rejected"
}
}
@TypeChecked
void validateAll(User user) { //#A
validate(user) { User u -> !u.name.isEmpty() } //#A
validate(user) { User u -> u.password.size() > 7 } //#A
}
def bob = new User(name: 'Bob', password: 'secr3t')
validateAll(bob)
//#A User type in method and closure declarations
================================================
FILE: listings/chap10/Listing_10_23_UserValidation_SAM.groovy
================================================
import groovy.transform.TypeChecked
interface Predicate { boolean apply(On e) } //#1
void validate(User u, Predicate rule) { //#2
if (!rule.apply(u)) {
println "User $u.name $u.password rejected"
}
}
@TypeChecked
void validateAll(User user) {
validate(user) { !it.name.isEmpty() } //#3
validate(user) { it.password.size() > 7 } //#3
}
def bob = new User(name: 'Bob', password: 'secr3t')
validateAll(bob)
//#1 SAM type definition
//#2 SAM type argument
//#3 Implicit type inferred
================================================
FILE: listings/chap10/Listing_10_24_UserValidation_ClosureParams.groovy
================================================
import groovy.transform.TypeChecked
import groovy.transform.stc.*
void validate(User u,
@ClosureParams(FirstParam) Closure rule) { //#1
if (!rule.call(u)) {
println "User $u.name $u.password rejected"
}
}
@TypeChecked
void validateAll(User user) {
validate(user) { !it.name.isEmpty() }
validate(user) { it.password.size() > 7 }
}
def bob = new User(name: 'Bob', password: 'secr3t')
validateAll(bob)
================================================
FILE: listings/chap10/Listing_10_25_UserValidation_DSL.groovy
================================================
def validate(User u, Closure rule) {
rule.delegate = u //#1
rule() //#2
}
void validateAll(User u) {
validate(u) { if (name.isEmpty()) println 'Empty name' } //#3
validate(u) { if (password.size() < 8) println 'Password too short' }//#3
}
def bob = new User(name: 'Bob', password: 'secr3t')
validateAll(bob)
//#1 Set user as delegate
//#2 Call validation rule
//#3 Simplified rule syntax
================================================
FILE: listings/chap10/Listing_10_26_UserValidation_DelegatesTo.groovy
================================================
import groovy.transform.TypeChecked
def validate(User u, @DelegatesTo(User) Closure rule) { //#A
rule.delegate = u
rule()
}
@TypeChecked
void validateAll(User u) {
validate(u) { if (name.isEmpty()) println 'Empty name' }
validate(u) { if (password.size() < 8) println 'Password too short' }
}
def bob = new User(name: 'Bob', password: 'secr3t')
validateAll(bob)
//#A Annotation on Closure parameter
================================================
FILE: listings/chap10/Listing_10_27_UserValidation_DelegatesToTarget.groovy
================================================
import groovy.transform.TypeChecked
def validate(@DelegatesTo.Target User u, @DelegatesTo Closure rule) { //#A
rule.delegate = u
rule()
}
@TypeChecked
void validateAll(User u) {
validate(u) { if (name.isEmpty()) println 'Empty name' }
validate(u) { if (password.size() < 8) println 'Password too short' }
}
def bob = new User(name: 'Bob', password: 'secr3t')
validateAll(bob)
//#A Annotate the Closure and the User
================================================
FILE: listings/chap10/Listing_10_28_Category.groovy
================================================
import groovy.time.TimeCategory
class VacationHelper {
static duration() {
use(TimeCategory) {
doCompute()
}
}
static doCompute() { 1.week - 1.day }
}
assert VacationHelper.duration().toString() == '6 days'
================================================
FILE: listings/chap10/Listing_10_29_EMC.groovy
================================================
class Spy {
static {
def mc = new ExpandoMetaClass(Spy, false, true) //#A
mc.initialize()
Spy.metaClass = mc
}
String name = "James"
void methodMissing(String name, args) {
if (name.startsWith('changeNameTo')) {
println "Adding method $name"
String newName = name.substring(12)
def newMethod = { delegate.name = newName } //#1
Spy.metaClass."$name" = newMethod //#2
newMethod() //#B
} else {
throw new MissingMethodException(name, this.class, args)
}
}
}
def spy = new Spy()
assert "James" == spy.name
spy.changeNameToAustin()
assert "Austin" == spy.name
spy.changeNameToMaxwell()
assert "Maxwell" == spy.name
spy.changeNameToAustin()
//#1 If method not found, define new one
//#2 Cache method
//#A Create an ExpandoMetaClass for Spy class
//#B Call new method
================================================
FILE: listings/chap10/Listing_10_30_Builder.groovy
================================================
import groovy.xml.MarkupBuilder
def writer = new StringWriter()
def xml = new MarkupBuilder(writer) //#A
xml.html { //#1
head { //#1
title('An XHTML Page') //#1
}
}
println writer
//#A Instantiate MarkupBuilder
//#1 Method calls that @TypeChecked would reject
================================================
FILE: listings/chap10/Listing_10_31_MixedTypeChecking.groovy
================================================
import groovy.xml.MarkupBuilder
import groovy.transform.TypeChecked
class HTMLExample {
private static String buildPage(String pageTitle) {
def writer = new StringWriter()
def xml = new MarkupBuilder(writer)
xml.html {
head { title(pageTitle) }
}
writer
}
@TypeChecked //#A
static String page404() {
buildPage '404 - Not Found'
}
}
HTMLExample.page404()
//#A Type check only this method
================================================
FILE: listings/chap10/Listing_10_32_Skip.groovy
================================================
import groovy.xml.MarkupBuilder
import groovy.transform.TypeChecked
import groovy.transform.TypeCheckingMode
@TypeChecked //#A
class HTMLExample2 {
@TypeChecked(TypeCheckingMode.SKIP) //#B
private static String buildPage(String pageTitle) {
def writer = new StringWriter()
def xml = new MarkupBuilder(writer)
xml.html {
head { title(pageTitle) }
}
writer
}
static String page404() {
buildPage '404 - Not Found'
}
}
HTMLExample2.page404()
//#A Type check class
//#B But exclude this method
================================================
FILE: listings/chap10/Listing_10_33_FlowTyping.groovy
================================================
import static groovy.test.GroovyAssert.shouldFail
def e = shouldFail '''
import groovy.transform.TypeChecked
@TypeChecked
def flowTyping() {
def var = 'A string' //#1
var = var.toUpperCase() //#2
var = var.length() //#3
var = String.valueOf(var) //#4
var = 2*var //#5
var
}
//#1 Assign String to var
//#2 Assign another String to var
//#3 Assign int to var
//#4 Assign String to var
//#5 FAIL! Trying to call (int*String)
'''
println e.message.readLines().find{ it.contains('[Static type') }
assert e.message.contains('Cannot find matching method int#multiply(java.lang.String)')
================================================
FILE: listings/chap10/Listing_10_34_FlowTypingOk.groovy
================================================
import groovy.transform.TypeChecked
interface Flying {
void fly()
}
class Bird implements Flying {
void fly() { println "I'm flying!" }
}
class Canary extends Bird {
void sing() { println "Tweet!" }
}
@TypeChecked
void main() {
def o = new Bird()
o.fly() //#1
o = new Canary()
o.fly() //#2
o.sing() //#2
// o = new Bird()
// o.sing() //#A
}
main()
//#1 a bird can fly
//#2 a canary can fly too and also sing
//#A Would fail compilation
================================================
FILE: listings/chap10/Listing_10_35_LUB.groovy
================================================
import static groovy.test.GroovyAssert.shouldFail
def e = shouldFail '''
import groovy.transform.TypeChecked
interface Polite {
void greet()
void thank()
}
class Person implements Polite {
String name
void greet() { println "Hello, I'm $name!" }
void thank() { println 'Thanks!' }
}
class Owl implements Polite {
void greet() { hoot() }
void thank() { hoot() }
void hoot() { println 'Hoot' }
}
@TypeChecked
void main() {
def list = [new Person(name: 'Bill'), new Owl()] //#A
Polite p1 = list[0] //#B
Polite o1 = list[1] //#B
Owl o2 = list[0] //#1
Person p2 = list[1] //#2
// extra sample (comment out and not mentioned in the book):
// a way to overcome above problem if we wanted to in Groovy
// def tuple = new Tuple2(new Person(name: 'Bill'), new Owl())
// Person p3 = tuple.first
// Owl o3 = tuple.second
}
main()
//#A Create list with Person and Owl
//#B Assign either element to variable of type Polite
//#1 Try to assign 1st element to Owl
//#2 Try to assign 2nd element to Person
'''
assert e.message.contains('Cannot assign value of type Polite to variable of type Owl')
assert e.message.contains('Cannot assign value of type Polite to variable of type Person')
================================================
FILE: listings/chap10/Listing_10_36_Condition.groovy
================================================
import static groovy.test.GroovyAssert.shouldFail
def e = shouldFail '''
import groovy.transform.TypeChecked
@TypeChecked
void leastUpperBoundOnConditional() {
def o = new Date() //#1
if (Math.random()) { //#A
o = 'Hello' //#2
}
o.time //#B
}
//#1 Variable initialized with Date
//#A Random condition
//#2 Assign a String
//#B Try to call o.time
'''
assert e.message.contains('No such property: time for class: java.io.Serializable')
================================================
FILE: listings/chap10/Listing_10_37_ClosureSharedVar.groovy
================================================
import groovy.transform.TypeChecked
@TypeChecked
def captureOfALocalVariable() {
def msg = 'Hello' //#A
def cl = { msg = 'Hi!' } //#B
assert msg == 'Hello'
cl() //#1
assert msg == 'Hi!'
}
captureOfALocalVariable()
//#A Variable msg is closure shared variable
//#B Closure can write to msg
//#1 Closure is called
================================================
FILE: listings/chap10/Listing_10_38_LubError.groovy
================================================
import static groovy.test.GroovyAssert.shouldFail
def e = shouldFail '''
import groovy.transform.TypeChecked
@TypeChecked
void notAllowed() {
def var = "String"
def cl = { var = new Date() }
cl()
var = var.toUpperCase()
}
'''
assert e.message.contains(
'A closure shared variable [var] has been assigned with ')
================================================
FILE: listings/chap10/Listing_10_39_LubOk.groovy
================================================
import groovy.transform.TypeChecked
class A { void foo() {} }
class B extends A { void bar() {} }
@TypeChecked
void main() {
def var = new A()
def cl = { var = new B() }
cl()
var.foo()
}
main()
================================================
FILE: listings/chap10/Listing_10_40_FibBench.groovy
================================================
@Grab('org.gperfutils:gbench:0.4.3-groovy-2.4')
import groovy.transform.CompileStatic
def dynamicFib(n) { n<1 ? 1 : dynamicFib(n-1) + dynamicFib(n-2) }
int primFib(int n) { n<1 ? 1 : primFib(n-1) + primFib(n-2) }
@CompileStatic
int staticFib(int n) { n<1 ? 1 : staticFib(n-1) + staticFib(n-2) }
def r = benchmark {
'Dynamic Groovy' { dynamicFib(10) }
'Primitive optimized Groovy' { primFib(10) }
'Statically compiled Groovy' { staticFib(10) }
}
r.prettyPrint()
================================================
FILE: listings/chap10/Listing_10_41_JavaGreeter.txt
================================================
see: Greeter.java
================================================
FILE: listings/chap10/Listing_10_42_StaticCompileDispatch.groovy
================================================
import groovy.transform.CompileStatic
static String prettify(String s) { "String: $s" }
static String prettify(Date d) { "Date: ${d.time}" }
@CompileStatic
void test() {
def var = "I'm a String" //#1
println prettify(var) //#2
}
test()
//#1 Using def, which is equivalent to Object
//#2 Calls prettify(String)
================================================
FILE: listings/chap10/Listing_10_43_MonkeyPatching.groovy
================================================
import groovy.transform.CompileStatic
class MyFramework {
static int sizeOf(String s) { s.size() } //#1
@CompileStatic
static int staticSizeOf(String s) { s.size() } //#2
}
String s = 'a happy new year!'
s.metaClass.size = { -> 5 } //#3
assert s.size() == 5 //#4
assert MyFramework.sizeOf(s) == 5 //#5
assert MyFramework.staticSizeOf(s) == 17 //#6
//#1 sizeOf method uses dynamic dispatch
//#2 staticSizeOf method uses static dispatch
//#3 change metaclass so that size always returns 5
//#4 check that size returns 5
//#5 check that calling size from the framework returns 5
//#6 check that from statically compiled method returns the original size
================================================
FILE: listings/chap10/Listing_10_44_BookingDSL.groovy
================================================
import groovy.transform.Canonical
@Canonical
class Booking {
String meetingRoom
String className
Date start, end
}
def book(meeting) {
[room: { name ->
[between: { sd ->
[and: { ed ->
[to: { to ->
def b = new Booking(meetingRoom: name,
className: to, start: sd, end: ed)
println b
b
}]
}]
}]
}]
}
def meeting
@Category(Integer)
class TimeCategory {
static Date getAm(Integer self) {
def d = Calendar.instance
d.set(Calendar.MINUTE, 0)
d.set(Calendar.SECOND, 0)
d.set(Calendar.HOUR_OF_DAY, self)
d.time
}
}
use(TimeCategory) {
book meeting room 'Honolulu' between 9.am and 12.am to 'B2'
}
================================================
FILE: listings/chap10/Listing_10_45_MultiValidation.groovy
================================================
import groovy.transform.TypeChecked
class Address { String country }
class WishList { List items }
def validate(@DelegatesTo.Target def o, @DelegatesTo Closure rule) { //#1
rule.delegate = o
rule()
}
@TypeChecked
void validateAll() {
def a = new Address(country: 'Australia')
validate(a) { //#2
if (country[0] == 'X') //#3
println 'No countries start with that'
}
def wl = new WishList(items: ['iphone', 'iphone'])
validate(wl) { //#4
if (items != items.toUnique()) //#5
println 'Some item appeared twice'
}
}
validateAll()
//#1 Compiler will determine type
//#2 First param is Address
//#3 Address inferred so country will be found
//#4 First param is WishList
//#5 WishList inferred so items will be found
================================================
FILE: listings/chap10/Listing_10_46_RobotExtension.groovy
================================================
unresolvedVariable { var -> //#1
if (var.name == 'robot') { //#1
storeType(var, lookupClassNodeFor('Robot')) //#1
handled = true //#1
}
}
unresolvedProperty { pexp -> //#2
if (getType(pexp.objectExpression) == int_TYPE && //#2
pexp.propertyAsString == 'meters') { //#2
storeType(pexp, long_TYPE) //#2
handled = true //#2
}
}
//#1 An unresolved 'robot' variable has type Robot
//#2 An unresolved 'meters' property on an int has type long
================================================
FILE: listings/chap10/Listing_10_47_SQLExtension.groovy
================================================
@Grab('com.github.jsqlparser:jsqlparser:0.9.2')
import net.sf.jsqlparser.parser.CCJSqlParserManager
afterMethodCall { mc ->
def receiver = mc.receiver
if (!isVariableExpression(receiver)) return //#1
def method = getTargetMethod(mc) //#1
if (classNodeFor(groovy.sql.Sql) == getType(receiver) //#1
&& method.name == 'eachRow') { //#1
def argList = getArguments(mc) //#1
if (argList && isConstantExpression(argList[0])) { //#1
def pm = new CCJSqlParserManager() //#2
def sqlQuery = argList[0].text //#2
try { //#2
pm.parse(new StringReader(sqlQuery)) //#2
} catch (e) {
addStaticTypeError("SQL query is not valid: $e", argList[0]) //#3
}
}
}
}
//#1 Info extraction and guards
//#2 Validate SQL using library
//#3 Flag an error if invalid
================================================
FILE: listings/chap10/User.groovy
================================================
class User {
String name
String password
}
================================================
FILE: listings/chap10/extra1004_JavaDispatch.java
================================================
import java.util.Date;
class JavaDispatch {
public static String prettify(Object o) {
if (o instanceof String) { return doPrettify((String) o); }
if (o instanceof Date) { return doPrettify((Date) o); }
return doPrettify(o);
}
static String doPrettify(Object o) { return "Value:"+o.toString(); }
static String doPrettify(String s) { return "String:"+s; }
static String doPrettify(Date d) { return "Date:"+d.getTime(); }
}
================================================
FILE: listings/chap10/extra1004_RuntimeGroovyDispatch.groovy
================================================
static String prettify(String s) { "String: $s" }
static String prettify(Date d) { "Date: ${d.time}" }
def var = "I'm a String"
println prettify(var)
================================================
FILE: listings/chap10/markup.html
================================================
Constructed by MarkupBuilder
What can I do with MarkupBuilder?
================================================
FILE: listings/chap10/snippet1003_GroovyGreeter.groovy
================================================
public class GroovyGreeter {
static void greet(Object o) {
System.out.println("Hello, object " + o);
}
static void greet(String s) {
System.out.println("Hello, string " + s);
}
public static void main(String... args) {
Object o = "Bob";
String s = "Bob";
greet(o);
greet(s);
}
}
================================================
FILE: listings/chap10/snippet1005_RobotMainTC.groovy
================================================
import groovy.transform.TypeChecked
class Robot {
void move(long distance) { println "Moving $distance meters" }
}
@TypeChecked(extensions = 'Listing_10_46_RobotExtension.groovy')
main() {
robot.move 100.meters
}
binding.robot = new Robot()
Integer.metaClass.getMeters = { delegate }
main()
================================================
FILE: listings/chap10/snippet1005_SqlMainTC.groovy
================================================
import static groovy.test.GroovyAssert.shouldFail
def e = shouldFail '''
import groovy.sql.Sql
import groovy.transform.TypeChecked
@TypeChecked(extensions = 'Listing_10_47_SQLExtension.groovy')
findAthletes(Sql sql) {
sql.eachRow('select * frm Athlete') { row -> println row } //#A
}
//#A Typo 'frm' not 'from'
'''
println e.message
assert e.message.contains('[Static type checking] - SQL query is not valid')
================================================
FILE: listings/chap11/Listing_11_01_SquaresFactors.xml
================================================
Squares and factors of 10..15
================================================
FILE: listings/chap11/Listing_11_02_SquaresFactors.java
================================================
import org.w3c.dom.Element;
import org.w3c.dom.Document;
public class Listing_11_02_SquaresFactors {
public void process(Document doc) {
/////////// EXAMPLE START
// Java!
// … doc made available here …
Element numbers = doc.createElement("numbers");
Element description = doc.createElement("description");
doc.appendChild(numbers);
numbers.appendChild(description);
description.setTextContent("Squares and factors of 10..15");
for (int i=10; i <= 15; i++)
{
Element number = doc.createElement("number");
numbers.appendChild(number);
number.setAttribute("value", String.valueOf(i));
number.setAttribute("square", String.valueOf(i*i));
for (int j=2; j < i; j++)
{
if (i % j== 0)
{
Element factor = doc.createElement("factor");
factor.setAttribute("value", String.valueOf(j));
number.appendChild(factor);
}
}
}
////////// EXAMPLE END
}
}
================================================
FILE: listings/chap11/Listing_11_03_MarkupBuilderPlain.groovy
================================================
def builder = new groovy.xml.MarkupBuilder()
builder.numbers {
description 'Squares and factors of 10..15'
for (i in 10..15) {
number (value: i, square: i*i) { //#1
for (j in 2..
"""
//#1 NEW: MarkupBuilder replaces NodeBuilder
================================================
FILE: listings/chap11/Listing_11_07_MarkupBuilderHtml.groovy
================================================
def writer = new FileWriter('markup.html')
def html = new groovy.xml.MarkupBuilder(writer)
html.html {
head {
title 'Constructed by MarkupBuilder'
}
body {
h1 'What can I do with MarkupBuilder?'
parent {
mkp.yield "Some text"
child('Child text')
mkp.yield "more text"
}
form (action:'whatever') {
for (line in ['Produce HTML','Produce XML','Have some fun']){
input(type:'checkbox',checked:'checked', id:line, '')
label(for:line, line)
br()
} } } }
================================================
FILE: listings/chap11/Listing_11_08_StreamingMarkupBuilderLogic.groovy
================================================
def builder = new groovy.xml.StreamingMarkupBuilder()
def writable = builder.bind { //#A
invoices { //#B
for (day in 1..3) {
def invDate = Date.parse('yyyy-MM-dd', "2015-01-0$day")
invoice(date: invDate) {
item(count: day) {
product(name: 'ULC', dollar: 1499)
}
}
}
}
}
def result = writable.toString() //#C
assert result.startsWith("') //#|D
//#A The bind method introduces the markup Closure
//#B The root node must be included in the markup
//#C Or writable.writeTo(file)
//#D Checking start and end of long single line
================================================
FILE: listings/chap11/Listing_11_09_ExampleBuild.xml
================================================
================================================
FILE: listings/chap11/Listing_11_10_PW_SwingBuilder.groovy
================================================
import groovy.swing.SwingBuilder
swing = new SwingBuilder()
frame = swing.frame(title:'Password') {
passwordField(columns:10, actionPerformed: { event ->
println event.source.text
// any further processing is called here
System.exit(0)
}
)
}
frame.pack()
frame.visible = true
================================================
FILE: listings/chap11/Listing_11_11_Swing_Widgets.groovy
================================================
import groovy.swing.SwingBuilder
swing = new SwingBuilder()
frame = swing.frame(title:'Demo') {
menuBar {
menu('File') {
menuItem 'New'
menuItem 'Open'
}
}
panel {
label 'Label 1'
slider()
comboBox(items:['one','two','three'])
}
}
frame.pack()
frame.visible = true
================================================
FILE: listings/chap11/Listing_11_12_Swing_Layout.groovy
================================================
import groovy.swing.SwingBuilder
import java.awt.BorderLayout as BL
swing = new SwingBuilder()
frame = swing.frame(title:'Layout Demo') {
panel(layout: new BL()) {
button(constraints: BL.NORTH, 'North' )
button(constraints: BL.CENTER, 'Center')
button(constraints: BL.SOUTH, 'South' )
button(constraints: BL.EAST, 'East' )
button(constraints: BL.WEST, 'West' )
}
}
frame.pack()
frame.visible = true
================================================
FILE: listings/chap11/Listing_11_13_Table_Demo.groovy
================================================
import groovy.swing.SwingBuilder
import groovy.transform.Canonical
import javax.swing.JLabel
import javax.swing.JTable
import javax.swing.table.TableCellRenderer
import java.awt.Color
import java.awt.Component
import static java.awt.Color.*
@Canonical
class NamedColor {
String name
Color foreground, background
}
purple = new NamedColor('Purple', WHITE, new Color(127, 0, 255))
mediumBlue = new NamedColor('Blue', WHITE, new Color(64, 128, 255))
brightYellow = new NamedColor('Yellow', BLACK, YELLOW)
brightRed = new NamedColor('Red', BLACK, RED)
data = [
[name: 'Anthony', color: mediumBlue],
[name: 'Greg', color: brightYellow],
[name: 'Jeff', color: purple],
[name: 'Murray', color: brightRed]
]
swing = new SwingBuilder()
frame = swing.frame(title: 'Table Demo') {
scrollPane {
table(id: 'table') {
tableModel(list: data) {
propertyColumn(header: 'Name', propertyName: 'name')
propertyColumn(
header: 'Color', propertyName: 'color', type: NamedColor //#1
)
//closureColumn(header: 'Color', read: {it.color.name})
}
}
}
}
frame.pack()
swing.table.setDefaultRenderer(NamedColor, new ColorRenderer()) //#2
frame.visible = true
class ColorRenderer extends JLabel implements TableCellRenderer { //#3
ColorRenderer() { opaque = true }
Component getTableCellRendererComponent(JTable table, color,
boolean selected, boolean focus, int row, int col) {
background = color.background
foreground = color.foreground
text = color.name
horizontalAlignment = CENTER
this
}
}
//#1 Model can have rich types
//#2 Registering a renderer for a rich type
//#3 Implementing a renderer
================================================
FILE: listings/chap11/Listing_11_14_Binding.groovy
================================================
import groovy.beans.*
import groovy.swing.SwingBuilder
import java.awt.event.ActionEvent
import java.awt.event.ActionListener
import java.beans.PropertyVetoException
class Person implements ActionListener {
@Bindable String name
@Vetoable int age
void actionPerformed(ActionEvent e) {
if (e.actionCommand == name) setAge(age + 1)
}
}
class BirthdayNotifier {
@ListenerList List listeners
def triggerBirthday(name) {
def event = new ActionEvent(this, 0, name)
fireActionPerformed(event)
}
}
data = [
new Person(name: 'Anthony', age: 51),
new Person(name: 'Greg', age: 42),
new Person(name: 'Jeff', age: 60),
new Person(name: 'Murray', age: 54)
]
swing = new SwingBuilder()
frame = swing.frame(title: 'Binding Demo') {
table {
tableModel(list: data, id: 'tableModel') {
propertyColumn(header: 'Name', propertyName: 'name',
editable: true)
propertyColumn(header: 'Age', propertyName: 'age',
type: Integer, editable: true)
}
}
}
frame.pack()
frame.visible = true
notifier = new BirthdayNotifier()
data.each {
it.addPropertyChangeListener { evt ->
println "$evt.newValue has replaced $evt.oldValue" //#1
}
it.addVetoableChangeListener { evt ->
if (evt.newValue < 0) //#2
throw new PropertyVetoException("Can't have -ve age", evt) //#2
else //#2
println "$evt.source.name now has age $evt.newValue" //#2
}
notifier.addActionListener(it) //#3
}
try {
data[0].age = -99 //#4
} catch (e) {
println "Change ignored: $e.message"
}
data[1].name = 'Sam' //#5
data[1].age = 36 //#5
notifier.triggerBirthday(data[2].name) //#6
swing.tableModel.fireTableDataChanged()
//#1 Log when the name changes
//#2 Log when the age change but veto -ve ages
//#3 Listen for birthday notifications
//#4 Attempt to trigger invalid age
//#5 Sam replaces Greg
//#6 Jeff has a birthday
================================================
FILE: listings/chap11/Listing_11_15_Plotter.groovy
================================================
import groovy.swing.SwingBuilder
import java.awt.Color
import java.awt.BorderLayout as BL //#|1
import javax.swing.WindowConstants as WC //#|1
import javax.swing.BorderFactory as BF //#|1
import javax.swing.JOptionPane
swing = new SwingBuilder()
paint = swing.action(
name: 'Paint',
closure: this.&paintGraph, //#2
mnemonic: 'P',
accelerator: 'ctrl P'
)
about = swing.action(
name: 'About',
closure: this.&showAbout,
mnemonic: 'A',
accelerator: 'F1'
)
frame = swing.frame(title:'Plotter',
location:[100,100], size:[500,500], //#3
defaultCloseOperation:WC.EXIT_ON_CLOSE) {
menuBar (){
menu(mnemonic:'A','Action'){
menuItem(action:paint)
}
glue() //#4
menu(mnemonic:'H','Help'){
menuItem(action:about)
}
}
panel (border:BF.createEmptyBorder(6,6,6,6)) {
borderLayout()
vbox (constraints: BL.NORTH){
hbox {
hstrut(width:10)
label 'f(x) = '
textField(id:'function',action:paint,'Math.sin(x)')
button(action:paint)
}
}
vbox (constraints: BL.WEST){
labeledSpinner('max',1d) //#5
20.times { swing.vglue()}
labeledSpinner('min',-1d)
}
vbox(constraints: BL.CENTER,
border:BF.createTitledBorder('Function Plot')) {
panel(id:'canvas')
}
hbox (constraints: BL.SOUTH){
hstrut(width:10)
labeledSpinner('from',0d)
10.times { swing.hglue()} //#6
labeledSpinner('to',6.3d)
}
}
}
frame.visible = true
// implementation methods
def labeledSpinner(label, value){ //#7
swing.label(label)
swing.hstrut()
swing.spinner(id:label, stateChanged:this.&paintGraph,
model:swing.spinnerNumberModel(value:value)
)
}
def paintGraph(event) { //#8
calc = new Dynamo(swing.function.text)
gfx = swing.canvas.graphics
int width = swing.canvas.size.width
int height = swing.canvas.size.height
gfx.color = new Color(255, 255, 150)
gfx.fillRect(0, 0, width, height)
gfx.color = Color.blue
xFactor = (swing.to.value - swing.from.value) / width
yFactor = height / (swing.max.value - swing.min.value)
int ceiling = height + swing.min.value * yFactor
int lastY = calc.f(swing.from.value) * yFactor
for (x in (1..width)) { //#9
int y = calc.f(swing.from.value + x * xFactor) * yFactor
gfx.drawLine(x-1, ceiling-lastY, x, ceiling-y)
lastY = y
}
}
void showAbout(event) { //#10
JOptionPane.showMessageDialog(frame,
'''A Function Plotter
that serves as a SwingBuilder example for
Groovy in Action''')
}
// Keep all dynamic invocation handling in one place.
class Dynamo {
static final GroovyShell SHELL = new GroovyShell()
Script functionScript
Dynamo(String function){
functionScript = SHELL.parse(function) //#11
}
Object f(x) {
functionScript.x = x
return functionScript.run() //#12
}
}
//#1 type aliases as shortcuts
//#2 refer to method closure
//#3 general constructor
//#4 separate help menu
//#5 use factory method
//#6 build with logic
//#7 factory method
//#8 method used as closure
//#9 main plotting loop
//#10 show message dialog
//#11 once per paint
//#12 for each x
================================================
FILE: listings/chap11/Listing_11_16_Groovyfx.groovy
================================================
@Grab('org.codehaus.groovyfx:groovyfx:0.3.1')
import static groovyx.javafx.GroovyFX.start
start {
stage title: 'GroovyFX Hello World', visible: true, {
scene fill: BLACK, width: 600, height: 300, {
hbox padding: 40, alignment:'center', {
text 'Hello', font: '80pt sanserif', {
fill linearGradient(endX: 0, stops: [PALEGREEN, SEAGREEN])
}
text ' FX ', font: '80pt sanserif', {
fill linearGradient(endX: 0, stops: [CYAN, DODGERBLUE])
effect dropShadow(color: DODGERBLUE, radius: 25, spread: 0.35)
}
imageView 'file:World.png', effect:reflection()
}
}
}
}
================================================
FILE: listings/chap11/Listing_11_17_CalorieCounterBuilderSupport.groovy
================================================
class CalorieBuilder1 extends BuilderSupport {
def calories = 0.0
def name = 'root'
def calorieDatabase = [
crust : [thin: 169, classic: 212, deepdish: 259, stuffed: 360],
topping : [pepperoni: 24, veggies: 10, cheese: 50],
appetizer: [wings: 60, 'garlic-bread': 180]
]
def createNode(name) {
[name: name, calories: 0.0]
}
def createNode(name, value) {
def result = createNode(name) + [value: value]
findCalories(result, name, value) //#1
result
}
def createNode(name, Map attributes) {
createNode(name) + [*: attributes]
}
def createNode(name, Map attributes, value) {
createNode(name, value) + [*: attributes]
}
void setParent(parent, child) {
if (child.size && parent.size && child.size != parent.size) //#2
throw new IllegalStateException("Conflicting sizes found")
if (child.size) {
child.scale = (child.size == 'large') ? 1.5 : 1.0
}
}
void nodeCompleted(parentOrNull, node) {
def parent = parentOrNull ?: this
def qty = node.quantity ?: 1
def scale = node.scale ?: 1.0
findCalories(node, parent.name, node.name) //#3
parent.calories += node.calories * qty * scale
}
private void findCalories(Map map, name, value) {
if (calorieDatabase.containsKey(name)) {
map.calories = calorieDatabase[name][value].toInteger()
}
}
}
def lunch = new CalorieBuilder1()
lunch.count {
pizza(size: 'large') {
crust('thin')
topping('pepperoni')
topping('veggies')
}
appetizer {
wings(quantity: 2)
'garlic-bread'()
}
}
assert lunch.calories == 604.5
//#1 Handle cases like crust('thin')
//#2 Check consistency between child and parent
//#3 Handle cases like appetizer { wings() }
================================================
FILE: listings/chap11/Listing_11_18_CalorieCounterFactoryBuilderSupport.groovy
================================================
class CalorieBuilder2 extends FactoryBuilderSupport {
def calories = 0.0
def factory = new CalorieBeanFactory(getClass().classLoader)
protected void postInstantiate(name, Map attrs, node) {
super.postInstantiate(name, attrs, node)
attrs.each { k, v -> node[k] = v }
}
protected Factory resolveFactory(name, Map attrs, value) {
return factory
}
void setParent(parent, child) {
if (child.hasProperty("size")) {
child.scale = child.size == 'large' ? 1.5 : 1.0
}
}
void nodeCompleted(parentOrNull, node) {
def parent = parentOrNull ?: this
def qty = node.quantity ?: 1
def scale = node.scale ?: 1.0
parent.calories += node.calories * qty * scale
}
}
class CalorieBeanFactory extends AbstractFactory {
private ClassLoader loader
CalorieBeanFactory(ClassLoader loader) {
this.loader = loader
}
def newInstance(FactoryBuilderSupport fbs, name, value, Map attrs) {
def className = name[0].toUpperCase() +
name[1..-1].replaceAll(/-(.)/) { it[1].toUpperCase() }
def clazz = loader.loadClass(className)
return value ? clazz.newInstance(value: value) : clazz.newInstance()
}
}
class Countable {
int quantity
def scale
def calories = 0.0
}
class Count extends Countable {}
class Pizza extends Countable {
def size
}
abstract class CountableGroup extends Countable {
String value
abstract getCalorieDB()
def getCalories() { calorieDB[value] }
}
class Crust extends CountableGroup {
def calorieDB = [thin: 169, classic: 212, deepdish: 259, stuffed: 360]
}
class Topping extends CountableGroup {
def calorieDB = [pepperoni: 24, veggies: 10, cheese: 50]
}
class Appetizer extends Countable {}
class Wings extends Countable {
def calories = 60
}
class GarlicBread extends Countable {
def calories = 180
}
def lunch = new CalorieBuilder2()
lunch.count {
pizza(size: 'large') {
crust('thin')
topping('pepperoni')
topping('veggies')
}
appetizer {
wings(quantity: 2)
'garlic-bread'()
}
}
assert lunch.calories == 604.5
================================================
FILE: listings/chap11/Listing_11_19_CalorieCounterByHand.groovy
================================================
class CalorieBuilder3 {
def calorieDatabase = [
crust : [thin: 169, classic: 212, deepdish: 259, stuffed: 360],
topping : [pepperoni: 24, veggies: 10, cheese: 50],
appetizer: [wings: 60, 'garlic-bread': 180]
]
def parent = new Stack()
def getCalories() { parent.peek().calories }
CalorieBuilder3() {
parent.push([calories:0.0])
}
def invokeMethod(String methodName, args) {
def current = [name: methodName, calories:0.0]
if (args && args[0] instanceof Map) {
current << args[0]
}
countCalories(current, parent.peek().name, methodName)
if (args && args[0] instanceof String) {
countCalories(current, methodName, args[0])
}
if (args && args.size() > 1 && args[1] instanceof String) {
countCalories(current, methodName, args[1])
}
current.scale = current.size == 'large' ? 1.5 : 1.0
if (args && args[-1] instanceof Closure) {
parent.push(current)
Closure nested = args[-1]
nested.delegate = this
nested.call()
parent.pop()
}
def qty = current.quantity ?: 1
def scale = current.scale ?: 1.0
parent.peek().calories += current.calories * qty * scale
}
private void countCalories(Map current, String key, String value) {
if (calorieDatabase.containsKey(key)) {
current.calories = calorieDatabase[key][value].toInteger()
}
}
}
def lunch = new CalorieBuilder3()
lunch.count {
pizza(size: 'large') {
crust('thin')
topping('pepperoni')
topping('veggies')
}
appetizer {
wings(quantity: 2)
'garlic-bread'()
}
}
assert lunch.calories == 604.5
================================================
FILE: listings/chap11/markup.html
================================================
Constructed by MarkupBuilder
What can I do with MarkupBuilder?
Some text
Child textmore text
================================================
FILE: listings/chap11/snippet1103_MarkupBuilderOutput.html
================================================
Constructed by MarkupBuilder
What can I do with MarkupBuilder?
================================================
FILE: listings/chap11/snippet1103_MarkupWithHyphen.groovy
================================================
def writer = new StringWriter()
def builder = new groovy.xml.MarkupBuilder(writer)
def web = builder.'web-app' {
builder.'display-name'('Groovy WebApp')
}
def result = writer.toString().replaceAll("\r","")
assert "\n"+result == """
Groovy WebApp"""
================================================
FILE: listings/chap11/snippet1106_AntBuilderIf.groovy
================================================
ant = new AntBuilder()
if ( ! System.properties.'java.version'.contains('1.7')) {
ant.fail 'This build script requires JDK 1.7.x but was ' +
System.properties.'java.version'
}
// further action
================================================
FILE: listings/chap11/snippet1106_AntIf.xml
================================================
This build script requires JDK 1.4.x.
================================================
FILE: listings/chap11/snippet1107_Printer.groovy
================================================
import groovy.swing.SwingBuilder
swing = new SwingBuilder()
button = swing.button('Print')
frame = swing.frame(title:'Printer') {
panel {
textField(columns:10)
widget(button)
}
}
button.actionPerformed = {
println frame.title
}
frame.pack()
frame.visible = true
================================================
FILE: listings/chap11/snippet1107_binding.txt
================================================
import java.beans.*
class Person {
private String name
private int age
final private PropertyChangeSupport this$propChangeSupport =
new PropertyChangeSupport(this)
final private VetoableChangeSupport this$vetoChangeSupport =
new VetoableChangeSupport(this)
void addPropertyChangeListener(PropertyChangeListener listener) {
this$propChangeSupport.addPropertyChangeListener(listener)
}
void addPropertyChangeListener(String name,
PropertyChangeListener listener) {
this$propChangeSupport.addPropertyChangeListener(name, listener)
}
void removePropertyChangeListener(PropertyChangeListener listener) {
this$propChangeSupport.removePropertyChangeListener(listener)
}
void removePropertyChangeListener(String name,
PropertyChangeListener listener) {
this$propChangeSupport.removePropertyChangeListener(name, listener)
}
void firePropertyChange(String name, oldValue, newValue) {
this$propChangeSupport.firePropertyChange(name, oldValue, newValue)
}
PropertyChangeListener[] getPropertyChangeListeners() {
return this$propChangeSupport.getPropertyChangeListeners()
}
PropertyChangeListener[] getPropertyChangeListeners(String name) {
return this$propChangeSupport.getPropertyChangeListeners(name)
}
void setName(String value) {
this.firePropertyChange('name', name, name = value )
}
void addVetoableChangeListener(VetoableChangeListener listener) {
this$vetoChangeSupport.addVetoableChangeListener(listener)
}
void addVetoableChangeListener(String name,
VetoableChangeListener listener) {
this$vetoChangeSupport.addVetoableChangeListener(name, listener)
}
void removeVetoableChangeListener(VetoableChangeListener listener) {
this$vetoChangeSupport.removeVetoableChangeListener(listener)
}
void removeVetoableChangeListener(String name,
VetoableChangeListener listener) {
this$vetoChangeSupport.removeVetoableChangeListener(name, listener)
}
void fireVetoableChange(String name, oldValue, newValue) {
this$vetoChangeSupport.fireVetoableChange(name, oldValue, newValue)
}
VetoableChangeListener[] getVetoableChangeListeners() {
return this$vetoChangeSupport.getVetoableChangeListeners()
}
VetoableChangeListener[] getVetoableChangeListeners(String name) {
return this$vetoChangeSupport.getVetoableChangeListeners(name)
}
void setAge(int value) throws PropertyVetoException {
this.fireVetoableChange('age', age, value)
age = value
}
String getName() {
name
}
int getAge() {
age
}
}
================================================
FILE: listings/chap12/Listing_12_01_info_jdk6_only.groovy
================================================
def newline = "\n"
assert newline.toString() == "\n"
assert newline.dump() ==
''''''
================================================
FILE: listings/chap12/Listing_12_01_info_jdk7_only.groovy
================================================
def newline = "\n"
assert newline.toString() == "\n"
assert newline.dump() ==
''''''
assert newline.inspect() == /'\n'/
================================================
FILE: listings/chap12/Listing_12_01_info_jdk8_plus.groovy
================================================
def newline = "\n"
assert newline.toString() == "\n"
assert newline.dump() ==
''''''
assert newline.inspect() == /'\n'/
================================================
FILE: listings/chap12/Listing_12_02_properties.groovy
================================================
class MyClass {
def first = 1 // read-write property
def getSecond() { first * 2 } // read-only property
public third = 3 // public field
def myMethod() { } // public method
}
def obj = new MyClass()
assert obj.hasProperty('first') //|#1
assert obj.respondsTo('myMethod') //|#2
def keys = ['first', 'second', 'class']
assert obj.properties.keySet() == new HashSet(keys)
assert 1 == obj.properties['first'] //|#3
assert 1 == obj.properties.first //|#3
assert 1 == obj.first //|#4
assert 1 == obj['first'] // getAt('first') //|#4
def one = 'first'
def two = 'second'
obj[one] = obj[two] // putAt(one) //#5
assert obj.dump() =~ 'first=2' //#6
//#1 Property check
//#2 Method check
//#3 Properties map
//#4 Direct access
//#5 Dynamic assignment
//#6 Field introspection
================================================
FILE: listings/chap12/Listing_12_03_File_Iteration.groovy
================================================
file = new File('Listing_12_03_File_Iteration.groovy')
file.each { println it }
assert file.any { it =~ /File/ }
assert 3 == file.findAll { it =~ /File/ }.size()
assert 5 == file.grep { it }.size()
================================================
FILE: listings/chap12/Listing_12_04_Filesystem.groovy
================================================
import static groovy.io.FileType.DIRECTORIES
import static groovy.io.FileType.FILES
def topDir = new File('../chap09')
def srcDir = new File(topDir, 'src')
dirs = []
srcDir.eachDir { dirs << it.name } //#A
assert ['main', 'test'] == dirs
dirs = []
topDir.eachDirRecurse { dirs << it.name } //#B
assert dirs.containsAll(['gradle', 'src', 'main'])
assert dirs.containsAll(['groovy', 'services', 'wrapper'])
dirs = []
topDir.eachDirMatch(~/[^l]*/) { dirs << it.name } //#C
assert dirs == ['src']
files = []
topDir.eachFile { files << it.name } //#D
assert files.contains('Listing_09_01_ToStringDetective.groovy')
assert files.contains('src')
files = []
topDir.eachFile(FILES) { files << it.name } //#E
assert files.contains('Listing_09_01_ToStringDetective.groovy')
count = 0
srcDir.eachFileRecurse { if (it.directory) count++ } //#F
assert 9 == count
count = 0
srcDir.eachFileRecurse(DIRECTORIES) { count++ } //#G
assert 9 == count
files = []
topDir.eachFileMatch(~/Listing_09_01.*/) { files << it.name } //#H
assert ['Listing_09_01_ToStringDetective.groovy'] == files
//#A Closure recording directory names
//#B Recursively record directory names
//#C Record directory names matching a pattern (.gradle is excluded here)
//#D Record filenames and directory names
//#E Record filenames
//#F Count directory names recursively
//#G Count directory names recursively, alternative solution
//#H Record filenames and directory names matching a pattern
================================================
FILE: listings/chap12/Listing_12_05_Traversal.groovy
================================================
import static groovy.io.FileType.ANY
import static groovy.io.FileVisitResult.SKIP_SUBTREE
def totalSize = 0
def count = 0
def sortByTypeThenName = { a, b ->
a.isFile() != b.isFile() ?
a.isFile() <=> b.isFile() :
a.name <=> b.name
}
def log = []
inputDir = new File('../chap09/')
inputDir.traverse(
type : ANY,
nameFilter : ~/.*groovy.*/,
excludeNameFilter : ~/.*Test.*/,
preDir : {
if (it.name =~ '.?gradle|build') return SKIP_SUBTREE
count = 0
totalSize = 0
},
postDir : {
if (count) {
log << "Found $count files in $it.name : $totalSize bytes"
count = 0
totalSize = 0
}
},
postRoot : true,
sort : sortByTypeThenName
) {it -> totalSize += it.size(); count++ }
println log.join('\n')
assert log.size() == 3
assert log*.replaceAll(/\d+/, '*').join('\n') == '''
Found * files in regina : * bytes
Found * files in services : * bytes
Found * files in chap* : * bytes
'''.trim()
================================================
FILE: listings/chap12/Listing_12_06_File_Read.groovy
================================================
example = new File('data/example.txt')
lines = ['line one', 'line two', 'line three']
assert lines == example.readLines()
example.eachLine {
assert it.startsWith('line')
}
hex = []
example.eachByte { hex << it }
assert hex.size() == example.length()
example.splitEachLine(/\s/) {
assert 'line' == it[0]
}
example.withReader { reader ->
assert 'line one' == reader.readLine()
}
================================================
FILE: listings/chap12/Listing_12_07_File_Write.groovy
================================================
def outFile = new File('data/example.txt')
def lines = ['line one','line two','line three']
outFile.write(lines[0..1].join("\n")) //#A
outFile.append("\n"+lines[2]) //#A
assert lines == outFile.readLines()
outFile.withWriter { writer -> //#B
writer.writeLine(lines[0]) //#B
} //#B
outFile.withWriterAppend('ISO8859-1') { writer -> //#B
writer << lines[1] << "\n" //#B
}
outFile << lines[2] //#C
//#A Writing/appending with simple method calls
//#B Writing/appending with closures
//#C Appending with the leftshift operator
================================================
FILE: listings/chap12/Listing_12_08_Writer_LeftShift.groovy
================================================
TimeZone.default = TimeZone.getTimeZone("CET")
reader = new StringReader('abc')
writer = new StringWriter()
writer << "\nsome String" << "\n"
writer << [a:1, b:2] << "\n"
writer << [3,4] << "\n"
writer << new Date(0) << "\n"
writer << reader << "\n"
assert writer.toString() == '''
some String
[a:1, b:2]
[3, 4]
Thu Jan 01 01:00:00 CET 1970
abc
'''
================================================
FILE: listings/chap12/Listing_12_09_File_Transform_jdk7_plus.groovy
================================================
def n = System.lineSeparator() //#1
reader = new StringReader('abc')
writer = new StringWriter()
reader.transformChar(writer) { it.next() } //#A
assert 'bcd' == writer.toString()
reader = new File('data/example.txt').newReader()
writer = new StringWriter()
reader.transformLine(writer) { it - 'line' } //#B
assert " one${n} two${n} three${n}" == writer.toString()
input = new File('data/example.txt')
writer = new StringWriter()
input.filterLine(writer) { it =~ /one/ } //#C
assert "line one${n}" == writer.toString()
writer = new StringWriter()
writer << input.filterLine { it.size() > 8 } //#2
assert "line three${n}" == writer.toString()
//#1 System dependent line separator
//#2 Read only long lines
//#A Transform ‘abc’ to ‘bcd’
//#B Chop ‘line’ from each line of the example file
//#C Read only lines containing “one”
================================================
FILE: listings/chap12/Listing_12_10_File_ObjectStreams.groovy
================================================
file = new File('objects.dat')
file.deleteOnExit() //#A
objects = [1, "Hello Groovy!", new Date()]
file.withObjectOutputStream { outstream ->
objects.each {
outstream << it //#B
}
}
retrieved = []
file.withObjectInputStream { instream ->
instream.eachObject {
retrieved << it //#C
}
}
assert retrieved == objects
//#A Clean up after ourselves
//#B Serialize each object in the list in turn
//#C Deserialize each object in turn
================================================
FILE: listings/chap12/Listing_12_11_Temp_Dir.groovy
================================================
File tempDir = File.createTempDir() //#A
assert tempDir.directorySize() == 0 //#B
File source = new File(tempDir, 'input.dat') //#C
source.bytes = "hello world".bytes
assert tempDir.directorySize() == 11 //#D
File destination = new File(tempDir, 'output.dat')
destination.withDataOutputStream { os-> //#E
source.withDataInputStream { is->
os << is
}
}
assert tempDir.directorySize() == 22
tempDir.deleteDir() //#F
//#A Create a temporary directory
//#B Check that the directory is empty
//#C Create a file and set the file contents
//#D Check that the directory size increased
//#E Copy the file and check that the directory size doubled
//#F Delete the directory
================================================
FILE: listings/chap12/Listing_12_12_Threads.groovy
================================================
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
Thread.metaClass.'static'.getName = { Thread.currentThread().name } //#A
BlockingQueue sharedQueue = [] as LinkedBlockingQueue //#B
Thread.start('push') { //#C
10.times {
try {
println("${Thread.name}\t: ${it}")
sharedQueue << it
sleep 100
} catch (InterruptedException ignore) {}
}
}
Thread.start('pop') { //#D
for (i in 0..9) {
sleep 200
println("${Thread.name}\t: ${sharedQueue.take()}")
}
}
//#A Create a new method to get the thread name
//#B Create a shared queue
//#C Start a thread producing 10 items
//#D Start a thread consuming 10 items
================================================
FILE: listings/chap12/Listing_12_13_Processes_UnixCommands.groovy
================================================
// works for unix-based systems
def listFiles = 'ls'.execute()
def ignoreCase = "tr '[A-Z]' '[a-z]'".execute()
def reverseSort = 'sort -r'.execute()
listFiles | ignoreCase | reverseSort
reverseSort.waitForOrKill(1000)
if (reverseSort.exitValue()) {
print reverseSort.err.text
} else {
print reverseSort.text
}
================================================
FILE: listings/chap12/Listing_12_14_Processes_ZipUnzip.groovy
================================================
// works for systems with gzip and gunzip on the path
def outputBuffer = new StringBuffer()
def errorBuffer = new StringBuffer()
zipProcess = 'gzip -c'.execute()
unzipProcess = 'gunzip -c'.execute()
unzipProcess.consumeProcessOutput(outputBuffer, errorBuffer)
zipProcess.consumeProcessErrorStream(errorBuffer)
zipProcess | unzipProcess
zipProcess.withWriter { writer ->
writer << 'Hello World'
}
unzipProcess.waitForOrKill(1000)
println 'Output: ' + outputBuffer
println 'Error : ' + errorBuffer
================================================
FILE: listings/chap12/Listing_12_15_SimpleTemplateEngine.groovy
================================================
mailReminder = //#A
'''
Dear ${salutation?salutation+' ':''}$lastname,
another month has passed and it's time for these
<%=tasks.size()%> tasks:
<% tasks.each { %>- $it
<% } %>
your collaboration is very much appreciated
'''
def engine = new groovy.text.SimpleTemplateEngine()
def template = engine.createTemplate(mailReminder)
def binding = [
salutation: 'Mrs.', //|#B
lastname : 'Davis', //|#B
tasks : ['visit the Groovy in Action (GinA) page', //|#B
'chat with GinA readers'] //|#B
]
assert template.make(binding).toString() == //#C
'''
Dear Mrs. Davis,
another month has passed and it's time for these
2 tasks:
- visit the Groovy in Action (GinA) page
- chat with GinA readers
your collaboration is very much appreciated
'''
//#A Text of template containing placeholders
//#B Variables to substitute in the template
//#C Evaluate the template against the binding
================================================
FILE: listings/chap12/Listing_12_16_GroovletExample.groovy
================================================
@Grab('org.eclipse.jetty.aggregate:jetty-server:8.1.16.v20140903')
@Grab('org.eclipse.jetty.aggregate:jetty-servlet:8.1.16.v20140903')
@Grab('javax.servlet:javax.servlet-api:3.0.1')
import org.eclipse.jetty.server.Server
import org.eclipse.jetty.servlet.*
import groovy.servlet.*
import static org.eclipse.jetty.servlet.ServletContextHandler.*
def server = new Server(1234)
def context = new ServletContextHandler(server, "/", SESSIONS)
context.resourceBase = "."
context.addServlet(GroovyServlet, "*.groovy")
server.start()
================================================
FILE: listings/chap12/Listing_12_17_HelloWorldGroovlet.groovy
================================================
html.html{
head {
title 'Groovlet Demonstrator'
}
body { h1 'Welcome to the World of Groovlets' }
}
================================================
FILE: listings/chap12/Listing_12_19_InspectGroovlet.groovy
================================================
html.html{
head {
title 'Groovlet Demonstrator'
}
body {
h1 'Variables in the Binding:'
table(summary:'binding') {
tbody {
binding.variables.each { key, value ->
tr {
td key.toString()
td(value ? value.toString() : 'null')
} } } } } }
================================================
FILE: listings/chap12/Listing_12_20_HiLowGame.groovy
================================================
def session = request.session
def guess = params.guess
guess = guess ? guess.toInteger() : null
if (params.restart) guess = null
if (!session.goal || params.restart) { //#A
session.goal = (Math.random()*100).toInteger() //#A
} //#A
def goal = session.goal
html.html{ head { title 'Think of a Number' } //#B
body {
h1 'Think of a Number'
if (goal && guess) {
div "Your guess $guess is " //#C
switch (guess) {
case goal : div 'correct!'; break //#D
case {it < goal} : div 'too low' ; break //#D
case {it > goal} : div 'too high'; break //#D
}
}
p "What's your guess (0..100)?"
form(action:'Listing_12_20_HiLowGame.groovy'){ //#E
input(type:'text', name:'guess', '')
button(type:'submit', 'Guess')
button(type:'submit', name:'restart', value:'true',
'New Game')
} } }
//#A Generate a number to guess, if necessary
//#B Start a builder to generate the HTML
//#C Use a GString as a simple template for text
//#D Classify the guess appropriately
//#E Display a form posting to the same page again
================================================
FILE: listings/chap12/Listing_12_21_NumberTemplate.txt
================================================
see: Number.template.html
================================================
FILE: listings/chap12/Listing_12_22_TemplateGroovlet.groovy
================================================
def session = request.session
def guess = params.guess
guess = guess ? guess.toInteger() : null
if (params.restart) guess = null
if (!session.goal || params.restart) {
session.goal = (Math.random()*100).toInteger()
}
def engine = new groovy.text.SimpleTemplateEngine() //#1
def source = getClass().classLoader. //#1
getResource('Number.template.html') //#1
def template = engine.createTemplate(source) //#1
out << template.make(guess: guess, goal: session.goal) //#1
//#1 Template rendering code
================================================
FILE: listings/chap12/Number.template.html
================================================
Think of a Number
Think of a Number
<% if (guess) { %>
Your guess $guess is <%
switch (guess) {
case goal : out << 'correct!'; break
case {it < goal} : out << 'too low' ; break
case {it > goal} : out << 'too high'; break
}
} %>
What"s your guess (0..100)?
================================================
FILE: listings/chap12/data/example.txt
================================================
line one
line two
line three
================================================
FILE: listings/chap12/snippet1201_SlowTyping.groovy
================================================
text = """
This text appears
slowly on the screen
as if someone was
typing it.
"""
for (c in text) {
sleep 100
print c
}
================================================
FILE: listings/chap12/snippet1201_UseCategory.groovy
================================================
class StringCasingCategory {
static String lower(String string) {
return string.toLowerCase()
}
}
use(StringCasingCategory) {
assert "groovy" == "GroOvy".lower()
}
================================================
FILE: listings/chap12/snippet1202_base64.groovy
================================================
byte[] data = new byte[256]
for (i in 0..255) { data[i] = i }
store = data.encodeBase64().toString()
assert store.startsWith('AAECAwQFBg')
assert store.endsWith ('r7/P3+/w==')
restored = store.decodeBase64()
assert data.toList() == restored.toList()
================================================
FILE: listings/chap12/web.xml
================================================
Groovletgroovy.servlet.GroovyServletTemplategroovy.servlet.TemplateServletGroovlet*.groovyTemplate*.htmlTemplate*.gsp
================================================
FILE: listings/chap13/Listing_13_01_Connecting.groovy
================================================
@Grab('org.hsqldb:hsqldb:2.3.2')
@GrabConfig(systemClassLoader=true)
//////////////////////////////////
import groovy.sql.Sql
def url = 'jdbc:hsqldb:mem:GinA'
def user = 'sa'
def password = ''
def driver = 'org.hsqldb.jdbcDriver'
def sql = Sql.newInstance(url, user, password, driver)
// use 'sql' instance ...
// optional test of a system table within HSQLDB
assert sql.firstRow('SELECT 1 FROM INFORMATION_SCHEMA.SYSTEM_USERS')[0] == 1
sql.close()
================================================
FILE: listings/chap13/Listing_13_02_ConnectingDataSource.groovy
================================================
@Grab('org.hsqldb:hsqldb:2.3.2')
@GrabConfig(systemClassLoader=true)
//////////////////////////////////
import groovy.sql.Sql
import org.hsqldb.jdbc.JDBCDataSource
def dataSource = new JDBCDataSource(
database: 'jdbc:hsqldb:mem:marathon', user: 'sa', password: '')
def sql = new Sql(dataSource)
// use 'sql' instance ...
// optional test of a system table within HSQLDB
assert sql.firstRow('SELECT 1 FROM INFORMATION_SCHEMA.SYSTEM_USERS')[0] == 1
sql.close()
================================================
FILE: listings/chap13/Listing_13_03_Creating.groovy
================================================
@Grab('org.hsqldb:hsqldb:2.3.2')
@GrabConfig(systemClassLoader=true)
//////////////////////////////////
import groovy.sql.Sql
def url = 'jdbc:hsqldb:mem:GinA'
def user = 'sa'
def password = ''
def driver = 'org.hsqldb.jdbcDriver'
def sql = Sql.newInstance(url, user, password, driver)
sql.execute '''
CREATE TABLE Athlete (
athleteId INTEGER GENERATED BY DEFAULT AS IDENTITY, --#A
firstname VARCHAR(64),
lastname VARCHAR(64),
dateOfBirth DATE
);
'''
sql.close()
//#A Column value will be automatically generated
================================================
FILE: listings/chap13/Listing_13_04_DbUtilClass.txt
================================================
see: util/DbUtil.groovy
================================================
FILE: listings/chap13/Listing_13_05_Inserting.groovy
================================================
import util.DbUtil
def sql = DbUtil.create()
sql.execute '''
INSERT INTO Athlete (firstname, lastname, dateOfBirth)
VALUES ('Paul', 'Tergat', '1969-06-17')
''' //#A
def data = [first: 'Khalid', last: 'Khannouchi', birth: '1971-12-22']
def keys = sql.executeInsert """
INSERT INTO Athlete (firstname, lastname, dateOfBirth)
VALUES (${data.first}, ${data.last}, ${data.birth})
""" //#B
assert keys[0] == [1] //#1
def insertSql = '''
INSERT INTO Athlete (firstname, lastname, dateOfBirth)
VALUES (?,?,?)
'''
def params = ['Ronaldo', 'da Costa', '1970-06-07']
def keyColumnNames = ['ATHLETEID']
keys = sql.executeInsert insertSql, params, keyColumnNames //#C
assert keys[0] == [ATHLETEID: 2] //#2
sql.close()
//#A Insert using plain statement
//#B GString variant
//#C List of params variant
//#1 Checking generated keys for second row
//#2 Checking generated athleteId key for third row
================================================
FILE: listings/chap13/Listing_13_06_Reading.groovy
================================================
import util.DbUtil
def sql = DbUtil.create()
DbUtil.populate(sql)
def expected = ['Paul Tergat', 'Khalid Khannouchi', 'Ronaldo da Costa']
def rowNum = 0
sql.query('SELECT firstname, lastname FROM Athlete') { resultSet -> //#1
while (resultSet.next()) { //#2
def first = resultSet.getString(1) //#3
def last = resultSet.getString('lastname') //#3
assert expected[rowNum++] == "$first $last"
}
}
rowNum = 0
sql.eachRow('SELECT firstname, lastname FROM Athlete') { row -> //#4
def first = row[0] //#5
def last = row.lastname //#5
assert expected[rowNum++] == "$first $last"
}
def first = sql.firstRow('SELECT lastname, dateOfBirth FROM Athlete') //#6
assert first.values().sort().join(',') == 'Tergat,1969-06-17' //#5
List athletes = sql.rows('SELECT firstname, lastname FROM Athlete') //#7
assert athletes.size() == 3
assert athletes.collect { "$it.FIRSTNAME ${it[-1]}" } == expected //#5
assert sql.firstRow('SELECT COUNT(*) AS num FROM Athlete').num == 3 //#8
//#1 Read using query
//#2 External iteration on the ResultSet
//#3 Access properties via JDBC API calls
//#4 Read using rows
//#5 Access properties via map or list styles
//#6 Read using firstRow
//#7 Read using rows
//#8 More efficient size calculation
================================================
FILE: listings/chap13/Listing_13_07_Updating.groovy
================================================
import util.DbUtil
def sql = DbUtil.create()
sql.execute '''
INSERT INTO Athlete (lastname) VALUES ('da Costa')
'''
sql.execute '''
UPDATE Athlete SET firstname='Ronaldo' where lastname='da Costa'
'''
def updateCount = sql.executeUpdate '''
UPDATE Athlete SET dateOfBirth='1970-06-07' where lastname='da Costa'
'''
assert updateCount == 1 //#A
def row = sql.firstRow '''
SELECT * FROM Athlete where lastname = 'da Costa'
'''
assert "${row.firstname} ${row.lastname} ${row.dateofbirth}" ==
'Ronaldo da Costa 1970-06-07'
sql.close()
//#A Check one row was updated
================================================
FILE: listings/chap13/Listing_13_08_Delete.groovy
================================================
import util.DbUtil
def sql = DbUtil.create()
DbUtil.populate(sql) //#A
assert sql.firstRow('SELECT COUNT(*) as num FROM Athlete').num == 3 //#B
sql.execute "DELETE FROM Athlete WHERE lastname = 'Tergat'"
assert sql.firstRow('SELECT COUNT(*) as num FROM Athlete').num == 2 //#C
//#A Populate using our helper method
//#B Check initially three rows
//#C Two rows left after delete
================================================
FILE: listings/chap13/Listing_13_09_Transactions.groovy
================================================
import static util.DbUtil.*
def sql = create()
populate(sql)
sql.withTransaction {
insertAthlete(sql, 'Haile', 'Gebrselassie', '1973-04-18')
insertAthlete(sql, 'Patrick', 'Makau', '1985-03-02')
}
assert sql.firstRow('SELECT COUNT(*) as num FROM Athlete').num == 5
// modify above to show transaction rollback
/*
try {
sql.withTransaction {
insertAthlete(sql, 'Haile', 'Gebrselassie', '1973-04-18')
insertAthlete(sql, 'Patrick', 'Makau' * 100, '1985-03-02')
}
} catch(ignore) { println ignore.message }
assert sql.firstRow('SELECT COUNT(*) as num FROM Athlete').num == 3
*/
================================================
FILE: listings/chap13/Listing_13_10_Batching.groovy
================================================
import util.DbUtil
def sql = DbUtil.create()
DbUtil.populate(sql)
DbUtil.enableLogging()
sql.withBatch { stmt ->
stmt.addBatch '''
INSERT INTO Athlete (firstname, lastname, dateOfBirth)
VALUES ('Paula', 'Radcliffe', '1973-12-17')'''
stmt.addBatch """
INSERT INTO Record (time, venue, whenRun, fkAthlete)
SELECT ${2*60*60+15*60+25}, 'London', '2003-04-13',
athleteId FROM Athlete WHERE lastname='Radcliffe'"""
}
//22/04/2013 6:34:59 AM groovy.sql.BatchingStatementWrapper processResult
//FINE: Successfully executed batch with 2 command(s)
assert sql.firstRow('SELECT COUNT(*) as num FROM Athlete').num == 4
assert sql.firstRow('SELECT COUNT(*) as num FROM Record').num == 5
def qry = '''
INSERT INTO Athlete (firstname, lastname, dateOfBirth)
VALUES (?,?,?)
'''
sql.withBatch(3, qry) { ps ->
ps.addBatch('Catherine', 'Ndereba', '1972-07-21')
ps.addBatch('Naoko', 'Takahashi', '1972-05-06')
ps.addBatch('Tegla', 'Loroupe', '1973-05-09')
ps.addBatch('Ingrid', 'Kristiansen', '1956-03-21')
}
//Sep 24, 2014 10:32:03 PM groovy.sql.BatchingStatementWrapper processResult
//FINE: Successfully executed batch with 3 command(s)
//Sep 24, 2014 10:32:03 PM groovy.sql.BatchingStatementWrapper processResult
//FINE: Successfully executed batch with 1 command(s)
assert sql.firstRow('SELECT COUNT(*) as num FROM Athlete').num == 8
================================================
FILE: listings/chap13/Listing_13_11_Paging.groovy
================================================
import util.DbUtil
def sql = DbUtil.create()
DbUtil.populate(sql)
def qry = 'SELECT * FROM Athlete'
assert sql.rows(qry, 1, 2)*.lastname == ['Tergat', 'Khannouchi']
assert sql.rows(qry, 3, 2)*.lastname == ['da Costa']
================================================
FILE: listings/chap13/Listing_13_12_Metadata.groovy
================================================
import util.DbUtil
def sql = DbUtil.create()
DbUtil.populate(sql)
def dump(sql, tablename) {
println " CONTENT OF TABLE ${tablename} ".center(32, '-')
sql.eachRow('SELECT * FROM ' + tablename) { rs ->
def meta = rs.getMetaData()
if (meta.columnCount <= 0) return
for (i in 0..
def width = meta.columnCount * 12
println " CONTENT OF TABLE ${tablename} ".center(width, '-')
(1..meta.columnCount).each {
print meta.getColumnLabel(it).padRight(12)
}
println()
println '-' * width
}
def printRow = { row ->
row.toRowResult().values().each {
print it.toString().padRight(12)
}
println()
}
sql.eachRow('SELECT * FROM ' + tablename, printColNames, printRow)
}
def oldOut = System.out
def baos = new ByteArrayOutputStream()
System.setOut(new PrintStream(baos))
dump2(sql, 'Athlete')
assert baos.toString().readLines()*.trim().join('\n') == '''\
----------- CONTENT OF TABLE Athlete -----------
ATHLETEID FIRSTNAME LASTNAME DATEOFBIRTH
------------------------------------------------
0 Paul Tergat 1969-06-17
1 Khalid Khannouchi 1971-12-22
2 Ronaldo da Costa 1970-06-07\
'''
baos.reset()
dump2(sql, 'Record')
System.setOut(oldOut)
assert baos.toString().readLines()*.trim().join('\n') == '''\
----------------- CONTENT OF TABLE Record ------------------
RECORDID TIME VENUE WHENRUN FKATHLETE
------------------------------------------------------------
0 7495 Berlin 2003-09-28 0
1 7538 London 2002-04-14 1
2 7542 Chicago 1999-10-24 1
3 7565 Berlin 1998-09-20 2\
'''
================================================
FILE: listings/chap13/Listing_13_14_NamedOrdinal.groovy
================================================
import groovy.transform.Canonical
import util.DbUtil
def sql = DbUtil.create()
DbUtil.populate(sql)
def insertPrefix = '''
INSERT INTO Athlete (firstname, lastname, dateOfBirth) VALUES
'''
sql.execute insertPrefix + '(:first,:last,:dob)', first: 'Ingrid',
last: 'Kristiansen', dob: '1956-03-21'
def loroupe = [first: 'Tegla', last: 'Loroupe', dob: '1973-05-09']
sql.execute insertPrefix + '(:first,:last,:dob)', loroupe
@Canonical class Athlete { String first, last, dob }
def ndereba = new Athlete('Catherine', 'Ndereba', '1972-07-21')
sql.execute insertPrefix + '(?.first,?.last,?.dob)', ndereba
def takahashi = new Athlete('Naoko', 'Takahashi')
def takahashiExtra = [dob: '1972-05-06']
def namedOrdinalSuffix = '(?1.first,?1.last,?2.dob)'
sql.execute insertPrefix + namedOrdinalSuffix, takahashi, takahashiExtra
assert sql.firstRow('SELECT COUNT(*) as num FROM Athlete').num == 7
================================================
FILE: listings/chap13/Listing_13_15_StoredProcBasic.groovy
================================================
import util.DbUtil
def sql = DbUtil.create()
DbUtil.populate(sql)
sql.execute '''
CREATE FUNCTION SELECT_ATHLETE_RECORD ()
RETURNS TABLE (lastname VARCHAR(64), venue VARCHAR(64), whenRun DATE)
READS SQL DATA
RETURN TABLE (
SELECT Athlete.lastname, Record.venue, Record.whenRun
FROM Athlete, Record
WHERE Athlete.athleteId = Record.fkAthlete
ORDER BY whenRun
)
'''
def result = []
sql.eachRow('CALL SELECT_ATHLETE_RECORD()') {
result << "$it.lastname $it.venue $it.whenRun"
}
assert result == [
'da Costa Berlin 1998-09-20',
'Khannouchi Chicago 1999-10-24',
'Khannouchi London 2002-04-14',
'Tergat Berlin 2003-09-28'
]
================================================
FILE: listings/chap13/Listing_13_16_StoredProcParam.groovy
================================================
import util.DbUtil
def sql = DbUtil.create()
DbUtil.populate(sql)
sql.execute '''
CREATE FUNCTION FULL_NAME (p_lastname VARCHAR(64))
RETURNS VARCHAR(100)
READS SQL DATA
BEGIN ATOMIC
DECLARE ans VARCHAR(100);
SELECT CONCAT(firstname, ' ', lastname) INTO ans
FROM Athlete WHERE lastname = p_lastname;
RETURN ans;
END
'''
assert sql.firstRow("{? = call FULL_NAME(?)}",
['Tergat'])[0] == 'Paul Tergat'
================================================
FILE: listings/chap13/Listing_13_17_StoredProcInOut.groovy
================================================
import groovy.sql.Sql
import util.DbUtil
def sql = DbUtil.create()
DbUtil.populate(sql)
sql.execute '''
CREATE PROCEDURE CONCAT_NAME (OUT fullname VARCHAR(100),
IN first VARCHAR(50), IN last VARCHAR(50))
BEGIN ATOMIC
SET fullname = CONCAT(first, ' ', last);
END
'''
sql.call("{call CONCAT_NAME(?, ?, ?)}",
[Sql.VARCHAR, 'Paul', 'Tergat']) {
fullname -> assert fullname == 'Paul Tergat'
}
================================================
FILE: listings/chap13/Listing_13_18_DataSetBasics.groovy
================================================
import util.DbUtil
def sql = DbUtil.create()
DbUtil.populate(sql)
def athletes = sql.dataSet('Athlete')
def result = []
athletes.each { result << it.firstname } //#1
assert result == ['Paul', 'Khalid', 'Ronaldo'] //#A
athletes.add(
firstname: 'Paula',
lastname: 'Radcliffe',
dateOfBirth: '1973-12-17'
)
result = athletes.rows().collect { it.firstname } //#2
assert result == ['Paul', 'Khalid', 'Ronaldo', 'Paula'] //#B
//#A Initially we have our three sample athletes
//#B Confirm we now have four athletes
//#1 Treating a SQL table like a list of map-like rows
//#2 Using rows followed by collect
================================================
FILE: listings/chap13/Listing_13_19_DataSetFiltering.groovy
================================================
import util.DbUtil
def sql = DbUtil.create()
DbUtil.populate(sql)
DbUtil.enableLogging()
def athletes = sql.dataSet('Athlete')
athletes.add(
firstname: 'Paula',
lastname: 'Radcliffe',
dateOfBirth: '1973-12-17'
)
def query = athletes.findAll { it.firstname >= 'P' }
query = query.findAll { it.dateOfBirth > '1970-01-01' }
query = query.sort { it.dateOfBirth }
query = query.reverse()
assert query.sql == 'select * from Athlete where firstname >= ? and ' +
'dateOfBirth > ? order by dateOfBirth DESC'
assert query.parameters == ['P', '1970-01-01']
assert query.rows()*.firstname == ['Paula', 'Ronaldo']
================================================
FILE: listings/chap13/Listing_13_20_DataSetViews.groovy
================================================
import util.DbUtil
def sql = DbUtil.create()
DbUtil.populate(sql)
sql.execute '''
DROP VIEW AthleteRecord IF EXISTS;
CREATE VIEW AthleteRecord AS
SELECT * FROM Athlete LEFT OUTER JOIN Record
ON fkAthlete=athleteId;
'''
def records = sql.dataSet('AthleteRecord').findAll {
it.firstname == 'Khalid'
}
def result = records.rows().collect { "$it.lastname $it.venue" }
assert ['Khannouchi London', 'Khannouchi Chicago'] == result
================================================
FILE: listings/chap13/Listing_13_21_DbHelper.txt
================================================
see: layering/DbHelper.groovy
================================================
FILE: listings/chap13/Listing_13_22_DataAccessObject.txt
================================================
see: layering/DataAccessObject.groovy
================================================
FILE: listings/chap13/Listing_13_23_AthleteDAO.txt
================================================
see: layering/AthleteDAO.groovy
================================================
FILE: listings/chap13/Listing_13_24_AthleteApplication.txt
================================================
see: layering/AthleteApplication.groovy
================================================
FILE: listings/chap13/Listing_13_25_AthleteAppMain.groovy
================================================
import layering.*
def app = new AthleteApplication()
app.init()
app.mainLoop()
================================================
FILE: listings/chap13/Listing_13_26_AthleteAppTest.groovy
================================================
import layering.*
def app = new AthleteApplication()
app.init()
// next line only for the benefit of alltests.groovy
def oldOut = System.out
ByteArrayOutputStream baos = captureSystemOut()
overrideSystemIn()
try {
app.mainLoop()
} finally {
// next line only for the benefit of alltests.groovy
System.setOut(oldOut)
}
verifyOutput(baos)
def captureSystemOut() { //#A
def baos = new ByteArrayOutputStream()
System.out = new PrintStream(baos)
baos
}
def overrideSystemIn() { //#B
System.in = new ByteArrayInputStream('''\
create Paul Tergat 1969-06-17
create Khalid Khannouchi
update 1 dateOfBirth 1971-12-22
sort firstname
delete 1
exit
'''.bytes)
}
def verifyOutput(output) {
assert output.toString().readLines()*.trim().join('\n') == '''
commands: create list update delete sort exit
1 Athlete(s) in DB:
id firstname lastname dateOfBirth
0: Paul Tergat 1969-06-17
commands: create list update delete sort exit
2 Athlete(s) in DB:
id firstname lastname dateOfBirth
0: Paul Tergat 1969-06-17
1: Khalid Khannouchi null
commands: create list update delete sort exit
1 row(s) updated
2 Athlete(s) in DB:
id firstname lastname dateOfBirth
0: Paul Tergat 1969-06-17
1: Khalid Khannouchi 1971-12-22
commands: create list update delete sort exit
2 Athlete(s) in DB:
id firstname lastname dateOfBirth
1: Khalid Khannouchi 1971-12-22
0: Paul Tergat 1969-06-17
commands: create list update delete sort exit
1 row(s) deleted
1 Athlete(s) in DB:
id firstname lastname dateOfBirth
0: Paul Tergat 1969-06-17
commands: create list update delete sort exit'''
}
//#A Capture standard output stream for testing
//#B Replace standard input stream with canned input
================================================
FILE: listings/chap13/Listing_13_27_MongoAthletes.groovy
================================================
@Grab('com.gmongo:gmongo:1.3')
import com.gmongo.GMongo
import com.mongodb.util.JSON
import groovy.transform.Field
@Field db = new GMongo().getDB('athletes')
db.athletes.drop()
db.athletes << [first: 'Paul', last: 'Tergat', dob: '1969-06-17', records: [
[time: 2 * 60 * 60 + 4 * 60 + 55,
venue: 'Berlin', when: '2003-09-28']
]]
def insertAthlete(first, last, dob) {
db.athletes << [first: first, last: last, dob: dob]
}
def insertRecord(h, m, s, venue, date, lastname) {
db.athletes.update(
[last: lastname],
[$addToSet: [records: [time: h * 60 * 60 + m * 60 + s,
venue: venue, when: date]]]
)
}
insertAthlete('Khalid', 'Khannouchi', '1971-12-22')
insertAthlete('Ronaldo', 'da Costa', '1970-06-07')
insertRecord(2, 5, 38, 'London', '2002-04-14', 'Khannouchi')
insertRecord(2, 5, 42, 'Chicago', '1999-10-24', 'Khannouchi')
insertRecord(2, 6, 05, 'Berlin', '1998-09-20', 'da Costa')
def radcliffe = """{
first: 'Paula',
last: 'Radcliffe',
dob: '1973-12-17',
records: [
{time: ${2 * 60 * 60 + 15 * 60 + 25},
venue: 'London', when: '2003-04-13'}
]
}"""
db.athletes << JSON.parse(radcliffe)
assert db.athletes.count == 4
db.athletes.find().each {
println "$it._id $it.last ${it.records.size()}"
}
//516b15fc2b10a15fa09331f2 Tergat 1
//516b15fc2b10a15fa09331f3 Khannouchi 2
//516b15fc2b10a15fa09331f4 da Costa 1
//516b15fc2b10a15fa09331f5 Radcliffe 1
def londonAthletes = db.athletes.find('records.venue': 'London')*.first
assert londonAthletes == ['Khalid', 'Paula']
def youngAthletes = db.athletes.aggregate(
[$project: [first: 1, dob: 1]],
[$match: [dob: [$gte: '1970-01-01']]],
[$sort: [dob: -1]]
)
assert youngAthletes.results()*.first == ['Paula', 'Khalid', 'Ronaldo']
================================================
FILE: listings/chap13/Listing_13_28_NeoAthletes.groovy
================================================
@Grab('org.neo4j:neo4j-kernel:2.1.6')
@Grab('org.neo4j:neo4j-lucene-index:2.1.6;transitive=false')
@Grab('org.apache.lucene:lucene-core:3.6.2')
import org.neo4j.graphdb.*
import org.neo4j.graphdb.traversal.*
import static util.Neo4jUtil.*
import static util.MarathonRelationships.*
def db = create()
def tx = null
def athlete1, athlete2, athlete3, athlete4
def record1, record2a, record2b, record3, record4a, record4b
try {
tx = db.beginTx()
athlete1 = db.createNode() //#A
athlete1.first = 'Paul' //#A
athlete1.last = 'Tergat' //#A
athlete1.dob = '1969-06-17' //#A
record1 = db.createNode() //#B
record1.time = 2 * 60 * 60 + 4 * 60 + 55 //#B
record1.venue = 'Berlin' //#B
record1.when = '2003-09-28' //#B
athlete1.set(record1)
assert 'Paul Tergat won the Berlin marathon on 2003-09-28' ==
"$athlete1.first $athlete1.last won the " +
"$record1.venue marathon on $record1.when"
athlete2 = insertAthlete( //#C
db, 'Khalid', 'Khannouchi', '1971-12-22') //#C
record2a = insertRecord( //#C
db, 2, 5, 38, 'London', '2002-04-14', athlete2) //#C
record2b = insertRecord( //#C
db, 2, 5, 42, 'Chicago', '1999-10-24', athlete2) //#C
athlete3 = insertAthlete(db, 'Ronaldo', 'da Costa', '1970-06-07')
record3 = insertRecord(db, 2, 6, 5, 'Berlin', '1998-09-20', athlete3)
athlete4 = insertAthlete(db, 'Paula', 'Radcliffe', '1973-12-17')
record4a = insertRecord(
db, 2, 17, 18, 'Chicago', '2002-10-13', athlete4)
record4b = insertRecord(
db, 2, 15, 25, 'London', '2003-04-13', athlete4)
def allAthletes = [athlete1, athlete2, athlete3, athlete4] //#D
def londonRecords = allAthletes.findAll { athlete -> //#D
athlete.getRelationships(set).any { //#D
record -> record.getOtherNode(athlete).venue == 'London' //#D
} //#D
} //#D
assert londonRecords*.last == ['Khannouchi', 'Radcliffe']
record2b.broke(record3) //#E
record2a.broke(record2b) //#E
record1.broke(record2a) //#E
record4b.broke(record4a) //#E
def result = [] //#F
for (Path p in db.traversalDescription().breadthFirst(). //#F
relationships(broke). //#F
evaluator(Evaluators.fromDepth(1)). //#F
uniqueness(Uniqueness.NONE). //#F
traverse(record3)) { //#F
def newRecord = p.endNode() //#F
result << "$newRecord.venue $newRecord.when" //#F
} //#F
def expected = ['Chicago 1999-10-24',
'London 2002-04-14',
'Berlin 2003-09-28']
assert expected == result
tx.success()
} finally {
tx?.close()
// for the benefit of alltests, don't wait for shutdown hook
db?.shutdown()
}
//#A Create athlete1 by hand
//#B Create record1 by hand
//#C Create using utility methods
//#D Find athletes holding a record set in London
//#E Additional graph edges of interest
//#F Find world records superseding record3
================================================
FILE: listings/chap13/Listing_13_29_NeoGremlin.groovy
================================================
@Grab('org.neo4j:neo4j-kernel:2.1.6')
@Grab('org.neo4j:neo4j-management:2.1.6')
@Grab('org.neo4j:neo4j-cypher:2.1.6;transitive=false')
@Grab('org.neo4j:neo4j-cypher-commons:2.1.6;transitive=false')
@Grab('org.neo4j:neo4j-cypher-compiler-1.9:2.0.4;transitive=false')
@Grab('org.neo4j:neo4j-cypher-compiler-2.0:2.0.4;transitive=false')
@Grab('org.neo4j:neo4j-cypher-compiler-2.1:2.1.6;transitive=false')
@Grab('org.neo4j:neo4j-lucene-index:2.1.6;transitive=false')
@Grab('org.apache.lucene:lucene-core:3.6.2')
@Grab('com.tinkerpop.gremlin:gremlin-groovy:2.6.0;transitive=false')
@Grab('com.tinkerpop.gremlin:gremlin-java:2.6.0;transitive=false')
@Grab('com.tinkerpop.blueprints:\
blueprints-neo4j2-graph:2.6.0;transitive=false')
@Grab('commons-configuration:commons-configuration:1.6')
@Grab('com.tinkerpop.blueprints:blueprints-core:2.6.0;transitive=false')
@Grab('com.tinkerpop:pipes:2.6.0;transitive=false')
@Grab('org.parboiled:parboiled-scala_2.10:1.1.6;transitive=false')
@Grab('org.parboiled:parboiled-core:1.1.6')
@Grab('org.scala-lang:scala-library:2.10.4')
@Grab('com.googlecode.concurrentlinkedhashmap:\
concurrentlinkedhashmap-lru:1.4.1')
@GrabExclude('junit:junit')
@GrabExclude('org.hamcrest:hamcrest-all')
@GrabExclude('org.mockito:mockito-core')
import com.tinkerpop.blueprints.Graph
import com.tinkerpop.blueprints.impls.neo4j2.Neo4j2Graph
import com.tinkerpop.gremlin.groovy.Gremlin
import static util.Neo4jUtil.*
def db = create()
def tx = null
def athlete1, athlete2, athlete3, athlete4
def record1, record2a, record2b, record3, record4a, record4b
Gremlin.load()
try {
tx = db.beginTx()
// create athlete1 .. athlete4
athlete1 = insertAthlete(db, 'Paul', 'Tergat', '1969-06-17')
record1 = insertRecord(
db, 2, 4, 55, 'Berlin', '2003-09-28', athlete1)
athlete2 = insertAthlete(db, 'Khalid', 'Khannouchi', '1971-12-22')
record2a = insertRecord(
db, 2, 5, 38, 'London', '2002-04-14', athlete2)
record2b = insertRecord(
db, 2, 5, 42, 'Chicago', '1999-10-24', athlete2)
athlete3 = insertAthlete(db, 'Ronaldo', 'da Costa', '1970-06-07')
record3 = insertRecord(
db, 2, 6, 5, 'Berlin', '1998-09-20', athlete3)
athlete4 = insertAthlete(db, 'Paula', 'Radcliffe', '1973-12-17')
record4a = insertRecord(
db, 2, 17, 18, 'Chicago', '2002-10-13', athlete4)
record4b = insertRecord(
db, 2, 15, 25, 'London', '2003-04-13', athlete4)
record2b.broke(record3)
record2a.broke(record2b)
record1.broke(record2a)
record4b.broke(record4a)
Graph g = new Neo4j2Graph(db)
def pretty = { it.collect { "$it.venue $it.when" }.join(', ') }
def results = []
g.V('venue', 'London').fill(results)
println 'London world records: ' + pretty(results)
results = []
g.V('venue', 'London').in('broke').fill(results)
println 'World records after London: ' + pretty(results)
results = []
def emitAll = { true }
def forever = { true }
def berlin98 = { it.venue == 'Berlin' &&
it.when.startsWith('1998') }
g.V.filter(berlin98).in('broke').
loop(1, forever, emitAll).fill(results)
println 'World records after Berlin 1998: ' + pretty(results)
tx.success()
} finally {
tx?.close()
}
================================================
FILE: listings/chap13/extra_NeoGremlinGraph.groovy
================================================
/* */
@Grab('org.neo4j:neo4j-kernel:2.1.4')
@Grab('org.neo4j:neo4j-management:2.1.4')
@Grab('org.neo4j:neo4j-cypher:2.1.4;transitive=false')
@Grab('org.neo4j:neo4j-cypher-commons:2.1.4')
@Grab('org.neo4j:neo4j-cypher-compiler-1.9:2.0.4')
@Grab('org.neo4j:neo4j-cypher-compiler-2.0:2.0.4')
@Grab('org.neo4j:neo4j-cypher-compiler-2.1:2.1.4')
@Grab('org.neo4j:neo4j-lucene-index:2.1.4;transitive=false')
@Grab('org.apache.lucene:lucene-core:3.6.2')
@Grab('com.tinkerpop.gremlin:gremlin-groovy:2.6.0;transitive=false')
@Grab('com.tinkerpop.gremlin:gremlin-java:2.6.0;transitive=false')
@Grab('com.tinkerpop.blueprints:blueprints-neo4j2-graph:2.6.0;transitive=false')
@Grab('commons-configuration:commons-configuration:1.6')
@Grab('com.tinkerpop.blueprints:blueprints-core:2.6.0;transitive=false')
@Grab('com.tinkerpop:pipes:2.6.0;transitive=false')
//@Grab('codehaus-stax:stax:1.1.1')
//@GrabResolver('https://repository.jboss.org/nexus/content/repositories/thirdparty-releases')
//@GrabExclude('org.codehaus.groovy:groovy')
@GrabExclude('junit:junit')
@GrabExclude('org.hamcrest:hamcrest-all')
@GrabExclude('org.mockito:mockito-core')
/* */
import com.tinkerpop.blueprints.Graph
import com.tinkerpop.blueprints.impls.neo4j2.Neo4j2Graph
import com.tinkerpop.blueprints.util.io.graphml.GraphMLWriter
import com.tinkerpop.gremlin.groovy.Gremlin
import static util.Neo4jUtil.*
println 'starting'
def db = create()
def tx = null
def athlete1, athlete2, athlete3, athlete4
def record1, record2a, record2b, record3, record4a, record4b
println 'about to load'
Gremlin.load()
println 'loaded'
try {
tx = db.beginTx()
// create athlete1 .. athlete4
athlete1 = insertAthlete(db, 'Paul', 'Tergat', '1969-06-17')
record1 = insertRecord(
db, 2, 4, 55, 'Berlin', '2003-09-28', athlete1)
athlete2 = insertAthlete(db, 'Khalid', 'Khannouchi', '1971-12-22')
record2a = insertRecord(
db, 2, 5, 38, 'London', '2002-04-14', athlete2)
record2b = insertRecord(
db, 2, 5, 42, 'Chicago', '1999-10-24', athlete2)
athlete3 = insertAthlete(db, 'Ronaldo', 'da Costa', '1970-06-07')
record3 = insertRecord(
db, 2, 6, 5, 'Berlin', '1998-09-20', athlete3)
athlete4 = insertAthlete(db, 'Paula', 'Radcliffe', '1973-12-17')
record4a = insertRecord(
db, 2, 17, 18, 'Chicago', '2002-10-13', athlete4)
record4b = insertRecord(
db, 2, 15, 25, 'London', '2003-04-13', athlete4)
record2b.broke(record3)
record2a.broke(record2b)
record1.broke(record2a)
record4b.broke(record4a)
Graph g = new Neo4j2Graph(db)
def writer = new GraphMLWriter(g)
def out = new FileOutputStream("/temp/athletes.graphml")
writer.outputGraph(out)
writer.setNormalize(true)
out.close()
tx.success()
} finally {
tx?.close()
}
================================================
FILE: listings/chap13/layering/AthleteApplication.groovy
================================================
package layering
class AthleteApplication {
def helper = new DbHelper() //#1
def athleteDAO = new AthleteDAO(db: helper.db) //#1
def sortBy = 'athleteId' //#1
def done = false
def init() { helper.executeDdl(athleteDAO) } //#1
def exit() { done = true }
def sort(field) {
sortBy = field
list()
}
def create(first, last = null, dob = null) {
athleteDAO.create([first, last, dob])
list()
}
def list() {
def athletes = athleteDAO.all(sortBy)
println athletes.size() + ' Athlete(s) in DB: '
println 'id firstname lastname dateOfBirth'
athletes.each { athlete ->
println athlete.athleteId + ': ' +
athlete.firstname.padRight(10) + ' ' +
athlete.lastname.padRight(12) + ' ' +
athlete.dateOfBirth
}
}
def update(id, field, newValue) {
def count = athleteDAO.update(field, newValue, id)
println count + ' row(s) updated'
list()
}
def delete(id) {
def count = athleteDAO.delete(id)
println count + ' row(s) deleted'
list()
}
def mainLoop() { //#2
def reader = System.in.newReader()
while (!done) {
println '\ncommands: create list update delete sort exit'
def input = reader.readLine().tokenize() //#A
def method = input.remove(0) //#A
this."$method"(*input) //#A
}
}
}
//#1 Initialization
//#2 Entry point
//#A Commands are provided as methods, then arguments
================================================
FILE: listings/chap13/layering/AthleteDAO.groovy
================================================
package layering
class AthleteDAO extends DataAccessObject {
List getFields() {
return [
'firstname', 'VARCHAR(64)',
'lastname', 'VARCHAR(64)',
'dateOfBirth', 'DATE'
]
}
}
================================================
FILE: listings/chap13/layering/DataAccessObject.groovy
================================================
package layering
abstract class DataAccessObject {
def db
abstract List getFields() //#1
def dataSet() { db.dataSet(tablename) } //#2
def getIdField() { tablename.toLowerCase() + 'Id' } //#2
private getWhereId() { "WHERE $idField = ?" } //#2
String getTablename() {
def name = this.getClass().name
return name[name.lastIndexOf('.') + 1..-4]
}
def create(List args) { //#3
Map argMap = [:]
args.eachWithIndex { arg, i -> argMap[fieldNames[i]] = arg }
dataSet().add argMap
}
Map getSchema() {
Map result = [:]
fieldNames.each {
result[it] = fields[fields.indexOf(it) + 1]
}
return result
}
List getFieldNames() {
List result = []
0.step(fields.size(), 2) { result << fields[it] }
return result
}
def update(field, newValue, id) {
def stmt = "UPDATE $tablename SET $field = ? ${getWhereId()}"
db.executeUpdate stmt, [newValue, id]
}
def delete(id) {
def stmt = "DELETE FROM $tablename ${getWhereId()}"
db.executeUpdate stmt, [id]
}
def all(sortField) { //#4
def selects = fieldNames + idField
def result = []
def stmt = "SELECT " + selects.join(',') +
" FROM $tablename ORDER BY $sortField"
db.eachRow(stmt.toString()) { rs ->
Map businessObject = [:]
selects.each { businessObject[it] = rs[it] }
result << businessObject
}
return result
}
}
//#1 Subclass implements this to provide field list
//#2 Properties for use in SQL statements
//#3 Create operation
//#4 Sample read operation
================================================
FILE: listings/chap13/layering/DbHelper.groovy
================================================
package layering
//@Grab('org.hsqldb:hsqldb:2.3.2')
import groovy.sql.Sql
import groovy.text.SimpleTemplateEngine as STE
import org.hsqldb.jdbc.JDBCDataSource
class DbHelper {
Sql db
DbHelper() {
db = new Sql(new JDBCDataSource(
database: 'jdbc:hsqldb:mem:GinA', user: 'sa', password: ''))
}
def simpleTemplate = new STE().createTemplate('''
DROP TABLE $name IF EXISTS cascade;
CREATE TABLE $name (
${lowname}Id INTEGER GENERATED BY DEFAULT AS IDENTITY,
$fields
);
''')
def executeDdl(DataAccessObject dao) {
def template = simpleTemplate
def binding = [
name: dao.tablename,
lowname: dao.tablename.toLowerCase(),
fields: dao.schema.collect { key, val ->
" ${key.padRight(12)} $val" }.join(",\n")
]
def stmt = template.make(binding).toString()
db.execute stmt
}
}
================================================
FILE: listings/chap13/marathon/active_tx_log
================================================
tm_tx_log.1
================================================
FILE: listings/chap13/marathon/messages.log
================================================
2015-02-01 16:39:29.276+0000 INFO [org.neo4j]: No locking implementation specified, defaulting to 'community'
2015-02-01 16:39:29.352+0000 INFO [org.neo4j]: --- INITIALIZED diagnostics START ---
2015-02-01 16:39:29.353+0000 INFO [org.neo4j]: Neo4j Kernel properties:
neostore.propertystore.db.mapped_memory=1326M
neostore.nodestore.db.mapped_memory=368M
neostore.relationshipstore.db.mapped_memory=1624M
neostore.propertystore.db.strings.mapped_memory=1127M
store_dir=marathon
neostore.propertystore.db.arrays.mapped_memory=1277M
ephemeral=false
2015-02-01 16:39:29.355+0000 INFO [org.neo4j]: Diagnostics providers:
org.neo4j.kernel.configuration.Config
org.neo4j.kernel.info.DiagnosticsManager
SYSTEM_MEMORY
JAVA_MEMORY
OPERATING_SYSTEM
JAVA_VIRTUAL_MACHINE
CLASSPATH
LIBRARY_PATH
SYSTEM_PROPERTIES
NETWORK
2015-02-01 16:39:29.355+0000 INFO [org.neo4j]: System memory information:
Total Physical memory: 16.00 GB
Free Physical memory: 2.75 GB
Committed virtual memory: 6.80 GB
Total swap space: 1.00 GB
Free swap space: 981.75 MB
2015-02-01 16:39:29.359+0000 INFO [org.neo4j]: JVM memory information:
Free memory: 186.19 MB
Total memory: 244.00 MB
Max memory: 3.56 GB
Garbage Collector: PS Scavenge: [PS Eden Space, PS Survivor Space]
Garbage Collector: PS MarkSweep: [PS Eden Space, PS Survivor Space, PS Old Gen, PS Perm Gen]
Memory Pool: Code Cache (Non-heap memory): committed=4.06 MB, used=4.00 MB, max=48.00 MB, threshold=0.00 B
Memory Pool: PS Eden Space (Heap memory): committed=63.00 MB, used=29.61 MB, max=1.31 GB, threshold=?
Memory Pool: PS Survivor Space (Heap memory): committed=10.50 MB, used=10.49 MB, max=10.50 MB, threshold=?
Memory Pool: PS Old Gen (Heap memory): committed=170.50 MB, used=17.71 MB, max=2.67 GB, threshold=0.00 B
Memory Pool: PS Perm Gen (Non-heap memory): committed=29.00 MB, used=28.87 MB, max=82.00 MB, threshold=0.00 B
2015-02-01 16:39:29.367+0000 INFO [org.neo4j]: Operating system information:
Operating System: Mac OS X; version: 10.10.2; arch: x86_64; cpus: 8
Max number of file descriptors: 10240
Number of open file descriptors: 78
Process id: 4500@Dierk-Konigs-MacBook-Pro.local
Byte order: LITTLE_ENDIAN
Local timezone: Europe/Zurich
2015-02-01 16:39:29.369+0000 INFO [org.neo4j]: JVM information:
VM Name: Java HotSpot(TM) 64-Bit Server VM
VM Vendor: Oracle Corporation
VM Version: 24.51-b03
JIT compiler: HotSpot 64-Bit Tiered Compilers
VM Arguments: [-Dscript.name=/Users/dierkkoenig/.gvm/groovy/2.4.0/bin/groovy, -Dprogram.name=groovy, -Dgroovy.starter.conf=/Users/dierkkoenig/.gvm/groovy/2.4.0/conf/groovy-starter.conf, -Dgroovy.home=/Users/dierkkoenig/.gvm/groovy/2.4.0, -Dtools.jar=/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/lib/tools.jar]
2015-02-01 16:39:29.370+0000 INFO [org.neo4j]: Java classpath:
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/qdox-1.12.1.jar
[loader.3] file:/System/Library/Java/Extensions/dns_sd.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/jcommander-1.47.jar
[loader.2] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/ant-1.9.4.jar
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/jce.jar
[loader.3] file:/Users/dierkkoenig/Library/Java/Extensions/libJNPRAuthKit.jnilib
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/bsf-2.4.0.jar
[loader.3] file:/System/Library/Java/Extensions/MRJToolkit.jar
[loader.3] file:/opt/subversion/lib/libsvnjavahl-1.0.0.0.dylib
[loader.3] file:/System/Library/Java/Extensions/vecmath.jar
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/sunrsasign.jar
[loader.3] file:/System/Library/Java/Extensions/libmlib_jai.jnilib
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-groovysh-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/ant-antlr-1.9.4.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/xmlpull-1.1.3.1.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-bsf-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-nio-2.4.0.jar
[loader.3] file:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/ext/sunec.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/servlet-api-2.4.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-sql-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-xml-2.4.0.jar
[loader.3] file:/System/Library/Java/Extensions/libJ3D.jnilib
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/jsp-api-2.0.jar
[loader.3] file:/System/Library/Java/Extensions/mlibwrapper_jai.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.neo4j/neo4j-primitive-collections/jars/neo4j-primitive-collections-2.1.6.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.apache.lucene/lucene-core/jars/lucene-core-3.6.2.jar
[loader.3] file:/Library/Java/Extensions/librxtxSerial.jnilib
[loader.3] file:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/ext/localedata.jar
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/charsets.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-ant-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-test-2.4.0.jar
[loader.3] file:/System/Library/Java/Extensions/libJ3DAudio.jnilib
[loader.3] file:/System/Library/Java/Extensions/libAppleScriptEngine.jnilib
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/jfr.jar
[loader.3] file:/System/Library/Java/Extensions/j3daudio.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-groovydoc-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-jmx-2.4.0.jar
[loader.3] file:/System/Library/Java/Extensions/libJ3DUtils.jnilib
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.neo4j/neo4j-kernel/jars/neo4j-kernel-2.1.6.jar
[loader.3] file:/System/Library/Java/Extensions/j3dcore.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/jansi-1.11.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/openbeans-1.0.jar
[loader.3] file:/usr/lib/java/libjdns_sd.jnilib
[loader.3] file:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/ant-junit-1.9.4.jar
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/jsse.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/jline-2.12.jar
[loader.3] file:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/ext/zipfs.jar
[loader.3] file:/System/Library/Java/Extensions/j3dutils.jar
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/classes
[loader.3] file:/System/Library/Java/Extensions/jai_core.jar
[loader.1] file:/projects/git/regina/listings/chap13/./
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/ivy-2.4.0.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.neo4j/neo4j-lucene-index/jars/neo4j-lucene-index-2.1.6.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-json-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.groovy/grapes/org.hsqldb/hsqldb/jars/hsqldb-2.3.2.jar
[loader.3] file:/System/Library/Java/Extensions/jai_codec.jar
[loader.3] file:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-console-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-templates-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/jsr166y-1.7.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-swing-2.4.0.jar
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/resources.jar
[loader.3] file:/Library/Java/Extensions/RXTXcomm.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/hamcrest-core-1.3.jar
[loader.1] file:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/lib/tools.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/ant-launcher-1.9.4.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.apache.geronimo.specs/geronimo-jta_1.1_spec/jars/geronimo-jta_1.1_spec-1.1.1.jar
[loader.3] file:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/ext/dnsns.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-docgenerator-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/multiverse-core-0.7.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/commons-logging-1.2.jar
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/rt.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/xstream-1.4.7.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/commons-cli-1.2.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-jsr223-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/junit-4.12.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-testng-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-servlet-2.4.0.jar
[loader.3] file:/System/Library/Java/Extensions/AppleScriptEngine.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/testng-6.8.13.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/gpars-1.2.1.jar
2015-02-01 16:39:29.373+0000 INFO [org.neo4j]: Library path:
/Users/dierkkoenig/Library/Java/Extensions
/Library/Java/Extensions
/Network/Library/Java/Extensions
/System/Library/Java/Extensions
/usr/lib/java
/projects/git/regina/listings/chap13
2015-02-01 16:39:29.373+0000 INFO [org.neo4j]: System.properties:
sun.boot.library.path = /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib
user.country.format = CH
gopherProxySet = false
path.separator = :
file.encoding.pkg = sun.io
user.country = DE
sun.java.launcher = SUN_STANDARD
sun.os.patch.level = unknown
program.name = groovy
user.dir = /projects/git/regina/listings/chap13
tools.jar = /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/lib/tools.jar
sun.jnu.encoding = UTF-8
script.name = /Users/dierkkoenig/.gvm/groovy/2.4.0/bin/groovy
sun.management.compiler = HotSpot 64-Bit Tiered Compilers
http.nonProxyHosts = local|*.local|169.254/16|*.169.254/16
user.home = /Users/dierkkoenig
user.timezone = Europe/Zurich
file.encoding = UTF-8
user.name = dierkkoenig
sun.java.command = org.codehaus.groovy.tools.GroovyStarter --main groovy.ui.GroovyMain --conf /Users/dierkkoenig/.gvm/groovy/2.4.0/conf/groovy-starter.conf --classpath . ../../test
sun.arch.data.model = 64
user.language = de
awt.toolkit = sun.lwawt.macosx.LWCToolkit
file.separator = /
sun.io.unicode.encoding = UnicodeBig
sun.cpu.endian = little
groovy.starter.conf = /Users/dierkkoenig/.gvm/groovy/2.4.0/conf/groovy-starter.conf
socksNonProxyHosts = local|*.local|169.254/16|*.169.254/16
ftp.nonProxyHosts = local|*.local|169.254/16|*.169.254/16
groovy.home = /Users/dierkkoenig/.gvm/groovy/2.4.0
sun.cpu.isalist =
2015-02-01 16:39:29.373+0000 INFO [org.neo4j]: Network information:
Interface awdl0:
address: fe80:0:0:0:b49d:fbff:fe48:bef5%10
Interface en0:
address: fe80:0:0:0:2acf:e9ff:fe19:ca6d%5
address: 10.0.1.19
Interface lo0:
address: fe80:0:0:0:0:0:0:1%1
address: 0:0:0:0:0:0:0:1
address: 127.0.0.1
2015-02-01 16:39:29.374+0000 INFO [org.neo4j]: --- INITIALIZED diagnostics END ---
2015-02-01 16:39:29.407+0000 INFO [org.neo4j]: Creating new db @ marathon/neostore
2015-02-01 16:39:29.433+0000 INFO [org.neo4j]: [marathon/neostore.relationshiptypestore.db.names] brickCount=0 brickSize=0b mappedMem=0b (storeSize=38b)
2015-02-01 16:39:29.434+0000 INFO [org.neo4j]: [marathon/neostore.relationshiptypestore.db] brickCount=0 brickSize=0b mappedMem=0b (storeSize=0b)
2015-02-01 16:39:29.434+0000 INFO [org.neo4j]: marathon/neostore.relationshiptypestore.db.names hit=0 miss=0 switches=0 ooe=0
2015-02-01 16:39:29.436+0000 INFO [org.neo4j]: marathon/neostore.relationshiptypestore.db hit=0 miss=0 switches=0 ooe=0
2015-02-01 16:39:29.439+0000 INFO [org.neo4j]: [marathon/neostore.labeltokenstore.db.names] brickCount=0 brickSize=0b mappedMem=0b (storeSize=38b)
2015-02-01 16:39:29.440+0000 INFO [org.neo4j]: [marathon/neostore.labeltokenstore.db] brickCount=0 brickSize=0b mappedMem=0b (storeSize=0b)
2015-02-01 16:39:29.440+0000 INFO [org.neo4j]: marathon/neostore.labeltokenstore.db.names hit=0 miss=0 switches=0 ooe=0
2015-02-01 16:39:29.440+0000 INFO [org.neo4j]: marathon/neostore.labeltokenstore.db hit=0 miss=0 switches=0 ooe=0
2015-02-01 16:39:29.444+0000 INFO [org.neo4j]: [marathon/neostore.relationshiptypestore.db.names] brickCount=0 brickSize=0b mappedMem=0b (storeSize=38b)
2015-02-01 16:39:29.444+0000 INFO [org.neo4j]: [marathon/neostore.relationshiptypestore.db] brickCount=0 brickSize=0b mappedMem=0b (storeSize=0b)
2015-02-01 16:39:29.445+0000 INFO [org.neo4j]: [marathon/neostore.labeltokenstore.db.names] brickCount=0 brickSize=0b mappedMem=0b (storeSize=38b)
2015-02-01 16:39:29.445+0000 INFO [org.neo4j]: [marathon/neostore.labeltokenstore.db] brickCount=0 brickSize=0b mappedMem=0b (storeSize=0b)
2015-02-01 16:39:29.445+0000 INFO [org.neo4j]: [marathon/neostore.propertystore.db.strings] brickCount=0 brickSize=1181696b mappedMem=1181745152b (storeSize=128b)
2015-02-01 16:39:29.446+0000 INFO [org.neo4j]: [marathon/neostore.propertystore.db.index.keys] brickCount=0 brickSize=0b mappedMem=0b (storeSize=38b)
2015-02-01 16:39:29.446+0000 INFO [org.neo4j]: [marathon/neostore.propertystore.db.index] brickCount=0 brickSize=0b mappedMem=0b (storeSize=0b)
2015-02-01 16:39:29.446+0000 INFO [org.neo4j]: [marathon/neostore.propertystore.db.arrays] brickCount=0 brickSize=1339008b mappedMem=1339031552b (storeSize=128b)
2015-02-01 16:39:29.449+0000 INFO [org.neo4j]: [marathon/neostore.propertystore.db] brickCount=0 brickSize=13904084b mappedMem=1390411776b (storeSize=0b)
2015-02-01 16:39:29.452+0000 INFO [org.neo4j]: [marathon/neostore.relationshipstore.db] brickCount=0 brickSize=17028866b mappedMem=1702887424b (storeSize=0b)
2015-02-01 16:39:29.452+0000 INFO [org.neo4j]: [marathon/neostore.nodestore.db.labels] brickCount=0 brickSize=0b mappedMem=0b (storeSize=68b)
2015-02-01 16:39:29.454+0000 INFO [org.neo4j]: [marathon/neostore.nodestore.db] brickCount=0 brickSize=3858750b mappedMem=385875968b (storeSize=0b)
2015-02-01 16:39:29.455+0000 INFO [org.neo4j]: [marathon/neostore.schemastore.db] brickCount=0 brickSize=0b mappedMem=0b (storeSize=64b)
2015-02-01 16:39:29.457+0000 INFO [org.neo4j]: [marathon/neostore.relationshipgroupstore.db] brickCount=0 brickSize=0b mappedMem=0b (storeSize=25b)
2015-02-01 16:39:29.458+0000 INFO [org.neo4j]: [marathon/neostore] brickCount=0 brickSize=0b mappedMem=0b (storeSize=0b)
2015-02-01 16:39:29.463+0000 INFO [org.neo4j]: marathon/neostore.relationshiptypestore.db.names hit=0 miss=0 switches=0 ooe=0
2015-02-01 16:39:29.463+0000 INFO [org.neo4j]: marathon/neostore.relationshiptypestore.db hit=0 miss=0 switches=0 ooe=0
2015-02-01 16:39:29.464+0000 INFO [org.neo4j]: marathon/neostore.labeltokenstore.db.names hit=0 miss=0 switches=0 ooe=0
2015-02-01 16:39:29.465+0000 INFO [org.neo4j]: marathon/neostore.labeltokenstore.db hit=0 miss=0 switches=0 ooe=0
2015-02-01 16:39:29.465+0000 INFO [org.neo4j]: marathon/neostore.propertystore.db.strings hit=0 miss=0 switches=0 ooe=0
2015-02-01 16:39:29.466+0000 INFO [org.neo4j]: marathon/neostore.propertystore.db.index.keys hit=0 miss=0 switches=0 ooe=0
2015-02-01 16:39:29.466+0000 INFO [org.neo4j]: marathon/neostore.propertystore.db.index hit=0 miss=0 switches=0 ooe=0
2015-02-01 16:39:29.467+0000 INFO [org.neo4j]: marathon/neostore.propertystore.db.arrays hit=0 miss=0 switches=0 ooe=0
2015-02-01 16:39:29.468+0000 INFO [org.neo4j]: marathon/neostore.propertystore.db hit=0 miss=0 switches=0 ooe=0
2015-02-01 16:39:29.468+0000 INFO [org.neo4j]: marathon/neostore.relationshipstore.db hit=0 miss=0 switches=0 ooe=0
2015-02-01 16:39:29.469+0000 INFO [org.neo4j]: marathon/neostore.nodestore.db.labels hit=0 miss=0 switches=0 ooe=0
2015-02-01 16:39:29.470+0000 INFO [org.neo4j]: marathon/neostore.nodestore.db hit=0 miss=0 switches=0 ooe=0
2015-02-01 16:39:29.470+0000 INFO [org.neo4j]: marathon/neostore.schemastore.db hit=0 miss=0 switches=0 ooe=0
2015-02-01 16:39:29.471+0000 INFO [org.neo4j]: marathon/neostore.relationshipgroupstore.db hit=0 miss=0 switches=0 ooe=0
2015-02-01 16:39:29.472+0000 INFO [org.neo4j]: marathon/neostore hit=0 miss=10 switches=0 ooe=0
2015-02-01 16:39:29.479+0000 INFO [org.neo4j]: [marathon/neostore.relationshiptypestore.db.names] brickCount=0 brickSize=0b mappedMem=0b (storeSize=38b)
2015-02-01 16:39:29.479+0000 INFO [org.neo4j]: [marathon/neostore.relationshiptypestore.db] brickCount=0 brickSize=0b mappedMem=0b (storeSize=0b)
2015-02-01 16:39:29.480+0000 INFO [org.neo4j]: [marathon/neostore.labeltokenstore.db.names] brickCount=0 brickSize=0b mappedMem=0b (storeSize=38b)
2015-02-01 16:39:29.480+0000 INFO [org.neo4j]: [marathon/neostore.labeltokenstore.db] brickCount=0 brickSize=0b mappedMem=0b (storeSize=0b)
2015-02-01 16:39:29.480+0000 INFO [org.neo4j]: [marathon/neostore.propertystore.db.strings] brickCount=0 brickSize=1181696b mappedMem=1181745152b (storeSize=128b)
2015-02-01 16:39:29.481+0000 INFO [org.neo4j]: [marathon/neostore.propertystore.db.index.keys] brickCount=0 brickSize=0b mappedMem=0b (storeSize=38b)
2015-02-01 16:39:29.481+0000 INFO [org.neo4j]: [marathon/neostore.propertystore.db.index] brickCount=0 brickSize=0b mappedMem=0b (storeSize=0b)
2015-02-01 16:39:29.481+0000 INFO [org.neo4j]: [marathon/neostore.propertystore.db.arrays] brickCount=0 brickSize=1339008b mappedMem=1339031552b (storeSize=128b)
2015-02-01 16:39:29.481+0000 INFO [org.neo4j]: [marathon/neostore.propertystore.db] brickCount=0 brickSize=13904084b mappedMem=1390411776b (storeSize=0b)
2015-02-01 16:39:29.482+0000 INFO [org.neo4j]: [marathon/neostore.relationshipstore.db] brickCount=0 brickSize=17028866b mappedMem=1702887424b (storeSize=0b)
2015-02-01 16:39:29.482+0000 INFO [org.neo4j]: [marathon/neostore.nodestore.db.labels] brickCount=0 brickSize=0b mappedMem=0b (storeSize=68b)
2015-02-01 16:39:29.482+0000 INFO [org.neo4j]: [marathon/neostore.nodestore.db] brickCount=0 brickSize=3858750b mappedMem=385875968b (storeSize=0b)
2015-02-01 16:39:29.482+0000 INFO [org.neo4j]: [marathon/neostore.schemastore.db] brickCount=0 brickSize=0b mappedMem=0b (storeSize=64b)
2015-02-01 16:39:29.483+0000 INFO [org.neo4j]: [marathon/neostore.relationshipgroupstore.db] brickCount=0 brickSize=0b mappedMem=0b (storeSize=25b)
2015-02-01 16:39:29.483+0000 INFO [org.neo4j]: [marathon/neostore] brickCount=0 brickSize=0b mappedMem=0b (storeSize=81b)
2015-02-01 16:39:29.548+0000 INFO [org.neo4j]: No lucene scan store index found, this might just be first use. Preparing to rebuild.
2015-02-01 16:39:29.573+0000 INFO [org.neo4j]: No lucene scan store index found, this might just be first use. Preparing to rebuild.
2015-02-01 16:39:29.693+0000 INFO [org.neo4j]: Opened logical log [marathon/nioneo_logical.log.1] version=0, lastTxId=1 (clean)
2015-02-01 16:39:29.696+0000 INFO [org.neo4j]: Rebuilding lucene scan store, this may take a while
2015-02-01 16:39:29.697+0000 INFO [org.neo4j]: Lucene scan store rebuilt (roughly -1 nodes)
2015-02-01 16:39:29.699+0000 INFO [org.neo4j]: TM new log: tm_tx_log.1
2015-02-01 16:39:29.703+0000 INFO [org.neo4j]: Kernel health set to OK
2015-02-01 16:39:29.712+0000 INFO [org.neo4j]: Opened logical log [marathon/index/lucene.log.1] version=0, lastTxId=1 (clean)
2015-02-01 16:39:29.716+0000 INFO [org.neo4j]: --- STARTED diagnostics for KernelDiagnostics:Versions START ---
2015-02-01 16:39:29.716+0000 INFO [org.neo4j]: Graph Database: org.neo4j.kernel.EmbeddedGraphDatabase StoreId{creationTime=1422808769411, randomId=1762119504651947014, storeVersion=14406081294923270, upgradeTime=1422808769411, upgradeId=1762119504651947014}
2015-02-01 16:39:29.718+0000 INFO [org.neo4j]: Kernel version: Neo4j - Graph Database Kernel (neo4j-kernel), version: 2.1.6
2015-02-01 16:39:29.718+0000 INFO [org.neo4j]: Neo4j component versions:
2015-02-01 16:39:29.719+0000 INFO [org.neo4j]: Neo4j - Lucene Index (neo4j-lucene-index), version: 2.1.6; revision: 2.1.6:2.1-maint:605/0d7f25fc608f15c54ec1a01f4ba4564ebfb1071a
2015-02-01 16:39:29.719+0000 INFO [org.neo4j]: Neo4j - Graph Database Kernel (neo4j-kernel), version: 2.1.6; revision: 2.1.6:2.1-maint:605/0d7f25fc608f15c54ec1a01f4ba4564ebfb1071a
2015-02-01 16:39:29.719+0000 INFO [org.neo4j]: --- STARTED diagnostics for KernelDiagnostics:Versions END ---
2015-02-01 16:39:29.722+0000 INFO [org.neo4j]: --- STARTED diagnostics for NEO_STORE_VERSIONS START ---
2015-02-01 16:39:29.722+0000 INFO [org.neo4j]: Store versions:
Store versions:
NeoStore v0.A.3
SchemaStore v0.A.3
NodeStore v0.A.3
RelationshipStore v0.A.3
RelationshipTypeStore v0.A.3
LabelTokenStore v0.A.3
PropertyStore v0.A.3
PropertyIndexStore v0.A.3
StringPropertyStore v0.A.3
ArrayPropertyStore v0.A.3
RelationshipGroupStore v0.A.3
2015-02-01 16:39:29.722+0000 INFO [org.neo4j]: --- STARTED diagnostics for NEO_STORE_VERSIONS END ---
2015-02-01 16:39:29.723+0000 INFO [org.neo4j]: --- STARTED diagnostics for NEO_STORE_ID_USAGE START ---
2015-02-01 16:39:29.723+0000 INFO [org.neo4j]: Id usage:
Id usage:
SchemaStore: used=1 high=0
NodeStore: used=0 high=-1
RelationshipStore: used=0 high=-1
RelationshipTypeStore: used=0 high=-1
LabelTokenStore: used=0 high=-1
PropertyStore: used=0 high=-1
PropertyIndexStore: used=0 high=-1
StringPropertyStore: used=1 high=0
ArrayPropertyStore: used=1 high=0
RelationshipGroupStore: used=1 high=0
2015-02-01 16:39:29.723+0000 INFO [org.neo4j]: --- STARTED diagnostics for NEO_STORE_ID_USAGE END ---
2015-02-01 16:39:29.723+0000 INFO [org.neo4j]: --- STARTED diagnostics for PERSISTENCE_WINDOW_POOL_STATS START ---
2015-02-01 16:39:29.723+0000 INFO [org.neo4j]: --- STARTED diagnostics for PERSISTENCE_WINDOW_POOL_STATS END ---
2015-02-01 16:39:29.724+0000 INFO [org.neo4j]: --- STARTED diagnostics for KernelDiagnostics:StoreFiles START ---
2015-02-01 16:39:29.724+0000 INFO [org.neo4j]: Disk space on partition (Total / Free / Free %): 499082485760 / 175066800128 / 35
Storage files: (filename : modification date - size)
active_tx_log: 2015-02-01T17:39:29+0100 - 11.00 B
index:
lucene-store.db: 2015-02-01T17:39:29+0100 - 40.00 B
lucene.log.1: 2015-02-01T17:39:29+0100 - 16.00 B
lucene.log.active: 2015-02-01T17:39:29+0100 - 4.00 B
- Total: 2015-02-01T17:39:29+0100 - 60.00 B
lock: 2015-02-01T17:39:29+0100 - 0.00 B
messages.log: 2015-02-01T17:39:29+0100 - 22.22 kB
neostore: 2015-02-01T17:39:29+0100 - 81.00 B
neostore.id: 2015-02-01T17:39:29+0100 - 9.00 B
neostore.labeltokenstore.db: 2015-02-01T17:39:29+0100 - 0.00 B
neostore.labeltokenstore.db.id: 2015-02-01T17:39:29+0100 - 9.00 B
neostore.labeltokenstore.db.names: 2015-02-01T17:39:29+0100 - 38.00 B
neostore.labeltokenstore.db.names.id: 2015-02-01T17:39:29+0100 - 9.00 B
neostore.nodestore.db: 2015-02-01T17:39:29+0100 - 0.00 B
neostore.nodestore.db.id: 2015-02-01T17:39:29+0100 - 9.00 B
neostore.nodestore.db.labels: 2015-02-01T17:39:29+0100 - 68.00 B
neostore.nodestore.db.labels.id: 2015-02-01T17:39:29+0100 - 9.00 B
neostore.propertystore.db: 2015-02-01T17:39:29+0100 - 0.00 B
neostore.propertystore.db.arrays: 2015-02-01T17:39:29+0100 - 128.00 B
neostore.propertystore.db.arrays.id: 2015-02-01T17:39:29+0100 - 9.00 B
neostore.propertystore.db.id: 2015-02-01T17:39:29+0100 - 9.00 B
neostore.propertystore.db.index: 2015-02-01T17:39:29+0100 - 0.00 B
neostore.propertystore.db.index.id: 2015-02-01T17:39:29+0100 - 9.00 B
neostore.propertystore.db.index.keys: 2015-02-01T17:39:29+0100 - 38.00 B
neostore.propertystore.db.index.keys.id: 2015-02-01T17:39:29+0100 - 9.00 B
neostore.propertystore.db.strings: 2015-02-01T17:39:29+0100 - 128.00 B
neostore.propertystore.db.strings.id: 2015-02-01T17:39:29+0100 - 9.00 B
neostore.relationshipgroupstore.db: 2015-02-01T17:39:29+0100 - 25.00 B
neostore.relationshipgroupstore.db.id: 2015-02-01T17:39:29+0100 - 9.00 B
neostore.relationshipstore.db: 2015-02-01T17:39:29+0100 - 0.00 B
neostore.relationshipstore.db.id: 2015-02-01T17:39:29+0100 - 9.00 B
neostore.relationshiptypestore.db: 2015-02-01T17:39:29+0100 - 0.00 B
neostore.relationshiptypestore.db.id: 2015-02-01T17:39:29+0100 - 9.00 B
neostore.relationshiptypestore.db.names: 2015-02-01T17:39:29+0100 - 38.00 B
neostore.relationshiptypestore.db.names.id: 2015-02-01T17:39:29+0100 - 9.00 B
neostore.schemastore.db: 2015-02-01T17:39:29+0100 - 64.00 B
neostore.schemastore.db.id: 2015-02-01T17:39:29+0100 - 9.00 B
nioneo_logical.log.1: 2015-02-01T17:39:29+0100 - 16.00 B
nioneo_logical.log.active: 2015-02-01T17:39:29+0100 - 4.00 B
schema:
label:
lucene:
write.lock: 2015-02-01T17:39:29+0100 - 0.00 B
- Total: 2015-02-01T17:39:29+0100 - 0.00 B
- Total: 2015-02-01T17:39:29+0100 - 0.00 B
- Total: 2015-02-01T17:39:29+0100 - 0.00 B
store_lock: 2015-02-01T17:39:29+0100 - 0.00 B
tm_tx_log.1: 2015-02-01T17:39:29+0100 - 0.00 B
2015-02-01 16:39:29.732+0000 INFO [org.neo4j]: --- STARTED diagnostics for KernelDiagnostics:StoreFiles END ---
2015-02-01 16:39:29.791+0000 INFO [org.neo4j]: Database is now ready
2015-02-01 16:39:30.044+0000 INFO [org.neo4j]: Shutdown started
2015-02-01 16:39:30.044+0000 INFO [org.neo4j]: Database is now unavailable
2015-02-01 16:39:30.046+0000 INFO [org.neo4j]: Closed log marathon/index/lucene.log
2015-02-01 16:39:30.046+0000 INFO [org.neo4j]: TM shutting down
2015-02-01 16:39:30.052+0000 INFO [org.neo4j]: Closed log marathon/nioneo_logical.log
2015-02-01 16:39:30.053+0000 INFO [org.neo4j]: marathon/neostore.relationshiptypestore.db.names hit=0 miss=2 switches=0 ooe=0
2015-02-01 16:39:30.053+0000 INFO [org.neo4j]: marathon/neostore.relationshiptypestore.db hit=0 miss=2 switches=0 ooe=0
2015-02-01 16:39:30.054+0000 INFO [org.neo4j]: marathon/neostore.labeltokenstore.db.names hit=0 miss=0 switches=0 ooe=0
2015-02-01 16:39:30.055+0000 INFO [org.neo4j]: marathon/neostore.labeltokenstore.db hit=0 miss=0 switches=0 ooe=0
2015-02-01 16:39:30.055+0000 INFO [org.neo4j]: marathon/neostore.propertystore.db.strings hit=0 miss=0 switches=0 ooe=0
2015-02-01 16:39:30.056+0000 INFO [org.neo4j]: marathon/neostore.propertystore.db.index.keys hit=0 miss=6 switches=0 ooe=0
2015-02-01 16:39:30.057+0000 INFO [org.neo4j]: marathon/neostore.propertystore.db.index hit=0 miss=6 switches=0 ooe=0
2015-02-01 16:39:30.057+0000 INFO [org.neo4j]: marathon/neostore.propertystore.db.arrays hit=0 miss=0 switches=0 ooe=0
2015-02-01 16:39:30.058+0000 INFO [org.neo4j]: marathon/neostore.propertystore.db hit=20 miss=0 switches=0 ooe=0
2015-02-01 16:39:30.059+0000 INFO [org.neo4j]: marathon/neostore.relationshipstore.db hit=10 miss=0 switches=0 ooe=0
2015-02-01 16:39:30.059+0000 INFO [org.neo4j]: marathon/neostore.nodestore.db.labels hit=0 miss=0 switches=0 ooe=0
2015-02-01 16:39:30.060+0000 INFO [org.neo4j]: marathon/neostore.nodestore.db hit=10 miss=0 switches=0 ooe=0
2015-02-01 16:39:30.061+0000 INFO [org.neo4j]: marathon/neostore.schemastore.db hit=0 miss=0 switches=0 ooe=0
2015-02-01 16:39:30.061+0000 INFO [org.neo4j]: marathon/neostore.relationshipgroupstore.db hit=0 miss=0 switches=0 ooe=0
2015-02-01 16:39:30.062+0000 INFO [org.neo4j]: marathon/neostore hit=0 miss=26 switches=0 ooe=0
2015-02-01 16:39:30.063+0000 INFO [org.neo4j]: NeoStore closed
2015-02-01 16:39:30.063+0000 INFO [org.neo4j]: --- STOPPING diagnostics START ---
2015-02-01 16:39:30.063+0000 INFO [org.neo4j]: --- STOPPING diagnostics END ---
2015-02-02 01:28:48.120+0000 INFO [org.neo4j]: No locking implementation specified, defaulting to 'community'
2015-02-02 01:28:48.199+0000 INFO [org.neo4j]: --- INITIALIZED diagnostics START ---
2015-02-02 01:28:48.201+0000 INFO [org.neo4j]: Neo4j Kernel properties:
neostore.propertystore.db.mapped_memory=1326M
neostore.nodestore.db.mapped_memory=368M
neostore.relationshipstore.db.mapped_memory=1624M
neostore.propertystore.db.strings.mapped_memory=1127M
store_dir=marathon
neostore.propertystore.db.arrays.mapped_memory=1277M
ephemeral=false
2015-02-02 01:28:48.203+0000 INFO [org.neo4j]: Diagnostics providers:
org.neo4j.kernel.configuration.Config
org.neo4j.kernel.info.DiagnosticsManager
SYSTEM_MEMORY
JAVA_MEMORY
OPERATING_SYSTEM
JAVA_VIRTUAL_MACHINE
CLASSPATH
LIBRARY_PATH
SYSTEM_PROPERTIES
NETWORK
2015-02-02 01:28:48.206+0000 INFO [org.neo4j]: System memory information:
Total Physical memory: 16.00 GB
Free Physical memory: 2.49 GB
Committed virtual memory: 6.81 GB
Total swap space: 1.00 GB
Free swap space: 981.75 MB
2015-02-02 01:28:48.211+0000 INFO [org.neo4j]: JVM memory information:
Free memory: 262.02 MB
Total memory: 310.00 MB
Max memory: 3.56 GB
Garbage Collector: PS Scavenge: [PS Eden Space, PS Survivor Space]
Garbage Collector: PS MarkSweep: [PS Eden Space, PS Survivor Space, PS Old Gen, PS Perm Gen]
Memory Pool: Code Cache (Non-heap memory): committed=3.19 MB, used=3.01 MB, max=48.00 MB, threshold=0.00 B
Memory Pool: PS Eden Space (Heap memory): committed=129.00 MB, used=25.29 MB, max=1.31 GB, threshold=?
Memory Pool: PS Survivor Space (Heap memory): committed=10.50 MB, used=10.49 MB, max=10.50 MB, threshold=?
Memory Pool: PS Old Gen (Heap memory): committed=170.50 MB, used=12.19 MB, max=2.67 GB, threshold=0.00 B
Memory Pool: PS Perm Gen (Non-heap memory): committed=25.50 MB, used=25.15 MB, max=82.00 MB, threshold=0.00 B
2015-02-02 01:28:48.219+0000 INFO [org.neo4j]: Operating system information:
Operating System: Mac OS X; version: 10.10.2; arch: x86_64; cpus: 8
Max number of file descriptors: 10240
Number of open file descriptors: 71
Process id: 5798@Dierk-Konigs-MacBook-Pro.local
Byte order: LITTLE_ENDIAN
Local timezone: Europe/Zurich
2015-02-02 01:28:48.221+0000 INFO [org.neo4j]: JVM information:
VM Name: Java HotSpot(TM) 64-Bit Server VM
VM Vendor: Oracle Corporation
VM Version: 24.51-b03
JIT compiler: HotSpot 64-Bit Tiered Compilers
VM Arguments: [-Dscript.name=/Users/dierkkoenig/.gvm/groovy/2.4.0/bin/groovy, -Dprogram.name=groovy, -Dgroovy.starter.conf=/Users/dierkkoenig/.gvm/groovy/2.4.0/conf/groovy-starter.conf, -Dgroovy.home=/Users/dierkkoenig/.gvm/groovy/2.4.0, -Dtools.jar=/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/lib/tools.jar]
2015-02-02 01:28:48.222+0000 INFO [org.neo4j]: Java classpath:
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/qdox-1.12.1.jar
[loader.3] file:/System/Library/Java/Extensions/dns_sd.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/jcommander-1.47.jar
[loader.2] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/ant-1.9.4.jar
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/jce.jar
[loader.3] file:/Users/dierkkoenig/Library/Java/Extensions/libJNPRAuthKit.jnilib
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/bsf-2.4.0.jar
[loader.3] file:/System/Library/Java/Extensions/MRJToolkit.jar
[loader.3] file:/opt/subversion/lib/libsvnjavahl-1.0.0.0.dylib
[loader.3] file:/System/Library/Java/Extensions/vecmath.jar
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/sunrsasign.jar
[loader.3] file:/System/Library/Java/Extensions/libmlib_jai.jnilib
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-groovysh-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/ant-antlr-1.9.4.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/xmlpull-1.1.3.1.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-bsf-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-nio-2.4.0.jar
[loader.3] file:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/ext/sunec.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/servlet-api-2.4.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-sql-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-xml-2.4.0.jar
[loader.3] file:/System/Library/Java/Extensions/libJ3D.jnilib
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/jsp-api-2.0.jar
[loader.3] file:/System/Library/Java/Extensions/mlibwrapper_jai.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.neo4j/neo4j-primitive-collections/jars/neo4j-primitive-collections-2.1.6.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.apache.lucene/lucene-core/jars/lucene-core-3.6.2.jar
[loader.3] file:/Library/Java/Extensions/librxtxSerial.jnilib
[loader.3] file:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/ext/localedata.jar
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/charsets.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-ant-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-test-2.4.0.jar
[loader.3] file:/System/Library/Java/Extensions/libJ3DAudio.jnilib
[loader.3] file:/System/Library/Java/Extensions/libAppleScriptEngine.jnilib
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/jfr.jar
[loader.3] file:/System/Library/Java/Extensions/j3daudio.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-groovydoc-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-jmx-2.4.0.jar
[loader.3] file:/System/Library/Java/Extensions/libJ3DUtils.jnilib
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.neo4j/neo4j-kernel/jars/neo4j-kernel-2.1.6.jar
[loader.3] file:/System/Library/Java/Extensions/j3dcore.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/jansi-1.11.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/openbeans-1.0.jar
[loader.3] file:/usr/lib/java/libjdns_sd.jnilib
[loader.3] file:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/ant-junit-1.9.4.jar
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/jsse.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/jline-2.12.jar
[loader.3] file:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/ext/zipfs.jar
[loader.3] file:/System/Library/Java/Extensions/j3dutils.jar
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/classes
[loader.3] file:/System/Library/Java/Extensions/jai_core.jar
[loader.1] file:/projects/git/regina/listings/chap13/./
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/ivy-2.4.0.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.neo4j/neo4j-lucene-index/jars/neo4j-lucene-index-2.1.6.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-json-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.groovy/grapes/org.hsqldb/hsqldb/jars/hsqldb-2.3.2.jar
[loader.3] file:/System/Library/Java/Extensions/jai_codec.jar
[loader.3] file:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-console-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-templates-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/jsr166y-1.7.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-swing-2.4.0.jar
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/resources.jar
[loader.3] file:/Library/Java/Extensions/RXTXcomm.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/hamcrest-core-1.3.jar
[loader.1] file:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/lib/tools.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/ant-launcher-1.9.4.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.apache.geronimo.specs/geronimo-jta_1.1_spec/jars/geronimo-jta_1.1_spec-1.1.1.jar
[loader.3] file:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/ext/dnsns.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-docgenerator-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/multiverse-core-0.7.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/commons-logging-1.2.jar
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/rt.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/xstream-1.4.7.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/commons-cli-1.2.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-jsr223-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/junit-4.12.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-testng-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-servlet-2.4.0.jar
[loader.3] file:/System/Library/Java/Extensions/AppleScriptEngine.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/testng-6.8.13.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/gpars-1.2.1.jar
2015-02-02 01:28:48.226+0000 INFO [org.neo4j]: Library path:
/Users/dierkkoenig/Library/Java/Extensions
/Library/Java/Extensions
/Network/Library/Java/Extensions
/System/Library/Java/Extensions
/usr/lib/java
/projects/git/regina/listings/chap13
2015-02-02 01:28:48.226+0000 INFO [org.neo4j]: System.properties:
sun.boot.library.path = /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib
user.country.format = CH
gopherProxySet = false
path.separator = :
file.encoding.pkg = sun.io
user.country = DE
sun.java.launcher = SUN_STANDARD
sun.os.patch.level = unknown
program.name = groovy
user.dir = /projects/git/regina/listings/chap13
tools.jar = /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/lib/tools.jar
sun.jnu.encoding = UTF-8
script.name = /Users/dierkkoenig/.gvm/groovy/2.4.0/bin/groovy
sun.management.compiler = HotSpot 64-Bit Tiered Compilers
http.nonProxyHosts = local|*.local|169.254/16|*.169.254/16
user.home = /Users/dierkkoenig
user.timezone = Europe/Zurich
file.encoding = UTF-8
user.name = dierkkoenig
sun.java.command = org.codehaus.groovy.tools.GroovyStarter --main groovy.ui.GroovyMain --conf /Users/dierkkoenig/.gvm/groovy/2.4.0/conf/groovy-starter.conf --classpath . ../../test
sun.arch.data.model = 64
user.language = de
awt.toolkit = sun.lwawt.macosx.LWCToolkit
file.separator = /
sun.io.unicode.encoding = UnicodeBig
sun.cpu.endian = little
groovy.starter.conf = /Users/dierkkoenig/.gvm/groovy/2.4.0/conf/groovy-starter.conf
socksNonProxyHosts = local|*.local|169.254/16|*.169.254/16
ftp.nonProxyHosts = local|*.local|169.254/16|*.169.254/16
groovy.home = /Users/dierkkoenig/.gvm/groovy/2.4.0
sun.cpu.isalist =
2015-02-02 01:28:48.227+0000 INFO [org.neo4j]: Network information:
Interface awdl0:
address: fe80:0:0:0:b49d:fbff:fe48:bef5%10
Interface en0:
address: fe80:0:0:0:2acf:e9ff:fe19:ca6d%5
address: 10.0.1.19
Interface lo0:
address: fe80:0:0:0:0:0:0:1%1
address: 0:0:0:0:0:0:0:1
address: 127.0.0.1
2015-02-02 01:28:48.230+0000 INFO [org.neo4j]: --- INITIALIZED diagnostics END ---
2015-02-02 01:28:48.297+0000 INFO [org.neo4j]: [marathon/neostore.relationshiptypestore.db.names] brickCount=0 brickSize=0b mappedMem=0b (storeSize=114b)
2015-02-02 01:28:48.299+0000 INFO [org.neo4j]: [marathon/neostore.relationshiptypestore.db] brickCount=0 brickSize=0b mappedMem=0b (storeSize=10b)
2015-02-02 01:28:48.301+0000 INFO [org.neo4j]: [marathon/neostore.labeltokenstore.db.names] brickCount=0 brickSize=0b mappedMem=0b (storeSize=38b)
2015-02-02 01:28:48.304+0000 INFO [org.neo4j]: [marathon/neostore.labeltokenstore.db] brickCount=0 brickSize=0b mappedMem=0b (storeSize=0b)
2015-02-02 01:28:48.306+0000 INFO [org.neo4j]: [marathon/neostore.propertystore.db.strings] brickCount=0 brickSize=1181696b mappedMem=1181745152b (storeSize=128b)
2015-02-02 01:28:48.308+0000 INFO [org.neo4j]: [marathon/neostore.propertystore.db.index.keys] brickCount=0 brickSize=0b mappedMem=0b (storeSize=266b)
2015-02-02 01:28:48.310+0000 INFO [org.neo4j]: [marathon/neostore.propertystore.db.index] brickCount=0 brickSize=0b mappedMem=0b (storeSize=54b)
2015-02-02 01:28:48.313+0000 INFO [org.neo4j]: [marathon/neostore.propertystore.db.arrays] brickCount=0 brickSize=1339008b mappedMem=1339031552b (storeSize=128b)
2015-02-02 01:28:48.329+0000 INFO [org.neo4j]: [marathon/neostore.propertystore.db] brickCount=0 brickSize=1390392b mappedMem=1390411776b (storeSize=820b)
2015-02-02 01:28:48.334+0000 INFO [org.neo4j]: [marathon/neostore.relationshipstore.db] brickCount=0 brickSize=1702856b mappedMem=1702887424b (storeSize=340b)
2015-02-02 01:28:48.336+0000 INFO [org.neo4j]: [marathon/neostore.nodestore.db.labels] brickCount=0 brickSize=0b mappedMem=0b (storeSize=68b)
2015-02-02 01:28:48.340+0000 INFO [org.neo4j]: [marathon/neostore.nodestore.db] brickCount=0 brickSize=385875b mappedMem=385875968b (storeSize=150b)
2015-02-02 01:28:48.343+0000 INFO [org.neo4j]: [marathon/neostore.schemastore.db] brickCount=0 brickSize=0b mappedMem=0b (storeSize=64b)
2015-02-02 01:28:48.346+0000 INFO [org.neo4j]: [marathon/neostore.relationshipgroupstore.db] brickCount=0 brickSize=0b mappedMem=0b (storeSize=25b)
2015-02-02 01:28:48.348+0000 INFO [org.neo4j]: [marathon/neostore] brickCount=0 brickSize=0b mappedMem=0b (storeSize=81b)
2015-02-02 01:28:48.586+0000 INFO [org.neo4j]: Opened logical log [marathon/nioneo_logical.log.1] version=1, lastTxId=10 (clean)
2015-02-02 01:28:48.592+0000 INFO [org.neo4j]: TM opening log: marathon/tm_tx_log.1
2015-02-02 01:28:48.600+0000 INFO [org.neo4j]: Kernel health set to OK
2015-02-02 01:28:48.612+0000 INFO [org.neo4j]: Opened logical log [marathon/index/lucene.log.1] version=1, lastTxId=1 (clean)
2015-02-02 01:28:48.618+0000 INFO [org.neo4j]: --- STARTED diagnostics for KernelDiagnostics:Versions START ---
2015-02-02 01:28:48.618+0000 INFO [org.neo4j]: Graph Database: org.neo4j.kernel.EmbeddedGraphDatabase StoreId{creationTime=1422808769411, randomId=1762119504651947014, storeVersion=14406081294923270, upgradeTime=1422808769411, upgradeId=1762119504651947014}
2015-02-02 01:28:48.620+0000 INFO [org.neo4j]: Kernel version: Neo4j - Graph Database Kernel (neo4j-kernel), version: 2.1.6
2015-02-02 01:28:48.620+0000 INFO [org.neo4j]: Neo4j component versions:
2015-02-02 01:28:48.621+0000 INFO [org.neo4j]: Neo4j - Lucene Index (neo4j-lucene-index), version: 2.1.6; revision: 2.1.6:2.1-maint:605/0d7f25fc608f15c54ec1a01f4ba4564ebfb1071a
2015-02-02 01:28:48.621+0000 INFO [org.neo4j]: Neo4j - Graph Database Kernel (neo4j-kernel), version: 2.1.6; revision: 2.1.6:2.1-maint:605/0d7f25fc608f15c54ec1a01f4ba4564ebfb1071a
2015-02-02 01:28:48.621+0000 INFO [org.neo4j]: --- STARTED diagnostics for KernelDiagnostics:Versions END ---
2015-02-02 01:28:48.624+0000 INFO [org.neo4j]: --- STARTED diagnostics for NEO_STORE_VERSIONS START ---
2015-02-02 01:28:48.625+0000 INFO [org.neo4j]: Store versions:
Store versions:
NeoStore v0.A.3
SchemaStore v0.A.3
NodeStore v0.A.3
RelationshipStore v0.A.3
RelationshipTypeStore v0.A.3
LabelTokenStore v0.A.3
PropertyStore v0.A.3
PropertyIndexStore v0.A.3
StringPropertyStore v0.A.3
ArrayPropertyStore v0.A.3
RelationshipGroupStore v0.A.3
2015-02-02 01:28:48.625+0000 INFO [org.neo4j]: --- STARTED diagnostics for NEO_STORE_VERSIONS END ---
2015-02-02 01:28:48.625+0000 INFO [org.neo4j]: --- STARTED diagnostics for NEO_STORE_ID_USAGE START ---
2015-02-02 01:28:48.625+0000 INFO [org.neo4j]: Id usage:
Id usage:
SchemaStore: used=1 high=0
NodeStore: used=10 high=9
RelationshipStore: used=10 high=9
RelationshipTypeStore: used=2 high=1
LabelTokenStore: used=0 high=-1
PropertyStore: used=20 high=19
PropertyIndexStore: used=6 high=5
StringPropertyStore: used=1 high=0
ArrayPropertyStore: used=1 high=0
RelationshipGroupStore: used=1 high=0
2015-02-02 01:28:48.626+0000 INFO [org.neo4j]: --- STARTED diagnostics for NEO_STORE_ID_USAGE END ---
2015-02-02 01:28:48.626+0000 INFO [org.neo4j]: --- STARTED diagnostics for PERSISTENCE_WINDOW_POOL_STATS START ---
2015-02-02 01:28:48.626+0000 INFO [org.neo4j]: --- STARTED diagnostics for PERSISTENCE_WINDOW_POOL_STATS END ---
2015-02-02 01:28:48.627+0000 INFO [org.neo4j]: --- STARTED diagnostics for KernelDiagnostics:StoreFiles START ---
2015-02-02 01:28:48.627+0000 INFO [org.neo4j]: Disk space on partition (Total / Free / Free %): 499082485760 / 174778966016 / 35
Storage files: (filename : modification date - size)
active_tx_log: 2015-02-01T17:39:29+0100 - 11.00 B
index:
lucene-store.db: 2015-02-01T17:39:30+0100 - 40.00 B
lucene.log.1: 2015-02-02T02:28:48+0100 - 16.00 B
lucene.log.active: 2015-02-02T02:28:48+0100 - 4.00 B
lucene.log.v0: 2015-02-01T17:39:30+0100 - 16.00 B
- Total: 2015-02-02T02:28:48+0100 - 76.00 B
lock: 2015-02-02T02:28:48+0100 - 0.00 B
messages.log: 2015-02-02T02:28:48+0100 - 45.09 kB
neostore: 2015-02-02T02:28:48+0100 - 81.00 B
neostore.id: 2015-02-02T02:28:48+0100 - 9.00 B
neostore.labeltokenstore.db: 2015-02-02T02:28:48+0100 - 0.00 B
neostore.labeltokenstore.db.id: 2015-02-02T02:28:48+0100 - 9.00 B
neostore.labeltokenstore.db.names: 2015-02-02T02:28:48+0100 - 38.00 B
neostore.labeltokenstore.db.names.id: 2015-02-02T02:28:48+0100 - 9.00 B
neostore.nodestore.db: 2015-02-02T02:28:48+0100 - 150.00 B
neostore.nodestore.db.id: 2015-02-02T02:28:48+0100 - 9.00 B
neostore.nodestore.db.labels: 2015-02-02T02:28:48+0100 - 68.00 B
neostore.nodestore.db.labels.id: 2015-02-02T02:28:48+0100 - 9.00 B
neostore.propertystore.db: 2015-02-02T02:28:48+0100 - 820.00 B
neostore.propertystore.db.arrays: 2015-02-02T02:28:48+0100 - 128.00 B
neostore.propertystore.db.arrays.id: 2015-02-02T02:28:48+0100 - 9.00 B
neostore.propertystore.db.id: 2015-02-02T02:28:48+0100 - 9.00 B
neostore.propertystore.db.index: 2015-02-02T02:28:48+0100 - 54.00 B
neostore.propertystore.db.index.id: 2015-02-02T02:28:48+0100 - 9.00 B
neostore.propertystore.db.index.keys: 2015-02-02T02:28:48+0100 - 266.00 B
neostore.propertystore.db.index.keys.id: 2015-02-02T02:28:48+0100 - 9.00 B
neostore.propertystore.db.strings: 2015-02-02T02:28:48+0100 - 128.00 B
neostore.propertystore.db.strings.id: 2015-02-02T02:28:48+0100 - 9.00 B
neostore.relationshipgroupstore.db: 2015-02-02T02:28:48+0100 - 25.00 B
neostore.relationshipgroupstore.db.id: 2015-02-02T02:28:48+0100 - 9.00 B
neostore.relationshipstore.db: 2015-02-02T02:28:48+0100 - 340.00 B
neostore.relationshipstore.db.id: 2015-02-02T02:28:48+0100 - 9.00 B
neostore.relationshiptypestore.db: 2015-02-02T02:28:48+0100 - 10.00 B
neostore.relationshiptypestore.db.id: 2015-02-02T02:28:48+0100 - 9.00 B
neostore.relationshiptypestore.db.names: 2015-02-02T02:28:48+0100 - 114.00 B
neostore.relationshiptypestore.db.names.id: 2015-02-02T02:28:48+0100 - 9.00 B
neostore.schemastore.db: 2015-02-02T02:28:48+0100 - 64.00 B
neostore.schemastore.db.id: 2015-02-02T02:28:48+0100 - 9.00 B
nioneo_logical.log.1: 2015-02-02T02:28:48+0100 - 16.00 B
nioneo_logical.log.active: 2015-02-02T02:28:48+0100 - 4.00 B
nioneo_logical.log.v0: 2015-02-01T17:39:30+0100 - 4.52 kB
schema:
label:
lucene:
segments.gen: 2015-02-01T17:39:30+0100 - 20.00 B
segments_1: 2015-02-01T17:39:30+0100 - 32.00 B
write.lock: 2015-02-02T02:28:48+0100 - 0.00 B
- Total: 2015-02-02T02:28:48+0100 - 52.00 B
- Total: 2015-02-01T17:39:29+0100 - 52.00 B
- Total: 2015-02-01T17:39:29+0100 - 52.00 B
store_lock: 2015-02-01T17:39:29+0100 - 0.00 B
tm_tx_log.1: 2015-02-02T02:28:48+0100 - 0.00 B
2015-02-02 01:28:48.637+0000 INFO [org.neo4j]: --- STARTED diagnostics for KernelDiagnostics:StoreFiles END ---
2015-02-02 01:28:48.685+0000 INFO [org.neo4j]: Database is now ready
2015-02-02 01:28:48.914+0000 INFO [org.neo4j]: Shutdown started
2015-02-02 01:28:48.914+0000 INFO [org.neo4j]: Database is now unavailable
2015-02-02 01:28:48.918+0000 INFO [org.neo4j]: Closed log marathon/index/lucene.log
2015-02-02 01:28:48.918+0000 INFO [org.neo4j]: TM shutting down
2015-02-02 01:28:48.924+0000 INFO [org.neo4j]: Closed log marathon/nioneo_logical.log
2015-02-02 01:28:48.925+0000 INFO [org.neo4j]: marathon/neostore.relationshiptypestore.db.names hit=0 miss=4 switches=0 ooe=0
2015-02-02 01:28:48.926+0000 INFO [org.neo4j]: marathon/neostore.relationshiptypestore.db hit=0 miss=2 switches=0 ooe=0
2015-02-02 01:28:48.927+0000 INFO [org.neo4j]: marathon/neostore.labeltokenstore.db.names hit=0 miss=0 switches=0 ooe=0
2015-02-02 01:28:48.928+0000 INFO [org.neo4j]: marathon/neostore.labeltokenstore.db hit=0 miss=0 switches=0 ooe=0
2015-02-02 01:28:48.929+0000 INFO [org.neo4j]: marathon/neostore.propertystore.db.strings hit=0 miss=0 switches=0 ooe=0
2015-02-02 01:28:48.929+0000 INFO [org.neo4j]: marathon/neostore.propertystore.db.index.keys hit=0 miss=12 switches=0 ooe=0
2015-02-02 01:28:48.930+0000 INFO [org.neo4j]: marathon/neostore.propertystore.db.index hit=0 miss=6 switches=0 ooe=0
2015-02-02 01:28:48.930+0000 INFO [org.neo4j]: marathon/neostore.propertystore.db.arrays hit=0 miss=0 switches=0 ooe=0
2015-02-02 01:28:48.931+0000 INFO [org.neo4j]: marathon/neostore.propertystore.db hit=20 miss=0 switches=0 ooe=0
2015-02-02 01:28:48.932+0000 INFO [org.neo4j]: marathon/neostore.relationshipstore.db hit=10 miss=0 switches=0 ooe=0
2015-02-02 01:28:48.933+0000 INFO [org.neo4j]: marathon/neostore.nodestore.db.labels hit=0 miss=0 switches=0 ooe=0
2015-02-02 01:28:48.934+0000 INFO [org.neo4j]: marathon/neostore.nodestore.db hit=10 miss=0 switches=0 ooe=0
2015-02-02 01:28:48.934+0000 INFO [org.neo4j]: marathon/neostore.schemastore.db hit=0 miss=0 switches=0 ooe=0
2015-02-02 01:28:48.935+0000 INFO [org.neo4j]: marathon/neostore.relationshipgroupstore.db hit=0 miss=0 switches=0 ooe=0
2015-02-02 01:28:48.937+0000 INFO [org.neo4j]: marathon/neostore hit=0 miss=18 switches=0 ooe=0
2015-02-02 01:28:48.938+0000 INFO [org.neo4j]: NeoStore closed
2015-02-02 01:28:48.938+0000 INFO [org.neo4j]: --- STOPPING diagnostics START ---
2015-02-02 01:28:48.938+0000 INFO [org.neo4j]: --- STOPPING diagnostics END ---
2015-02-02 01:29:25.276+0000 INFO [org.neo4j]: No locking implementation specified, defaulting to 'community'
2015-02-02 01:29:25.340+0000 INFO [org.neo4j]: --- INITIALIZED diagnostics START ---
2015-02-02 01:29:25.342+0000 INFO [org.neo4j]: Neo4j Kernel properties:
neostore.propertystore.db.mapped_memory=1326M
neostore.nodestore.db.mapped_memory=368M
neostore.relationshipstore.db.mapped_memory=1624M
neostore.propertystore.db.strings.mapped_memory=1127M
store_dir=marathon
neostore.propertystore.db.arrays.mapped_memory=1277M
ephemeral=false
2015-02-02 01:29:25.343+0000 INFO [org.neo4j]: Diagnostics providers:
org.neo4j.kernel.configuration.Config
org.neo4j.kernel.info.DiagnosticsManager
SYSTEM_MEMORY
JAVA_MEMORY
OPERATING_SYSTEM
JAVA_VIRTUAL_MACHINE
CLASSPATH
LIBRARY_PATH
SYSTEM_PROPERTIES
NETWORK
2015-02-02 01:29:25.344+0000 INFO [org.neo4j]: System memory information:
Total Physical memory: 16.00 GB
Free Physical memory: 2.38 GB
Committed virtual memory: 6.80 GB
Total swap space: 1.00 GB
Free swap space: 981.75 MB
2015-02-02 01:29:25.345+0000 INFO [org.neo4j]: JVM memory information:
Free memory: 253.70 MB
Total memory: 310.50 MB
Max memory: 3.56 GB
Garbage Collector: PS Scavenge: [PS Eden Space, PS Survivor Space]
Garbage Collector: PS MarkSweep: [PS Eden Space, PS Survivor Space, PS Old Gen, PS Perm Gen]
Memory Pool: Code Cache (Non-heap memory): committed=4.06 MB, used=3.98 MB, max=48.00 MB, threshold=0.00 B
Memory Pool: PS Eden Space (Heap memory): committed=125.00 MB, used=18.93 MB, max=1.30 GB, threshold=?
Memory Pool: PS Survivor Space (Heap memory): committed=15.00 MB, used=14.69 MB, max=15.00 MB, threshold=?
Memory Pool: PS Old Gen (Heap memory): committed=170.50 MB, used=23.18 MB, max=2.67 GB, threshold=0.00 B
Memory Pool: PS Perm Gen (Non-heap memory): committed=36.50 MB, used=36.35 MB, max=82.00 MB, threshold=0.00 B
2015-02-02 01:29:25.347+0000 INFO [org.neo4j]: Operating system information:
Operating System: Mac OS X; version: 10.10.2; arch: x86_64; cpus: 8
Max number of file descriptors: 10240
Number of open file descriptors: 101
Process id: 5798@Dierk-Konigs-MacBook-Pro.local
Byte order: LITTLE_ENDIAN
Local timezone: Europe/Zurich
2015-02-02 01:29:25.348+0000 INFO [org.neo4j]: JVM information:
VM Name: Java HotSpot(TM) 64-Bit Server VM
VM Vendor: Oracle Corporation
VM Version: 24.51-b03
JIT compiler: HotSpot 64-Bit Tiered Compilers
VM Arguments: [-Dscript.name=/Users/dierkkoenig/.gvm/groovy/2.4.0/bin/groovy, -Dprogram.name=groovy, -Dgroovy.starter.conf=/Users/dierkkoenig/.gvm/groovy/2.4.0/conf/groovy-starter.conf, -Dgroovy.home=/Users/dierkkoenig/.gvm/groovy/2.4.0, -Dtools.jar=/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/lib/tools.jar]
2015-02-02 01:29:25.349+0000 INFO [org.neo4j]: Java classpath:
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/qdox-1.12.1.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.parboiled/parboiled-scala_2.10/jars/parboiled-scala_2.10-1.1.6.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/jcommander-1.47.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/bsf-2.4.0.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/commons-configuration/commons-configuration/jars/commons-configuration-1.6.jar
[loader.3] file:/Users/dierkkoenig/Library/Java/Extensions/libJNPRAuthKit.jnilib
[loader.3] file:/System/Library/Java/Extensions/vecmath.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-groovysh-2.4.0.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/commons-logging/commons-logging/jars/commons-logging-1.1.1.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/ant-antlr-1.9.4.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/xmlpull-1.1.3.1.jar
[loader.3] file:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/ext/sunec.jar
[loader.3] file:/System/Library/Java/Extensions/libJ3D.jnilib
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/commons-lang/commons-lang/jars/commons-lang-2.4.jar
[loader.3] file:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/ext/localedata.jar
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/charsets.jar
[loader.3] file:/System/Library/Java/Extensions/j3daudio.jar
[loader.3] file:/System/Library/Java/Extensions/j3dcore.jar
[loader.3] file:/usr/lib/java/libjdns_sd.jnilib
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/ant-junit-1.9.4.jar
[loader.3] file:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.neo4j/neo4j-management/jars/neo4j-management-2.1.6.jar
[loader.3] file:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/ext/zipfs.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/com.tinkerpop.gremlin/gremlin-groovy/jars/gremlin-groovy-2.6.0.jar
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/classes
[loader.3] file:/System/Library/Java/Extensions/jai_core.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/ivy-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-json-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-templates-2.4.0.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/com.tinkerpop.gremlin/gremlin-java/jars/gremlin-java-2.6.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/hamcrest-core-1.3.jar
[loader.3] file:/Library/Java/Extensions/RXTXcomm.jar
[loader.1] file:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/lib/tools.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.apache.geronimo.specs/geronimo-jta_1.1_spec/jars/geronimo-jta_1.1_spec-1.1.1.jar
[loader.3] file:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/ext/dnsns.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/multiverse-core-0.7.0.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.neo4j/neo4j-cypher-commons/jars/neo4j-cypher-commons-2.1.6.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/junit-4.12.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-servlet-2.4.0.jar
[loader.3] file:/System/Library/Java/Extensions/AppleScriptEngine.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/testng-6.8.13.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.parboiled/parboiled-core/jars/parboiled-core-1.1.6.jar
[loader.3] file:/System/Library/Java/Extensions/dns_sd.jar
[loader.2] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/ant-1.9.4.jar
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/jce.jar
[loader.3] file:/System/Library/Java/Extensions/MRJToolkit.jar
[loader.3] file:/opt/subversion/lib/libsvnjavahl-1.0.0.0.dylib
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/commons-beanutils/commons-beanutils/jars/commons-beanutils-1.7.0.jar
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/sunrsasign.jar
[loader.3] file:/System/Library/Java/Extensions/libmlib_jai.jnilib
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-bsf-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-nio-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/servlet-api-2.4.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/commons-digester/commons-digester/jars/commons-digester-1.8.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-sql-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-xml-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/jsp-api-2.0.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.neo4j/neo4j-cypher-compiler-2.0/jars/neo4j-cypher-compiler-2.0-2.0.4.jar
[loader.3] file:/System/Library/Java/Extensions/mlibwrapper_jai.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.neo4j/neo4j-primitive-collections/jars/neo4j-primitive-collections-2.1.6.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.apache.lucene/lucene-core/jars/lucene-core-3.6.2.jar
[loader.3] file:/Library/Java/Extensions/librxtxSerial.jnilib
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-ant-2.4.0.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.neo4j/neo4j-cypher/jars/neo4j-cypher-2.1.6.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-test-2.4.0.jar
[loader.3] file:/System/Library/Java/Extensions/libJ3DAudio.jnilib
[loader.3] file:/System/Library/Java/Extensions/libAppleScriptEngine.jnilib
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/jfr.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.scala-lang/scala-library/jars/scala-library-2.10.4.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-groovydoc-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-jmx-2.4.0.jar
[loader.3] file:/System/Library/Java/Extensions/libJ3DUtils.jnilib
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.neo4j/neo4j-kernel/jars/neo4j-kernel-2.1.6.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/jansi-1.11.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/openbeans-1.0.jar
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/jsse.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/jline-2.12.jar
[loader.3] file:/System/Library/Java/Extensions/j3dutils.jar
[loader.1] file:/projects/git/regina/listings/chap13/./
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.neo4j/neo4j-lucene-index/jars/neo4j-lucene-index-2.1.6.jar
[loader.1] file:/Users/dierkkoenig/.groovy/grapes/org.hsqldb/hsqldb/jars/hsqldb-2.3.2.jar
[loader.3] file:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar
[loader.3] file:/System/Library/Java/Extensions/jai_codec.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/commons-beanutils/commons-beanutils-core/jars/commons-beanutils-core-1.8.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-console-2.4.0.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/com.tinkerpop.blueprints/blueprints-neo4j2-graph/jars/blueprints-neo4j2-graph-2.6.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/jsr166y-1.7.0.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/com.tinkerpop.blueprints/blueprints-core/jars/blueprints-core-2.6.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-swing-2.4.0.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.neo4j/neo4j-cypher-compiler-2.1/jars/neo4j-cypher-compiler-2.1-2.1.6.jar
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/resources.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/ant-launcher-1.9.4.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-docgenerator-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/commons-logging-1.2.jar
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/rt.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/xstream-1.4.7.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/commons-cli-1.2.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-jsr223-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-testng-2.4.0.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/commons-collections/commons-collections/jars/commons-collections-3.2.1.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/com.tinkerpop/pipes/jars/pipes-2.6.0.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/com.googlecode.concurrentlinkedhashmap/concurrentlinkedhashmap-lru/jars/concurrentlinkedhashmap-lru-1.4.1.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/gpars-1.2.1.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.neo4j/neo4j-cypher-compiler-1.9/jars/neo4j-cypher-compiler-1.9-2.0.4.jar
2015-02-02 01:29:25.353+0000 INFO [org.neo4j]: Library path:
/Users/dierkkoenig/Library/Java/Extensions
/Library/Java/Extensions
/Network/Library/Java/Extensions
/System/Library/Java/Extensions
/usr/lib/java
/projects/git/regina/listings/chap13
2015-02-02 01:29:25.353+0000 INFO [org.neo4j]: System.properties:
sun.boot.library.path = /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib
user.country.format = CH
gopherProxySet = false
path.separator = :
file.encoding.pkg = sun.io
user.country = DE
sun.java.launcher = SUN_STANDARD
sun.os.patch.level = unknown
program.name = groovy
user.dir = /projects/git/regina/listings/chap13
tools.jar = /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/lib/tools.jar
sun.jnu.encoding = UTF-8
script.name = /Users/dierkkoenig/.gvm/groovy/2.4.0/bin/groovy
sun.management.compiler = HotSpot 64-Bit Tiered Compilers
http.nonProxyHosts = local|*.local|169.254/16|*.169.254/16
user.home = /Users/dierkkoenig
user.timezone = Europe/Zurich
file.encoding = UTF-8
user.name = dierkkoenig
sun.java.command = org.codehaus.groovy.tools.GroovyStarter --main groovy.ui.GroovyMain --conf /Users/dierkkoenig/.gvm/groovy/2.4.0/conf/groovy-starter.conf --classpath . ../../test
sun.arch.data.model = 64
user.language = de
awt.toolkit = sun.lwawt.macosx.LWCToolkit
file.separator = /
sun.io.unicode.encoding = UnicodeBig
sun.cpu.endian = little
groovy.starter.conf = /Users/dierkkoenig/.gvm/groovy/2.4.0/conf/groovy-starter.conf
socksNonProxyHosts = local|*.local|169.254/16|*.169.254/16
ftp.nonProxyHosts = local|*.local|169.254/16|*.169.254/16
groovy.home = /Users/dierkkoenig/.gvm/groovy/2.4.0
sun.cpu.isalist =
2015-02-02 01:29:25.353+0000 INFO [org.neo4j]: Network information:
Interface awdl0:
address: fe80:0:0:0:b49d:fbff:fe48:bef5%10
Interface en0:
address: fe80:0:0:0:2acf:e9ff:fe19:ca6d%5
address: 10.0.1.19
Interface lo0:
address: fe80:0:0:0:0:0:0:1%1
address: 0:0:0:0:0:0:0:1
address: 127.0.0.1
2015-02-02 01:29:25.354+0000 INFO [org.neo4j]: --- INITIALIZED diagnostics END ---
2015-02-02 01:29:25.397+0000 INFO [org.neo4j]: [marathon/neostore.relationshiptypestore.db.names] brickCount=0 brickSize=0b mappedMem=0b (storeSize=114b)
2015-02-02 01:29:25.399+0000 INFO [org.neo4j]: [marathon/neostore.relationshiptypestore.db] brickCount=0 brickSize=0b mappedMem=0b (storeSize=10b)
2015-02-02 01:29:25.399+0000 INFO [org.neo4j]: [marathon/neostore.labeltokenstore.db.names] brickCount=0 brickSize=0b mappedMem=0b (storeSize=38b)
2015-02-02 01:29:25.400+0000 INFO [org.neo4j]: [marathon/neostore.labeltokenstore.db] brickCount=0 brickSize=0b mappedMem=0b (storeSize=0b)
2015-02-02 01:29:25.400+0000 INFO [org.neo4j]: [marathon/neostore.propertystore.db.strings] brickCount=0 brickSize=1181696b mappedMem=1181745152b (storeSize=128b)
2015-02-02 01:29:25.400+0000 INFO [org.neo4j]: [marathon/neostore.propertystore.db.index.keys] brickCount=0 brickSize=0b mappedMem=0b (storeSize=266b)
2015-02-02 01:29:25.401+0000 INFO [org.neo4j]: [marathon/neostore.propertystore.db.index] brickCount=0 brickSize=0b mappedMem=0b (storeSize=54b)
2015-02-02 01:29:25.402+0000 INFO [org.neo4j]: [marathon/neostore.propertystore.db.arrays] brickCount=0 brickSize=1339008b mappedMem=1339031552b (storeSize=128b)
2015-02-02 01:29:25.414+0000 INFO [org.neo4j]: [marathon/neostore.propertystore.db] brickCount=0 brickSize=1390392b mappedMem=1390411776b (storeSize=1640b)
2015-02-02 01:29:25.416+0000 INFO [org.neo4j]: [marathon/neostore.relationshipstore.db] brickCount=0 brickSize=1702856b mappedMem=1702887424b (storeSize=680b)
2015-02-02 01:29:25.416+0000 INFO [org.neo4j]: [marathon/neostore.nodestore.db.labels] brickCount=0 brickSize=0b mappedMem=0b (storeSize=68b)
2015-02-02 01:29:25.418+0000 INFO [org.neo4j]: [marathon/neostore.nodestore.db] brickCount=0 brickSize=385875b mappedMem=385875968b (storeSize=300b)
2015-02-02 01:29:25.419+0000 INFO [org.neo4j]: [marathon/neostore.schemastore.db] brickCount=0 brickSize=0b mappedMem=0b (storeSize=64b)
2015-02-02 01:29:25.420+0000 INFO [org.neo4j]: [marathon/neostore.relationshipgroupstore.db] brickCount=0 brickSize=0b mappedMem=0b (storeSize=25b)
2015-02-02 01:29:25.421+0000 INFO [org.neo4j]: [marathon/neostore] brickCount=0 brickSize=0b mappedMem=0b (storeSize=81b)
2015-02-02 01:29:25.559+0000 INFO [org.neo4j]: Opened logical log [marathon/nioneo_logical.log.1] version=2, lastTxId=11 (clean)
2015-02-02 01:29:25.567+0000 INFO [org.neo4j]: TM opening log: marathon/tm_tx_log.1
2015-02-02 01:29:25.574+0000 INFO [org.neo4j]: Kernel health set to OK
2015-02-02 01:29:25.582+0000 INFO [org.neo4j]: Opened logical log [marathon/index/lucene.log.1] version=2, lastTxId=1 (clean)
2015-02-02 01:29:25.586+0000 INFO [org.neo4j]: --- STARTED diagnostics for KernelDiagnostics:Versions START ---
2015-02-02 01:29:25.586+0000 INFO [org.neo4j]: Graph Database: org.neo4j.kernel.EmbeddedGraphDatabase StoreId{creationTime=1422808769411, randomId=1762119504651947014, storeVersion=14406081294923270, upgradeTime=1422808769411, upgradeId=1762119504651947014}
2015-02-02 01:29:25.595+0000 INFO [org.neo4j]: Kernel version: Neo4j - Graph Database Kernel (neo4j-kernel), version: 2.1.6
2015-02-02 01:29:25.595+0000 INFO [org.neo4j]: Neo4j component versions:
2015-02-02 01:29:25.597+0000 INFO [org.neo4j]: Neo4j - Lucene Index (neo4j-lucene-index), version: 2.1.6; revision: 2.1.6:2.1-maint:605/0d7f25fc608f15c54ec1a01f4ba4564ebfb1071a
2015-02-02 01:29:25.597+0000 INFO [org.neo4j]: Neo4j - Cypher Compiler 2.1 (neo4j-cypher-compiler-2.1), version: 2.1.6; revision: 2.1.6:2.1-maint:605/0d7f25fc608f15c54ec1a01f4ba4564ebfb1071a
2015-02-02 01:29:25.597+0000 INFO [org.neo4j]: Neo4j - Graph Database Kernel (neo4j-kernel), version: 2.1.6; revision: 2.1.6:2.1-maint:605/0d7f25fc608f15c54ec1a01f4ba4564ebfb1071a
2015-02-02 01:29:25.597+0000 INFO [org.neo4j]: Neo4j - Cypher (neo4j-cypher), version: 2.1.6; revision: 2.1.6:2.1-maint:605/0d7f25fc608f15c54ec1a01f4ba4564ebfb1071a
2015-02-02 01:29:25.597+0000 INFO [org.neo4j]: Neo4j - Graph DB Monitoring and Management tools (neo4j-management), version: 2.1.6; revision: 2.1.6:2.1-maint:605/0d7f25fc608f15c54ec1a01f4ba4564ebfb1071a
2015-02-02 01:29:25.598+0000 INFO [org.neo4j]: Neo4j - Cypher Compiler 2.0 (neo4j-cypher-compiler-2.0), version: 2.0.4; revision: 2.0.4:2.0-maint:130/4a7d10bc274a5d26a180bbe9df25100e8a694748
2015-02-02 01:29:25.598+0000 INFO [org.neo4j]: Neo4j - Cypher Compiler 1.9 (neo4j-cypher-compiler-1.9), version: 2.0.4; revision: 2.0.4:2.0-maint:130/4a7d10bc274a5d26a180bbe9df25100e8a694748
2015-02-02 01:29:25.598+0000 INFO [org.neo4j]: Neo4j - Cypher Commons (neo4j-cypher-commons), version: 2.1.6; revision: 2.1.6:2.1-maint:605/0d7f25fc608f15c54ec1a01f4ba4564ebfb1071a
2015-02-02 01:29:25.598+0000 INFO [org.neo4j]: --- STARTED diagnostics for KernelDiagnostics:Versions END ---
2015-02-02 01:29:25.600+0000 INFO [org.neo4j]: --- STARTED diagnostics for NEO_STORE_VERSIONS START ---
2015-02-02 01:29:25.600+0000 INFO [org.neo4j]: Store versions:
Store versions:
NeoStore v0.A.3
SchemaStore v0.A.3
NodeStore v0.A.3
RelationshipStore v0.A.3
RelationshipTypeStore v0.A.3
LabelTokenStore v0.A.3
PropertyStore v0.A.3
PropertyIndexStore v0.A.3
StringPropertyStore v0.A.3
ArrayPropertyStore v0.A.3
RelationshipGroupStore v0.A.3
2015-02-02 01:29:25.600+0000 INFO [org.neo4j]: --- STARTED diagnostics for NEO_STORE_VERSIONS END ---
2015-02-02 01:29:25.600+0000 INFO [org.neo4j]: --- STARTED diagnostics for NEO_STORE_ID_USAGE START ---
2015-02-02 01:29:25.600+0000 INFO [org.neo4j]: Id usage:
Id usage:
SchemaStore: used=1 high=0
NodeStore: used=20 high=19
RelationshipStore: used=20 high=19
RelationshipTypeStore: used=2 high=1
LabelTokenStore: used=0 high=-1
PropertyStore: used=40 high=39
PropertyIndexStore: used=6 high=5
StringPropertyStore: used=1 high=0
ArrayPropertyStore: used=1 high=0
RelationshipGroupStore: used=1 high=0
2015-02-02 01:29:25.601+0000 INFO [org.neo4j]: --- STARTED diagnostics for NEO_STORE_ID_USAGE END ---
2015-02-02 01:29:25.601+0000 INFO [org.neo4j]: --- STARTED diagnostics for PERSISTENCE_WINDOW_POOL_STATS START ---
2015-02-02 01:29:25.601+0000 INFO [org.neo4j]: --- STARTED diagnostics for PERSISTENCE_WINDOW_POOL_STATS END ---
2015-02-02 01:29:25.601+0000 INFO [org.neo4j]: --- STARTED diagnostics for KernelDiagnostics:StoreFiles START ---
2015-02-02 01:29:25.602+0000 INFO [org.neo4j]: Disk space on partition (Total / Free / Free %): 499082485760 / 174755573760 / 35
Storage files: (filename : modification date - size)
active_tx_log: 2015-02-01T17:39:29+0100 - 11.00 B
index:
lucene-store.db: 2015-02-02T02:28:48+0100 - 40.00 B
lucene.log.1: 2015-02-02T02:29:25+0100 - 16.00 B
lucene.log.active: 2015-02-02T02:29:25+0100 - 4.00 B
lucene.log.v0: 2015-02-01T17:39:30+0100 - 16.00 B
lucene.log.v1: 2015-02-02T02:28:48+0100 - 16.00 B
- Total: 2015-02-02T02:29:25+0100 - 92.00 B
lock: 2015-02-02T02:29:25+0100 - 0.00 B
messages.log: 2015-02-02T02:29:25+0100 - 71.99 kB
neostore: 2015-02-02T02:29:25+0100 - 81.00 B
neostore.id: 2015-02-02T02:29:25+0100 - 9.00 B
neostore.labeltokenstore.db: 2015-02-02T02:29:25+0100 - 0.00 B
neostore.labeltokenstore.db.id: 2015-02-02T02:29:25+0100 - 9.00 B
neostore.labeltokenstore.db.names: 2015-02-02T02:29:25+0100 - 38.00 B
neostore.labeltokenstore.db.names.id: 2015-02-02T02:29:25+0100 - 9.00 B
neostore.nodestore.db: 2015-02-02T02:29:25+0100 - 300.00 B
neostore.nodestore.db.id: 2015-02-02T02:29:25+0100 - 9.00 B
neostore.nodestore.db.labels: 2015-02-02T02:29:25+0100 - 68.00 B
neostore.nodestore.db.labels.id: 2015-02-02T02:29:25+0100 - 9.00 B
neostore.propertystore.db: 2015-02-02T02:29:25+0100 - 1.60 kB
neostore.propertystore.db.arrays: 2015-02-02T02:29:25+0100 - 128.00 B
neostore.propertystore.db.arrays.id: 2015-02-02T02:29:25+0100 - 9.00 B
neostore.propertystore.db.id: 2015-02-02T02:29:25+0100 - 9.00 B
neostore.propertystore.db.index: 2015-02-02T02:29:25+0100 - 54.00 B
neostore.propertystore.db.index.id: 2015-02-02T02:29:25+0100 - 9.00 B
neostore.propertystore.db.index.keys: 2015-02-02T02:29:25+0100 - 266.00 B
neostore.propertystore.db.index.keys.id: 2015-02-02T02:29:25+0100 - 9.00 B
neostore.propertystore.db.strings: 2015-02-02T02:29:25+0100 - 128.00 B
neostore.propertystore.db.strings.id: 2015-02-02T02:29:25+0100 - 9.00 B
neostore.relationshipgroupstore.db: 2015-02-02T02:29:25+0100 - 25.00 B
neostore.relationshipgroupstore.db.id: 2015-02-02T02:29:25+0100 - 9.00 B
neostore.relationshipstore.db: 2015-02-02T02:29:25+0100 - 680.00 B
neostore.relationshipstore.db.id: 2015-02-02T02:29:25+0100 - 9.00 B
neostore.relationshiptypestore.db: 2015-02-02T02:29:25+0100 - 10.00 B
neostore.relationshiptypestore.db.id: 2015-02-02T02:29:25+0100 - 9.00 B
neostore.relationshiptypestore.db.names: 2015-02-02T02:29:25+0100 - 114.00 B
neostore.relationshiptypestore.db.names.id: 2015-02-02T02:29:25+0100 - 9.00 B
neostore.schemastore.db: 2015-02-02T02:29:25+0100 - 64.00 B
neostore.schemastore.db.id: 2015-02-02T02:29:25+0100 - 9.00 B
nioneo_logical.log.1: 2015-02-02T02:29:25+0100 - 16.00 B
nioneo_logical.log.active: 2015-02-02T02:29:25+0100 - 4.00 B
nioneo_logical.log.v0: 2015-02-01T17:39:30+0100 - 4.52 kB
nioneo_logical.log.v1: 2015-02-02T02:28:48+0100 - 3.34 kB
schema:
label:
lucene:
segments.gen: 2015-02-01T17:39:30+0100 - 20.00 B
segments_1: 2015-02-01T17:39:30+0100 - 32.00 B
write.lock: 2015-02-02T02:29:25+0100 - 0.00 B
- Total: 2015-02-02T02:29:25+0100 - 52.00 B
- Total: 2015-02-01T17:39:29+0100 - 52.00 B
- Total: 2015-02-01T17:39:29+0100 - 52.00 B
store_lock: 2015-02-01T17:39:29+0100 - 0.00 B
tm_tx_log.1: 2015-02-02T02:29:25+0100 - 0.00 B
2015-02-02 01:29:25.609+0000 INFO [org.neo4j]: --- STARTED diagnostics for KernelDiagnostics:StoreFiles END ---
2015-02-02 01:29:25.651+0000 INFO [org.neo4j]: Database is now ready
2015-02-02 01:29:26.798+0000 INFO [org.neo4j]: Shutdown started
2015-02-02 01:29:26.800+0000 INFO [org.neo4j]: Database is now unavailable
2015-02-02 01:29:26.803+0000 INFO [org.neo4j]: Closed log marathon/index/lucene.log
2015-02-02 01:29:26.804+0000 INFO [org.neo4j]: TM shutting down
2015-02-02 01:29:26.809+0000 INFO [org.neo4j]: Closed log marathon/nioneo_logical.log
2015-02-02 01:29:26.811+0000 INFO [org.neo4j]: marathon/neostore.relationshiptypestore.db.names hit=0 miss=4 switches=0 ooe=0
2015-02-02 01:29:26.812+0000 INFO [org.neo4j]: marathon/neostore.relationshiptypestore.db hit=0 miss=2 switches=0 ooe=0
2015-02-02 01:29:26.813+0000 INFO [org.neo4j]: marathon/neostore.labeltokenstore.db.names hit=0 miss=0 switches=0 ooe=0
2015-02-02 01:29:26.813+0000 INFO [org.neo4j]: marathon/neostore.labeltokenstore.db hit=0 miss=0 switches=0 ooe=0
2015-02-02 01:29:26.814+0000 INFO [org.neo4j]: marathon/neostore.propertystore.db.strings hit=0 miss=0 switches=0 ooe=0
2015-02-02 01:29:26.815+0000 INFO [org.neo4j]: marathon/neostore.propertystore.db.index.keys hit=0 miss=12 switches=0 ooe=0
2015-02-02 01:29:26.815+0000 INFO [org.neo4j]: marathon/neostore.propertystore.db.index hit=0 miss=6 switches=0 ooe=0
2015-02-02 01:29:26.816+0000 INFO [org.neo4j]: marathon/neostore.propertystore.db.arrays hit=0 miss=0 switches=0 ooe=0
2015-02-02 01:29:26.817+0000 INFO [org.neo4j]: marathon/neostore.propertystore.db hit=60 miss=0 switches=0 ooe=0
2015-02-02 01:29:26.818+0000 INFO [org.neo4j]: marathon/neostore.relationshipstore.db hit=34 miss=0 switches=0 ooe=0
2015-02-02 01:29:26.818+0000 INFO [org.neo4j]: marathon/neostore.nodestore.db.labels hit=0 miss=0 switches=0 ooe=0
2015-02-02 01:29:26.819+0000 INFO [org.neo4j]: marathon/neostore.nodestore.db hit=60 miss=0 switches=0 ooe=0
2015-02-02 01:29:26.820+0000 INFO [org.neo4j]: marathon/neostore.schemastore.db hit=0 miss=0 switches=0 ooe=0
2015-02-02 01:29:26.821+0000 INFO [org.neo4j]: marathon/neostore.relationshipgroupstore.db hit=0 miss=0 switches=0 ooe=0
2015-02-02 01:29:26.823+0000 INFO [org.neo4j]: marathon/neostore hit=0 miss=18 switches=0 ooe=0
2015-02-02 01:29:26.824+0000 INFO [org.neo4j]: NeoStore closed
2015-02-02 01:29:26.824+0000 INFO [org.neo4j]: --- STOPPING diagnostics START ---
2015-02-02 01:29:26.824+0000 INFO [org.neo4j]: --- STOPPING diagnostics END ---
2015-02-06 00:41:40.694+0000 INFO [org.neo4j]: No locking implementation specified, defaulting to 'community'
2015-02-06 00:41:40.795+0000 INFO [org.neo4j]: --- INITIALIZED diagnostics START ---
2015-02-06 00:41:40.796+0000 INFO [org.neo4j]: Neo4j Kernel properties:
neostore.propertystore.db.mapped_memory=1326M
neostore.nodestore.db.mapped_memory=368M
neostore.relationshipstore.db.mapped_memory=1624M
neostore.propertystore.db.strings.mapped_memory=1127M
store_dir=marathon
neostore.propertystore.db.arrays.mapped_memory=1277M
ephemeral=false
2015-02-06 00:41:40.799+0000 INFO [org.neo4j]: Diagnostics providers:
org.neo4j.kernel.configuration.Config
org.neo4j.kernel.info.DiagnosticsManager
SYSTEM_MEMORY
JAVA_MEMORY
OPERATING_SYSTEM
JAVA_VIRTUAL_MACHINE
CLASSPATH
LIBRARY_PATH
SYSTEM_PROPERTIES
NETWORK
2015-02-06 00:41:40.803+0000 INFO [org.neo4j]: System memory information:
Total Physical memory: 16.00 GB
Free Physical memory: 7.64 GB
Committed virtual memory: 6.81 GB
Total swap space: 2.00 GB
Free swap space: 1.19 GB
2015-02-06 00:41:40.807+0000 INFO [org.neo4j]: JVM memory information:
Free memory: 259.47 MB
Total memory: 310.00 MB
Max memory: 3.56 GB
Garbage Collector: PS Scavenge: [PS Eden Space, PS Survivor Space]
Garbage Collector: PS MarkSweep: [PS Eden Space, PS Survivor Space, PS Old Gen, PS Perm Gen]
Memory Pool: Code Cache (Non-heap memory): committed=3.19 MB, used=3.04 MB, max=48.00 MB, threshold=0.00 B
Memory Pool: PS Eden Space (Heap memory): committed=129.00 MB, used=27.83 MB, max=1.31 GB, threshold=?
Memory Pool: PS Survivor Space (Heap memory): committed=10.50 MB, used=10.48 MB, max=10.50 MB, threshold=?
Memory Pool: PS Old Gen (Heap memory): committed=170.50 MB, used=12.22 MB, max=2.67 GB, threshold=0.00 B
Memory Pool: PS Perm Gen (Non-heap memory): committed=25.50 MB, used=25.15 MB, max=82.00 MB, threshold=0.00 B
2015-02-06 00:41:40.815+0000 INFO [org.neo4j]: Operating system information:
Operating System: Mac OS X; version: 10.10.2; arch: x86_64; cpus: 8
Max number of file descriptors: 10240
Number of open file descriptors: 72
Process id: 5385@Dierk-Konigs-MacBook-Pro.local
Byte order: LITTLE_ENDIAN
Local timezone: Europe/Zurich
2015-02-06 00:41:40.817+0000 INFO [org.neo4j]: JVM information:
VM Name: Java HotSpot(TM) 64-Bit Server VM
VM Vendor: Oracle Corporation
VM Version: 24.51-b03
JIT compiler: HotSpot 64-Bit Tiered Compilers
VM Arguments: [-Dscript.name=/Users/dierkkoenig/.gvm/groovy/2.4.0/bin/groovy, -Dprogram.name=groovy, -Dgroovy.starter.conf=/Users/dierkkoenig/.gvm/groovy/2.4.0/conf/groovy-starter.conf, -Dgroovy.home=/Users/dierkkoenig/.gvm/groovy/2.4.0, -Dtools.jar=/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/lib/tools.jar]
2015-02-06 00:41:40.818+0000 INFO [org.neo4j]: Java classpath:
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/qdox-1.12.1.jar
[loader.3] file:/System/Library/Java/Extensions/dns_sd.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/jcommander-1.47.jar
[loader.2] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/ant-1.9.4.jar
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/jce.jar
[loader.3] file:/Users/dierkkoenig/Library/Java/Extensions/libJNPRAuthKit.jnilib
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/bsf-2.4.0.jar
[loader.3] file:/System/Library/Java/Extensions/MRJToolkit.jar
[loader.3] file:/opt/subversion/lib/libsvnjavahl-1.0.0.0.dylib
[loader.3] file:/System/Library/Java/Extensions/vecmath.jar
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/sunrsasign.jar
[loader.3] file:/System/Library/Java/Extensions/libmlib_jai.jnilib
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-groovysh-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/ant-antlr-1.9.4.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/xmlpull-1.1.3.1.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-bsf-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-nio-2.4.0.jar
[loader.3] file:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/ext/sunec.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/servlet-api-2.4.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-sql-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-xml-2.4.0.jar
[loader.3] file:/System/Library/Java/Extensions/libJ3D.jnilib
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/jsp-api-2.0.jar
[loader.3] file:/System/Library/Java/Extensions/mlibwrapper_jai.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.neo4j/neo4j-primitive-collections/jars/neo4j-primitive-collections-2.1.6.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.apache.lucene/lucene-core/jars/lucene-core-3.6.2.jar
[loader.3] file:/Library/Java/Extensions/librxtxSerial.jnilib
[loader.3] file:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/ext/localedata.jar
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/charsets.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-ant-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-test-2.4.0.jar
[loader.3] file:/System/Library/Java/Extensions/libJ3DAudio.jnilib
[loader.3] file:/System/Library/Java/Extensions/libAppleScriptEngine.jnilib
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/jfr.jar
[loader.3] file:/System/Library/Java/Extensions/j3daudio.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-groovydoc-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-jmx-2.4.0.jar
[loader.3] file:/System/Library/Java/Extensions/libJ3DUtils.jnilib
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.neo4j/neo4j-kernel/jars/neo4j-kernel-2.1.6.jar
[loader.3] file:/System/Library/Java/Extensions/j3dcore.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/jansi-1.11.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/openbeans-1.0.jar
[loader.3] file:/usr/lib/java/libjdns_sd.jnilib
[loader.3] file:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/ant-junit-1.9.4.jar
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/jsse.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/jline-2.12.jar
[loader.3] file:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/ext/zipfs.jar
[loader.3] file:/System/Library/Java/Extensions/j3dutils.jar
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/classes
[loader.3] file:/System/Library/Java/Extensions/jai_core.jar
[loader.1] file:/projects/git/regina/listings/chap13/./
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/ivy-2.4.0.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.neo4j/neo4j-lucene-index/jars/neo4j-lucene-index-2.1.6.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-json-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.groovy/grapes/org.hsqldb/hsqldb/jars/hsqldb-2.3.2.jar
[loader.3] file:/System/Library/Java/Extensions/jai_codec.jar
[loader.3] file:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-console-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-templates-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/jsr166y-1.7.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-swing-2.4.0.jar
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/resources.jar
[loader.3] file:/Library/Java/Extensions/RXTXcomm.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/hamcrest-core-1.3.jar
[loader.1] file:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/lib/tools.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/ant-launcher-1.9.4.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.apache.geronimo.specs/geronimo-jta_1.1_spec/jars/geronimo-jta_1.1_spec-1.1.1.jar
[loader.3] file:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/ext/dnsns.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-docgenerator-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/multiverse-core-0.7.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/commons-logging-1.2.jar
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/rt.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/xstream-1.4.7.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/commons-cli-1.2.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-jsr223-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/junit-4.12.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-testng-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-servlet-2.4.0.jar
[loader.3] file:/System/Library/Java/Extensions/AppleScriptEngine.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/testng-6.8.13.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/gpars-1.2.1.jar
2015-02-06 00:41:40.822+0000 INFO [org.neo4j]: Library path:
/Users/dierkkoenig/Library/Java/Extensions
/Library/Java/Extensions
/Network/Library/Java/Extensions
/System/Library/Java/Extensions
/usr/lib/java
/projects/git/regina/listings/chap13
2015-02-06 00:41:40.822+0000 INFO [org.neo4j]: System.properties:
sun.boot.library.path = /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib
user.country.format = CH
gopherProxySet = false
path.separator = :
file.encoding.pkg = sun.io
user.country = DE
sun.java.launcher = SUN_STANDARD
sun.os.patch.level = unknown
program.name = groovy
user.dir = /projects/git/regina/listings/chap13
tools.jar = /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/lib/tools.jar
sun.jnu.encoding = UTF-8
script.name = /Users/dierkkoenig/.gvm/groovy/2.4.0/bin/groovy
sun.management.compiler = HotSpot 64-Bit Tiered Compilers
http.nonProxyHosts = local|*.local|169.254/16|*.169.254/16
user.home = /Users/dierkkoenig
user.timezone = Europe/Zurich
file.encoding = UTF-8
user.name = dierkkoenig
sun.java.command = org.codehaus.groovy.tools.GroovyStarter --main groovy.ui.GroovyMain --conf /Users/dierkkoenig/.gvm/groovy/2.4.0/conf/groovy-starter.conf --classpath . ../../test
sun.arch.data.model = 64
user.language = de
awt.toolkit = sun.lwawt.macosx.LWCToolkit
file.separator = /
sun.io.unicode.encoding = UnicodeBig
sun.cpu.endian = little
groovy.starter.conf = /Users/dierkkoenig/.gvm/groovy/2.4.0/conf/groovy-starter.conf
socksNonProxyHosts = local|*.local|169.254/16|*.169.254/16
ftp.nonProxyHosts = local|*.local|169.254/16|*.169.254/16
groovy.home = /Users/dierkkoenig/.gvm/groovy/2.4.0
sun.cpu.isalist =
2015-02-06 00:41:40.822+0000 INFO [org.neo4j]: Network information:
Interface awdl0:
address: fe80:0:0:0:10c4:ecff:fed9:b394%8
Interface en0:
address: fe80:0:0:0:2acf:e9ff:fe19:ca6d%4
address: 10.0.1.19
Interface lo0:
address: fe80:0:0:0:0:0:0:1%1
address: 0:0:0:0:0:0:0:1
address: 127.0.0.1
2015-02-06 00:41:40.824+0000 INFO [org.neo4j]: --- INITIALIZED diagnostics END ---
2015-02-06 00:41:40.900+0000 INFO [org.neo4j]: [marathon/neostore.relationshiptypestore.db.names] brickCount=0 brickSize=0b mappedMem=0b (storeSize=114b)
2015-02-06 00:41:40.903+0000 INFO [org.neo4j]: [marathon/neostore.relationshiptypestore.db] brickCount=0 brickSize=0b mappedMem=0b (storeSize=10b)
2015-02-06 00:41:40.905+0000 INFO [org.neo4j]: [marathon/neostore.labeltokenstore.db.names] brickCount=0 brickSize=0b mappedMem=0b (storeSize=38b)
2015-02-06 00:41:40.908+0000 INFO [org.neo4j]: [marathon/neostore.labeltokenstore.db] brickCount=0 brickSize=0b mappedMem=0b (storeSize=0b)
2015-02-06 00:41:40.910+0000 INFO [org.neo4j]: [marathon/neostore.propertystore.db.strings] brickCount=0 brickSize=1181696b mappedMem=1181745152b (storeSize=128b)
2015-02-06 00:41:40.912+0000 INFO [org.neo4j]: [marathon/neostore.propertystore.db.index.keys] brickCount=0 brickSize=0b mappedMem=0b (storeSize=266b)
2015-02-06 00:41:40.914+0000 INFO [org.neo4j]: [marathon/neostore.propertystore.db.index] brickCount=0 brickSize=0b mappedMem=0b (storeSize=54b)
2015-02-06 00:41:40.916+0000 INFO [org.neo4j]: [marathon/neostore.propertystore.db.arrays] brickCount=0 brickSize=1339008b mappedMem=1339031552b (storeSize=128b)
2015-02-06 00:41:40.934+0000 INFO [org.neo4j]: [marathon/neostore.propertystore.db] brickCount=0 brickSize=1390392b mappedMem=1390411776b (storeSize=2460b)
2015-02-06 00:41:40.939+0000 INFO [org.neo4j]: [marathon/neostore.relationshipstore.db] brickCount=0 brickSize=1702856b mappedMem=1702887424b (storeSize=1020b)
2015-02-06 00:41:40.942+0000 INFO [org.neo4j]: [marathon/neostore.nodestore.db.labels] brickCount=0 brickSize=0b mappedMem=0b (storeSize=68b)
2015-02-06 00:41:40.945+0000 INFO [org.neo4j]: [marathon/neostore.nodestore.db] brickCount=0 brickSize=385875b mappedMem=385875968b (storeSize=450b)
2015-02-06 00:41:40.948+0000 INFO [org.neo4j]: [marathon/neostore.schemastore.db] brickCount=0 brickSize=0b mappedMem=0b (storeSize=64b)
2015-02-06 00:41:40.952+0000 INFO [org.neo4j]: [marathon/neostore.relationshipgroupstore.db] brickCount=0 brickSize=0b mappedMem=0b (storeSize=25b)
2015-02-06 00:41:40.954+0000 INFO [org.neo4j]: [marathon/neostore] brickCount=0 brickSize=0b mappedMem=0b (storeSize=81b)
2015-02-06 00:41:41.222+0000 INFO [org.neo4j]: Opened logical log [marathon/nioneo_logical.log.1] version=3, lastTxId=12 (clean)
2015-02-06 00:41:41.227+0000 INFO [org.neo4j]: TM opening log: marathon/tm_tx_log.1
2015-02-06 00:41:41.234+0000 INFO [org.neo4j]: Kernel health set to OK
2015-02-06 00:41:41.245+0000 INFO [org.neo4j]: Opened logical log [marathon/index/lucene.log.1] version=3, lastTxId=1 (clean)
2015-02-06 00:41:41.250+0000 INFO [org.neo4j]: --- STARTED diagnostics for KernelDiagnostics:Versions START ---
2015-02-06 00:41:41.250+0000 INFO [org.neo4j]: Graph Database: org.neo4j.kernel.EmbeddedGraphDatabase StoreId{creationTime=1422808769411, randomId=1762119504651947014, storeVersion=14406081294923270, upgradeTime=1422808769411, upgradeId=1762119504651947014}
2015-02-06 00:41:41.253+0000 INFO [org.neo4j]: Kernel version: Neo4j - Graph Database Kernel (neo4j-kernel), version: 2.1.6
2015-02-06 00:41:41.253+0000 INFO [org.neo4j]: Neo4j component versions:
2015-02-06 00:41:41.254+0000 INFO [org.neo4j]: Neo4j - Lucene Index (neo4j-lucene-index), version: 2.1.6; revision: 2.1.6:2.1-maint:605/0d7f25fc608f15c54ec1a01f4ba4564ebfb1071a
2015-02-06 00:41:41.254+0000 INFO [org.neo4j]: Neo4j - Graph Database Kernel (neo4j-kernel), version: 2.1.6; revision: 2.1.6:2.1-maint:605/0d7f25fc608f15c54ec1a01f4ba4564ebfb1071a
2015-02-06 00:41:41.254+0000 INFO [org.neo4j]: --- STARTED diagnostics for KernelDiagnostics:Versions END ---
2015-02-06 00:41:41.257+0000 INFO [org.neo4j]: --- STARTED diagnostics for NEO_STORE_VERSIONS START ---
2015-02-06 00:41:41.257+0000 INFO [org.neo4j]: Store versions:
Store versions:
NeoStore v0.A.3
SchemaStore v0.A.3
NodeStore v0.A.3
RelationshipStore v0.A.3
RelationshipTypeStore v0.A.3
LabelTokenStore v0.A.3
PropertyStore v0.A.3
PropertyIndexStore v0.A.3
StringPropertyStore v0.A.3
ArrayPropertyStore v0.A.3
RelationshipGroupStore v0.A.3
2015-02-06 00:41:41.258+0000 INFO [org.neo4j]: --- STARTED diagnostics for NEO_STORE_VERSIONS END ---
2015-02-06 00:41:41.258+0000 INFO [org.neo4j]: --- STARTED diagnostics for NEO_STORE_ID_USAGE START ---
2015-02-06 00:41:41.258+0000 INFO [org.neo4j]: Id usage:
Id usage:
SchemaStore: used=1 high=0
NodeStore: used=30 high=29
RelationshipStore: used=30 high=29
RelationshipTypeStore: used=2 high=1
LabelTokenStore: used=0 high=-1
PropertyStore: used=60 high=59
PropertyIndexStore: used=6 high=5
StringPropertyStore: used=1 high=0
ArrayPropertyStore: used=1 high=0
RelationshipGroupStore: used=1 high=0
2015-02-06 00:41:41.259+0000 INFO [org.neo4j]: --- STARTED diagnostics for NEO_STORE_ID_USAGE END ---
2015-02-06 00:41:41.259+0000 INFO [org.neo4j]: --- STARTED diagnostics for PERSISTENCE_WINDOW_POOL_STATS START ---
2015-02-06 00:41:41.259+0000 INFO [org.neo4j]: --- STARTED diagnostics for PERSISTENCE_WINDOW_POOL_STATS END ---
2015-02-06 00:41:41.260+0000 INFO [org.neo4j]: --- STARTED diagnostics for KernelDiagnostics:StoreFiles START ---
2015-02-06 00:41:41.260+0000 INFO [org.neo4j]: Disk space on partition (Total / Free / Free %): 499082485760 / 174680444928 / 35
Storage files: (filename : modification date - size)
active_tx_log: 2015-02-01T17:39:29+0100 - 11.00 B
index:
lucene-store.db: 2015-02-02T02:29:26+0100 - 40.00 B
lucene.log.1: 2015-02-06T01:41:41+0100 - 16.00 B
lucene.log.active: 2015-02-06T01:41:41+0100 - 4.00 B
lucene.log.v0: 2015-02-01T17:39:30+0100 - 16.00 B
lucene.log.v1: 2015-02-02T02:28:48+0100 - 16.00 B
lucene.log.v2: 2015-02-02T02:29:26+0100 - 16.00 B
- Total: 2015-02-06T01:41:41+0100 - 108.00 B
lock: 2015-02-06T01:41:40+0100 - 0.00 B
messages.log: 2015-02-06T01:41:41+0100 - 95.23 kB
neostore: 2015-02-06T01:41:40+0100 - 81.00 B
neostore.id: 2015-02-06T01:41:40+0100 - 9.00 B
neostore.labeltokenstore.db: 2015-02-06T01:41:40+0100 - 0.00 B
neostore.labeltokenstore.db.id: 2015-02-06T01:41:40+0100 - 9.00 B
neostore.labeltokenstore.db.names: 2015-02-06T01:41:40+0100 - 38.00 B
neostore.labeltokenstore.db.names.id: 2015-02-06T01:41:40+0100 - 9.00 B
neostore.nodestore.db: 2015-02-06T01:41:40+0100 - 450.00 B
neostore.nodestore.db.id: 2015-02-06T01:41:40+0100 - 9.00 B
neostore.nodestore.db.labels: 2015-02-06T01:41:40+0100 - 68.00 B
neostore.nodestore.db.labels.id: 2015-02-06T01:41:40+0100 - 9.00 B
neostore.propertystore.db: 2015-02-06T01:41:40+0100 - 2.40 kB
neostore.propertystore.db.arrays: 2015-02-06T01:41:40+0100 - 128.00 B
neostore.propertystore.db.arrays.id: 2015-02-06T01:41:40+0100 - 9.00 B
neostore.propertystore.db.id: 2015-02-06T01:41:40+0100 - 9.00 B
neostore.propertystore.db.index: 2015-02-06T01:41:40+0100 - 54.00 B
neostore.propertystore.db.index.id: 2015-02-06T01:41:40+0100 - 9.00 B
neostore.propertystore.db.index.keys: 2015-02-06T01:41:40+0100 - 266.00 B
neostore.propertystore.db.index.keys.id: 2015-02-06T01:41:40+0100 - 9.00 B
neostore.propertystore.db.strings: 2015-02-06T01:41:40+0100 - 128.00 B
neostore.propertystore.db.strings.id: 2015-02-06T01:41:40+0100 - 9.00 B
neostore.relationshipgroupstore.db: 2015-02-06T01:41:40+0100 - 25.00 B
neostore.relationshipgroupstore.db.id: 2015-02-06T01:41:40+0100 - 9.00 B
neostore.relationshipstore.db: 2015-02-06T01:41:40+0100 - 1020.00 B
neostore.relationshipstore.db.id: 2015-02-06T01:41:40+0100 - 9.00 B
neostore.relationshiptypestore.db: 2015-02-06T01:41:40+0100 - 10.00 B
neostore.relationshiptypestore.db.id: 2015-02-06T01:41:40+0100 - 9.00 B
neostore.relationshiptypestore.db.names: 2015-02-06T01:41:40+0100 - 114.00 B
neostore.relationshiptypestore.db.names.id: 2015-02-06T01:41:40+0100 - 9.00 B
neostore.schemastore.db: 2015-02-06T01:41:40+0100 - 64.00 B
neostore.schemastore.db.id: 2015-02-06T01:41:40+0100 - 9.00 B
nioneo_logical.log.1: 2015-02-06T01:41:41+0100 - 16.00 B
nioneo_logical.log.active: 2015-02-06T01:41:41+0100 - 4.00 B
nioneo_logical.log.v0: 2015-02-01T17:39:30+0100 - 4.52 kB
nioneo_logical.log.v1: 2015-02-02T02:28:48+0100 - 3.34 kB
nioneo_logical.log.v2: 2015-02-02T02:29:26+0100 - 3.34 kB
schema:
label:
lucene:
segments.gen: 2015-02-01T17:39:30+0100 - 20.00 B
segments_1: 2015-02-01T17:39:30+0100 - 32.00 B
write.lock: 2015-02-06T01:41:41+0100 - 0.00 B
- Total: 2015-02-06T01:41:41+0100 - 52.00 B
- Total: 2015-02-01T17:39:29+0100 - 52.00 B
- Total: 2015-02-01T17:39:29+0100 - 52.00 B
store_lock: 2015-02-01T17:39:29+0100 - 0.00 B
tm_tx_log.1: 2015-02-06T01:41:41+0100 - 0.00 B
2015-02-06 00:41:41.270+0000 INFO [org.neo4j]: --- STARTED diagnostics for KernelDiagnostics:StoreFiles END ---
2015-02-06 00:41:41.317+0000 INFO [org.neo4j]: Database is now ready
2015-02-06 00:41:41.545+0000 INFO [org.neo4j]: Shutdown started
2015-02-06 00:41:41.546+0000 INFO [org.neo4j]: Database is now unavailable
2015-02-06 00:41:41.550+0000 INFO [org.neo4j]: Closed log marathon/index/lucene.log
2015-02-06 00:41:41.550+0000 INFO [org.neo4j]: TM shutting down
2015-02-06 00:41:41.557+0000 INFO [org.neo4j]: Closed log marathon/nioneo_logical.log
2015-02-06 00:41:41.558+0000 INFO [org.neo4j]: marathon/neostore.relationshiptypestore.db.names hit=0 miss=4 switches=0 ooe=0
2015-02-06 00:41:41.559+0000 INFO [org.neo4j]: marathon/neostore.relationshiptypestore.db hit=0 miss=2 switches=0 ooe=0
2015-02-06 00:41:41.560+0000 INFO [org.neo4j]: marathon/neostore.labeltokenstore.db.names hit=0 miss=0 switches=0 ooe=0
2015-02-06 00:41:41.560+0000 INFO [org.neo4j]: marathon/neostore.labeltokenstore.db hit=0 miss=0 switches=0 ooe=0
2015-02-06 00:41:41.561+0000 INFO [org.neo4j]: marathon/neostore.propertystore.db.strings hit=0 miss=0 switches=0 ooe=0
2015-02-06 00:41:41.562+0000 INFO [org.neo4j]: marathon/neostore.propertystore.db.index.keys hit=0 miss=12 switches=0 ooe=0
2015-02-06 00:41:41.562+0000 INFO [org.neo4j]: marathon/neostore.propertystore.db.index hit=0 miss=6 switches=0 ooe=0
2015-02-06 00:41:41.563+0000 INFO [org.neo4j]: marathon/neostore.propertystore.db.arrays hit=0 miss=0 switches=0 ooe=0
2015-02-06 00:41:41.564+0000 INFO [org.neo4j]: marathon/neostore.propertystore.db hit=20 miss=0 switches=0 ooe=0
2015-02-06 00:41:41.565+0000 INFO [org.neo4j]: marathon/neostore.relationshipstore.db hit=10 miss=0 switches=0 ooe=0
2015-02-06 00:41:41.565+0000 INFO [org.neo4j]: marathon/neostore.nodestore.db.labels hit=0 miss=0 switches=0 ooe=0
2015-02-06 00:41:41.566+0000 INFO [org.neo4j]: marathon/neostore.nodestore.db hit=10 miss=0 switches=0 ooe=0
2015-02-06 00:41:41.567+0000 INFO [org.neo4j]: marathon/neostore.schemastore.db hit=0 miss=0 switches=0 ooe=0
2015-02-06 00:41:41.568+0000 INFO [org.neo4j]: marathon/neostore.relationshipgroupstore.db hit=0 miss=0 switches=0 ooe=0
2015-02-06 00:41:41.569+0000 INFO [org.neo4j]: marathon/neostore hit=0 miss=18 switches=0 ooe=0
2015-02-06 00:41:41.570+0000 INFO [org.neo4j]: NeoStore closed
2015-02-06 00:41:41.570+0000 INFO [org.neo4j]: --- STOPPING diagnostics START ---
2015-02-06 00:41:41.570+0000 INFO [org.neo4j]: --- STOPPING diagnostics END ---
2015-02-06 00:41:42.646+0000 INFO [org.neo4j]: No locking implementation specified, defaulting to 'community'
2015-02-06 00:41:42.710+0000 INFO [org.neo4j]: --- INITIALIZED diagnostics START ---
2015-02-06 00:41:42.712+0000 INFO [org.neo4j]: Neo4j Kernel properties:
neostore.propertystore.db.mapped_memory=1326M
neostore.nodestore.db.mapped_memory=368M
neostore.relationshipstore.db.mapped_memory=1624M
neostore.propertystore.db.strings.mapped_memory=1127M
store_dir=marathon
neostore.propertystore.db.arrays.mapped_memory=1277M
ephemeral=false
2015-02-06 00:41:42.714+0000 INFO [org.neo4j]: Diagnostics providers:
org.neo4j.kernel.configuration.Config
org.neo4j.kernel.info.DiagnosticsManager
SYSTEM_MEMORY
JAVA_MEMORY
OPERATING_SYSTEM
JAVA_VIRTUAL_MACHINE
CLASSPATH
LIBRARY_PATH
SYSTEM_PROPERTIES
NETWORK
2015-02-06 00:41:42.714+0000 INFO [org.neo4j]: System memory information:
Total Physical memory: 16.00 GB
Free Physical memory: 7.56 GB
Committed virtual memory: 6.81 GB
Total swap space: 2.00 GB
Free swap space: 1.19 GB
2015-02-06 00:41:42.715+0000 INFO [org.neo4j]: JVM memory information:
Free memory: 172.99 MB
Total memory: 310.00 MB
Max memory: 3.56 GB
Garbage Collector: PS Scavenge: [PS Eden Space, PS Survivor Space]
Garbage Collector: PS MarkSweep: [PS Eden Space, PS Survivor Space, PS Old Gen, PS Perm Gen]
Memory Pool: Code Cache (Non-heap memory): committed=4.06 MB, used=4.00 MB, max=48.00 MB, threshold=0.00 B
Memory Pool: PS Eden Space (Heap memory): committed=129.00 MB, used=104.62 MB, max=1.30 GB, threshold=?
Memory Pool: PS Survivor Space (Heap memory): committed=10.50 MB, used=10.47 MB, max=10.50 MB, threshold=?
Memory Pool: PS Old Gen (Heap memory): committed=170.50 MB, used=21.92 MB, max=2.67 GB, threshold=0.00 B
Memory Pool: PS Perm Gen (Non-heap memory): committed=33.50 MB, used=33.45 MB, max=82.00 MB, threshold=0.00 B
2015-02-06 00:41:42.717+0000 INFO [org.neo4j]: Operating system information:
Operating System: Mac OS X; version: 10.10.2; arch: x86_64; cpus: 8
Max number of file descriptors: 10240
Number of open file descriptors: 95
Process id: 5385@Dierk-Konigs-MacBook-Pro.local
Byte order: LITTLE_ENDIAN
Local timezone: Europe/Zurich
2015-02-06 00:41:42.718+0000 INFO [org.neo4j]: JVM information:
VM Name: Java HotSpot(TM) 64-Bit Server VM
VM Vendor: Oracle Corporation
VM Version: 24.51-b03
JIT compiler: HotSpot 64-Bit Tiered Compilers
VM Arguments: [-Dscript.name=/Users/dierkkoenig/.gvm/groovy/2.4.0/bin/groovy, -Dprogram.name=groovy, -Dgroovy.starter.conf=/Users/dierkkoenig/.gvm/groovy/2.4.0/conf/groovy-starter.conf, -Dgroovy.home=/Users/dierkkoenig/.gvm/groovy/2.4.0, -Dtools.jar=/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/lib/tools.jar]
2015-02-06 00:41:42.718+0000 INFO [org.neo4j]: Java classpath:
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/qdox-1.12.1.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.parboiled/parboiled-scala_2.10/jars/parboiled-scala_2.10-1.1.6.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/jcommander-1.47.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/bsf-2.4.0.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/commons-configuration/commons-configuration/jars/commons-configuration-1.6.jar
[loader.3] file:/Users/dierkkoenig/Library/Java/Extensions/libJNPRAuthKit.jnilib
[loader.3] file:/System/Library/Java/Extensions/vecmath.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-groovysh-2.4.0.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/commons-logging/commons-logging/jars/commons-logging-1.1.1.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/ant-antlr-1.9.4.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/xmlpull-1.1.3.1.jar
[loader.3] file:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/ext/sunec.jar
[loader.3] file:/System/Library/Java/Extensions/libJ3D.jnilib
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/commons-lang/commons-lang/jars/commons-lang-2.4.jar
[loader.3] file:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/ext/localedata.jar
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/charsets.jar
[loader.3] file:/System/Library/Java/Extensions/j3daudio.jar
[loader.3] file:/System/Library/Java/Extensions/j3dcore.jar
[loader.3] file:/usr/lib/java/libjdns_sd.jnilib
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/ant-junit-1.9.4.jar
[loader.3] file:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.neo4j/neo4j-management/jars/neo4j-management-2.1.6.jar
[loader.3] file:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/ext/zipfs.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/com.tinkerpop.gremlin/gremlin-groovy/jars/gremlin-groovy-2.6.0.jar
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/classes
[loader.3] file:/System/Library/Java/Extensions/jai_core.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/ivy-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-json-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-templates-2.4.0.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/com.tinkerpop.gremlin/gremlin-java/jars/gremlin-java-2.6.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/hamcrest-core-1.3.jar
[loader.3] file:/Library/Java/Extensions/RXTXcomm.jar
[loader.1] file:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/lib/tools.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.apache.geronimo.specs/geronimo-jta_1.1_spec/jars/geronimo-jta_1.1_spec-1.1.1.jar
[loader.3] file:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/ext/dnsns.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/multiverse-core-0.7.0.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.neo4j/neo4j-cypher-commons/jars/neo4j-cypher-commons-2.1.6.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/junit-4.12.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-servlet-2.4.0.jar
[loader.3] file:/System/Library/Java/Extensions/AppleScriptEngine.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/testng-6.8.13.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.parboiled/parboiled-core/jars/parboiled-core-1.1.6.jar
[loader.3] file:/System/Library/Java/Extensions/dns_sd.jar
[loader.2] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/ant-1.9.4.jar
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/jce.jar
[loader.3] file:/System/Library/Java/Extensions/MRJToolkit.jar
[loader.3] file:/opt/subversion/lib/libsvnjavahl-1.0.0.0.dylib
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/commons-beanutils/commons-beanutils/jars/commons-beanutils-1.7.0.jar
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/sunrsasign.jar
[loader.3] file:/System/Library/Java/Extensions/libmlib_jai.jnilib
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-bsf-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-nio-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/servlet-api-2.4.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/commons-digester/commons-digester/jars/commons-digester-1.8.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-sql-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-xml-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/jsp-api-2.0.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.neo4j/neo4j-cypher-compiler-2.0/jars/neo4j-cypher-compiler-2.0-2.0.4.jar
[loader.3] file:/System/Library/Java/Extensions/mlibwrapper_jai.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.neo4j/neo4j-primitive-collections/jars/neo4j-primitive-collections-2.1.6.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.apache.lucene/lucene-core/jars/lucene-core-3.6.2.jar
[loader.3] file:/Library/Java/Extensions/librxtxSerial.jnilib
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-ant-2.4.0.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.neo4j/neo4j-cypher/jars/neo4j-cypher-2.1.6.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-test-2.4.0.jar
[loader.3] file:/System/Library/Java/Extensions/libJ3DAudio.jnilib
[loader.3] file:/System/Library/Java/Extensions/libAppleScriptEngine.jnilib
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/jfr.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.scala-lang/scala-library/jars/scala-library-2.10.4.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-groovydoc-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-jmx-2.4.0.jar
[loader.3] file:/System/Library/Java/Extensions/libJ3DUtils.jnilib
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.neo4j/neo4j-kernel/jars/neo4j-kernel-2.1.6.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/jansi-1.11.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/openbeans-1.0.jar
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/jsse.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/jline-2.12.jar
[loader.3] file:/System/Library/Java/Extensions/j3dutils.jar
[loader.1] file:/projects/git/regina/listings/chap13/./
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.neo4j/neo4j-lucene-index/jars/neo4j-lucene-index-2.1.6.jar
[loader.1] file:/Users/dierkkoenig/.groovy/grapes/org.hsqldb/hsqldb/jars/hsqldb-2.3.2.jar
[loader.3] file:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar
[loader.3] file:/System/Library/Java/Extensions/jai_codec.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/commons-beanutils/commons-beanutils-core/jars/commons-beanutils-core-1.8.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-console-2.4.0.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/com.tinkerpop.blueprints/blueprints-neo4j2-graph/jars/blueprints-neo4j2-graph-2.6.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/jsr166y-1.7.0.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/com.tinkerpop.blueprints/blueprints-core/jars/blueprints-core-2.6.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-swing-2.4.0.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.neo4j/neo4j-cypher-compiler-2.1/jars/neo4j-cypher-compiler-2.1-2.1.6.jar
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/resources.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/ant-launcher-1.9.4.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-docgenerator-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/commons-logging-1.2.jar
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/rt.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/xstream-1.4.7.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/commons-cli-1.2.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-jsr223-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-testng-2.4.0.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/commons-collections/commons-collections/jars/commons-collections-3.2.1.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/com.tinkerpop/pipes/jars/pipes-2.6.0.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/com.googlecode.concurrentlinkedhashmap/concurrentlinkedhashmap-lru/jars/concurrentlinkedhashmap-lru-1.4.1.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/gpars-1.2.1.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.neo4j/neo4j-cypher-compiler-1.9/jars/neo4j-cypher-compiler-1.9-2.0.4.jar
2015-02-06 00:41:42.722+0000 INFO [org.neo4j]: Library path:
/Users/dierkkoenig/Library/Java/Extensions
/Library/Java/Extensions
/Network/Library/Java/Extensions
/System/Library/Java/Extensions
/usr/lib/java
/projects/git/regina/listings/chap13
2015-02-06 00:41:42.722+0000 INFO [org.neo4j]: System.properties:
sun.boot.library.path = /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib
user.country.format = CH
gopherProxySet = false
path.separator = :
file.encoding.pkg = sun.io
user.country = DE
sun.java.launcher = SUN_STANDARD
sun.os.patch.level = unknown
program.name = groovy
user.dir = /projects/git/regina/listings/chap13
tools.jar = /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/lib/tools.jar
sun.jnu.encoding = UTF-8
script.name = /Users/dierkkoenig/.gvm/groovy/2.4.0/bin/groovy
sun.management.compiler = HotSpot 64-Bit Tiered Compilers
http.nonProxyHosts = local|*.local|169.254/16|*.169.254/16
user.home = /Users/dierkkoenig
user.timezone = Europe/Zurich
file.encoding = UTF-8
user.name = dierkkoenig
sun.java.command = org.codehaus.groovy.tools.GroovyStarter --main groovy.ui.GroovyMain --conf /Users/dierkkoenig/.gvm/groovy/2.4.0/conf/groovy-starter.conf --classpath . ../../test
sun.arch.data.model = 64
user.language = de
awt.toolkit = sun.lwawt.macosx.LWCToolkit
file.separator = /
sun.io.unicode.encoding = UnicodeBig
sun.cpu.endian = little
groovy.starter.conf = /Users/dierkkoenig/.gvm/groovy/2.4.0/conf/groovy-starter.conf
socksNonProxyHosts = local|*.local|169.254/16|*.169.254/16
ftp.nonProxyHosts = local|*.local|169.254/16|*.169.254/16
groovy.home = /Users/dierkkoenig/.gvm/groovy/2.4.0
sun.cpu.isalist =
2015-02-06 00:41:42.723+0000 INFO [org.neo4j]: Network information:
Interface awdl0:
address: fe80:0:0:0:10c4:ecff:fed9:b394%8
Interface en0:
address: fe80:0:0:0:2acf:e9ff:fe19:ca6d%4
address: 10.0.1.19
Interface lo0:
address: fe80:0:0:0:0:0:0:1%1
address: 0:0:0:0:0:0:0:1
address: 127.0.0.1
2015-02-06 00:41:42.723+0000 INFO [org.neo4j]: --- INITIALIZED diagnostics END ---
2015-02-06 00:41:42.767+0000 INFO [org.neo4j]: [marathon/neostore.relationshiptypestore.db.names] brickCount=0 brickSize=0b mappedMem=0b (storeSize=114b)
2015-02-06 00:41:42.768+0000 INFO [org.neo4j]: [marathon/neostore.relationshiptypestore.db] brickCount=0 brickSize=0b mappedMem=0b (storeSize=10b)
2015-02-06 00:41:42.769+0000 INFO [org.neo4j]: [marathon/neostore.labeltokenstore.db.names] brickCount=0 brickSize=0b mappedMem=0b (storeSize=38b)
2015-02-06 00:41:42.769+0000 INFO [org.neo4j]: [marathon/neostore.labeltokenstore.db] brickCount=0 brickSize=0b mappedMem=0b (storeSize=0b)
2015-02-06 00:41:42.770+0000 INFO [org.neo4j]: [marathon/neostore.propertystore.db.strings] brickCount=0 brickSize=1181696b mappedMem=1181745152b (storeSize=128b)
2015-02-06 00:41:42.770+0000 INFO [org.neo4j]: [marathon/neostore.propertystore.db.index.keys] brickCount=0 brickSize=0b mappedMem=0b (storeSize=266b)
2015-02-06 00:41:42.770+0000 INFO [org.neo4j]: [marathon/neostore.propertystore.db.index] brickCount=0 brickSize=0b mappedMem=0b (storeSize=54b)
2015-02-06 00:41:42.771+0000 INFO [org.neo4j]: [marathon/neostore.propertystore.db.arrays] brickCount=0 brickSize=1339008b mappedMem=1339031552b (storeSize=128b)
2015-02-06 00:41:42.788+0000 INFO [org.neo4j]: [marathon/neostore.propertystore.db] brickCount=0 brickSize=1390392b mappedMem=1390411776b (storeSize=3280b)
2015-02-06 00:41:42.791+0000 INFO [org.neo4j]: [marathon/neostore.relationshipstore.db] brickCount=0 brickSize=1702856b mappedMem=1702887424b (storeSize=1360b)
2015-02-06 00:41:42.791+0000 INFO [org.neo4j]: [marathon/neostore.nodestore.db.labels] brickCount=0 brickSize=0b mappedMem=0b (storeSize=68b)
2015-02-06 00:41:42.793+0000 INFO [org.neo4j]: [marathon/neostore.nodestore.db] brickCount=0 brickSize=385875b mappedMem=385875968b (storeSize=600b)
2015-02-06 00:41:42.794+0000 INFO [org.neo4j]: [marathon/neostore.schemastore.db] brickCount=0 brickSize=0b mappedMem=0b (storeSize=64b)
2015-02-06 00:41:42.795+0000 INFO [org.neo4j]: [marathon/neostore.relationshipgroupstore.db] brickCount=0 brickSize=0b mappedMem=0b (storeSize=25b)
2015-02-06 00:41:42.796+0000 INFO [org.neo4j]: [marathon/neostore] brickCount=0 brickSize=0b mappedMem=0b (storeSize=81b)
2015-02-06 00:41:42.971+0000 INFO [org.neo4j]: Opened logical log [marathon/nioneo_logical.log.1] version=4, lastTxId=13 (clean)
2015-02-06 00:41:42.976+0000 INFO [org.neo4j]: TM opening log: marathon/tm_tx_log.1
2015-02-06 00:41:42.980+0000 INFO [org.neo4j]: Kernel health set to OK
2015-02-06 00:41:42.988+0000 INFO [org.neo4j]: Opened logical log [marathon/index/lucene.log.1] version=4, lastTxId=1 (clean)
2015-02-06 00:41:42.991+0000 INFO [org.neo4j]: --- STARTED diagnostics for KernelDiagnostics:Versions START ---
2015-02-06 00:41:42.991+0000 INFO [org.neo4j]: Graph Database: org.neo4j.kernel.EmbeddedGraphDatabase StoreId{creationTime=1422808769411, randomId=1762119504651947014, storeVersion=14406081294923270, upgradeTime=1422808769411, upgradeId=1762119504651947014}
2015-02-06 00:41:43.007+0000 INFO [org.neo4j]: Kernel version: Neo4j - Graph Database Kernel (neo4j-kernel), version: 2.1.6
2015-02-06 00:41:43.007+0000 INFO [org.neo4j]: Neo4j component versions:
2015-02-06 00:41:43.010+0000 INFO [org.neo4j]: Neo4j - Lucene Index (neo4j-lucene-index), version: 2.1.6; revision: 2.1.6:2.1-maint:605/0d7f25fc608f15c54ec1a01f4ba4564ebfb1071a
2015-02-06 00:41:43.010+0000 INFO [org.neo4j]: Neo4j - Cypher Compiler 2.1 (neo4j-cypher-compiler-2.1), version: 2.1.6; revision: 2.1.6:2.1-maint:605/0d7f25fc608f15c54ec1a01f4ba4564ebfb1071a
2015-02-06 00:41:43.010+0000 INFO [org.neo4j]: Neo4j - Graph Database Kernel (neo4j-kernel), version: 2.1.6; revision: 2.1.6:2.1-maint:605/0d7f25fc608f15c54ec1a01f4ba4564ebfb1071a
2015-02-06 00:41:43.010+0000 INFO [org.neo4j]: Neo4j - Cypher (neo4j-cypher), version: 2.1.6; revision: 2.1.6:2.1-maint:605/0d7f25fc608f15c54ec1a01f4ba4564ebfb1071a
2015-02-06 00:41:43.010+0000 INFO [org.neo4j]: Neo4j - Graph DB Monitoring and Management tools (neo4j-management), version: 2.1.6; revision: 2.1.6:2.1-maint:605/0d7f25fc608f15c54ec1a01f4ba4564ebfb1071a
2015-02-06 00:41:43.010+0000 INFO [org.neo4j]: Neo4j - Cypher Compiler 2.0 (neo4j-cypher-compiler-2.0), version: 2.0.4; revision: 2.0.4:2.0-maint:130/4a7d10bc274a5d26a180bbe9df25100e8a694748
2015-02-06 00:41:43.010+0000 INFO [org.neo4j]: Neo4j - Cypher Compiler 1.9 (neo4j-cypher-compiler-1.9), version: 2.0.4; revision: 2.0.4:2.0-maint:130/4a7d10bc274a5d26a180bbe9df25100e8a694748
2015-02-06 00:41:43.010+0000 INFO [org.neo4j]: Neo4j - Cypher Commons (neo4j-cypher-commons), version: 2.1.6; revision: 2.1.6:2.1-maint:605/0d7f25fc608f15c54ec1a01f4ba4564ebfb1071a
2015-02-06 00:41:43.010+0000 INFO [org.neo4j]: --- STARTED diagnostics for KernelDiagnostics:Versions END ---
2015-02-06 00:41:43.012+0000 INFO [org.neo4j]: --- STARTED diagnostics for NEO_STORE_VERSIONS START ---
2015-02-06 00:41:43.012+0000 INFO [org.neo4j]: Store versions:
Store versions:
NeoStore v0.A.3
SchemaStore v0.A.3
NodeStore v0.A.3
RelationshipStore v0.A.3
RelationshipTypeStore v0.A.3
LabelTokenStore v0.A.3
PropertyStore v0.A.3
PropertyIndexStore v0.A.3
StringPropertyStore v0.A.3
ArrayPropertyStore v0.A.3
RelationshipGroupStore v0.A.3
2015-02-06 00:41:43.013+0000 INFO [org.neo4j]: --- STARTED diagnostics for NEO_STORE_VERSIONS END ---
2015-02-06 00:41:43.013+0000 INFO [org.neo4j]: --- STARTED diagnostics for NEO_STORE_ID_USAGE START ---
2015-02-06 00:41:43.013+0000 INFO [org.neo4j]: Id usage:
Id usage:
SchemaStore: used=1 high=0
NodeStore: used=40 high=39
RelationshipStore: used=40 high=39
RelationshipTypeStore: used=2 high=1
LabelTokenStore: used=0 high=-1
PropertyStore: used=80 high=79
PropertyIndexStore: used=6 high=5
StringPropertyStore: used=1 high=0
ArrayPropertyStore: used=1 high=0
RelationshipGroupStore: used=1 high=0
2015-02-06 00:41:43.013+0000 INFO [org.neo4j]: --- STARTED diagnostics for NEO_STORE_ID_USAGE END ---
2015-02-06 00:41:43.013+0000 INFO [org.neo4j]: --- STARTED diagnostics for PERSISTENCE_WINDOW_POOL_STATS START ---
2015-02-06 00:41:43.013+0000 INFO [org.neo4j]: --- STARTED diagnostics for PERSISTENCE_WINDOW_POOL_STATS END ---
2015-02-06 00:41:43.014+0000 INFO [org.neo4j]: --- STARTED diagnostics for KernelDiagnostics:StoreFiles START ---
2015-02-06 00:41:43.014+0000 INFO [org.neo4j]: Disk space on partition (Total / Free / Free %): 499082485760 / 174680317952 / 35
Storage files: (filename : modification date - size)
active_tx_log: 2015-02-01T17:39:29+0100 - 11.00 B
index:
lucene-store.db: 2015-02-06T01:41:41+0100 - 40.00 B
lucene.log.1: 2015-02-06T01:41:43+0100 - 16.00 B
lucene.log.active: 2015-02-06T01:41:42+0100 - 4.00 B
lucene.log.v0: 2015-02-01T17:39:30+0100 - 16.00 B
lucene.log.v1: 2015-02-02T02:28:48+0100 - 16.00 B
lucene.log.v2: 2015-02-02T02:29:26+0100 - 16.00 B
lucene.log.v3: 2015-02-06T01:41:41+0100 - 16.00 B
- Total: 2015-02-06T01:41:42+0100 - 124.00 B
lock: 2015-02-06T01:41:42+0100 - 0.00 B
messages.log: 2015-02-06T01:41:43+0100 - 122.37 kB
neostore: 2015-02-06T01:41:42+0100 - 81.00 B
neostore.id: 2015-02-06T01:41:42+0100 - 9.00 B
neostore.labeltokenstore.db: 2015-02-06T01:41:42+0100 - 0.00 B
neostore.labeltokenstore.db.id: 2015-02-06T01:41:42+0100 - 9.00 B
neostore.labeltokenstore.db.names: 2015-02-06T01:41:42+0100 - 38.00 B
neostore.labeltokenstore.db.names.id: 2015-02-06T01:41:42+0100 - 9.00 B
neostore.nodestore.db: 2015-02-06T01:41:42+0100 - 600.00 B
neostore.nodestore.db.id: 2015-02-06T01:41:42+0100 - 9.00 B
neostore.nodestore.db.labels: 2015-02-06T01:41:42+0100 - 68.00 B
neostore.nodestore.db.labels.id: 2015-02-06T01:41:42+0100 - 9.00 B
neostore.propertystore.db: 2015-02-06T01:41:42+0100 - 3.20 kB
neostore.propertystore.db.arrays: 2015-02-06T01:41:42+0100 - 128.00 B
neostore.propertystore.db.arrays.id: 2015-02-06T01:41:42+0100 - 9.00 B
neostore.propertystore.db.id: 2015-02-06T01:41:42+0100 - 9.00 B
neostore.propertystore.db.index: 2015-02-06T01:41:42+0100 - 54.00 B
neostore.propertystore.db.index.id: 2015-02-06T01:41:42+0100 - 9.00 B
neostore.propertystore.db.index.keys: 2015-02-06T01:41:42+0100 - 266.00 B
neostore.propertystore.db.index.keys.id: 2015-02-06T01:41:42+0100 - 9.00 B
neostore.propertystore.db.strings: 2015-02-06T01:41:42+0100 - 128.00 B
neostore.propertystore.db.strings.id: 2015-02-06T01:41:42+0100 - 9.00 B
neostore.relationshipgroupstore.db: 2015-02-06T01:41:42+0100 - 25.00 B
neostore.relationshipgroupstore.db.id: 2015-02-06T01:41:42+0100 - 9.00 B
neostore.relationshipstore.db: 2015-02-06T01:41:42+0100 - 1.33 kB
neostore.relationshipstore.db.id: 2015-02-06T01:41:42+0100 - 9.00 B
neostore.relationshiptypestore.db: 2015-02-06T01:41:42+0100 - 10.00 B
neostore.relationshiptypestore.db.id: 2015-02-06T01:41:42+0100 - 9.00 B
neostore.relationshiptypestore.db.names: 2015-02-06T01:41:42+0100 - 114.00 B
neostore.relationshiptypestore.db.names.id: 2015-02-06T01:41:42+0100 - 9.00 B
neostore.schemastore.db: 2015-02-06T01:41:42+0100 - 64.00 B
neostore.schemastore.db.id: 2015-02-06T01:41:42+0100 - 9.00 B
nioneo_logical.log.1: 2015-02-06T01:41:43+0100 - 16.00 B
nioneo_logical.log.active: 2015-02-06T01:41:42+0100 - 4.00 B
nioneo_logical.log.v0: 2015-02-01T17:39:30+0100 - 4.52 kB
nioneo_logical.log.v1: 2015-02-02T02:28:48+0100 - 3.34 kB
nioneo_logical.log.v2: 2015-02-02T02:29:26+0100 - 3.34 kB
nioneo_logical.log.v3: 2015-02-06T01:41:41+0100 - 3.34 kB
schema:
label:
lucene:
segments.gen: 2015-02-01T17:39:30+0100 - 20.00 B
segments_1: 2015-02-01T17:39:30+0100 - 32.00 B
write.lock: 2015-02-06T01:41:42+0100 - 0.00 B
- Total: 2015-02-06T01:41:42+0100 - 52.00 B
- Total: 2015-02-01T17:39:29+0100 - 52.00 B
- Total: 2015-02-01T17:39:29+0100 - 52.00 B
store_lock: 2015-02-01T17:39:29+0100 - 0.00 B
tm_tx_log.1: 2015-02-06T01:41:42+0100 - 0.00 B
2015-02-06 00:41:43.022+0000 INFO [org.neo4j]: --- STARTED diagnostics for KernelDiagnostics:StoreFiles END ---
2015-02-06 00:41:43.063+0000 INFO [org.neo4j]: Database is now ready
2015-02-06 00:41:44.296+0000 INFO [org.neo4j]: Shutdown started
2015-02-06 00:41:44.297+0000 INFO [org.neo4j]: Database is now unavailable
2015-02-06 00:41:44.304+0000 INFO [org.neo4j]: Closed log marathon/index/lucene.log
2015-02-06 00:41:44.305+0000 INFO [org.neo4j]: TM shutting down
2015-02-06 00:41:44.311+0000 INFO [org.neo4j]: Closed log marathon/nioneo_logical.log
2015-02-06 00:41:44.312+0000 INFO [org.neo4j]: marathon/neostore.relationshiptypestore.db.names hit=0 miss=4 switches=0 ooe=0
2015-02-06 00:41:44.313+0000 INFO [org.neo4j]: marathon/neostore.relationshiptypestore.db hit=0 miss=2 switches=0 ooe=0
2015-02-06 00:41:44.314+0000 INFO [org.neo4j]: marathon/neostore.labeltokenstore.db.names hit=0 miss=0 switches=0 ooe=0
2015-02-06 00:41:44.315+0000 INFO [org.neo4j]: marathon/neostore.labeltokenstore.db hit=0 miss=0 switches=0 ooe=0
2015-02-06 00:41:44.315+0000 INFO [org.neo4j]: marathon/neostore.propertystore.db.strings hit=0 miss=0 switches=0 ooe=0
2015-02-06 00:41:44.316+0000 INFO [org.neo4j]: marathon/neostore.propertystore.db.index.keys hit=0 miss=12 switches=0 ooe=0
2015-02-06 00:41:44.317+0000 INFO [org.neo4j]: marathon/neostore.propertystore.db.index hit=0 miss=6 switches=0 ooe=0
2015-02-06 00:41:44.318+0000 INFO [org.neo4j]: marathon/neostore.propertystore.db.arrays hit=0 miss=0 switches=0 ooe=0
2015-02-06 00:41:44.319+0000 INFO [org.neo4j]: marathon/neostore.propertystore.db hit=100 miss=0 switches=0 ooe=0
2015-02-06 00:41:44.320+0000 INFO [org.neo4j]: marathon/neostore.relationshipstore.db hit=58 miss=0 switches=0 ooe=0
2015-02-06 00:41:44.320+0000 INFO [org.neo4j]: marathon/neostore.nodestore.db.labels hit=0 miss=0 switches=0 ooe=0
2015-02-06 00:41:44.321+0000 INFO [org.neo4j]: marathon/neostore.nodestore.db hit=110 miss=0 switches=0 ooe=0
2015-02-06 00:41:44.322+0000 INFO [org.neo4j]: marathon/neostore.schemastore.db hit=0 miss=0 switches=0 ooe=0
2015-02-06 00:41:44.323+0000 INFO [org.neo4j]: marathon/neostore.relationshipgroupstore.db hit=0 miss=0 switches=0 ooe=0
2015-02-06 00:41:44.324+0000 INFO [org.neo4j]: marathon/neostore hit=0 miss=18 switches=0 ooe=0
2015-02-06 00:41:44.325+0000 INFO [org.neo4j]: NeoStore closed
2015-02-06 00:41:44.325+0000 INFO [org.neo4j]: --- STOPPING diagnostics START ---
2015-02-06 00:41:44.325+0000 INFO [org.neo4j]: --- STOPPING diagnostics END ---
2015-02-06 16:00:28.468+0000 INFO [org.neo4j]: No locking implementation specified, defaulting to 'community'
2015-02-06 16:00:28.566+0000 INFO [org.neo4j]: --- INITIALIZED diagnostics START ---
2015-02-06 16:00:28.568+0000 INFO [org.neo4j]: Neo4j Kernel properties:
neostore.propertystore.db.mapped_memory=1326M
neostore.nodestore.db.mapped_memory=368M
neostore.relationshipstore.db.mapped_memory=1624M
neostore.propertystore.db.strings.mapped_memory=1127M
store_dir=marathon
neostore.propertystore.db.arrays.mapped_memory=1277M
ephemeral=false
2015-02-06 16:00:28.571+0000 INFO [org.neo4j]: Diagnostics providers:
org.neo4j.kernel.configuration.Config
org.neo4j.kernel.info.DiagnosticsManager
SYSTEM_MEMORY
JAVA_MEMORY
OPERATING_SYSTEM
JAVA_VIRTUAL_MACHINE
CLASSPATH
LIBRARY_PATH
SYSTEM_PROPERTIES
NETWORK
2015-02-06 16:00:28.573+0000 INFO [org.neo4j]: System memory information:
Total Physical memory: 16.00 GB
Free Physical memory: 4.74 GB
Committed virtual memory: 6.81 GB
Total swap space: 2.00 GB
Free swap space: 1.60 GB
2015-02-06 16:00:28.577+0000 INFO [org.neo4j]: JVM memory information:
Free memory: 259.83 MB
Total memory: 310.00 MB
Max memory: 3.56 GB
Garbage Collector: PS Scavenge: [PS Eden Space, PS Survivor Space]
Garbage Collector: PS MarkSweep: [PS Eden Space, PS Survivor Space, PS Old Gen, PS Perm Gen]
Memory Pool: Code Cache (Non-heap memory): committed=3.19 MB, used=3.05 MB, max=48.00 MB, threshold=0.00 B
Memory Pool: PS Eden Space (Heap memory): committed=129.00 MB, used=27.64 MB, max=1.31 GB, threshold=?
Memory Pool: PS Survivor Space (Heap memory): committed=10.50 MB, used=10.49 MB, max=10.50 MB, threshold=?
Memory Pool: PS Old Gen (Heap memory): committed=170.50 MB, used=12.04 MB, max=2.67 GB, threshold=0.00 B
Memory Pool: PS Perm Gen (Non-heap memory): committed=25.50 MB, used=25.15 MB, max=82.00 MB, threshold=0.00 B
2015-02-06 16:00:28.582+0000 INFO [org.neo4j]: Operating system information:
Operating System: Mac OS X; version: 10.10.2; arch: x86_64; cpus: 8
Max number of file descriptors: 10240
Number of open file descriptors: 71
Process id: 6465@Dierk-Konigs-MacBook-Pro.local
Byte order: LITTLE_ENDIAN
Local timezone: Europe/Zurich
2015-02-06 16:00:28.584+0000 INFO [org.neo4j]: JVM information:
VM Name: Java HotSpot(TM) 64-Bit Server VM
VM Vendor: Oracle Corporation
VM Version: 24.51-b03
JIT compiler: HotSpot 64-Bit Tiered Compilers
VM Arguments: [-Dscript.name=/Users/dierkkoenig/.gvm/groovy/2.4.0/bin/groovy, -Dprogram.name=groovy, -Dgroovy.starter.conf=/Users/dierkkoenig/.gvm/groovy/2.4.0/conf/groovy-starter.conf, -Dgroovy.home=/Users/dierkkoenig/.gvm/groovy/2.4.0, -Dtools.jar=/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/lib/tools.jar]
2015-02-06 16:00:28.584+0000 INFO [org.neo4j]: Java classpath:
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/qdox-1.12.1.jar
[loader.3] file:/System/Library/Java/Extensions/dns_sd.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/jcommander-1.47.jar
[loader.2] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/ant-1.9.4.jar
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/jce.jar
[loader.3] file:/Users/dierkkoenig/Library/Java/Extensions/libJNPRAuthKit.jnilib
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/bsf-2.4.0.jar
[loader.3] file:/System/Library/Java/Extensions/MRJToolkit.jar
[loader.3] file:/opt/subversion/lib/libsvnjavahl-1.0.0.0.dylib
[loader.3] file:/System/Library/Java/Extensions/vecmath.jar
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/sunrsasign.jar
[loader.3] file:/System/Library/Java/Extensions/libmlib_jai.jnilib
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-groovysh-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/ant-antlr-1.9.4.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/xmlpull-1.1.3.1.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-bsf-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-nio-2.4.0.jar
[loader.3] file:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/ext/sunec.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/servlet-api-2.4.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-sql-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-xml-2.4.0.jar
[loader.3] file:/System/Library/Java/Extensions/libJ3D.jnilib
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/jsp-api-2.0.jar
[loader.3] file:/System/Library/Java/Extensions/mlibwrapper_jai.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.neo4j/neo4j-primitive-collections/jars/neo4j-primitive-collections-2.1.6.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.apache.lucene/lucene-core/jars/lucene-core-3.6.2.jar
[loader.3] file:/Library/Java/Extensions/librxtxSerial.jnilib
[loader.3] file:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/ext/localedata.jar
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/charsets.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-ant-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-test-2.4.0.jar
[loader.3] file:/System/Library/Java/Extensions/libJ3DAudio.jnilib
[loader.3] file:/System/Library/Java/Extensions/libAppleScriptEngine.jnilib
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/jfr.jar
[loader.3] file:/System/Library/Java/Extensions/j3daudio.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-groovydoc-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-jmx-2.4.0.jar
[loader.3] file:/System/Library/Java/Extensions/libJ3DUtils.jnilib
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.neo4j/neo4j-kernel/jars/neo4j-kernel-2.1.6.jar
[loader.3] file:/System/Library/Java/Extensions/j3dcore.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/jansi-1.11.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/openbeans-1.0.jar
[loader.3] file:/usr/lib/java/libjdns_sd.jnilib
[loader.3] file:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/ant-junit-1.9.4.jar
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/jsse.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/jline-2.12.jar
[loader.3] file:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/ext/zipfs.jar
[loader.3] file:/System/Library/Java/Extensions/j3dutils.jar
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/classes
[loader.3] file:/System/Library/Java/Extensions/jai_core.jar
[loader.1] file:/projects/git/regina/listings/chap13/./
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/ivy-2.4.0.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.neo4j/neo4j-lucene-index/jars/neo4j-lucene-index-2.1.6.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-json-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.groovy/grapes/org.hsqldb/hsqldb/jars/hsqldb-2.3.2.jar
[loader.3] file:/System/Library/Java/Extensions/jai_codec.jar
[loader.3] file:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-console-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-templates-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/jsr166y-1.7.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-swing-2.4.0.jar
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/resources.jar
[loader.3] file:/Library/Java/Extensions/RXTXcomm.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/hamcrest-core-1.3.jar
[loader.1] file:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/lib/tools.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/ant-launcher-1.9.4.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.apache.geronimo.specs/geronimo-jta_1.1_spec/jars/geronimo-jta_1.1_spec-1.1.1.jar
[loader.3] file:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/ext/dnsns.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-docgenerator-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/multiverse-core-0.7.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/commons-logging-1.2.jar
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/rt.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/xstream-1.4.7.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/commons-cli-1.2.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-jsr223-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/junit-4.12.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-testng-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-servlet-2.4.0.jar
[loader.3] file:/System/Library/Java/Extensions/AppleScriptEngine.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/testng-6.8.13.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/gpars-1.2.1.jar
2015-02-06 16:00:28.588+0000 INFO [org.neo4j]: Library path:
/Users/dierkkoenig/Library/Java/Extensions
/Library/Java/Extensions
/Network/Library/Java/Extensions
/System/Library/Java/Extensions
/usr/lib/java
/projects/git/regina/listings/chap13
2015-02-06 16:00:28.588+0000 INFO [org.neo4j]: System.properties:
sun.boot.library.path = /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib
user.country.format = CH
gopherProxySet = false
path.separator = :
file.encoding.pkg = sun.io
user.country = DE
sun.java.launcher = SUN_STANDARD
sun.os.patch.level = unknown
program.name = groovy
user.dir = /projects/git/regina/listings/chap13
tools.jar = /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/lib/tools.jar
sun.jnu.encoding = UTF-8
script.name = /Users/dierkkoenig/.gvm/groovy/2.4.0/bin/groovy
sun.management.compiler = HotSpot 64-Bit Tiered Compilers
http.nonProxyHosts = local|*.local|169.254/16|*.169.254/16
user.home = /Users/dierkkoenig
user.timezone = Europe/Zurich
file.encoding = UTF-8
user.name = dierkkoenig
sun.java.command = org.codehaus.groovy.tools.GroovyStarter --main groovy.ui.GroovyMain --conf /Users/dierkkoenig/.gvm/groovy/2.4.0/conf/groovy-starter.conf --classpath . ../../test
sun.arch.data.model = 64
user.language = de
awt.toolkit = sun.lwawt.macosx.LWCToolkit
file.separator = /
sun.io.unicode.encoding = UnicodeBig
sun.cpu.endian = little
groovy.starter.conf = /Users/dierkkoenig/.gvm/groovy/2.4.0/conf/groovy-starter.conf
socksNonProxyHosts = local|*.local|169.254/16|*.169.254/16
ftp.nonProxyHosts = local|*.local|169.254/16|*.169.254/16
groovy.home = /Users/dierkkoenig/.gvm/groovy/2.4.0
sun.cpu.isalist =
2015-02-06 16:00:28.589+0000 INFO [org.neo4j]: Network information:
Interface awdl0:
address: fe80:0:0:0:10c4:ecff:fed9:b394%8
Interface en0:
address: fe80:0:0:0:2acf:e9ff:fe19:ca6d%4
address: 10.0.1.19
Interface lo0:
address: fe80:0:0:0:0:0:0:1%1
address: 0:0:0:0:0:0:0:1
address: 127.0.0.1
2015-02-06 16:00:28.592+0000 INFO [org.neo4j]: --- INITIALIZED diagnostics END ---
2015-02-06 16:00:28.667+0000 INFO [org.neo4j]: [marathon/neostore.relationshiptypestore.db.names] brickCount=0 brickSize=0b mappedMem=0b (storeSize=114b)
2015-02-06 16:00:28.669+0000 INFO [org.neo4j]: [marathon/neostore.relationshiptypestore.db] brickCount=0 brickSize=0b mappedMem=0b (storeSize=10b)
2015-02-06 16:00:28.671+0000 INFO [org.neo4j]: [marathon/neostore.labeltokenstore.db.names] brickCount=0 brickSize=0b mappedMem=0b (storeSize=38b)
2015-02-06 16:00:28.673+0000 INFO [org.neo4j]: [marathon/neostore.labeltokenstore.db] brickCount=0 brickSize=0b mappedMem=0b (storeSize=0b)
2015-02-06 16:00:28.675+0000 INFO [org.neo4j]: [marathon/neostore.propertystore.db.strings] brickCount=0 brickSize=1181696b mappedMem=1181745152b (storeSize=128b)
2015-02-06 16:00:28.677+0000 INFO [org.neo4j]: [marathon/neostore.propertystore.db.index.keys] brickCount=0 brickSize=0b mappedMem=0b (storeSize=266b)
2015-02-06 16:00:28.678+0000 INFO [org.neo4j]: [marathon/neostore.propertystore.db.index] brickCount=0 brickSize=0b mappedMem=0b (storeSize=54b)
2015-02-06 16:00:28.681+0000 INFO [org.neo4j]: [marathon/neostore.propertystore.db.arrays] brickCount=0 brickSize=1339008b mappedMem=1339031552b (storeSize=128b)
2015-02-06 16:00:28.699+0000 INFO [org.neo4j]: [marathon/neostore.propertystore.db] brickCount=0 brickSize=1390392b mappedMem=1390411776b (storeSize=4100b)
2015-02-06 16:00:28.703+0000 INFO [org.neo4j]: [marathon/neostore.relationshipstore.db] brickCount=0 brickSize=1702856b mappedMem=1702887424b (storeSize=1700b)
2015-02-06 16:00:28.705+0000 INFO [org.neo4j]: [marathon/neostore.nodestore.db.labels] brickCount=0 brickSize=0b mappedMem=0b (storeSize=68b)
2015-02-06 16:00:28.708+0000 INFO [org.neo4j]: [marathon/neostore.nodestore.db] brickCount=0 brickSize=385875b mappedMem=385875968b (storeSize=750b)
2015-02-06 16:00:28.711+0000 INFO [org.neo4j]: [marathon/neostore.schemastore.db] brickCount=0 brickSize=0b mappedMem=0b (storeSize=64b)
2015-02-06 16:00:28.714+0000 INFO [org.neo4j]: [marathon/neostore.relationshipgroupstore.db] brickCount=0 brickSize=0b mappedMem=0b (storeSize=25b)
2015-02-06 16:00:28.716+0000 INFO [org.neo4j]: [marathon/neostore] brickCount=0 brickSize=0b mappedMem=0b (storeSize=81b)
2015-02-06 16:00:28.955+0000 INFO [org.neo4j]: Opened logical log [marathon/nioneo_logical.log.1] version=5, lastTxId=14 (clean)
2015-02-06 16:00:28.961+0000 INFO [org.neo4j]: TM opening log: marathon/tm_tx_log.1
2015-02-06 16:00:28.968+0000 INFO [org.neo4j]: Kernel health set to OK
2015-02-06 16:00:28.979+0000 INFO [org.neo4j]: Opened logical log [marathon/index/lucene.log.1] version=5, lastTxId=1 (clean)
2015-02-06 16:00:28.984+0000 INFO [org.neo4j]: --- STARTED diagnostics for KernelDiagnostics:Versions START ---
2015-02-06 16:00:28.984+0000 INFO [org.neo4j]: Graph Database: org.neo4j.kernel.EmbeddedGraphDatabase StoreId{creationTime=1422808769411, randomId=1762119504651947014, storeVersion=14406081294923270, upgradeTime=1422808769411, upgradeId=1762119504651947014}
2015-02-06 16:00:28.987+0000 INFO [org.neo4j]: Kernel version: Neo4j - Graph Database Kernel (neo4j-kernel), version: 2.1.6
2015-02-06 16:00:28.987+0000 INFO [org.neo4j]: Neo4j component versions:
2015-02-06 16:00:28.988+0000 INFO [org.neo4j]: Neo4j - Lucene Index (neo4j-lucene-index), version: 2.1.6; revision: 2.1.6:2.1-maint:605/0d7f25fc608f15c54ec1a01f4ba4564ebfb1071a
2015-02-06 16:00:28.988+0000 INFO [org.neo4j]: Neo4j - Graph Database Kernel (neo4j-kernel), version: 2.1.6; revision: 2.1.6:2.1-maint:605/0d7f25fc608f15c54ec1a01f4ba4564ebfb1071a
2015-02-06 16:00:28.988+0000 INFO [org.neo4j]: --- STARTED diagnostics for KernelDiagnostics:Versions END ---
2015-02-06 16:00:28.990+0000 INFO [org.neo4j]: --- STARTED diagnostics for NEO_STORE_VERSIONS START ---
2015-02-06 16:00:28.991+0000 INFO [org.neo4j]: Store versions:
Store versions:
NeoStore v0.A.3
SchemaStore v0.A.3
NodeStore v0.A.3
RelationshipStore v0.A.3
RelationshipTypeStore v0.A.3
LabelTokenStore v0.A.3
PropertyStore v0.A.3
PropertyIndexStore v0.A.3
StringPropertyStore v0.A.3
ArrayPropertyStore v0.A.3
RelationshipGroupStore v0.A.3
2015-02-06 16:00:28.991+0000 INFO [org.neo4j]: --- STARTED diagnostics for NEO_STORE_VERSIONS END ---
2015-02-06 16:00:28.991+0000 INFO [org.neo4j]: --- STARTED diagnostics for NEO_STORE_ID_USAGE START ---
2015-02-06 16:00:28.991+0000 INFO [org.neo4j]: Id usage:
Id usage:
SchemaStore: used=1 high=0
NodeStore: used=50 high=49
RelationshipStore: used=50 high=49
RelationshipTypeStore: used=2 high=1
LabelTokenStore: used=0 high=-1
PropertyStore: used=100 high=99
PropertyIndexStore: used=6 high=5
StringPropertyStore: used=1 high=0
ArrayPropertyStore: used=1 high=0
RelationshipGroupStore: used=1 high=0
2015-02-06 16:00:28.992+0000 INFO [org.neo4j]: --- STARTED diagnostics for NEO_STORE_ID_USAGE END ---
2015-02-06 16:00:28.992+0000 INFO [org.neo4j]: --- STARTED diagnostics for PERSISTENCE_WINDOW_POOL_STATS START ---
2015-02-06 16:00:28.992+0000 INFO [org.neo4j]: --- STARTED diagnostics for PERSISTENCE_WINDOW_POOL_STATS END ---
2015-02-06 16:00:28.992+0000 INFO [org.neo4j]: --- STARTED diagnostics for KernelDiagnostics:StoreFiles START ---
2015-02-06 16:00:28.993+0000 INFO [org.neo4j]: Disk space on partition (Total / Free / Free %): 499082485760 / 174966755328 / 35
Storage files: (filename : modification date - size)
active_tx_log: 2015-02-01T17:39:29+0100 - 11.00 B
index:
lucene-store.db: 2015-02-06T01:41:44+0100 - 40.00 B
lucene.log.1: 2015-02-06T17:00:28+0100 - 16.00 B
lucene.log.active: 2015-02-06T17:00:28+0100 - 4.00 B
lucene.log.v0: 2015-02-01T17:39:30+0100 - 16.00 B
lucene.log.v1: 2015-02-02T02:28:48+0100 - 16.00 B
lucene.log.v2: 2015-02-02T02:29:26+0100 - 16.00 B
lucene.log.v3: 2015-02-06T01:41:41+0100 - 16.00 B
lucene.log.v4: 2015-02-06T01:41:44+0100 - 16.00 B
- Total: 2015-02-06T17:00:28+0100 - 140.00 B
lock: 2015-02-06T17:00:28+0100 - 0.00 B
messages.log: 2015-02-06T17:00:28+0100 - 145.86 kB
neostore: 2015-02-06T17:00:28+0100 - 81.00 B
neostore.id: 2015-02-06T17:00:28+0100 - 9.00 B
neostore.labeltokenstore.db: 2015-02-06T17:00:28+0100 - 0.00 B
neostore.labeltokenstore.db.id: 2015-02-06T17:00:28+0100 - 9.00 B
neostore.labeltokenstore.db.names: 2015-02-06T17:00:28+0100 - 38.00 B
neostore.labeltokenstore.db.names.id: 2015-02-06T17:00:28+0100 - 9.00 B
neostore.nodestore.db: 2015-02-06T17:00:28+0100 - 750.00 B
neostore.nodestore.db.id: 2015-02-06T17:00:28+0100 - 9.00 B
neostore.nodestore.db.labels: 2015-02-06T17:00:28+0100 - 68.00 B
neostore.nodestore.db.labels.id: 2015-02-06T17:00:28+0100 - 9.00 B
neostore.propertystore.db: 2015-02-06T17:00:28+0100 - 4.00 kB
neostore.propertystore.db.arrays: 2015-02-06T17:00:28+0100 - 128.00 B
neostore.propertystore.db.arrays.id: 2015-02-06T17:00:28+0100 - 9.00 B
neostore.propertystore.db.id: 2015-02-06T17:00:28+0100 - 9.00 B
neostore.propertystore.db.index: 2015-02-06T17:00:28+0100 - 54.00 B
neostore.propertystore.db.index.id: 2015-02-06T17:00:28+0100 - 9.00 B
neostore.propertystore.db.index.keys: 2015-02-06T17:00:28+0100 - 266.00 B
neostore.propertystore.db.index.keys.id: 2015-02-06T17:00:28+0100 - 9.00 B
neostore.propertystore.db.strings: 2015-02-06T17:00:28+0100 - 128.00 B
neostore.propertystore.db.strings.id: 2015-02-06T17:00:28+0100 - 9.00 B
neostore.relationshipgroupstore.db: 2015-02-06T17:00:28+0100 - 25.00 B
neostore.relationshipgroupstore.db.id: 2015-02-06T17:00:28+0100 - 9.00 B
neostore.relationshipstore.db: 2015-02-06T17:00:28+0100 - 1.66 kB
neostore.relationshipstore.db.id: 2015-02-06T17:00:28+0100 - 9.00 B
neostore.relationshiptypestore.db: 2015-02-06T17:00:28+0100 - 10.00 B
neostore.relationshiptypestore.db.id: 2015-02-06T17:00:28+0100 - 9.00 B
neostore.relationshiptypestore.db.names: 2015-02-06T17:00:28+0100 - 114.00 B
neostore.relationshiptypestore.db.names.id: 2015-02-06T17:00:28+0100 - 9.00 B
neostore.schemastore.db: 2015-02-06T17:00:28+0100 - 64.00 B
neostore.schemastore.db.id: 2015-02-06T17:00:28+0100 - 9.00 B
nioneo_logical.log.1: 2015-02-06T17:00:29+0100 - 16.00 B
nioneo_logical.log.active: 2015-02-06T17:00:28+0100 - 4.00 B
nioneo_logical.log.v0: 2015-02-01T17:39:30+0100 - 4.52 kB
nioneo_logical.log.v1: 2015-02-02T02:28:48+0100 - 3.34 kB
nioneo_logical.log.v2: 2015-02-02T02:29:26+0100 - 3.34 kB
nioneo_logical.log.v3: 2015-02-06T01:41:41+0100 - 3.34 kB
nioneo_logical.log.v4: 2015-02-06T01:41:44+0100 - 3.34 kB
schema:
label:
lucene:
segments.gen: 2015-02-01T17:39:30+0100 - 20.00 B
segments_1: 2015-02-01T17:39:30+0100 - 32.00 B
write.lock: 2015-02-06T17:00:28+0100 - 0.00 B
- Total: 2015-02-06T17:00:28+0100 - 52.00 B
- Total: 2015-02-01T17:39:29+0100 - 52.00 B
- Total: 2015-02-01T17:39:29+0100 - 52.00 B
store_lock: 2015-02-01T17:39:29+0100 - 0.00 B
tm_tx_log.1: 2015-02-06T17:00:28+0100 - 0.00 B
2015-02-06 16:00:29.003+0000 INFO [org.neo4j]: --- STARTED diagnostics for KernelDiagnostics:StoreFiles END ---
2015-02-06 16:00:29.050+0000 INFO [org.neo4j]: Database is now ready
2015-02-06 16:00:29.281+0000 INFO [org.neo4j]: Shutdown started
2015-02-06 16:00:29.281+0000 INFO [org.neo4j]: Database is now unavailable
2015-02-06 16:00:29.285+0000 INFO [org.neo4j]: Closed log marathon/index/lucene.log
2015-02-06 16:00:29.285+0000 INFO [org.neo4j]: TM shutting down
2015-02-06 16:00:29.293+0000 INFO [org.neo4j]: Closed log marathon/nioneo_logical.log
2015-02-06 16:00:29.293+0000 INFO [org.neo4j]: marathon/neostore.relationshiptypestore.db.names hit=0 miss=4 switches=0 ooe=0
2015-02-06 16:00:29.295+0000 INFO [org.neo4j]: marathon/neostore.relationshiptypestore.db hit=0 miss=2 switches=0 ooe=0
2015-02-06 16:00:29.295+0000 INFO [org.neo4j]: marathon/neostore.labeltokenstore.db.names hit=0 miss=0 switches=0 ooe=0
2015-02-06 16:00:29.296+0000 INFO [org.neo4j]: marathon/neostore.labeltokenstore.db hit=0 miss=0 switches=0 ooe=0
2015-02-06 16:00:29.296+0000 INFO [org.neo4j]: marathon/neostore.propertystore.db.strings hit=0 miss=0 switches=0 ooe=0
2015-02-06 16:00:29.297+0000 INFO [org.neo4j]: marathon/neostore.propertystore.db.index.keys hit=0 miss=12 switches=0 ooe=0
2015-02-06 16:00:29.297+0000 INFO [org.neo4j]: marathon/neostore.propertystore.db.index hit=0 miss=6 switches=0 ooe=0
2015-02-06 16:00:29.298+0000 INFO [org.neo4j]: marathon/neostore.propertystore.db.arrays hit=0 miss=0 switches=0 ooe=0
2015-02-06 16:00:29.299+0000 INFO [org.neo4j]: marathon/neostore.propertystore.db hit=20 miss=0 switches=0 ooe=0
2015-02-06 16:00:29.300+0000 INFO [org.neo4j]: marathon/neostore.relationshipstore.db hit=10 miss=0 switches=0 ooe=0
2015-02-06 16:00:29.301+0000 INFO [org.neo4j]: marathon/neostore.nodestore.db.labels hit=0 miss=0 switches=0 ooe=0
2015-02-06 16:00:29.302+0000 INFO [org.neo4j]: marathon/neostore.nodestore.db hit=10 miss=0 switches=0 ooe=0
2015-02-06 16:00:29.302+0000 INFO [org.neo4j]: marathon/neostore.schemastore.db hit=0 miss=0 switches=0 ooe=0
2015-02-06 16:00:29.303+0000 INFO [org.neo4j]: marathon/neostore.relationshipgroupstore.db hit=0 miss=0 switches=0 ooe=0
2015-02-06 16:00:29.304+0000 INFO [org.neo4j]: marathon/neostore hit=0 miss=18 switches=0 ooe=0
2015-02-06 16:00:29.305+0000 INFO [org.neo4j]: NeoStore closed
2015-02-06 16:00:29.305+0000 INFO [org.neo4j]: --- STOPPING diagnostics START ---
2015-02-06 16:00:29.305+0000 INFO [org.neo4j]: --- STOPPING diagnostics END ---
2015-02-06 16:00:30.398+0000 INFO [org.neo4j]: No locking implementation specified, defaulting to 'community'
2015-02-06 16:00:30.463+0000 INFO [org.neo4j]: --- INITIALIZED diagnostics START ---
2015-02-06 16:00:30.464+0000 INFO [org.neo4j]: Neo4j Kernel properties:
neostore.propertystore.db.mapped_memory=1326M
neostore.nodestore.db.mapped_memory=368M
neostore.relationshipstore.db.mapped_memory=1624M
neostore.propertystore.db.strings.mapped_memory=1127M
store_dir=marathon
neostore.propertystore.db.arrays.mapped_memory=1277M
ephemeral=false
2015-02-06 16:00:30.466+0000 INFO [org.neo4j]: Diagnostics providers:
org.neo4j.kernel.configuration.Config
org.neo4j.kernel.info.DiagnosticsManager
SYSTEM_MEMORY
JAVA_MEMORY
OPERATING_SYSTEM
JAVA_VIRTUAL_MACHINE
CLASSPATH
LIBRARY_PATH
SYSTEM_PROPERTIES
NETWORK
2015-02-06 16:00:30.467+0000 INFO [org.neo4j]: System memory information:
Total Physical memory: 16.00 GB
Free Physical memory: 4.67 GB
Committed virtual memory: 6.81 GB
Total swap space: 2.00 GB
Free swap space: 1.60 GB
2015-02-06 16:00:30.468+0000 INFO [org.neo4j]: JVM memory information:
Free memory: 173.98 MB
Total memory: 310.00 MB
Max memory: 3.56 GB
Garbage Collector: PS Scavenge: [PS Eden Space, PS Survivor Space]
Garbage Collector: PS MarkSweep: [PS Eden Space, PS Survivor Space, PS Old Gen, PS Perm Gen]
Memory Pool: Code Cache (Non-heap memory): committed=4.00 MB, used=3.93 MB, max=48.00 MB, threshold=0.00 B
Memory Pool: PS Eden Space (Heap memory): committed=129.00 MB, used=103.74 MB, max=1.30 GB, threshold=?
Memory Pool: PS Survivor Space (Heap memory): committed=10.50 MB, used=10.48 MB, max=10.50 MB, threshold=?
Memory Pool: PS Old Gen (Heap memory): committed=170.50 MB, used=21.79 MB, max=2.67 GB, threshold=0.00 B
Memory Pool: PS Perm Gen (Non-heap memory): committed=33.50 MB, used=33.44 MB, max=82.00 MB, threshold=0.00 B
2015-02-06 16:00:30.470+0000 INFO [org.neo4j]: Operating system information:
Operating System: Mac OS X; version: 10.10.2; arch: x86_64; cpus: 8
Max number of file descriptors: 10240
Number of open file descriptors: 94
Process id: 6465@Dierk-Konigs-MacBook-Pro.local
Byte order: LITTLE_ENDIAN
Local timezone: Europe/Zurich
2015-02-06 16:00:30.471+0000 INFO [org.neo4j]: JVM information:
VM Name: Java HotSpot(TM) 64-Bit Server VM
VM Vendor: Oracle Corporation
VM Version: 24.51-b03
JIT compiler: HotSpot 64-Bit Tiered Compilers
VM Arguments: [-Dscript.name=/Users/dierkkoenig/.gvm/groovy/2.4.0/bin/groovy, -Dprogram.name=groovy, -Dgroovy.starter.conf=/Users/dierkkoenig/.gvm/groovy/2.4.0/conf/groovy-starter.conf, -Dgroovy.home=/Users/dierkkoenig/.gvm/groovy/2.4.0, -Dtools.jar=/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/lib/tools.jar]
2015-02-06 16:00:30.471+0000 INFO [org.neo4j]: Java classpath:
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/qdox-1.12.1.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.parboiled/parboiled-scala_2.10/jars/parboiled-scala_2.10-1.1.6.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/jcommander-1.47.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/bsf-2.4.0.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/commons-configuration/commons-configuration/jars/commons-configuration-1.6.jar
[loader.3] file:/Users/dierkkoenig/Library/Java/Extensions/libJNPRAuthKit.jnilib
[loader.3] file:/System/Library/Java/Extensions/vecmath.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-groovysh-2.4.0.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/commons-logging/commons-logging/jars/commons-logging-1.1.1.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/ant-antlr-1.9.4.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/xmlpull-1.1.3.1.jar
[loader.3] file:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/ext/sunec.jar
[loader.3] file:/System/Library/Java/Extensions/libJ3D.jnilib
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/commons-lang/commons-lang/jars/commons-lang-2.4.jar
[loader.3] file:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/ext/localedata.jar
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/charsets.jar
[loader.3] file:/System/Library/Java/Extensions/j3daudio.jar
[loader.3] file:/System/Library/Java/Extensions/j3dcore.jar
[loader.3] file:/usr/lib/java/libjdns_sd.jnilib
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/ant-junit-1.9.4.jar
[loader.3] file:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.neo4j/neo4j-management/jars/neo4j-management-2.1.6.jar
[loader.3] file:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/ext/zipfs.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/com.tinkerpop.gremlin/gremlin-groovy/jars/gremlin-groovy-2.6.0.jar
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/classes
[loader.3] file:/System/Library/Java/Extensions/jai_core.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/ivy-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-json-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-templates-2.4.0.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/com.tinkerpop.gremlin/gremlin-java/jars/gremlin-java-2.6.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/hamcrest-core-1.3.jar
[loader.3] file:/Library/Java/Extensions/RXTXcomm.jar
[loader.1] file:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/lib/tools.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.apache.geronimo.specs/geronimo-jta_1.1_spec/jars/geronimo-jta_1.1_spec-1.1.1.jar
[loader.3] file:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/ext/dnsns.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/multiverse-core-0.7.0.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.neo4j/neo4j-cypher-commons/jars/neo4j-cypher-commons-2.1.6.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/junit-4.12.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-servlet-2.4.0.jar
[loader.3] file:/System/Library/Java/Extensions/AppleScriptEngine.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/testng-6.8.13.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.parboiled/parboiled-core/jars/parboiled-core-1.1.6.jar
[loader.3] file:/System/Library/Java/Extensions/dns_sd.jar
[loader.2] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/ant-1.9.4.jar
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/jce.jar
[loader.3] file:/System/Library/Java/Extensions/MRJToolkit.jar
[loader.3] file:/opt/subversion/lib/libsvnjavahl-1.0.0.0.dylib
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/commons-beanutils/commons-beanutils/jars/commons-beanutils-1.7.0.jar
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/sunrsasign.jar
[loader.3] file:/System/Library/Java/Extensions/libmlib_jai.jnilib
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-bsf-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-nio-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/servlet-api-2.4.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/commons-digester/commons-digester/jars/commons-digester-1.8.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-sql-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-xml-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/jsp-api-2.0.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.neo4j/neo4j-cypher-compiler-2.0/jars/neo4j-cypher-compiler-2.0-2.0.4.jar
[loader.3] file:/System/Library/Java/Extensions/mlibwrapper_jai.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.neo4j/neo4j-primitive-collections/jars/neo4j-primitive-collections-2.1.6.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.apache.lucene/lucene-core/jars/lucene-core-3.6.2.jar
[loader.3] file:/Library/Java/Extensions/librxtxSerial.jnilib
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-ant-2.4.0.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.neo4j/neo4j-cypher/jars/neo4j-cypher-2.1.6.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-test-2.4.0.jar
[loader.3] file:/System/Library/Java/Extensions/libJ3DAudio.jnilib
[loader.3] file:/System/Library/Java/Extensions/libAppleScriptEngine.jnilib
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/jfr.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.scala-lang/scala-library/jars/scala-library-2.10.4.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-groovydoc-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-jmx-2.4.0.jar
[loader.3] file:/System/Library/Java/Extensions/libJ3DUtils.jnilib
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.neo4j/neo4j-kernel/jars/neo4j-kernel-2.1.6.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/jansi-1.11.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/openbeans-1.0.jar
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/jsse.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/jline-2.12.jar
[loader.3] file:/System/Library/Java/Extensions/j3dutils.jar
[loader.1] file:/projects/git/regina/listings/chap13/./
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.neo4j/neo4j-lucene-index/jars/neo4j-lucene-index-2.1.6.jar
[loader.1] file:/Users/dierkkoenig/.groovy/grapes/org.hsqldb/hsqldb/jars/hsqldb-2.3.2.jar
[loader.3] file:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar
[loader.3] file:/System/Library/Java/Extensions/jai_codec.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/commons-beanutils/commons-beanutils-core/jars/commons-beanutils-core-1.8.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-console-2.4.0.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/com.tinkerpop.blueprints/blueprints-neo4j2-graph/jars/blueprints-neo4j2-graph-2.6.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/jsr166y-1.7.0.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/com.tinkerpop.blueprints/blueprints-core/jars/blueprints-core-2.6.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-swing-2.4.0.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.neo4j/neo4j-cypher-compiler-2.1/jars/neo4j-cypher-compiler-2.1-2.1.6.jar
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/resources.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/ant-launcher-1.9.4.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-docgenerator-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/commons-logging-1.2.jar
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/rt.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/xstream-1.4.7.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/commons-cli-1.2.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-jsr223-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/groovy-testng-2.4.0.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/commons-collections/commons-collections/jars/commons-collections-3.2.1.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/com.tinkerpop/pipes/jars/pipes-2.6.0.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/com.googlecode.concurrentlinkedhashmap/concurrentlinkedhashmap-lru/jars/concurrentlinkedhashmap-lru-1.4.1.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/2.4.0/lib/gpars-1.2.1.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.neo4j/neo4j-cypher-compiler-1.9/jars/neo4j-cypher-compiler-1.9-2.0.4.jar
2015-02-06 16:00:30.475+0000 INFO [org.neo4j]: Library path:
/Users/dierkkoenig/Library/Java/Extensions
/Library/Java/Extensions
/Network/Library/Java/Extensions
/System/Library/Java/Extensions
/usr/lib/java
/projects/git/regina/listings/chap13
2015-02-06 16:00:30.475+0000 INFO [org.neo4j]: System.properties:
sun.boot.library.path = /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib
user.country.format = CH
gopherProxySet = false
path.separator = :
file.encoding.pkg = sun.io
user.country = DE
sun.java.launcher = SUN_STANDARD
sun.os.patch.level = unknown
program.name = groovy
user.dir = /projects/git/regina/listings/chap13
tools.jar = /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/lib/tools.jar
sun.jnu.encoding = UTF-8
script.name = /Users/dierkkoenig/.gvm/groovy/2.4.0/bin/groovy
sun.management.compiler = HotSpot 64-Bit Tiered Compilers
http.nonProxyHosts = local|*.local|169.254/16|*.169.254/16
user.home = /Users/dierkkoenig
user.timezone = Europe/Zurich
file.encoding = UTF-8
user.name = dierkkoenig
sun.java.command = org.codehaus.groovy.tools.GroovyStarter --main groovy.ui.GroovyMain --conf /Users/dierkkoenig/.gvm/groovy/2.4.0/conf/groovy-starter.conf --classpath . ../../test
sun.arch.data.model = 64
user.language = de
awt.toolkit = sun.lwawt.macosx.LWCToolkit
file.separator = /
sun.io.unicode.encoding = UnicodeBig
sun.cpu.endian = little
groovy.starter.conf = /Users/dierkkoenig/.gvm/groovy/2.4.0/conf/groovy-starter.conf
socksNonProxyHosts = local|*.local|169.254/16|*.169.254/16
ftp.nonProxyHosts = local|*.local|169.254/16|*.169.254/16
groovy.home = /Users/dierkkoenig/.gvm/groovy/2.4.0
sun.cpu.isalist =
2015-02-06 16:00:30.476+0000 INFO [org.neo4j]: Network information:
Interface awdl0:
address: fe80:0:0:0:10c4:ecff:fed9:b394%8
Interface en0:
address: fe80:0:0:0:2acf:e9ff:fe19:ca6d%4
address: 10.0.1.19
Interface lo0:
address: fe80:0:0:0:0:0:0:1%1
address: 0:0:0:0:0:0:0:1
address: 127.0.0.1
2015-02-06 16:00:30.476+0000 INFO [org.neo4j]: --- INITIALIZED diagnostics END ---
2015-02-06 16:00:30.522+0000 INFO [org.neo4j]: [marathon/neostore.relationshiptypestore.db.names] brickCount=0 brickSize=0b mappedMem=0b (storeSize=114b)
2015-02-06 16:00:30.523+0000 INFO [org.neo4j]: [marathon/neostore.relationshiptypestore.db] brickCount=0 brickSize=0b mappedMem=0b (storeSize=10b)
2015-02-06 16:00:30.523+0000 INFO [org.neo4j]: [marathon/neostore.labeltokenstore.db.names] brickCount=0 brickSize=0b mappedMem=0b (storeSize=38b)
2015-02-06 16:00:30.524+0000 INFO [org.neo4j]: [marathon/neostore.labeltokenstore.db] brickCount=0 brickSize=0b mappedMem=0b (storeSize=0b)
2015-02-06 16:00:30.524+0000 INFO [org.neo4j]: [marathon/neostore.propertystore.db.strings] brickCount=0 brickSize=1181696b mappedMem=1181745152b (storeSize=128b)
2015-02-06 16:00:30.524+0000 INFO [org.neo4j]: [marathon/neostore.propertystore.db.index.keys] brickCount=0 brickSize=0b mappedMem=0b (storeSize=266b)
2015-02-06 16:00:30.525+0000 INFO [org.neo4j]: [marathon/neostore.propertystore.db.index] brickCount=0 brickSize=0b mappedMem=0b (storeSize=54b)
2015-02-06 16:00:30.526+0000 INFO [org.neo4j]: [marathon/neostore.propertystore.db.arrays] brickCount=0 brickSize=1339008b mappedMem=1339031552b (storeSize=128b)
2015-02-06 16:00:30.542+0000 INFO [org.neo4j]: [marathon/neostore.propertystore.db] brickCount=0 brickSize=1390392b mappedMem=1390411776b (storeSize=4920b)
2015-02-06 16:00:30.545+0000 INFO [org.neo4j]: [marathon/neostore.relationshipstore.db] brickCount=0 brickSize=1702856b mappedMem=1702887424b (storeSize=2040b)
2015-02-06 16:00:30.545+0000 INFO [org.neo4j]: [marathon/neostore.nodestore.db.labels] brickCount=0 brickSize=0b mappedMem=0b (storeSize=68b)
2015-02-06 16:00:30.547+0000 INFO [org.neo4j]: [marathon/neostore.nodestore.db] brickCount=0 brickSize=385875b mappedMem=385875968b (storeSize=900b)
2015-02-06 16:00:30.548+0000 INFO [org.neo4j]: [marathon/neostore.schemastore.db] brickCount=0 brickSize=0b mappedMem=0b (storeSize=64b)
2015-02-06 16:00:30.549+0000 INFO [org.neo4j]: [marathon/neostore.relationshipgroupstore.db] brickCount=0 brickSize=0b mappedMem=0b (storeSize=25b)
2015-02-06 16:00:30.550+0000 INFO [org.neo4j]: [marathon/neostore] brickCount=0 brickSize=0b mappedMem=0b (storeSize=81b)
2015-02-06 16:00:30.722+0000 INFO [org.neo4j]: Opened logical log [marathon/nioneo_logical.log.1] version=6, lastTxId=15 (clean)
2015-02-06 16:00:30.731+0000 INFO [org.neo4j]: TM opening log: marathon/tm_tx_log.1
2015-02-06 16:00:30.736+0000 INFO [org.neo4j]: Kernel health set to OK
2015-02-06 16:00:30.743+0000 INFO [org.neo4j]: Opened logical log [marathon/index/lucene.log.1] version=6, lastTxId=1 (clean)
2015-02-06 16:00:30.746+0000 INFO [org.neo4j]: --- STARTED diagnostics for KernelDiagnostics:Versions START ---
2015-02-06 16:00:30.746+0000 INFO [org.neo4j]: Graph Database: org.neo4j.kernel.EmbeddedGraphDatabase StoreId{creationTime=1422808769411, randomId=1762119504651947014, storeVersion=14406081294923270, upgradeTime=1422808769411, upgradeId=1762119504651947014}
2015-02-06 16:00:30.764+0000 INFO [org.neo4j]: Kernel version: Neo4j - Graph Database Kernel (neo4j-kernel), version: 2.1.6
2015-02-06 16:00:30.764+0000 INFO [org.neo4j]: Neo4j component versions:
2015-02-06 16:00:30.766+0000 INFO [org.neo4j]: Neo4j - Lucene Index (neo4j-lucene-index), version: 2.1.6; revision: 2.1.6:2.1-maint:605/0d7f25fc608f15c54ec1a01f4ba4564ebfb1071a
2015-02-06 16:00:30.766+0000 INFO [org.neo4j]: Neo4j - Cypher Compiler 2.1 (neo4j-cypher-compiler-2.1), version: 2.1.6; revision: 2.1.6:2.1-maint:605/0d7f25fc608f15c54ec1a01f4ba4564ebfb1071a
2015-02-06 16:00:30.766+0000 INFO [org.neo4j]: Neo4j - Graph Database Kernel (neo4j-kernel), version: 2.1.6; revision: 2.1.6:2.1-maint:605/0d7f25fc608f15c54ec1a01f4ba4564ebfb1071a
2015-02-06 16:00:30.766+0000 INFO [org.neo4j]: Neo4j - Cypher (neo4j-cypher), version: 2.1.6; revision: 2.1.6:2.1-maint:605/0d7f25fc608f15c54ec1a01f4ba4564ebfb1071a
2015-02-06 16:00:30.766+0000 INFO [org.neo4j]: Neo4j - Graph DB Monitoring and Management tools (neo4j-management), version: 2.1.6; revision: 2.1.6:2.1-maint:605/0d7f25fc608f15c54ec1a01f4ba4564ebfb1071a
2015-02-06 16:00:30.766+0000 INFO [org.neo4j]: Neo4j - Cypher Compiler 2.0 (neo4j-cypher-compiler-2.0), version: 2.0.4; revision: 2.0.4:2.0-maint:130/4a7d10bc274a5d26a180bbe9df25100e8a694748
2015-02-06 16:00:30.766+0000 INFO [org.neo4j]: Neo4j - Cypher Compiler 1.9 (neo4j-cypher-compiler-1.9), version: 2.0.4; revision: 2.0.4:2.0-maint:130/4a7d10bc274a5d26a180bbe9df25100e8a694748
2015-02-06 16:00:30.766+0000 INFO [org.neo4j]: Neo4j - Cypher Commons (neo4j-cypher-commons), version: 2.1.6; revision: 2.1.6:2.1-maint:605/0d7f25fc608f15c54ec1a01f4ba4564ebfb1071a
2015-02-06 16:00:30.766+0000 INFO [org.neo4j]: --- STARTED diagnostics for KernelDiagnostics:Versions END ---
2015-02-06 16:00:30.768+0000 INFO [org.neo4j]: --- STARTED diagnostics for NEO_STORE_VERSIONS START ---
2015-02-06 16:00:30.768+0000 INFO [org.neo4j]: Store versions:
Store versions:
NeoStore v0.A.3
SchemaStore v0.A.3
NodeStore v0.A.3
RelationshipStore v0.A.3
RelationshipTypeStore v0.A.3
LabelTokenStore v0.A.3
PropertyStore v0.A.3
PropertyIndexStore v0.A.3
StringPropertyStore v0.A.3
ArrayPropertyStore v0.A.3
RelationshipGroupStore v0.A.3
2015-02-06 16:00:30.768+0000 INFO [org.neo4j]: --- STARTED diagnostics for NEO_STORE_VERSIONS END ---
2015-02-06 16:00:30.768+0000 INFO [org.neo4j]: --- STARTED diagnostics for NEO_STORE_ID_USAGE START ---
2015-02-06 16:00:30.768+0000 INFO [org.neo4j]: Id usage:
Id usage:
SchemaStore: used=1 high=0
NodeStore: used=60 high=59
RelationshipStore: used=60 high=59
RelationshipTypeStore: used=2 high=1
LabelTokenStore: used=0 high=-1
PropertyStore: used=120 high=119
PropertyIndexStore: used=6 high=5
StringPropertyStore: used=1 high=0
ArrayPropertyStore: used=1 high=0
RelationshipGroupStore: used=1 high=0
2015-02-06 16:00:30.769+0000 INFO [org.neo4j]: --- STARTED diagnostics for NEO_STORE_ID_USAGE END ---
2015-02-06 16:00:30.769+0000 INFO [org.neo4j]: --- STARTED diagnostics for PERSISTENCE_WINDOW_POOL_STATS START ---
2015-02-06 16:00:30.769+0000 INFO [org.neo4j]: --- STARTED diagnostics for PERSISTENCE_WINDOW_POOL_STATS END ---
2015-02-06 16:00:30.769+0000 INFO [org.neo4j]: --- STARTED diagnostics for KernelDiagnostics:StoreFiles START ---
2015-02-06 16:00:30.770+0000 INFO [org.neo4j]: Disk space on partition (Total / Free / Free %): 499082485760 / 174966628352 / 35
Storage files: (filename : modification date - size)
active_tx_log: 2015-02-01T17:39:29+0100 - 11.00 B
index:
lucene-store.db: 2015-02-06T17:00:29+0100 - 40.00 B
lucene.log.1: 2015-02-06T17:00:30+0100 - 16.00 B
lucene.log.active: 2015-02-06T17:00:30+0100 - 4.00 B
lucene.log.v0: 2015-02-01T17:39:30+0100 - 16.00 B
lucene.log.v1: 2015-02-02T02:28:48+0100 - 16.00 B
lucene.log.v2: 2015-02-02T02:29:26+0100 - 16.00 B
lucene.log.v3: 2015-02-06T01:41:41+0100 - 16.00 B
lucene.log.v4: 2015-02-06T01:41:44+0100 - 16.00 B
lucene.log.v5: 2015-02-06T17:00:29+0100 - 16.00 B
- Total: 2015-02-06T17:00:30+0100 - 156.00 B
lock: 2015-02-06T17:00:30+0100 - 0.00 B
messages.log: 2015-02-06T17:00:30+0100 - 173.24 kB
neostore: 2015-02-06T17:00:30+0100 - 81.00 B
neostore.id: 2015-02-06T17:00:30+0100 - 9.00 B
neostore.labeltokenstore.db: 2015-02-06T17:00:30+0100 - 0.00 B
neostore.labeltokenstore.db.id: 2015-02-06T17:00:30+0100 - 9.00 B
neostore.labeltokenstore.db.names: 2015-02-06T17:00:30+0100 - 38.00 B
neostore.labeltokenstore.db.names.id: 2015-02-06T17:00:30+0100 - 9.00 B
neostore.nodestore.db: 2015-02-06T17:00:30+0100 - 900.00 B
neostore.nodestore.db.id: 2015-02-06T17:00:30+0100 - 9.00 B
neostore.nodestore.db.labels: 2015-02-06T17:00:30+0100 - 68.00 B
neostore.nodestore.db.labels.id: 2015-02-06T17:00:30+0100 - 9.00 B
neostore.propertystore.db: 2015-02-06T17:00:30+0100 - 4.80 kB
neostore.propertystore.db.arrays: 2015-02-06T17:00:30+0100 - 128.00 B
neostore.propertystore.db.arrays.id: 2015-02-06T17:00:30+0100 - 9.00 B
neostore.propertystore.db.id: 2015-02-06T17:00:30+0100 - 9.00 B
neostore.propertystore.db.index: 2015-02-06T17:00:30+0100 - 54.00 B
neostore.propertystore.db.index.id: 2015-02-06T17:00:30+0100 - 9.00 B
neostore.propertystore.db.index.keys: 2015-02-06T17:00:30+0100 - 266.00 B
neostore.propertystore.db.index.keys.id: 2015-02-06T17:00:30+0100 - 9.00 B
neostore.propertystore.db.strings: 2015-02-06T17:00:30+0100 - 128.00 B
neostore.propertystore.db.strings.id: 2015-02-06T17:00:30+0100 - 9.00 B
neostore.relationshipgroupstore.db: 2015-02-06T17:00:30+0100 - 25.00 B
neostore.relationshipgroupstore.db.id: 2015-02-06T17:00:30+0100 - 9.00 B
neostore.relationshipstore.db: 2015-02-06T17:00:30+0100 - 1.99 kB
neostore.relationshipstore.db.id: 2015-02-06T17:00:30+0100 - 9.00 B
neostore.relationshiptypestore.db: 2015-02-06T17:00:30+0100 - 10.00 B
neostore.relationshiptypestore.db.id: 2015-02-06T17:00:30+0100 - 9.00 B
neostore.relationshiptypestore.db.names: 2015-02-06T17:00:30+0100 - 114.00 B
neostore.relationshiptypestore.db.names.id: 2015-02-06T17:00:30+0100 - 9.00 B
neostore.schemastore.db: 2015-02-06T17:00:30+0100 - 64.00 B
neostore.schemastore.db.id: 2015-02-06T17:00:30+0100 - 9.00 B
nioneo_logical.log.1: 2015-02-06T17:00:30+0100 - 16.00 B
nioneo_logical.log.active: 2015-02-06T17:00:30+0100 - 4.00 B
nioneo_logical.log.v0: 2015-02-01T17:39:30+0100 - 4.52 kB
nioneo_logical.log.v1: 2015-02-02T02:28:48+0100 - 3.34 kB
nioneo_logical.log.v2: 2015-02-02T02:29:26+0100 - 3.34 kB
nioneo_logical.log.v3: 2015-02-06T01:41:41+0100 - 3.34 kB
nioneo_logical.log.v4: 2015-02-06T01:41:44+0100 - 3.34 kB
nioneo_logical.log.v5: 2015-02-06T17:00:29+0100 - 3.34 kB
schema:
label:
lucene:
segments.gen: 2015-02-01T17:39:30+0100 - 20.00 B
segments_1: 2015-02-01T17:39:30+0100 - 32.00 B
write.lock: 2015-02-06T17:00:30+0100 - 0.00 B
- Total: 2015-02-06T17:00:30+0100 - 52.00 B
- Total: 2015-02-01T17:39:29+0100 - 52.00 B
- Total: 2015-02-01T17:39:29+0100 - 52.00 B
store_lock: 2015-02-01T17:39:29+0100 - 0.00 B
tm_tx_log.1: 2015-02-06T17:00:30+0100 - 0.00 B
2015-02-06 16:00:30.778+0000 INFO [org.neo4j]: --- STARTED diagnostics for KernelDiagnostics:StoreFiles END ---
2015-02-06 16:00:30.816+0000 INFO [org.neo4j]: Database is now ready
2015-02-06 16:00:32.050+0000 INFO [org.neo4j]: Shutdown started
2015-02-06 16:00:32.051+0000 INFO [org.neo4j]: Database is now unavailable
2015-02-06 16:00:32.054+0000 INFO [org.neo4j]: Closed log marathon/index/lucene.log
2015-02-06 16:00:32.055+0000 INFO [org.neo4j]: TM shutting down
2015-02-06 16:00:32.061+0000 INFO [org.neo4j]: Closed log marathon/nioneo_logical.log
2015-02-06 16:00:32.062+0000 INFO [org.neo4j]: marathon/neostore.relationshiptypestore.db.names hit=0 miss=4 switches=0 ooe=0
2015-02-06 16:00:32.063+0000 INFO [org.neo4j]: marathon/neostore.relationshiptypestore.db hit=0 miss=2 switches=0 ooe=0
2015-02-06 16:00:32.064+0000 INFO [org.neo4j]: marathon/neostore.labeltokenstore.db.names hit=0 miss=0 switches=0 ooe=0
2015-02-06 16:00:32.064+0000 INFO [org.neo4j]: marathon/neostore.labeltokenstore.db hit=0 miss=0 switches=0 ooe=0
2015-02-06 16:00:32.065+0000 INFO [org.neo4j]: marathon/neostore.propertystore.db.strings hit=0 miss=0 switches=0 ooe=0
2015-02-06 16:00:32.066+0000 INFO [org.neo4j]: marathon/neostore.propertystore.db.index.keys hit=0 miss=12 switches=0 ooe=0
2015-02-06 16:00:32.066+0000 INFO [org.neo4j]: marathon/neostore.propertystore.db.index hit=0 miss=6 switches=0 ooe=0
2015-02-06 16:00:32.067+0000 INFO [org.neo4j]: marathon/neostore.propertystore.db.arrays hit=0 miss=0 switches=0 ooe=0
2015-02-06 16:00:32.068+0000 INFO [org.neo4j]: marathon/neostore.propertystore.db hit=140 miss=0 switches=0 ooe=0
2015-02-06 16:00:32.069+0000 INFO [org.neo4j]: marathon/neostore.relationshipstore.db hit=82 miss=0 switches=0 ooe=0
2015-02-06 16:00:32.070+0000 INFO [org.neo4j]: marathon/neostore.nodestore.db.labels hit=0 miss=0 switches=0 ooe=0
2015-02-06 16:00:32.071+0000 INFO [org.neo4j]: marathon/neostore.nodestore.db hit=160 miss=0 switches=0 ooe=0
2015-02-06 16:00:32.072+0000 INFO [org.neo4j]: marathon/neostore.schemastore.db hit=0 miss=0 switches=0 ooe=0
2015-02-06 16:00:32.073+0000 INFO [org.neo4j]: marathon/neostore.relationshipgroupstore.db hit=0 miss=0 switches=0 ooe=0
2015-02-06 16:00:32.074+0000 INFO [org.neo4j]: marathon/neostore hit=0 miss=18 switches=0 ooe=0
2015-02-06 16:00:32.075+0000 INFO [org.neo4j]: NeoStore closed
2015-02-06 16:00:32.075+0000 INFO [org.neo4j]: --- STOPPING diagnostics START ---
2015-02-06 16:00:32.075+0000 INFO [org.neo4j]: --- STOPPING diagnostics END ---
2015-06-04 10:16:00.045+0000 INFO [org.neo4j]: No locking implementation specified, defaulting to 'community'
2015-06-04 10:16:00.147+0000 INFO [org.neo4j]: --- INITIALIZED diagnostics START ---
2015-06-04 10:16:00.149+0000 INFO [org.neo4j]: Neo4j Kernel properties:
neostore.propertystore.db.mapped_memory=1326M
neostore.nodestore.db.mapped_memory=368M
neostore.relationshipstore.db.mapped_memory=1624M
neostore.propertystore.db.strings.mapped_memory=1127M
store_dir=marathon
neostore.propertystore.db.arrays.mapped_memory=1277M
ephemeral=false
2015-06-04 10:16:00.152+0000 INFO [org.neo4j]: Diagnostics providers:
org.neo4j.kernel.configuration.Config
org.neo4j.kernel.info.DiagnosticsManager
SYSTEM_MEMORY
JAVA_MEMORY
OPERATING_SYSTEM
JAVA_VIRTUAL_MACHINE
CLASSPATH
LIBRARY_PATH
SYSTEM_PROPERTIES
NETWORK
2015-06-04 10:16:00.152+0000 INFO [org.neo4j]: System memory information:
Total Physical memory: 16.00 GB
Free Physical memory: 6.71 GB
Committed virtual memory: 6.79 GB
Total swap space: 4.00 GB
Free swap space: 993.75 MB
2015-06-04 10:16:00.157+0000 INFO [org.neo4j]: JVM memory information:
Free memory: 244.94 MB
Total memory: 310.00 MB
Max memory: 3.56 GB
Garbage Collector: PS Scavenge: [PS Eden Space, PS Survivor Space]
Garbage Collector: PS MarkSweep: [PS Eden Space, PS Survivor Space, PS Old Gen, PS Perm Gen]
Memory Pool: Code Cache (Non-heap memory): committed=3.31 MB, used=3.26 MB, max=48.00 MB, threshold=0.00 B
Memory Pool: PS Eden Space (Heap memory): committed=129.00 MB, used=45.21 MB, max=1.31 GB, threshold=?
Memory Pool: PS Survivor Space (Heap memory): committed=10.50 MB, used=10.49 MB, max=10.50 MB, threshold=?
Memory Pool: PS Old Gen (Heap memory): committed=170.50 MB, used=11.87 MB, max=2.67 GB, threshold=0.00 B
Memory Pool: PS Perm Gen (Non-heap memory): committed=25.50 MB, used=25.18 MB, max=82.00 MB, threshold=0.00 B
2015-06-04 10:16:00.164+0000 INFO [org.neo4j]: Operating system information:
Operating System: Mac OS X; version: 10.10.3; arch: x86_64; cpus: 8
Max number of file descriptors: 10240
Number of open file descriptors: 78
Process id: 38491@Dierk-Konigs-MacBook-Pro.local
Byte order: LITTLE_ENDIAN
Local timezone: Europe/Zurich
2015-06-04 10:16:00.167+0000 INFO [org.neo4j]: JVM information:
VM Name: Java HotSpot(TM) 64-Bit Server VM
VM Vendor: Oracle Corporation
VM Version: 24.51-b03
JIT compiler: HotSpot 64-Bit Tiered Compilers
VM Arguments: [-Dscript.name=/Users/dierkkoenig/.gvm/groovy/current/bin/groovy, -Dprogram.name=groovy, -Dgroovy.starter.conf=/Users/dierkkoenig/.gvm/groovy/current/conf/groovy-starter.conf, -Dgroovy.home=/Users/dierkkoenig/.gvm/groovy/current, -Dtools.jar=/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/lib/tools.jar]
2015-06-04 10:16:00.167+0000 INFO [org.neo4j]: Java classpath:
[loader.3] file:/System/Library/Java/Extensions/dns_sd.jar
[loader.2] file:/Users/dierkkoenig/.gvm/groovy/2.4.3/lib/groovy-2.4.3.jar
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/jce.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/groovy-test-2.4.3.jar
[loader.3] file:/Users/dierkkoenig/Library/Java/Extensions/libJNPRAuthKit.jnilib
[loader.3] file:/System/Library/Java/Extensions/MRJToolkit.jar
[loader.3] file:/opt/subversion/lib/libsvnjavahl-1.0.0.0.dylib
[loader.3] file:/System/Library/Java/Extensions/vecmath.jar
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/sunrsasign.jar
[loader.3] file:/System/Library/Java/Extensions/libmlib_jai.jnilib
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/ant-launcher-1.9.4.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/groovy-xml-2.4.3.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/groovy-json-2.4.3.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/groovy-groovysh-2.4.3.jar
[loader.3] file:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/ext/sunec.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/groovy-bsf-2.4.3.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/jsp-api-2.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/groovy-docgenerator-2.4.3.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/groovy-servlet-2.4.3.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/ant-junit-1.9.4.jar
[loader.3] file:/System/Library/Java/Extensions/libJ3D.jnilib
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/jcommander-1.47.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/groovy-jsr223-2.4.3.jar
[loader.3] file:/System/Library/Java/Extensions/mlibwrapper_jai.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.neo4j/neo4j-primitive-collections/jars/neo4j-primitive-collections-2.1.6.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/groovy-testng-2.4.3.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/jline-2.12.jar
[classpath + loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/groovy-2.4.3.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.apache.lucene/lucene-core/jars/lucene-core-3.6.2.jar
[loader.3] file:/Library/Java/Extensions/librxtxSerial.jnilib
[loader.3] file:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/ext/localedata.jar
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/charsets.jar
[loader.3] file:/System/Library/Java/Extensions/libJ3DAudio.jnilib
[loader.3] file:/System/Library/Java/Extensions/libAppleScriptEngine.jnilib
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/jfr.jar
[loader.3] file:/System/Library/Java/Extensions/j3daudio.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/multiverse-core-0.7.0.jar
[loader.3] file:/System/Library/Java/Extensions/libJ3DUtils.jnilib
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/gpars-1.2.1.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.neo4j/neo4j-kernel/jars/neo4j-kernel-2.1.6.jar
[loader.3] file:/System/Library/Java/Extensions/j3dcore.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/servlet-api-2.4.jar
[loader.3] file:/usr/lib/java/libjdns_sd.jnilib
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/commons-logging-1.2.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/groovy-templates-2.4.3.jar
[loader.3] file:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/jsse.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/groovy-console-2.4.3.jar
[loader.3] file:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/ext/zipfs.jar
[loader.3] file:/System/Library/Java/Extensions/j3dutils.jar
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/classes
[loader.3] file:/System/Library/Java/Extensions/jai_core.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/xmlpull-1.1.3.1.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.neo4j/neo4j-lucene-index/jars/neo4j-lucene-index-2.1.6.jar
[loader.1] file:/Users/dierkkoenig/.groovy/grapes/org.hsqldb/hsqldb/jars/hsqldb-2.3.2.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/jansi-1.11.jar
[loader.3] file:/System/Library/Java/Extensions/jai_codec.jar
[loader.3] file:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/ant-1.9.4.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/qdox-1.12.1.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/ivy-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/bsf-2.4.0.jar
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/resources.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/jsr166y-1.7.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/junit-4.12.jar
[loader.3] file:/Library/Java/Extensions/RXTXcomm.jar
[loader.1] file:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/lib/tools.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/ant-antlr-1.9.4.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.apache.geronimo.specs/geronimo-jta_1.1_spec/jars/geronimo-jta_1.1_spec-1.1.1.jar
[loader.3] file:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/ext/dnsns.jar
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/rt.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/hamcrest-core-1.3.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/groovy-ant-2.4.3.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/groovy-groovydoc-2.4.3.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/openbeans-1.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/groovy-nio-2.4.3.jar
[loader.3] file:/System/Library/Java/Extensions/AppleScriptEngine.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/testng-6.8.13.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/xstream-1.4.7.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/commons-cli-1.2.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/groovy-sql-2.4.3.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/groovy-swing-2.4.3.jar
[loader.1] file:/projects/git/GroovyInAction/listings/chap13/./
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/groovy-jmx-2.4.3.jar
2015-06-04 10:16:00.172+0000 INFO [org.neo4j]: Library path:
/Users/dierkkoenig/Library/Java/Extensions
/Library/Java/Extensions
/Network/Library/Java/Extensions
/System/Library/Java/Extensions
/usr/lib/java
/projects/git/GroovyInAction/listings/chap13
2015-06-04 10:16:00.172+0000 INFO [org.neo4j]: System.properties:
sun.boot.library.path = /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib
user.country.format = CH
gopherProxySet = false
path.separator = :
file.encoding.pkg = sun.io
user.country = DE
sun.java.launcher = SUN_STANDARD
sun.os.patch.level = unknown
program.name = groovy
user.dir = /projects/git/GroovyInAction/listings/chap13
tools.jar = /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/lib/tools.jar
sun.jnu.encoding = UTF-8
script.name = /Users/dierkkoenig/.gvm/groovy/current/bin/groovy
sun.management.compiler = HotSpot 64-Bit Tiered Compilers
http.nonProxyHosts = local|*.local|169.254/16|*.169.254/16
user.home = /Users/dierkkoenig
user.timezone = Europe/Zurich
file.encoding = UTF-8
user.name = dierkkoenig
sun.java.command = org.codehaus.groovy.tools.GroovyStarter --main groovy.ui.GroovyMain --conf /Users/dierkkoenig/.gvm/groovy/current/conf/groovy-starter.conf --classpath . ../../test
sun.arch.data.model = 64
user.language = de
awt.toolkit = sun.lwawt.macosx.LWCToolkit
file.separator = /
sun.io.unicode.encoding = UnicodeBig
sun.cpu.endian = little
groovy.starter.conf = /Users/dierkkoenig/.gvm/groovy/current/conf/groovy-starter.conf
socksNonProxyHosts = local|*.local|169.254/16|*.169.254/16
ftp.nonProxyHosts = local|*.local|169.254/16|*.169.254/16
groovy.home = /Users/dierkkoenig/.gvm/groovy/current
sun.cpu.isalist =
2015-06-04 10:16:00.172+0000 INFO [org.neo4j]: Network information:
Interface awdl0:
address: fe80:0:0:0:e42b:b3ff:fef6:4282%9
Interface en0:
address: fe80:0:0:0:2acf:e9ff:fe19:ca6d%4
address: 10.0.1.19
Interface lo0:
address: fe80:0:0:0:0:0:0:1%1
address: 0:0:0:0:0:0:0:1
address: 127.0.0.1
2015-06-04 10:16:00.175+0000 INFO [org.neo4j]: --- INITIALIZED diagnostics END ---
2015-06-04 10:16:00.247+0000 INFO [org.neo4j]: [marathon/neostore.relationshiptypestore.db.names] brickCount=0 brickSize=0b mappedMem=0b (storeSize=114b)
2015-06-04 10:16:00.248+0000 INFO [org.neo4j]: [marathon/neostore.relationshiptypestore.db] brickCount=0 brickSize=0b mappedMem=0b (storeSize=10b)
2015-06-04 10:16:00.248+0000 INFO [org.neo4j]: [marathon/neostore.labeltokenstore.db.names] brickCount=0 brickSize=0b mappedMem=0b (storeSize=38b)
2015-06-04 10:16:00.250+0000 INFO [org.neo4j]: [marathon/neostore.labeltokenstore.db] brickCount=0 brickSize=0b mappedMem=0b (storeSize=0b)
2015-06-04 10:16:00.250+0000 INFO [org.neo4j]: [marathon/neostore.propertystore.db.strings] brickCount=0 brickSize=1181696b mappedMem=1181745152b (storeSize=128b)
2015-06-04 10:16:00.251+0000 INFO [org.neo4j]: [marathon/neostore.propertystore.db.index.keys] brickCount=0 brickSize=0b mappedMem=0b (storeSize=266b)
2015-06-04 10:16:00.251+0000 INFO [org.neo4j]: [marathon/neostore.propertystore.db.index] brickCount=0 brickSize=0b mappedMem=0b (storeSize=54b)
2015-06-04 10:16:00.252+0000 INFO [org.neo4j]: [marathon/neostore.propertystore.db.arrays] brickCount=0 brickSize=1339008b mappedMem=1339031552b (storeSize=128b)
2015-06-04 10:16:00.267+0000 INFO [org.neo4j]: [marathon/neostore.propertystore.db] brickCount=0 brickSize=1390392b mappedMem=1390411776b (storeSize=5740b)
2015-06-04 10:16:00.270+0000 INFO [org.neo4j]: [marathon/neostore.relationshipstore.db] brickCount=0 brickSize=1702856b mappedMem=1702887424b (storeSize=2380b)
2015-06-04 10:16:00.270+0000 INFO [org.neo4j]: [marathon/neostore.nodestore.db.labels] brickCount=0 brickSize=0b mappedMem=0b (storeSize=68b)
2015-06-04 10:16:00.272+0000 INFO [org.neo4j]: [marathon/neostore.nodestore.db] brickCount=0 brickSize=385875b mappedMem=385875968b (storeSize=1050b)
2015-06-04 10:16:00.273+0000 INFO [org.neo4j]: [marathon/neostore.schemastore.db] brickCount=0 brickSize=0b mappedMem=0b (storeSize=64b)
2015-06-04 10:16:00.274+0000 INFO [org.neo4j]: [marathon/neostore.relationshipgroupstore.db] brickCount=0 brickSize=0b mappedMem=0b (storeSize=25b)
2015-06-04 10:16:00.275+0000 INFO [org.neo4j]: [marathon/neostore] brickCount=0 brickSize=0b mappedMem=0b (storeSize=81b)
2015-06-04 10:16:00.529+0000 INFO [org.neo4j]: Opened logical log [marathon/nioneo_logical.log.1] version=7, lastTxId=16 (clean)
2015-06-04 10:16:00.534+0000 INFO [org.neo4j]: TM opening log: marathon/tm_tx_log.1
2015-06-04 10:16:00.540+0000 INFO [org.neo4j]: Kernel health set to OK
2015-06-04 10:16:00.551+0000 INFO [org.neo4j]: Opened logical log [marathon/index/lucene.log.1] version=7, lastTxId=1 (clean)
2015-06-04 10:16:00.555+0000 INFO [org.neo4j]: --- STARTED diagnostics for KernelDiagnostics:Versions START ---
2015-06-04 10:16:00.555+0000 INFO [org.neo4j]: Graph Database: org.neo4j.kernel.EmbeddedGraphDatabase StoreId{creationTime=1422808769411, randomId=1762119504651947014, storeVersion=14406081294923270, upgradeTime=1422808769411, upgradeId=1762119504651947014}
2015-06-04 10:16:00.558+0000 INFO [org.neo4j]: Kernel version: Neo4j - Graph Database Kernel (neo4j-kernel), version: 2.1.6
2015-06-04 10:16:00.558+0000 INFO [org.neo4j]: Neo4j component versions:
2015-06-04 10:16:00.559+0000 INFO [org.neo4j]: Neo4j - Lucene Index (neo4j-lucene-index), version: 2.1.6; revision: 2.1.6:2.1-maint:605/0d7f25fc608f15c54ec1a01f4ba4564ebfb1071a
2015-06-04 10:16:00.559+0000 INFO [org.neo4j]: Neo4j - Graph Database Kernel (neo4j-kernel), version: 2.1.6; revision: 2.1.6:2.1-maint:605/0d7f25fc608f15c54ec1a01f4ba4564ebfb1071a
2015-06-04 10:16:00.559+0000 INFO [org.neo4j]: --- STARTED diagnostics for KernelDiagnostics:Versions END ---
2015-06-04 10:16:00.561+0000 INFO [org.neo4j]: --- STARTED diagnostics for NEO_STORE_VERSIONS START ---
2015-06-04 10:16:00.562+0000 INFO [org.neo4j]: Store versions:
Store versions:
NeoStore v0.A.3
SchemaStore v0.A.3
NodeStore v0.A.3
RelationshipStore v0.A.3
RelationshipTypeStore v0.A.3
LabelTokenStore v0.A.3
PropertyStore v0.A.3
PropertyIndexStore v0.A.3
StringPropertyStore v0.A.3
ArrayPropertyStore v0.A.3
RelationshipGroupStore v0.A.3
2015-06-04 10:16:00.562+0000 INFO [org.neo4j]: --- STARTED diagnostics for NEO_STORE_VERSIONS END ---
2015-06-04 10:16:00.562+0000 INFO [org.neo4j]: --- STARTED diagnostics for NEO_STORE_ID_USAGE START ---
2015-06-04 10:16:00.562+0000 INFO [org.neo4j]: Id usage:
Id usage:
SchemaStore: used=1 high=0
NodeStore: used=70 high=69
RelationshipStore: used=70 high=69
RelationshipTypeStore: used=2 high=1
LabelTokenStore: used=0 high=-1
PropertyStore: used=140 high=139
PropertyIndexStore: used=6 high=5
StringPropertyStore: used=1 high=0
ArrayPropertyStore: used=1 high=0
RelationshipGroupStore: used=1 high=0
2015-06-04 10:16:00.563+0000 INFO [org.neo4j]: --- STARTED diagnostics for NEO_STORE_ID_USAGE END ---
2015-06-04 10:16:00.563+0000 INFO [org.neo4j]: --- STARTED diagnostics for PERSISTENCE_WINDOW_POOL_STATS START ---
2015-06-04 10:16:00.563+0000 INFO [org.neo4j]: --- STARTED diagnostics for PERSISTENCE_WINDOW_POOL_STATS END ---
2015-06-04 10:16:00.563+0000 INFO [org.neo4j]: --- STARTED diagnostics for KernelDiagnostics:StoreFiles START ---
2015-06-04 10:16:00.563+0000 INFO [org.neo4j]: Disk space on partition (Total / Free / Free %): 499082485760 / 127505285120 / 25
Storage files: (filename : modification date - size)
active_tx_log: 2015-02-01T17:39:29+0100 - 11.00 B
index:
lucene-store.db: 2015-02-06T17:00:32+0100 - 40.00 B
lucene.log.1: 2015-06-04T12:16:00+0200 - 16.00 B
lucene.log.active: 2015-06-04T12:16:00+0200 - 4.00 B
lucene.log.v0: 2015-02-01T17:39:30+0100 - 16.00 B
lucene.log.v1: 2015-02-02T02:28:48+0100 - 16.00 B
lucene.log.v2: 2015-02-02T02:29:26+0100 - 16.00 B
lucene.log.v3: 2015-02-06T01:41:41+0100 - 16.00 B
lucene.log.v4: 2015-02-06T01:41:44+0100 - 16.00 B
lucene.log.v5: 2015-02-06T17:00:29+0100 - 16.00 B
lucene.log.v6: 2015-02-06T17:00:32+0100 - 16.00 B
- Total: 2015-06-04T12:16:00+0200 - 172.00 B
lock: 2015-06-04T12:16:00+0200 - 0.00 B
messages.log: 2015-06-04T12:16:00+0200 - 197.17 kB
neostore: 2015-06-04T12:16:00+0200 - 81.00 B
neostore.id: 2015-06-04T12:16:00+0200 - 9.00 B
neostore.labeltokenstore.db: 2015-06-04T12:16:00+0200 - 0.00 B
neostore.labeltokenstore.db.id: 2015-06-04T12:16:00+0200 - 9.00 B
neostore.labeltokenstore.db.names: 2015-06-04T12:16:00+0200 - 38.00 B
neostore.labeltokenstore.db.names.id: 2015-06-04T12:16:00+0200 - 9.00 B
neostore.nodestore.db: 2015-06-04T12:16:00+0200 - 1.03 kB
neostore.nodestore.db.id: 2015-06-04T12:16:00+0200 - 9.00 B
neostore.nodestore.db.labels: 2015-06-04T12:16:00+0200 - 68.00 B
neostore.nodestore.db.labels.id: 2015-06-04T12:16:00+0200 - 9.00 B
neostore.propertystore.db: 2015-06-04T12:16:00+0200 - 5.61 kB
neostore.propertystore.db.arrays: 2015-06-04T12:16:00+0200 - 128.00 B
neostore.propertystore.db.arrays.id: 2015-06-04T12:16:00+0200 - 9.00 B
neostore.propertystore.db.id: 2015-06-04T12:16:00+0200 - 9.00 B
neostore.propertystore.db.index: 2015-06-04T12:16:00+0200 - 54.00 B
neostore.propertystore.db.index.id: 2015-06-04T12:16:00+0200 - 9.00 B
neostore.propertystore.db.index.keys: 2015-06-04T12:16:00+0200 - 266.00 B
neostore.propertystore.db.index.keys.id: 2015-06-04T12:16:00+0200 - 9.00 B
neostore.propertystore.db.strings: 2015-06-04T12:16:00+0200 - 128.00 B
neostore.propertystore.db.strings.id: 2015-06-04T12:16:00+0200 - 9.00 B
neostore.relationshipgroupstore.db: 2015-06-04T12:16:00+0200 - 25.00 B
neostore.relationshipgroupstore.db.id: 2015-06-04T12:16:00+0200 - 9.00 B
neostore.relationshipstore.db: 2015-06-04T12:16:00+0200 - 2.32 kB
neostore.relationshipstore.db.id: 2015-06-04T12:16:00+0200 - 9.00 B
neostore.relationshiptypestore.db: 2015-06-04T12:16:00+0200 - 10.00 B
neostore.relationshiptypestore.db.id: 2015-06-04T12:16:00+0200 - 9.00 B
neostore.relationshiptypestore.db.names: 2015-06-04T12:16:00+0200 - 114.00 B
neostore.relationshiptypestore.db.names.id: 2015-06-04T12:16:00+0200 - 9.00 B
neostore.schemastore.db: 2015-06-04T12:16:00+0200 - 64.00 B
neostore.schemastore.db.id: 2015-06-04T12:16:00+0200 - 9.00 B
nioneo_logical.log.1: 2015-06-04T12:16:00+0200 - 16.00 B
nioneo_logical.log.active: 2015-06-04T12:16:00+0200 - 4.00 B
nioneo_logical.log.v0: 2015-02-01T17:39:30+0100 - 4.52 kB
nioneo_logical.log.v1: 2015-02-02T02:28:48+0100 - 3.34 kB
nioneo_logical.log.v2: 2015-02-02T02:29:26+0100 - 3.34 kB
nioneo_logical.log.v3: 2015-02-06T01:41:41+0100 - 3.34 kB
nioneo_logical.log.v4: 2015-02-06T01:41:44+0100 - 3.34 kB
nioneo_logical.log.v5: 2015-02-06T17:00:29+0100 - 3.34 kB
nioneo_logical.log.v6: 2015-02-06T17:00:32+0100 - 3.34 kB
schema:
label:
lucene:
segments.gen: 2015-02-01T17:39:30+0100 - 20.00 B
segments_1: 2015-02-01T17:39:30+0100 - 32.00 B
write.lock: 2015-06-04T12:16:00+0200 - 0.00 B
- Total: 2015-06-04T12:16:00+0200 - 52.00 B
- Total: 2015-02-01T17:39:29+0100 - 52.00 B
- Total: 2015-02-01T17:39:29+0100 - 52.00 B
store_lock: 2015-02-01T17:39:29+0100 - 0.00 B
tm_tx_log.1: 2015-06-04T12:16:00+0200 - 0.00 B
2015-06-04 10:16:00.577+0000 INFO [org.neo4j]: --- STARTED diagnostics for KernelDiagnostics:StoreFiles END ---
2015-06-04 10:16:00.624+0000 INFO [org.neo4j]: Database is now ready
2015-06-04 10:16:00.866+0000 INFO [org.neo4j]: Shutdown started
2015-06-04 10:16:00.867+0000 INFO [org.neo4j]: Database is now unavailable
2015-06-04 10:16:00.870+0000 INFO [org.neo4j]: Closed log marathon/index/lucene.log
2015-06-04 10:16:00.870+0000 INFO [org.neo4j]: TM shutting down
2015-06-04 10:16:00.875+0000 INFO [org.neo4j]: Closed log marathon/nioneo_logical.log
2015-06-04 10:16:00.876+0000 INFO [org.neo4j]: marathon/neostore.relationshiptypestore.db.names hit=0 miss=4 switches=0 ooe=0
2015-06-04 10:16:00.877+0000 INFO [org.neo4j]: marathon/neostore.relationshiptypestore.db hit=0 miss=2 switches=0 ooe=0
2015-06-04 10:16:00.878+0000 INFO [org.neo4j]: marathon/neostore.labeltokenstore.db.names hit=0 miss=0 switches=0 ooe=0
2015-06-04 10:16:00.878+0000 INFO [org.neo4j]: marathon/neostore.labeltokenstore.db hit=0 miss=0 switches=0 ooe=0
2015-06-04 10:16:00.879+0000 INFO [org.neo4j]: marathon/neostore.propertystore.db.strings hit=0 miss=0 switches=0 ooe=0
2015-06-04 10:16:00.880+0000 INFO [org.neo4j]: marathon/neostore.propertystore.db.index.keys hit=0 miss=12 switches=0 ooe=0
2015-06-04 10:16:00.880+0000 INFO [org.neo4j]: marathon/neostore.propertystore.db.index hit=0 miss=6 switches=0 ooe=0
2015-06-04 10:16:00.881+0000 INFO [org.neo4j]: marathon/neostore.propertystore.db.arrays hit=0 miss=0 switches=0 ooe=0
2015-06-04 10:16:00.882+0000 INFO [org.neo4j]: marathon/neostore.propertystore.db hit=20 miss=0 switches=0 ooe=0
2015-06-04 10:16:00.883+0000 INFO [org.neo4j]: marathon/neostore.relationshipstore.db hit=10 miss=0 switches=0 ooe=0
2015-06-04 10:16:00.883+0000 INFO [org.neo4j]: marathon/neostore.nodestore.db.labels hit=0 miss=0 switches=0 ooe=0
2015-06-04 10:16:00.884+0000 INFO [org.neo4j]: marathon/neostore.nodestore.db hit=10 miss=0 switches=0 ooe=0
2015-06-04 10:16:00.885+0000 INFO [org.neo4j]: marathon/neostore.schemastore.db hit=0 miss=0 switches=0 ooe=0
2015-06-04 10:16:00.885+0000 INFO [org.neo4j]: marathon/neostore.relationshipgroupstore.db hit=0 miss=0 switches=0 ooe=0
2015-06-04 10:16:00.886+0000 INFO [org.neo4j]: marathon/neostore hit=0 miss=18 switches=0 ooe=0
2015-06-04 10:16:00.887+0000 INFO [org.neo4j]: NeoStore closed
2015-06-04 10:16:00.887+0000 INFO [org.neo4j]: --- STOPPING diagnostics START ---
2015-06-04 10:16:00.888+0000 INFO [org.neo4j]: --- STOPPING diagnostics END ---
2015-06-04 10:16:01.881+0000 INFO [org.neo4j]: No locking implementation specified, defaulting to 'community'
2015-06-04 10:16:01.946+0000 INFO [org.neo4j]: --- INITIALIZED diagnostics START ---
2015-06-04 10:16:01.947+0000 INFO [org.neo4j]: Neo4j Kernel properties:
neostore.propertystore.db.mapped_memory=1326M
neostore.nodestore.db.mapped_memory=368M
neostore.relationshipstore.db.mapped_memory=1624M
neostore.propertystore.db.strings.mapped_memory=1127M
store_dir=marathon
neostore.propertystore.db.arrays.mapped_memory=1277M
ephemeral=false
2015-06-04 10:16:01.949+0000 INFO [org.neo4j]: Diagnostics providers:
org.neo4j.kernel.configuration.Config
org.neo4j.kernel.info.DiagnosticsManager
SYSTEM_MEMORY
JAVA_MEMORY
OPERATING_SYSTEM
JAVA_VIRTUAL_MACHINE
CLASSPATH
LIBRARY_PATH
SYSTEM_PROPERTIES
NETWORK
2015-06-04 10:16:01.950+0000 INFO [org.neo4j]: System memory information:
Total Physical memory: 16.00 GB
Free Physical memory: 6.62 GB
Committed virtual memory: 6.81 GB
Total swap space: 4.00 GB
Free swap space: 993.75 MB
2015-06-04 10:16:01.951+0000 INFO [org.neo4j]: JVM memory information:
Free memory: 154.50 MB
Total memory: 310.00 MB
Max memory: 3.56 GB
Garbage Collector: PS Scavenge: [PS Eden Space, PS Survivor Space]
Garbage Collector: PS MarkSweep: [PS Eden Space, PS Survivor Space, PS Old Gen, PS Perm Gen]
Memory Pool: Code Cache (Non-heap memory): committed=4.19 MB, used=4.08 MB, max=48.00 MB, threshold=0.00 B
Memory Pool: PS Eden Space (Heap memory): committed=129.00 MB, used=126.13 MB, max=1.30 GB, threshold=?
Memory Pool: PS Survivor Space (Heap memory): committed=10.50 MB, used=10.48 MB, max=10.50 MB, threshold=?
Memory Pool: PS Old Gen (Heap memory): committed=170.50 MB, used=21.41 MB, max=2.67 GB, threshold=0.00 B
Memory Pool: PS Perm Gen (Non-heap memory): committed=33.50 MB, used=33.47 MB, max=82.00 MB, threshold=0.00 B
2015-06-04 10:16:01.953+0000 INFO [org.neo4j]: Operating system information:
Operating System: Mac OS X; version: 10.10.3; arch: x86_64; cpus: 8
Max number of file descriptors: 10240
Number of open file descriptors: 101
Process id: 38491@Dierk-Konigs-MacBook-Pro.local
Byte order: LITTLE_ENDIAN
Local timezone: Europe/Zurich
2015-06-04 10:16:01.953+0000 INFO [org.neo4j]: JVM information:
VM Name: Java HotSpot(TM) 64-Bit Server VM
VM Vendor: Oracle Corporation
VM Version: 24.51-b03
JIT compiler: HotSpot 64-Bit Tiered Compilers
VM Arguments: [-Dscript.name=/Users/dierkkoenig/.gvm/groovy/current/bin/groovy, -Dprogram.name=groovy, -Dgroovy.starter.conf=/Users/dierkkoenig/.gvm/groovy/current/conf/groovy-starter.conf, -Dgroovy.home=/Users/dierkkoenig/.gvm/groovy/current, -Dtools.jar=/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/lib/tools.jar]
2015-06-04 10:16:01.954+0000 INFO [org.neo4j]: Java classpath:
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.parboiled/parboiled-scala_2.10/jars/parboiled-scala_2.10-1.1.6.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/groovy-test-2.4.3.jar
[loader.2] file:/Users/dierkkoenig/.gvm/groovy/2.4.3/lib/groovy-2.4.3.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/commons-configuration/commons-configuration/jars/commons-configuration-1.6.jar
[loader.3] file:/Users/dierkkoenig/Library/Java/Extensions/libJNPRAuthKit.jnilib
[loader.3] file:/System/Library/Java/Extensions/vecmath.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/groovy-xml-2.4.3.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/commons-logging/commons-logging/jars/commons-logging-1.1.1.jar
[loader.3] file:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/ext/sunec.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/jsp-api-2.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/ant-junit-1.9.4.jar
[loader.3] file:/System/Library/Java/Extensions/libJ3D.jnilib
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/jcommander-1.47.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/groovy-jsr223-2.4.3.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/jline-2.12.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/commons-lang/commons-lang/jars/commons-lang-2.4.jar
[loader.3] file:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/ext/localedata.jar
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/charsets.jar
[loader.3] file:/System/Library/Java/Extensions/j3daudio.jar
[loader.3] file:/System/Library/Java/Extensions/j3dcore.jar
[loader.3] file:/usr/lib/java/libjdns_sd.jnilib
[loader.3] file:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.neo4j/neo4j-management/jars/neo4j-management-2.1.6.jar
[loader.3] file:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/ext/zipfs.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/com.tinkerpop.gremlin/gremlin-groovy/jars/gremlin-groovy-2.6.0.jar
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/classes
[loader.3] file:/System/Library/Java/Extensions/jai_core.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/xmlpull-1.1.3.1.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/jansi-1.11.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/ant-1.9.4.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/com.tinkerpop.gremlin/gremlin-java/jars/gremlin-java-2.6.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/ivy-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/bsf-2.4.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/junit-4.12.jar
[loader.3] file:/Library/Java/Extensions/RXTXcomm.jar
[loader.1] file:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/lib/tools.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/ant-antlr-1.9.4.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.apache.geronimo.specs/geronimo-jta_1.1_spec/jars/geronimo-jta_1.1_spec-1.1.1.jar
[loader.3] file:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/ext/dnsns.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/hamcrest-core-1.3.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/groovy-ant-2.4.3.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/groovy-groovydoc-2.4.3.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/openbeans-1.0.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.neo4j/neo4j-cypher-commons/jars/neo4j-cypher-commons-2.1.6.jar
[loader.3] file:/System/Library/Java/Extensions/AppleScriptEngine.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/testng-6.8.13.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/xstream-1.4.7.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/groovy-sql-2.4.3.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/groovy-swing-2.4.3.jar
[loader.1] file:/projects/git/GroovyInAction/listings/chap13/./
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.parboiled/parboiled-core/jars/parboiled-core-1.1.6.jar
[loader.3] file:/System/Library/Java/Extensions/dns_sd.jar
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/jce.jar
[loader.3] file:/System/Library/Java/Extensions/MRJToolkit.jar
[loader.3] file:/opt/subversion/lib/libsvnjavahl-1.0.0.0.dylib
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/commons-beanutils/commons-beanutils/jars/commons-beanutils-1.7.0.jar
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/sunrsasign.jar
[loader.3] file:/System/Library/Java/Extensions/libmlib_jai.jnilib
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/ant-launcher-1.9.4.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/groovy-json-2.4.3.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/groovy-groovysh-2.4.3.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/groovy-bsf-2.4.3.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/groovy-docgenerator-2.4.3.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/groovy-servlet-2.4.3.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/commons-digester/commons-digester/jars/commons-digester-1.8.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.neo4j/neo4j-cypher-compiler-2.0/jars/neo4j-cypher-compiler-2.0-2.0.4.jar
[loader.3] file:/System/Library/Java/Extensions/mlibwrapper_jai.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.neo4j/neo4j-primitive-collections/jars/neo4j-primitive-collections-2.1.6.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/groovy-testng-2.4.3.jar
[classpath + loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/groovy-2.4.3.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.apache.lucene/lucene-core/jars/lucene-core-3.6.2.jar
[loader.3] file:/Library/Java/Extensions/librxtxSerial.jnilib
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.neo4j/neo4j-cypher/jars/neo4j-cypher-2.1.6.jar
[loader.3] file:/System/Library/Java/Extensions/libJ3DAudio.jnilib
[loader.3] file:/System/Library/Java/Extensions/libAppleScriptEngine.jnilib
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/jfr.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.scala-lang/scala-library/jars/scala-library-2.10.4.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/multiverse-core-0.7.0.jar
[loader.3] file:/System/Library/Java/Extensions/libJ3DUtils.jnilib
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/gpars-1.2.1.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.neo4j/neo4j-kernel/jars/neo4j-kernel-2.1.6.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/servlet-api-2.4.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/commons-logging-1.2.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/groovy-templates-2.4.3.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/groovy-console-2.4.3.jar
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/jsse.jar
[loader.3] file:/System/Library/Java/Extensions/j3dutils.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.neo4j/neo4j-lucene-index/jars/neo4j-lucene-index-2.1.6.jar
[loader.1] file:/Users/dierkkoenig/.groovy/grapes/org.hsqldb/hsqldb/jars/hsqldb-2.3.2.jar
[loader.3] file:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar
[loader.3] file:/System/Library/Java/Extensions/jai_codec.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/commons-beanutils/commons-beanutils-core/jars/commons-beanutils-core-1.8.0.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/com.tinkerpop.blueprints/blueprints-neo4j2-graph/jars/blueprints-neo4j2-graph-2.6.0.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/qdox-1.12.1.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/com.tinkerpop.blueprints/blueprints-core/jars/blueprints-core-2.6.0.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.neo4j/neo4j-cypher-compiler-2.1/jars/neo4j-cypher-compiler-2.1-2.1.6.jar
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/resources.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/jsr166y-1.7.0.jar
[bootstrap] /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/rt.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/commons-collections/commons-collections/jars/commons-collections-3.2.1.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/groovy-nio-2.4.3.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/com.tinkerpop/pipes/jars/pipes-2.6.0.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/com.googlecode.concurrentlinkedhashmap/concurrentlinkedhashmap-lru/jars/concurrentlinkedhashmap-lru-1.4.1.jar
[loader.0] file:/Users/dierkkoenig/.groovy/grapes/org.neo4j/neo4j-cypher-compiler-1.9/jars/neo4j-cypher-compiler-1.9-2.0.4.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/commons-cli-1.2.jar
[loader.1] file:/Users/dierkkoenig/.gvm/groovy/current/lib/groovy-jmx-2.4.3.jar
2015-06-04 10:16:01.958+0000 INFO [org.neo4j]: Library path:
/Users/dierkkoenig/Library/Java/Extensions
/Library/Java/Extensions
/Network/Library/Java/Extensions
/System/Library/Java/Extensions
/usr/lib/java
/projects/git/GroovyInAction/listings/chap13
2015-06-04 10:16:01.958+0000 INFO [org.neo4j]: System.properties:
sun.boot.library.path = /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib
user.country.format = CH
gopherProxySet = false
path.separator = :
file.encoding.pkg = sun.io
user.country = DE
sun.java.launcher = SUN_STANDARD
sun.os.patch.level = unknown
program.name = groovy
user.dir = /projects/git/GroovyInAction/listings/chap13
tools.jar = /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/lib/tools.jar
sun.jnu.encoding = UTF-8
script.name = /Users/dierkkoenig/.gvm/groovy/current/bin/groovy
sun.management.compiler = HotSpot 64-Bit Tiered Compilers
http.nonProxyHosts = local|*.local|169.254/16|*.169.254/16
user.home = /Users/dierkkoenig
user.timezone = Europe/Zurich
file.encoding = UTF-8
user.name = dierkkoenig
sun.java.command = org.codehaus.groovy.tools.GroovyStarter --main groovy.ui.GroovyMain --conf /Users/dierkkoenig/.gvm/groovy/current/conf/groovy-starter.conf --classpath . ../../test
sun.arch.data.model = 64
user.language = de
awt.toolkit = sun.lwawt.macosx.LWCToolkit
file.separator = /
sun.io.unicode.encoding = UnicodeBig
sun.cpu.endian = little
groovy.starter.conf = /Users/dierkkoenig/.gvm/groovy/current/conf/groovy-starter.conf
socksNonProxyHosts = local|*.local|169.254/16|*.169.254/16
ftp.nonProxyHosts = local|*.local|169.254/16|*.169.254/16
groovy.home = /Users/dierkkoenig/.gvm/groovy/current
sun.cpu.isalist =
2015-06-04 10:16:01.959+0000 INFO [org.neo4j]: Network information:
Interface awdl0:
address: fe80:0:0:0:e42b:b3ff:fef6:4282%9
Interface en0:
address: fe80:0:0:0:2acf:e9ff:fe19:ca6d%4
address: 10.0.1.19
Interface lo0:
address: fe80:0:0:0:0:0:0:1%1
address: 0:0:0:0:0:0:0:1
address: 127.0.0.1
2015-06-04 10:16:01.959+0000 INFO [org.neo4j]: --- INITIALIZED diagnostics END ---
2015-06-04 10:16:02.025+0000 INFO [org.neo4j]: [marathon/neostore.relationshiptypestore.db.names] brickCount=0 brickSize=0b mappedMem=0b (storeSize=114b)
2015-06-04 10:16:02.026+0000 INFO [org.neo4j]: [marathon/neostore.relationshiptypestore.db] brickCount=0 brickSize=0b mappedMem=0b (storeSize=10b)
2015-06-04 10:16:02.027+0000 INFO [org.neo4j]: [marathon/neostore.labeltokenstore.db.names] brickCount=0 brickSize=0b mappedMem=0b (storeSize=38b)
2015-06-04 10:16:02.027+0000 INFO [org.neo4j]: [marathon/neostore.labeltokenstore.db] brickCount=0 brickSize=0b mappedMem=0b (storeSize=0b)
2015-06-04 10:16:02.028+0000 INFO [org.neo4j]: [marathon/neostore.propertystore.db.strings] brickCount=0 brickSize=1181696b mappedMem=1181745152b (storeSize=128b)
2015-06-04 10:16:02.028+0000 INFO [org.neo4j]: [marathon/neostore.propertystore.db.index.keys] brickCount=0 brickSize=0b mappedMem=0b (storeSize=266b)
2015-06-04 10:16:02.028+0000 INFO [org.neo4j]: [marathon/neostore.propertystore.db.index] brickCount=0 brickSize=0b mappedMem=0b (storeSize=54b)
2015-06-04 10:16:02.029+0000 INFO [org.neo4j]: [marathon/neostore.propertystore.db.arrays] brickCount=0 brickSize=1339008b mappedMem=1339031552b (storeSize=128b)
2015-06-04 10:16:02.045+0000 INFO [org.neo4j]: [marathon/neostore.propertystore.db] brickCount=0 brickSize=1390392b mappedMem=1390411776b (storeSize=6560b)
2015-06-04 10:16:02.047+0000 INFO [org.neo4j]: [marathon/neostore.relationshipstore.db] brickCount=0 brickSize=1702856b mappedMem=1702887424b (storeSize=2720b)
2015-06-04 10:16:02.047+0000 INFO [org.neo4j]: [marathon/neostore.nodestore.db.labels] brickCount=0 brickSize=0b mappedMem=0b (storeSize=68b)
2015-06-04 10:16:02.049+0000 INFO [org.neo4j]: [marathon/neostore.nodestore.db] brickCount=0 brickSize=385875b mappedMem=385875968b (storeSize=1200b)
2015-06-04 10:16:02.050+0000 INFO [org.neo4j]: [marathon/neostore.schemastore.db] brickCount=0 brickSize=0b mappedMem=0b (storeSize=64b)
2015-06-04 10:16:02.054+0000 INFO [org.neo4j]: [marathon/neostore.relationshipgroupstore.db] brickCount=0 brickSize=0b mappedMem=0b (storeSize=25b)
2015-06-04 10:16:02.054+0000 INFO [org.neo4j]: [marathon/neostore] brickCount=0 brickSize=0b mappedMem=0b (storeSize=81b)
2015-06-04 10:16:02.194+0000 INFO [org.neo4j]: Opened logical log [marathon/nioneo_logical.log.1] version=8, lastTxId=17 (clean)
2015-06-04 10:16:02.202+0000 INFO [org.neo4j]: TM opening log: marathon/tm_tx_log.1
2015-06-04 10:16:02.206+0000 INFO [org.neo4j]: Kernel health set to OK
2015-06-04 10:16:02.213+0000 INFO [org.neo4j]: Opened logical log [marathon/index/lucene.log.1] version=8, lastTxId=1 (clean)
2015-06-04 10:16:02.217+0000 INFO [org.neo4j]: --- STARTED diagnostics for KernelDiagnostics:Versions START ---
2015-06-04 10:16:02.217+0000 INFO [org.neo4j]: Graph Database: org.neo4j.kernel.EmbeddedGraphDatabase StoreId{creationTime=1422808769411, randomId=1762119504651947014, storeVersion=14406081294923270, upgradeTime=1422808769411, upgradeId=1762119504651947014}
2015-06-04 10:16:02.233+0000 INFO [org.neo4j]: Kernel version: Neo4j - Graph Database Kernel (neo4j-kernel), version: 2.1.6
2015-06-04 10:16:02.233+0000 INFO [org.neo4j]: Neo4j component versions:
2015-06-04 10:16:02.235+0000 INFO [org.neo4j]: Neo4j - Lucene Index (neo4j-lucene-index), version: 2.1.6; revision: 2.1.6:2.1-maint:605/0d7f25fc608f15c54ec1a01f4ba4564ebfb1071a
2015-06-04 10:16:02.235+0000 INFO [org.neo4j]: Neo4j - Cypher Compiler 2.1 (neo4j-cypher-compiler-2.1), version: 2.1.6; revision: 2.1.6:2.1-maint:605/0d7f25fc608f15c54ec1a01f4ba4564ebfb1071a
2015-06-04 10:16:02.235+0000 INFO [org.neo4j]: Neo4j - Graph Database Kernel (neo4j-kernel), version: 2.1.6; revision: 2.1.6:2.1-maint:605/0d7f25fc608f15c54ec1a01f4ba4564ebfb1071a
2015-06-04 10:16:02.235+0000 INFO [org.neo4j]: Neo4j - Cypher (neo4j-cypher), version: 2.1.6; revision: 2.1.6:2.1-maint:605/0d7f25fc608f15c54ec1a01f4ba4564ebfb1071a
2015-06-04 10:16:02.235+0000 INFO [org.neo4j]: Neo4j - Graph DB Monitoring and Management tools (neo4j-management), version: 2.1.6; revision: 2.1.6:2.1-maint:605/0d7f25fc608f15c54ec1a01f4ba4564ebfb1071a
2015-06-04 10:16:02.235+0000 INFO [org.neo4j]: Neo4j - Cypher Compiler 2.0 (neo4j-cypher-compiler-2.0), version: 2.0.4; revision: 2.0.4:2.0-maint:130/4a7d10bc274a5d26a180bbe9df25100e8a694748
2015-06-04 10:16:02.235+0000 INFO [org.neo4j]: Neo4j - Cypher Compiler 1.9 (neo4j-cypher-compiler-1.9), version: 2.0.4; revision: 2.0.4:2.0-maint:130/4a7d10bc274a5d26a180bbe9df25100e8a694748
2015-06-04 10:16:02.235+0000 INFO [org.neo4j]: Neo4j - Cypher Commons (neo4j-cypher-commons), version: 2.1.6; revision: 2.1.6:2.1-maint:605/0d7f25fc608f15c54ec1a01f4ba4564ebfb1071a
2015-06-04 10:16:02.235+0000 INFO [org.neo4j]: --- STARTED diagnostics for KernelDiagnostics:Versions END ---
2015-06-04 10:16:02.237+0000 INFO [org.neo4j]: --- STARTED diagnostics for NEO_STORE_VERSIONS START ---
2015-06-04 10:16:02.237+0000 INFO [org.neo4j]: Store versions:
Store versions:
NeoStore v0.A.3
SchemaStore v0.A.3
NodeStore v0.A.3
RelationshipStore v0.A.3
RelationshipTypeStore v0.A.3
LabelTokenStore v0.A.3
PropertyStore v0.A.3
PropertyIndexStore v0.A.3
StringPropertyStore v0.A.3
ArrayPropertyStore v0.A.3
RelationshipGroupStore v0.A.3
2015-06-04 10:16:02.238+0000 INFO [org.neo4j]: --- STARTED diagnostics for NEO_STORE_VERSIONS END ---
2015-06-04 10:16:02.238+0000 INFO [org.neo4j]: --- STARTED diagnostics for NEO_STORE_ID_USAGE START ---
2015-06-04 10:16:02.238+0000 INFO [org.neo4j]: Id usage:
Id usage:
SchemaStore: used=1 high=0
NodeStore: used=80 high=79
RelationshipStore: used=80 high=79
RelationshipTypeStore: used=2 high=1
LabelTokenStore: used=0 high=-1
PropertyStore: used=160 high=159
PropertyIndexStore: used=6 high=5
StringPropertyStore: used=1 high=0
ArrayPropertyStore: used=1 high=0
RelationshipGroupStore: used=1 high=0
2015-06-04 10:16:02.238+0000 INFO [org.neo4j]: --- STARTED diagnostics for NEO_STORE_ID_USAGE END ---
2015-06-04 10:16:02.238+0000 INFO [org.neo4j]: --- STARTED diagnostics for PERSISTENCE_WINDOW_POOL_STATS START ---
2015-06-04 10:16:02.238+0000 INFO [org.neo4j]: --- STARTED diagnostics for PERSISTENCE_WINDOW_POOL_STATS END ---
2015-06-04 10:16:02.239+0000 INFO [org.neo4j]: --- STARTED diagnostics for KernelDiagnostics:StoreFiles START ---
2015-06-04 10:16:02.239+0000 INFO [org.neo4j]: Disk space on partition (Total / Free / Free %): 499082485760 / 127505190912 / 25
Storage files: (filename : modification date - size)
active_tx_log: 2015-02-01T17:39:29+0100 - 11.00 B
index:
lucene-store.db: 2015-06-04T12:16:00+0200 - 40.00 B
lucene.log.1: 2015-06-04T12:16:02+0200 - 16.00 B
lucene.log.active: 2015-06-04T12:16:02+0200 - 4.00 B
lucene.log.v0: 2015-02-01T17:39:30+0100 - 16.00 B
lucene.log.v1: 2015-02-02T02:28:48+0100 - 16.00 B
lucene.log.v2: 2015-02-02T02:29:26+0100 - 16.00 B
lucene.log.v3: 2015-02-06T01:41:41+0100 - 16.00 B
lucene.log.v4: 2015-02-06T01:41:44+0100 - 16.00 B
lucene.log.v5: 2015-02-06T17:00:29+0100 - 16.00 B
lucene.log.v6: 2015-02-06T17:00:32+0100 - 16.00 B
lucene.log.v7: 2015-06-04T12:16:00+0200 - 16.00 B
- Total: 2015-06-04T12:16:02+0200 - 188.00 B
lock: 2015-06-04T12:16:02+0200 - 0.00 B
messages.log: 2015-06-04T12:16:02+0200 - 225.00 kB
neostore: 2015-06-04T12:16:02+0200 - 81.00 B
neostore.id: 2015-06-04T12:16:02+0200 - 9.00 B
neostore.labeltokenstore.db: 2015-06-04T12:16:02+0200 - 0.00 B
neostore.labeltokenstore.db.id: 2015-06-04T12:16:02+0200 - 9.00 B
neostore.labeltokenstore.db.names: 2015-06-04T12:16:02+0200 - 38.00 B
neostore.labeltokenstore.db.names.id: 2015-06-04T12:16:02+0200 - 9.00 B
neostore.nodestore.db: 2015-06-04T12:16:02+0200 - 1.17 kB
neostore.nodestore.db.id: 2015-06-04T12:16:02+0200 - 9.00 B
neostore.nodestore.db.labels: 2015-06-04T12:16:02+0200 - 68.00 B
neostore.nodestore.db.labels.id: 2015-06-04T12:16:02+0200 - 9.00 B
neostore.propertystore.db: 2015-06-04T12:16:02+0200 - 6.41 kB
neostore.propertystore.db.arrays: 2015-06-04T12:16:02+0200 - 128.00 B
neostore.propertystore.db.arrays.id: 2015-06-04T12:16:02+0200 - 9.00 B
neostore.propertystore.db.id: 2015-06-04T12:16:02+0200 - 9.00 B
neostore.propertystore.db.index: 2015-06-04T12:16:02+0200 - 54.00 B
neostore.propertystore.db.index.id: 2015-06-04T12:16:02+0200 - 9.00 B
neostore.propertystore.db.index.keys: 2015-06-04T12:16:02+0200 - 266.00 B
neostore.propertystore.db.index.keys.id: 2015-06-04T12:16:02+0200 - 9.00 B
neostore.propertystore.db.strings: 2015-06-04T12:16:02+0200 - 128.00 B
neostore.propertystore.db.strings.id: 2015-06-04T12:16:02+0200 - 9.00 B
neostore.relationshipgroupstore.db: 2015-06-04T12:16:02+0200 - 25.00 B
neostore.relationshipgroupstore.db.id: 2015-06-04T12:16:02+0200 - 9.00 B
neostore.relationshipstore.db: 2015-06-04T12:16:02+0200 - 2.66 kB
neostore.relationshipstore.db.id: 2015-06-04T12:16:02+0200 - 9.00 B
neostore.relationshiptypestore.db: 2015-06-04T12:16:02+0200 - 10.00 B
neostore.relationshiptypestore.db.id: 2015-06-04T12:16:02+0200 - 9.00 B
neostore.relationshiptypestore.db.names: 2015-06-04T12:16:02+0200 - 114.00 B
neostore.relationshiptypestore.db.names.id: 2015-06-04T12:16:02+0200 - 9.00 B
neostore.schemastore.db: 2015-06-04T12:16:02+0200 - 64.00 B
neostore.schemastore.db.id: 2015-06-04T12:16:02+0200 - 9.00 B
nioneo_logical.log.1: 2015-06-04T12:16:02+0200 - 16.00 B
nioneo_logical.log.active: 2015-06-04T12:16:02+0200 - 4.00 B
nioneo_logical.log.v6: 2015-02-06T17:00:32+0100 - 3.34 kB
nioneo_logical.log.v7: 2015-06-04T12:16:00+0200 - 3.34 kB
schema:
label:
lucene:
segments.gen: 2015-02-01T17:39:30+0100 - 20.00 B
segments_1: 2015-02-01T17:39:30+0100 - 32.00 B
write.lock: 2015-06-04T12:16:02+0200 - 0.00 B
- Total: 2015-06-04T12:16:02+0200 - 52.00 B
- Total: 2015-02-01T17:39:29+0100 - 52.00 B
- Total: 2015-02-01T17:39:29+0100 - 52.00 B
store_lock: 2015-02-01T17:39:29+0100 - 0.00 B
tm_tx_log.1: 2015-06-04T12:16:02+0200 - 0.00 B
2015-06-04 10:16:02.247+0000 INFO [org.neo4j]: --- STARTED diagnostics for KernelDiagnostics:StoreFiles END ---
2015-06-04 10:16:02.288+0000 INFO [org.neo4j]: Database is now ready
2015-06-04 10:16:03.553+0000 INFO [org.neo4j]: Shutdown started
2015-06-04 10:16:03.554+0000 INFO [org.neo4j]: Database is now unavailable
2015-06-04 10:16:03.558+0000 INFO [org.neo4j]: Closed log marathon/index/lucene.log
2015-06-04 10:16:03.558+0000 INFO [org.neo4j]: TM shutting down
2015-06-04 10:16:03.564+0000 INFO [org.neo4j]: Closed log marathon/nioneo_logical.log
2015-06-04 10:16:03.565+0000 INFO [org.neo4j]: marathon/neostore.relationshiptypestore.db.names hit=0 miss=4 switches=0 ooe=0
2015-06-04 10:16:03.566+0000 INFO [org.neo4j]: marathon/neostore.relationshiptypestore.db hit=0 miss=2 switches=0 ooe=0
2015-06-04 10:16:03.566+0000 INFO [org.neo4j]: marathon/neostore.labeltokenstore.db.names hit=0 miss=0 switches=0 ooe=0
2015-06-04 10:16:03.567+0000 INFO [org.neo4j]: marathon/neostore.labeltokenstore.db hit=0 miss=0 switches=0 ooe=0
2015-06-04 10:16:03.568+0000 INFO [org.neo4j]: marathon/neostore.propertystore.db.strings hit=0 miss=0 switches=0 ooe=0
2015-06-04 10:16:03.569+0000 INFO [org.neo4j]: marathon/neostore.propertystore.db.index.keys hit=0 miss=12 switches=0 ooe=0
2015-06-04 10:16:03.569+0000 INFO [org.neo4j]: marathon/neostore.propertystore.db.index hit=0 miss=6 switches=0 ooe=0
2015-06-04 10:16:03.570+0000 INFO [org.neo4j]: marathon/neostore.propertystore.db.arrays hit=0 miss=0 switches=0 ooe=0
2015-06-04 10:16:03.571+0000 INFO [org.neo4j]: marathon/neostore.propertystore.db hit=180 miss=0 switches=0 ooe=0
2015-06-04 10:16:03.572+0000 INFO [org.neo4j]: marathon/neostore.relationshipstore.db hit=106 miss=0 switches=0 ooe=0
2015-06-04 10:16:03.573+0000 INFO [org.neo4j]: marathon/neostore.nodestore.db.labels hit=0 miss=0 switches=0 ooe=0
2015-06-04 10:16:03.574+0000 INFO [org.neo4j]: marathon/neostore.nodestore.db hit=210 miss=0 switches=0 ooe=0
2015-06-04 10:16:03.574+0000 INFO [org.neo4j]: marathon/neostore.schemastore.db hit=0 miss=0 switches=0 ooe=0
2015-06-04 10:16:03.575+0000 INFO [org.neo4j]: marathon/neostore.relationshipgroupstore.db hit=0 miss=0 switches=0 ooe=0
2015-06-04 10:16:03.576+0000 INFO [org.neo4j]: marathon/neostore hit=0 miss=18 switches=0 ooe=0
2015-06-04 10:16:03.578+0000 INFO [org.neo4j]: NeoStore closed
2015-06-04 10:16:03.578+0000 INFO [org.neo4j]: --- STOPPING diagnostics START ---
2015-06-04 10:16:03.578+0000 INFO [org.neo4j]: --- STOPPING diagnostics END ---
================================================
FILE: listings/chap13/marathon/store_lock
================================================
================================================
FILE: listings/chap13/snippet1301_ConnectingWithGrab.groovy
================================================
@Grab('org.hsqldb:hsqldb:2.3.2')
@GrabConfig(systemClassLoader=true)
import groovy.sql.Sql
def url = 'jdbc:hsqldb:mem:GinA'
def user = 'sa'
def password = ''
def driver = 'org.hsqldb.jdbcDriver'
def sql = Sql.newInstance(url, user, password, driver)
// use 'sql' instance ...
// optional test of a system table within HSQLDB
assert sql.firstRow('SELECT 1 FROM INFORMATION_SCHEMA.SYSTEM_USERS')[0] == 1
sql.close()
================================================
FILE: listings/chap13/snippet1301_ConnectingWithInstance.groovy
================================================
import groovy.sql.Sql
def url = 'jdbc:hsqldb:mem:GinA'
def user = 'sa'
def password = ''
def driver = 'org.hsqldb.jdbcDriver'
Sql.withInstance(url, user, password, driver) { sql ->
// use 'sql' instance ...
// optional test of a system table within HSQLDB
assert sql.firstRow('SELECT 1 FROM INFORMATION_SCHEMA.SYSTEM_USERS')[0] == 1
}
================================================
FILE: listings/chap13/snippet1301_ConnectingWithMap.groovy
================================================
import groovy.sql.Sql
import static java.sql.ResultSet.CONCUR_READ_ONLY
// ...
def sql = Sql.newInstance(
url: 'jdbc:hsqldb:mem:GinA',
user: 'sa',
password: '',
driver: 'org.hsqldb.jdbcDriver',
cacheStatements: true,
resultSetConcurrency: CONCUR_READ_ONLY)
// use 'sql' instance ...
sql.close()
================================================
FILE: listings/chap13/snippet1301_ReadEachRow.groovy
================================================
import util.DbUtil
import java.text.SimpleDateFormat
def sql = DbUtil.create()
DbUtil.populate(sql)
println ' Athlete Info '.center(25, '-')
def fmt = new SimpleDateFormat('dd. MMM yyyy (E)', Locale.US)
sql.eachRow('SELECT * FROM Athlete') { athlete ->
println athlete.firstname + ' ' + athlete.lastname
println 'born on ' + fmt.format(athlete.dateOfBirth)
println '-' * 25
}
sql.close()
================================================
FILE: listings/chap13/snippet1301_ReadEachRowList.groovy
================================================
import util.DbUtil
def sql = DbUtil.create()
DbUtil.populate(sql)
sql.eachRow('SELECT firstname, lastname FROM Athlete') { row ->
println row[0] + ' ' + row[1]
}
sql.close()
================================================
FILE: listings/chap13/snippet1301_ReadQuery.groovy
================================================
import util.DbUtil
def sql = DbUtil.create()
DbUtil.populate(sql)
sql.query('SELECT firstname, lastname FROM Athlete') { resultSet ->
if (resultSet.next()) {
print resultSet.getString(1)
print ' '
println resultSet.getString('lastname')
}
}
sql.close()
================================================
FILE: listings/chap13/snippet1301_ReadRows.groovy
================================================
import util.DbUtil
def sql = DbUtil.create()
DbUtil.populate(sql)
List athletes = sql.rows('SELECT firstname, lastname FROM Athlete')
println "There are ${athletes.size()} Athletes:"
println athletes.collect{"${it[0]} ${it.lastname}"}.join(", ")
sql.close()
================================================
FILE: listings/chap13/util/DbUtil.groovy
================================================
package util
@Grab('org.hsqldb:hsqldb:2.3.2')
@GrabConfig(systemClassLoader=true)
import groovy.sql.Sql
import java.util.logging.Level
import java.util.logging.Logger
class DbUtil {
static Sql create() {
def url = 'jdbc:hsqldb:mem:GinA'
def user = 'sa'
def password = ''
def driver = 'org.hsqldb.jdbcDriver'
def sql = Sql.newInstance(url, user, password, driver)
sql.execute """
DROP TABLE Athlete IF EXISTS cascade;
DROP TABLE Record IF EXISTS;
"""
sql.execute """
CREATE TABLE Athlete (
athleteId INTEGER GENERATED BY DEFAULT AS IDENTITY,
firstname VARCHAR(64),
lastname VARCHAR(64),
dateOfBirth DATE,
UNIQUE(athleteId)
);
"""
sql.execute '''
CREATE TABLE Record (
recordId INTEGER GENERATED BY DEFAULT AS IDENTITY,
time INTEGER, -- in seconds
venue VARCHAR(64),
whenRun DATE,
fkAthlete INTEGER,
CONSTRAINT fk FOREIGN KEY (fkAthlete)
REFERENCES Athlete (athleteId) ON DELETE CASCADE
);
'''
sql
}
static void populate(sql) {
insertAthlete(sql, 'Paul', 'Tergat', '1969-06-17')
insertAthlete(sql, 'Khalid', 'Khannouchi', '1971-12-22')
insertAthlete(sql, 'Ronaldo', 'da Costa', '1970-06-07')
insertRecord(sql, 2, 4, 55, 'Berlin', '2003-09-28', 'Tergat')
insertRecord(sql, 2, 5, 38, 'London', '2002-04-14', 'Khannouchi')
insertRecord(sql, 2, 5, 42, 'Chicago', '1999-10-24', 'Khannouchi')
insertRecord(sql, 2, 6, 05, 'Berlin', '1998-09-20', 'da Costa')
}
static void insertAthlete(sql, first, last, dob) {
sql.execute """
INSERT INTO Athlete (firstname, lastname, dateOfBirth)
VALUES (${first},${last},${dob})
"""
}
static void insertRecord(sql, h, m, s, venue, date, lastname) {
def time = h * 60 * 60 + m * 60 + s
sql.execute """
INSERT INTO Record (time, venue, whenRun, fkAthlete)
SELECT $time, $venue, $date,
athleteId FROM Athlete WHERE lastname=$lastname
"""
}
// To enable logging, call the method below. You might also need
// to adjust the logging.properties file in JRE_HOME/lib to have:
// java.util.logging.ConsoleHandler.level = FINE
static void enableLogging() {
Logger.getLogger('groovy.sql').level = Level.FINE
}
}
================================================
FILE: listings/chap13/util/MarathonRelationships.groovy
================================================
package util
@Grab('org.neo4j:neo4j-kernel:2.1.6')
import org.neo4j.graphdb.*
enum MarathonRelationships implements RelationshipType {
set, broke
}
================================================
FILE: listings/chap13/util/Neo4jUtil.groovy
================================================
package util
@Grab('org.neo4j:neo4j-kernel:2.1.6')
@Grab('org.neo4j:neo4j-lucene-index:2.1.6;transitive=false')
@Grab('org.apache.lucene:lucene-core:3.6.2')
import org.neo4j.graphdb.*
import org.neo4j.graphdb.factory.GraphDatabaseFactory
class Neo4jUtil {
static create() { //#A
def factory = new GraphDatabaseFactory()
def db = factory.newEmbeddedDatabase("marathon")
addShutdownHook { db.shutdown() }
GraphDatabaseService.metaClass {
createNode { Map properties ->
def n = delegate.createNode()
properties.each { k, v -> n[k] = v }
n
}
}
Node.metaClass {
propertyMissing { String name, val ->
delegate.setProperty(name, val) }
propertyMissing { String name ->
delegate.getProperty(name) }
methodMissing { String name, args ->
delegate.createRelationshipTo(args[0],
MarathonRelationships."$name")
}
}
Relationship.metaClass {
propertyMissing { String name, val ->
delegate.setProperty(name, val) }
propertyMissing { String name ->
delegate.getProperty(name) }
}
db
}
static insertAthlete(db, first, last, dob) { //#B
db.createNode(first: first, last: last, dob: dob)
}
static insertRecord(db, h, m, s, venue, when, athlete) { //#C
def secs = h * 60 * 60 + m * 60 + s
def record = db.createNode(time: secs, venue: venue, when: when)
athlete.set(record)
record
}
}
//#A Create database and turn on metaClass syntactic sugar
//#B Utility method to create athlete
//#C Utility method to create record
================================================
FILE: listings/chap14/Listing_14_01_Plan.txt
================================================
see: data/plan.xml
================================================
FILE: listings/chap14/Listing_14_02_DOM.groovy
================================================
//@Grab('org.codehaus.groovy:groovy-xml:2.2.0')
import javax.xml.parsers.DocumentBuilderFactory
import static org.w3c.dom.Node.*
def factory = DocumentBuilderFactory.newInstance()
def builder = factory.newDocumentBuilder()
def doc = builder.parse(new FileInputStream('data/plan.xml'))
def plan = doc.documentElement
String info(node) {
switch (node.nodeType) {
case ELEMENT_NODE:
return "element: $node.nodeName"
case ATTRIBUTE_NODE:
return "attribute: $node.nodeName=$node.nodeValue"
case TEXT_NODE:
return "text: $node.nodeValue"
}
return "some other type: $node.nodeType"
}
assert info(plan) == 'element: plan'
assert plan.childNodes.length == 5 //#1
// what we'd have to do without groovy-xml DGM methods
//def firstWeek = null
//for (int i = 0; !firstWeek && i < plan.childNodes.length; i++) {
// if (plan.childNodes.item(i).nodeName == 'week')
// firstWeek = plan.childNodes.item(i)
//}
def firstWeek = plan.childNodes.find { it.nodeName == 'week' } //#2
assert info(firstWeek) == 'element: week'
def firstWeekCapacity = firstWeek.attributes.getNamedItem('capacity')
assert info(firstWeekCapacity) == 'attribute: capacity=8'
def firstTask = firstWeek.childNodes.item(1) //#3
assert info(firstTask) == 'element: task'
def firstTaskText = firstTask.childNodes.item(0)
assert info(firstTaskText) == 'text: easy'
def firstTaskTitle = firstTask.attributes.getNamedItem('title')
assert info(firstTaskTitle) == 'attribute: title=read XML chapter'
def firstTaskTitleText = firstTaskTitle.childNodes.item(0)
assert info(firstTaskTitleText) == 'text: read XML chapter'
//#1 Element and whitespace children visible
//#2 Object iteration method
//#3 Indexed access
================================================
FILE: listings/chap14/Listing_14_03_DOM_Category.groovy
================================================
//@Grab('org.codehaus.groovy:groovy-xml:2.2.0')
import groovy.xml.DOMBuilder
import groovy.xml.dom.DOMCategory
def doc = DOMBuilder.parse(new FileReader('data/plan.xml'))
def plan = doc.documentElement
use(DOMCategory) {
assert plan.name() == 'plan' //|#1
assert plan.week[0].name() == 'week' //|#1
assert plan.week[0].'@capacity' == '8' // #2
assert plan.week.task[0].name() == 'task'
assert plan.week.task[0].text() == 'easy' // #3
// bonus material below here for comparative purposes with later examples
assert plan.week.task.size() == 5
assert plan.week.task.'@done'*.toInteger().sum() == 6
assert plan.week[1].task.every{ it.'@done' == '0' }
// For legacy reasons, text nodes are regarded as children by
// DOMCategory which yields slightly different code than for XmlParser
// and XmlSlurper when using breadthFirst() and children() though
// depthFirst() avoids these differences as it was introduced later
def elementNames = { it.nodeName.startsWith('#') ? [] : [it.name] }
assert plan.breadthFirst().iterator().collectMany(elementNames).join('->') ==
'plan->week->week->task->task->task->task->task'
assert plan.depthFirst()*.name().join('->') ==
'plan->week->task->task->task->week->task->task'
assert plan.'**'*.name().join('->') ==
'plan->week->task->task->task->week->task->task'
}
================================================
FILE: listings/chap14/Listing_14_04_XmlParser.groovy
================================================
//@Grab('org.codehaus.groovy:groovy-xml:2.2.0')
def plan = new XmlParser().parse(new File('data/plan.xml')) // #1
assert plan.name() == 'plan'
assert plan.week[0].name() == 'week'
def firstTask = plan.week[0].task[0] // #2
assert firstTask.name() == 'task'
assert firstTask.text() == 'easy'
assert firstTask.@title == 'read XML chapter'
// bonus examples below here for comparison with other listings
assert plan.children().size() == 2
//def firstWeek = plan.children().find { it.name() == 'week' }
//def firstWeek = plan.week[0]
assert firstTask.'@title' == 'read XML chapter'
assert plan.week.task.size() == 5
assert plan.week.task.@done*.toInteger().sum() == 6
assert plan.week[1].task.every{ it.@done == '0' }
assert plan.breadthFirst()*.name().join('->') ==
'plan->week->week->task->task->task->task->task'
assert plan.depthFirst()*.name().join('->') ==
'plan->week->task->task->task->week->task->task'
assert plan.'**'*.name().join('->') ==
'plan->week->task->task->task->week->task->task'
================================================
FILE: listings/chap14/Listing_14_05_XmlSlurper.groovy
================================================
//@Grab('org.codehaus.groovy:groovy-xml:2.2.0')
def plan = new XmlSlurper().parse(new File('data/plan.xml'))
assert plan.week.task.size() == 5
assert plan.week.task.@done*.toInteger().sum() == 6
assert plan.week[1].task.every{ it.@done == '0' }
assert plan.breadthFirst()*.name().join('->') ==
'plan->week->week->task->task->task->task->task'
assert plan.depthFirst()*.name().join('->') ==
'plan->week->task->task->task->week->task->task'
assert plan.depthFirst()*.name() == plan.'**'*.name()
// bonus material below here for comparison with other listings
assert plan.name() == 'plan'
assert plan.children().size() == 2
def firstWeek = plan.children().find { it.name() == 'week' }
def firstTask = firstWeek.task[0]
assert firstTask.name() == 'task'
assert firstTask.text() == 'easy'
assert firstTask.'@title' == 'read XML chapter'
================================================
FILE: listings/chap14/Listing_14_06_SAX.groovy
================================================
import javax.xml.parsers.SAXParserFactory
import org.xml.sax.*
import org.xml.sax.helpers.DefaultHandler
class PlanHandler extends DefaultHandler { //#1
def underway = []
def upcoming = []
void startElement(String namespace, String localName,
String qName, Attributes atts) { //#2
if (qName != 'task') return //#3
def title = atts.getValue('title')
def total = atts.getValue('total')
switch (atts.getValue('done')) {
case '0' : upcoming << title ; break
case { it != total } : underway << title ; break
}
}
}
def handler = new PlanHandler()
def factory = SAXParserFactory.newInstance()
def reader = factory.newSAXParser().XMLReader //#4
reader.contentHandler = handler
new File('data/plan.xml').withInputStream { is ->
reader.parse(new InputSource(is))
}
assert handler.underway == [
'use in current project'
]
assert handler.upcoming == [
're-read DB chapter',
'use DB/XML combination'
]
================================================
FILE: listings/chap14/Listing_14_07_StAX.groovy
================================================
// requires stax.jar and stax-api.jar for Java 1.5
import javax.xml.stream.*
def input = 'file:data/plan.xml'.toURL()
def underway = []
def upcoming = []
def eachStartElement(inputStream, Closure yield) {
def token = XMLInputFactory.newInstance()
.createXMLStreamReader(inputStream) //#1
try {
while (token.hasNext()) { //#2
if (token.startElement) yield token
token.next()
}
} finally {
token?.close()
inputStream?.close()
}
}
class XMLStreamCategory { //|#3
static Object get(XMLStreamReader self, String key) { //|#3
return self.getAttributeValue(null, key) //|#3
} //|#3
} //|#3
use (XMLStreamCategory) {
eachStartElement(input.openStream()) { element ->
if (element.name.toString() != 'task') return
switch (element.done) {
case '0' :
upcoming << element.title
break
case { it != element.total } :
underway << element.title
}
}
}
assert underway == [
'use in current project'
]
assert upcoming == [
're-read DB chapter',
'use DB/XML combination'
]
================================================
FILE: listings/chap14/Listing_14_08_XmlBoiler.groovy
================================================
//@Grab('org.codehaus.groovy:groovy-xml:2.2.0')
import groovy.xml.MarkupBuilder
void numberfy(Node node) { //#1
def atts = node.attributes()
atts.keySet().grep(['capacity', 'total', 'done']).each {
atts[it] = atts[it].toInteger()
}
node.each { if (it instanceof Node) numberfy(it) }
}
void taskStatus(task) { //#2
def atts = task.attributes()
switch (atts.done) {
case 0: atts.status = 'scheduled'; break
case 1..
h1("Week No. $i: ${week.@status}")
dl {
week.task.each { task ->
dt(class: task.@status, task.@title)
dd("(${task.@done}/${task.@total}): ${task.@status}")
} } } } } }
def node = new XmlParser().parse(new File('data/plan.xml'))
numberfy(node) //#|5
node.week.each { weekStatus(it) } //#|5
new File('data/GroovyPlans.html').withWriter { writer ->
def builder = new MarkupBuilder(writer)
htmlReport(builder, node)
}
================================================
FILE: listings/chap14/Listing_14_09_XmlStreamer.groovy
================================================
//@Grab('org.codehaus.groovy:groovy-xml:2.2.0')
import groovy.xml.StreamingMarkupBuilder
def path = new XmlSlurper().parse(new File('data/plan.xml'))
def builder = new StreamingMarkupBuilder()
def copier = builder.bind{ mkp.yield(path) }
def result = "$copier"
assert result.startsWith('')
================================================
FILE: listings/chap14/Listing_14_10_StreamedHtml.groovy
================================================
//@Grab('org.codehaus.groovy:groovy-xml:2.2.0')
import groovy.xml.StreamingMarkupBuilder
def taskStatus(task) { //#1
switch (task.@done.toInteger()) {
case 0: return 'scheduled'
case 1..
h1("Week No. $i: ${owner.weekStatus(week)}")
dl {
week.task.each { task ->
def status = owner.taskStatus(task)
dt(class: status, task.@title)
dd("(${task.@done}/${task.@total}): $status")
} } } } } }
def heater = new StreamingMarkupBuilder().bind(markup) //#5
def outfile = new File('data/StreamedGroovyPlans.html')
outfile.withWriter{ it << heater } //#6
================================================
FILE: listings/chap14/Listing_14_11_UpdateDomCategory.groovy
================================================
//@Grab('org.codehaus.groovy:groovy-xml:2.2.0')
import groovy.xml.DOMBuilder
import groovy.xml.XmlUtil
import groovy.xml.dom.DOMCategory
def doc = DOMBuilder.parse(new FileReader('data/plan.xml'))
def plan = doc.documentElement
use(DOMCategory) {
plan.week[0].task[2]['@done'] = '2' // #1
plan.week[0].task[2].value = 'time saver' // #2
plan.week[1].task[1].replaceNode {
task(done:'0', total:'4', title:'build web service')
}
// an alternative to replace node is remove then append
// def oldTask = plan.week[1].task[1]
// plan.week[1].removeChild(oldTask)
// plan.week[1].appendNode('task', [done:'0', total:'4',
// title:'build web service'])
// plan.week[1].appendNode('task', [done:'0', total:'1',
// title:'build web service client'])
plan.week[1].task[1] + {
task(done:'0', total:'1', title:'build web service client')
}
}
UpdateChecker.check(XmlUtil.serialize(plan))
================================================
FILE: listings/chap14/Listing_14_12_UpdateParser.groovy
================================================
//@Grab('org.codehaus.groovy:groovy-xml:2.2.0')
import groovy.xml.XmlUtil
def plan = new XmlParser().parse(new File('data/plan.xml'))
plan.week[0].task[2].@done = '2'
plan.week[0].task[2].value = 'time saver'
plan.week[1].task[1].replaceNode {
task(done:'0', total:'4', title:'build web service')
}
//plan.week[1].appendNode('task', [done:'0', total:'1',
// title:'build web service client'])
plan.week[1].task[1] + {
task(done:'0', total:'1', title:'build web service client')
}
UpdateChecker.check(XmlUtil.serialize(plan))
================================================
FILE: listings/chap14/Listing_14_13_UpdateSlurper.groovy
================================================
//@Grab('org.codehaus.groovy:groovy-xml:2.2.0')
import groovy.xml.XmlUtil
def plan = new XmlSlurper().parse(new File('data/plan.xml'))
plan.week[0].task[2].@done = '2'
plan.week[0].task[2] = 'time saver'
plan.week[1].task[1].replaceNode {
task(done:'0', total:'4', title:'build web service')
}
//plan.week[1].appendNode {
// task(done:'0', total:'1', title:'build web service client')
//}
plan.week[1].task[1] + {
task(done:'0', total:'1', title:'build web service client')
}
//plan.week[1] << {
// task(done:'0', total:'1', title:'build web service client')
//}
UpdateChecker.check(XmlUtil.serialize(plan))
================================================
FILE: listings/chap14/Listing_14_14_XPath.groovy
================================================
//@Grab('org.codehaus.groovy:groovy-xml:2.2.0')
import groovy.xml.DOMBuilder
import groovy.xml.dom.DOMCategory
import javax.xml.xpath.XPathFactory
import static javax.xml.xpath.XPathConstants.NODESET
import static javax.xml.xpath.XPathConstants.NUMBER
def doc = DOMBuilder.parse(new FileReader('data/plan.xml'))
def plan = doc.documentElement
def xpath = XPathFactory.newInstance().newXPath()
def out = new StringBuilder()
use(DOMCategory) { //#1
xpath.evaluate('//week', plan, NODESET).eachWithIndex {
wk, i -> //#2
out << "\nWeek No. $i\n"
int total = xpath.evaluate('sum(task/@total)', wk, NUMBER) //|#3
int done = xpath.evaluate('sum(task/@done)', wk, NUMBER) //|#3
out << " planned $total of ${wk.'@capacity'}\n" //#4
out << " done $done of $total"
}
}
assert out.toString() == '''
Week No. 0
planned 7 of 8
done 6 of 7
Week No. 1
planned 4 of 8
done 0 of 4'''
================================================
FILE: listings/chap14/Listing_14_15_GroovyPlansTemplate.txt
================================================
see: data/GroovyPlans.template.html
================================================
FILE: listings/chap14/Listing_14_16_XPathTemplate.groovy
================================================
//@Grab('org.codehaus.groovy:groovy-templates:2.2.0')
import groovy.xml.DOMBuilder
import groovy.xml.dom.DOMCategory
import groovy.text.SimpleTemplateEngine as STE
import javax.xml.xpath.XPathFactory
import static javax.xml.xpath.XPathConstants.NODESET
import static javax.xml.xpath.XPathConstants.NUMBER
def doc = DOMBuilder.parse(new FileReader('data/plan.xml'))
def plan = doc.documentElement
def xpath = XPathFactory.newInstance().newXPath()
def binding = [scale:1, weeks:[] ]
use(DOMCategory) {
xpath.evaluate('//week', plan, NODESET).each{ week -> //#1
binding.weeks << [
total: (int) xpath.evaluate('sum(task/@total)', week, NUMBER),
done: (int) xpath.evaluate('sum(task/@done)', week, NUMBER),
capacity: week.'@capacity'.toInteger()
]
}
}
def max = binding.weeks.capacity.max() //#2
if (max > 0) binding.scale = 200.intdiv(max)
def templateFile = new File('data/GroovyPlans.template.html')
def template = new STE().createTemplate(templateFile) //#3
new File('data/XPathGroovyPlans.html').withWriter {
it << template.make(binding)
}
================================================
FILE: listings/chap14/Listing_14_17_JsonParser.groovy
================================================
//@Grab('org.codehaus.groovy:groovy-json:2.2.0')
import groovy.json.JsonSlurper
// add .newReader() to the file in Groovy versions prior to 2.2.0
def plan = new JsonSlurper().parse(new File('data/plan.json'))
assert plan.weeks[0].tasks[0].status == 'easy'
assert plan.weeks[1].capacity == 8
assert plan.weeks[1].tasks[0].title == 're-read DB chapter'
================================================
FILE: listings/chap14/Listing_14_18_JsonBuilder.groovy
================================================
//@Grab('org.codehaus.groovy:groovy-json:2.2.0')
import groovy.json.JsonBuilder
def builder = new JsonBuilder()
builder.weeks {
capacity '8'
tasks(
[{
done '0'
total '4'
title 'build web service'
}, {
done '0'
total '1'
title 'build web service client'
}]
)
}
assert builder.toString() == '{"weeks":{"capacity":"8","tasks":[' +
'{"done":"0","total":"4","title":"build web service"},' +
'{"done":"0","total":"1","title":"build web service client"}' +
']}}'
================================================
FILE: listings/chap14/Listing_14_19_JsonBuilderLogic.groovy
================================================
import groovy.json.JsonBuilder
def builder = new JsonBuilder()
builder {
invoices(1..3) { day -> //#1
invoice(date: "2015-01-0$day") { //#2
item(count: day) { //#2
product(name: 'ULC', dollar: 1499) //#2
} //#2
} //#2
}
}
assert builder.toPrettyString().startsWith( //#3
'''{
"invoices": [
{
"invoice": [
{
"date": "2015-01-01"
''')
//#1 Pretended method can take collection and Closure
//#2 Closure defines JSON for each item in collection
//#4 Check the start of pretty output
================================================
FILE: listings/chap14/Listing_14_20_JsonOutputAthlete.groovy
================================================
import static groovy.json.JsonOutput.*
def json = toJson([date: '2015-01-01', time: '6 am'])
assert json == '{"date":"2015-01-01","time":"6 am"}'
class Athlete { String first, last }
def mj = new Athlete(first: 'Michael', last: 'Jordan')
assert toJson(mj) == '{"first":"Michael","last":"Jordan"}'
def pt = new Athlete(first: 'Paul', last: 'Tergat')
def athletes = [basketball: mj, marathon: pt]
json = toJson(athletes)
assert prettyPrint(json) == '''
{
"basketball": {
"first": "Michael",
"last": "Jordan"
},
"marathon": {
"first": "Paul",
"last": "Tergat"
}
}
'''.trim()
================================================
FILE: listings/chap14/UpdateChecker.groovy
================================================
class UpdateChecker {
static check(text) {
def updated = new XmlParser().parseText(text)
updated.week[0].with { w0 ->
assert w0.task.@done*.toInteger().sum() == 7
assert w0.find{ it.text() == 'time saver' }
}
updated.week[1].with { w1 ->
assert w1.children().size() == 3
assert w1.find{ it.@total == "4" }
assert w1.find{ it.@title == "build web service client" }
assert !w1.find{ it.@title == "use DB/XML combination" }
}
}
}
================================================
FILE: listings/chap14/data/GroovyPlans.html
================================================
Current Groovy progress
Week No. 0: in progress
read XML chapter
(2/2): finished
try some reporting
(3/3): finished
use in current project
(1/2): in progress
Week No. 1: scheduled
re-read DB chapter
(0/1): scheduled
use DB/XML combination
(0/3): scheduled
================================================
FILE: listings/chap14/data/GroovyPlans.template.html
================================================
Current Groovy progress
<% weeks.eachWithIndex{ week, i -> %>
Week No. $i
<% ['capacity','total','done'].each{ attr -> %>
$attr
${week[attr]}
<% } // end of attribute %>
<% } // end of week %>
================================================
FILE: listings/chap14/data/StreamedGroovyPlans.html
================================================
Current Groovy progress
Week No. 0: in progress
read XML chapter
(2/2): finished
try some reporting
(3/3): finished
use in current project
(1/2): in progress
Week No. 1: scheduled
re-read DB chapter
(0/1): scheduled
use DB/XML combination
(0/3): scheduled
================================================
FILE: listings/chap14/data/XPathGroovyPlans.html
================================================
Current Groovy progress
Week No. 0
capacity
8
total
7
done
6
Week No. 1
capacity
8
total
4
done
0
================================================
FILE: listings/chap14/data/plan.json
================================================
{ "weeks": [
{
"capacity": 8,
"tasks": [
{ "done": 2, "total": 2,
"title": "read XML chapter", "status": "easy" },
{ "done": 3, "total": 3,
"title": "try some reporting", "status": "fun" },
{ "done": 1, "total": 2,
"title": "use in current project" }
]
},
{
"capacity": 8,
"tasks": [
{ "done": 0, "total": 1, "title": "re-read DB chapter" },
{ "done": 0, "total": 3, "title": "use DB/XML combination" }
]
}
]}
================================================
FILE: listings/chap14/data/plan.xml
================================================
easyfun
================================================
FILE: listings/chap14/data/style.css
================================================
body {font-family:sans-serif;}
h1 { font-size: large; }
dl { padding-left: 10px}
dt { font-weight:bold; }
dt.finished { font-weight:normal; text-decoration:line-through; }
dd {}
================================================
FILE: listings/chap14/log4j.xml
================================================
================================================
FILE: listings/chap15/Listing_15_01_RSS_bbcnews.groovy
================================================
//@Grab('org.codehaus.groovy:groovy-xml:2.2.0')
def base = 'http://news.bbc.co.uk/rss/newsonline_uk_edition/'
def url = base + 'front_page/rss091.xml'
println 'The top three news today:'
def items = new XmlParser().parse(url).channel[0].item
for (item in items[0..2]) {
println item.title.text()
println item.link.text()
println item.description.text()
println '----'
}
/*
The top three news today:
Three Britons killed in balloon crash
http://www.bbc.co.uk/news/uk-21588495...
Three Britons are dead and another is in hospital...
----
Europe jitters over Italy deadlock
http://www.bbc.co.uk/news/world-europe-21587123...
European politicians and markets react anxiously after Italy's general election...
----
Russia meteor's origin tracked down
http://www.bbc.co.uk/news/science-environment-21579422...
Astronomers trace origin of meteor that broke up over Russia earlier this month...
----
*/
/*
...
Three Britons killed in balloon crashThree Britons are dead and another is in hospital...
http://www.bbc.co.uk/news/uk-21588495...
Tue, 26 Feb 2013 13:20:07 GMT
...
...
*/
================================================
FILE: listings/chap15/Listing_15_02_ATOM_devworks.groovy
================================================
//@Grab('org.codehaus.groovy:groovy-xml:2.2.0')
import groovy.xml.Namespace
def url = 'http://www.ibm.com/developerworks/views/java/rss/' +
'libraryview.jsp?feed_by=atom'
def atom = new Namespace('http://www.w3.org/2005/Atom')
def numEntries = 3 //#A
def entries = new XmlParser().parse(url)[atom.entry][0..
...
Java.next: The Java.next languages
A new developerWorks series by Neal Ford that performs a deep comparison
of three next-generation JVM languages: Groovy, Scala, and Clojure...
29 Jan 2013 05:00:00 +0000
...
...
*/
/*
26 Feb 2013 Test automation and continuous integration with STAF/STAX
05 Feb 2013 HTML5 2D game development: Manipulating time, Part 1
29 Jan 2013 *Java.next: The Java.next languages
29 Jan 2013 Functional thinking: Why functional programming is on the rise
15 Jan 2013 Look-ahead Java deserialization
08 Jan 2013 HTML5 2D game development: Implementing Sprite behaviors
08 Jan 2013 Agile DevOps: Continuous software delivery in the cloud
19 Dec 2012 *Functional thinking: Laziness, Part 2
*/
================================================
FILE: listings/chap15/Listing_15_03_REST_jira_url.groovy
================================================
//@Grab('org.codehaus.groovy:groovy-xml:2.2.0')
//@Grab('org.codehaus.groovy:groovy-json:2.2.0')
import groovy.json.JsonSlurper
class Jira {
def base = 'https://issues.apache.org/jira/rest/api/latest/issue/'
def slurper = new JsonSlurper()
def query(key) {
def httpConnection = new URL(base + key).openConnection()
assert httpConnection.responseCode == httpConnection.HTTP_OK
slurper.parse(httpConnection.inputStream.newReader())
}
}
def jira = new Jira()
def response = jira.query("GROOVY-5999")
response.fields.with {
assert summary == "Make @Delegate work with @DelegatesTo"
assert fixVersions.name == ['2.1.1']
assert resolutiondate.startsWith('2013-02-14')
}
================================================
FILE: listings/chap15/Listing_15_04_REST_jira_httpb_get.groovy
================================================
//@Grab('org.codehaus.groovy:groovy-xml:2.2.0')
//@Grab('org.codehaus.groovy:groovy-json:2.2.0')
@Grab('org.codehaus.groovy.modules.http-builder:http-builder:0.7.2')
import groovyx.net.http.RESTClient
def base = 'https://issues.apache.org/jira/rest/api/latest/'
def jira = new RESTClient(base)
jira.get(path: 'issue/GROOVY-5999') { resp, json ->
assert resp.status == 200
json.fields.with {
assert summary == "Make @Delegate work with @DelegatesTo"
assert fixVersions.name == ['2.1.1']
assert resolutiondate.startsWith('2013-02-14')
}
}
================================================
FILE: listings/chap15/Listing_15_05_REST_currency_httpb_get.groovy
================================================
@Grab('org.codehaus.groovy.modules.http-builder:http-builder:0.7.2')
import groovyx.net.http.RESTClient
def url = 'http://www.webservicex.net/CurrencyConvertor.asmx/'
def converter = new RESTClient(url)
def params = [FromCurrency: 'USD', ToCurrency: 'EUR']
converter.get(path: 'ConversionRate', query: params) { resp, data ->
assert resp.status == 200
assert data.name() == 'double'
println data.text()
}
// => http://www.webservicex.net/CurrencyConvertor.asmx/ConversionRate?FromCurrency=USD&ToCurrency=EUR
// => 0.882
// => 0.882
// Apparently webservicex.net is having issues with their currency converter. Expect a ConversionRate of "-1".
================================================
FILE: listings/chap15/Listing_15_06_REST_currency_httpb_post.groovy
================================================
@Grab('org.codehaus.groovy.modules.http-builder:http-builder:0.7.2')
import groovyx.net.http.RESTClient
import static groovyx.net.http.ContentType.URLENC
def url = 'http://www.webservicex.net/CurrencyConvertor.asmx/'
def converter = new RESTClient(url)
def postBody = [FromCurrency: 'USD', ToCurrency: 'EUR']
converter.post(path: 'ConversionRate', body: postBody,
requestContentType: URLENC) { resp, data ->
assert resp.status == 200
assert data.name() == 'double'
println data.text()
}
// => http://www.webservicex.net/CurrencyConvertor.asmx/ConversionRate
// => 0.882
// => 0.882
================================================
FILE: listings/chap15/Listing_15_07_REST_currency_jaxrs.groovy
================================================
@Grab('org.jboss.resteasy:resteasy-client:3.0.10.Final')
import javax.ws.rs.client.ClientBuilder
def client = ClientBuilder.newClient()
def base = "http://www.webservicex.net/CurrencyConvertor.asmx"
def response = client.target(base + '/ConversionRate')
.queryParam("FromCurrency", "USD")
.queryParam("ToCurrency", "EUR")
.request().get(String) //#1
def rate = new XmlSlurper().parseText(response)
assert rate.name() == 'double'
println rate.text()
//#1 specify a String response
// => 0.882
================================================
FILE: listings/chap15/Listing_15_08_REST_currency_jaxrs_proxy.groovy
================================================
@Grab('org.jboss.resteasy:resteasy-client:3.0.10.Final')
import javax.ws.rs.GET
import javax.ws.rs.Path
import javax.ws.rs.Produces
import javax.ws.rs.QueryParam
import javax.ws.rs.client.ClientBuilder
interface CurrencyConvertor {
@GET
@Path("ConversionRate")
@Produces("application/xml")
String convert(@QueryParam("FromCurrency") String from,
@QueryParam("ToCurrency") String to)
}
def client = ClientBuilder.newClient()
def base = "http://www.webservicex.net/CurrencyConvertor.asmx"
def proxy = client.target(base).proxy(CurrencyConvertor)
def response = proxy.convert("USD", "EUR")
def root = new XmlSlurper().parseText(response)
assert root.name() == 'double'
println root.text()
// => 0.882
================================================
FILE: listings/chap15/Listing_15_09_XMLRPC_echo.groovy
================================================
@Grab('org.codehaus.groovy:groovy-xmlrpc:0.8')
import groovy.net.xmlrpc.XMLRPCServerProxy as Proxy
import groovy.net.xmlrpc.XMLRPCServer as Server
def server = new Server()
server.echo = { return it }
def socket = new ServerSocket(8080)
server.startServer(socket)
remote = new Proxy("http://localhost:8080/") //|#A
assert 'Hello world!' == remote.echo('Hello world!') //|#A
server.stopServer()
//#A Client code
================================================
FILE: listings/chap15/Listing_15_10_XMLRPC_jira.groovy
================================================
@Grab('org.codehaus.groovy:groovy-xmlrpc:0.8')
import groovy.net.xmlrpc.XMLRPCServerProxy as Proxy
class JiraProxy extends Proxy {
JiraProxy(url) { super(url) }
Object invokeMethod(String methodname, args) {
super.invokeMethod('jira1.' + methodname, args)
}
}
def jira = new JiraProxy('https://issues.apache.org/jira/rpc/xmlrpc')
// insert your ASF username and password below
jira.login('username', '****') { loginToken ->
def projects = getProjectsNoSchemes(loginToken)
println "${projects.size()} projects found in the Apache jira"
def groovy = projects.find { it.name == 'Groovy' }
if (groovy) {
println "Found the $groovy.name project with key $groovy.key"
println "Description: $groovy.description"
println "Led by $groovy.lead and hosted at $groovy.projectUrl"
}
}
/*
519 projects found in the Apache jira
Found the groovy project with key GROOVY
Description: Groovy programming language: a modern dynamic language for the JVM
Led by guillaume and hosted at https://groovy.incubator.apache.org/
*/
================================================
FILE: listings/chap15/Listing_15_11_SOAP_wsdl.groovy
================================================
//@Grab('org.codehaus.groovy:groovy-xml:2.2.0')
import groovy.xml.Namespace
def url = 'http://www.webservicex.net/CurrencyConvertor.asmx?WSDL'
def wsdl = new Namespace('http://schemas.xmlsoap.org/wsdl/','wsdl')
def doc = new XmlParser().parse(url)
println doc[wsdl.portType][wsdl.operation].'@name'
// -> [ConversionRate, ConversionRate, ConversionRate]
================================================
FILE: listings/chap15/Listing_15_12_SOAP11_currency_url.groovy
================================================
//@Grab('org.codehaus.groovy:groovy-templates:2.2.0')
import groovy.text.SimpleTemplateEngine as STE
import groovy.xml.Namespace
def file = new File('data/conv.templ.xml') //#A
def template = new STE().createTemplate(file)
def params = [from:'USD', to:'EUR']
def request = template.make(params).toString().getBytes('UTF-8')
def url = 'http://www.webservicex.net/CurrencyConvertor.asmx'
def conn = new URL(url).openConnection()
def reqProps = [
'Content-Type': 'text/xml; charset=UTF-8', //#|B
'SOAPAction' : 'http://www.webserviceX.NET/ConversionRate', //#|B
'Accept' : 'application/soap+xml, text/*' //#|B
]
reqProps.each { key,value -> conn.addRequestProperty(key,value) }
conn.requestMethod = 'POST'
conn.doOutput = true
conn.outputStream << new ByteArrayInputStream(request) //#C
if (conn.responseCode != conn.HTTP_OK) {
println "Error - HTTP:${conn.responseCode}"
return
}
def resp = new XmlParser().parse(conn.inputStream) //#D
def serv = new Namespace('http://www.webserviceX.NET/')
def result = serv.ConversionRateResult //#E
print "Current USD to EUR conversion rate: "
println resp.depthFirst().find{result == it.name()}.text()
// Current USD to EUR conversion rate: 0.882
//#A Templated envelope of SOAP request
//#B Request headers to use every time
//#C Send the request
//#D Parse the response
//#E Extract the result
================================================
FILE: listings/chap15/Listing_15_13_SOAP12_currency_httpb.groovy
================================================
@Grab('org.codehaus.groovy.modules.http-builder:http-builder:0.7.2')
import groovyx.net.http.RESTClient
import static groovyx.net.http.ContentType.XML
def base = 'http://www.webserviceX.NET/CurrencyConvertor.asmx'
def soapEnv = 'http://www.w3.org/2003/05/soap-envelope'
def contentType = 'application/soap+xml; charset=UTF-8'
new RESTClient(base).with {
parser.'application/soap+xml' = parser.'application/xml' //#1
headers = ['Content-Type': contentType] //#2
post(requestContentType: XML, body: {
'soap:Envelope'('xmlns:soap': soapEnv) {
'soap:Body' {
ConversionRate(xmlns: 'http://www.webserviceX.NET/') {
FromCurrency('USD')
ToCurrency('EUR')
}
}
}
}) { resp, data ->
assert resp.status == 200
println data.text()
}
}
//#1 register a SOAP response parser
//#2 Content-Type expected by SOAP server
// xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"
// => http://www.webservicex.net/CurrencyConvertor.asmx/ConversionRate
// => 0.882
// => 0.882
/*
${from}${to}
*/
================================================
FILE: listings/chap15/Listing_15_14_SOAP11_currency_wslite.groovy
================================================
@Grab('com.github.groovy-wslite:groovy-wslite:1.1.0')
import wslite.soap.SOAPClient
def url = 'http://www.webservicex.net/CurrencyConvertor.asmx?WSDL'
def client = new SOAPClient(url)
def action = "http://www.webserviceX.NET/ConversionRate"
def response = client.send(SOAPAction: action) {
body {
ConversionRate(xmlns: 'http://www.webserviceX.NET/') {
FromCurrency('USD')
ToCurrency('EUR')
}
}
}
assert response.httpResponse.statusCode == 200
println response.ConversionRateResponse.ConversionRateResult
// => 0.882
================================================
FILE: listings/chap15/Listing_15_15_SOAP12_currency_wslite.groovy
================================================
@Grab('com.github.groovy-wslite:groovy-wslite:1.1.0')
import wslite.soap.*
def url = 'http://www.webserviceX.NET/CurrencyConvertor.asmx?WSDL'
def client = new SOAPClient(url)
def response = client.send {
version SOAPVersion.V1_2
body {
ConversionRate(xmlns: 'http://www.webserviceX.NET/') {
FromCurrency('USD')
ToCurrency('EUR')
}
}
}
assert response.httpResponse.statusCode == 200
println response.ConversionRateResponse.ConversionRateResult
// => 0.882
================================================
FILE: listings/chap15/data/conv.templ.xml
================================================
${from}${to}
================================================
FILE: listings/chap16/HelloIntegrationWorld.java
================================================
// Java
import groovy.lang.GroovyShell;
public class HelloIntegrationWorld {
public static void main(String[] args) {
GroovyShell shell = new GroovyShell();
Object result = shell.evaluate("12+23");
assert result.equals(35);
}
}
================================================
FILE: listings/chap16/Listing_16_01_HelloIntegration.groovy
================================================
def shell = new GroovyShell()
def result = shell.evaluate("12 + 23")
assert result == 35
================================================
FILE: listings/chap16/Listing_16_02_HelloIntegrationJava.txt
================================================
see: HelloIntegrationWorld.java
================================================
FILE: listings/chap16/Listing_16_03_MultilineScript.groovy
================================================
def shell = new GroovyShell()
def kineticEnergy = shell.evaluate('''
def mass = 22.3
def velocity = 10.6
mass * velocity**2 / 2
''')
assert kineticEnergy == 1252.814
================================================
FILE: listings/chap16/Listing_16_04_UsingEval.groovy
================================================
assert "Hello" == Eval.me("'Hello'")
assert 1 == Eval.x (1, "x")
assert 3 == Eval.xy (1, 2, "x+y")
assert 6 == Eval.xyz(1, 2, 3, "x+y+z")
================================================
FILE: listings/chap16/Listing_16_05_Binding.groovy
================================================
def binding = new Binding() //#1
binding.mass = 22.3 //#1
binding.velocity = 10.6 //#1
def shell = new GroovyShell(binding) //#2
def expression = "mass * velocity ** 2 / 2" //#2
assert shell.evaluate(expression) == 1252.814 //#2
binding.setVariable("mass", 25.4) //#3
assert shell.evaluate(expression) == 1426.972 //#3
//#1 Create and populate the binding
//#2 Evaluate the expression using the binding
//#3 Change the binding data and re-evaluate
================================================
FILE: listings/chap16/Listing_16_06_BindingTwoWay.groovy
================================================
def binding = new Binding(x: 6, y: 4) //#1
def shell = new GroovyShell(binding)
shell.evaluate('''
xSquare = x * x //#2
yCube = y * y * y //#2
''')
assert binding.getVariable("xSquare") == 36 //#3
assert binding.yCube == 64 //#4
//#1 Prepopulating the binding data
//#2 Setting binding data within the evaluated script
//#3 Method access to binding data
//#4 Groovy property access to binding data
================================================
FILE: listings/chap16/Listing_16_07_ClassInScript.groovy
================================================
def shell = new GroovyShell()
def clazz = shell.evaluate('''
class MyClass { //#A
def method() { "value" } //#A
} //#A
return MyClass //#A
''')
assert clazz.name == "MyClass"
def instance = clazz.newInstance() //#B
assert instance.method() == "value" //#C
//#A Define a new class
//#B Create an instance of the class
//#C Use the object as normal
================================================
FILE: listings/chap16/Listing_16_08_Payment_calculator.groovy
================================================
def monthly = "amount*(rate/12) / (1-(1+rate/12)**-numberOfMonths)"
def shell = new GroovyShell()
def script = shell.parse(monthly) //#A
script.binding.amount = 154000 //#B
script.rate = 3.75/100 //#C
script.numberOfMonths = 240
assert script.run() == 913.0480050387338
script.binding = new Binding(amount: 185000, //|#D
rate: 3.50/100, //|#D
numberOfMonths: 300) //|#D
assert script.run() == 926.1536089487843
//#A Parse formula into reusable script
//#B Access binding variable
//#C Access binding variable using shorthand
//#D Create new binding
================================================
FILE: listings/chap16/Listing_16_09_MethodsInBinding.groovy
================================================
def binding = new Binding(multiply: { a, b -> a * b }) //#A
def shell = new GroovyShell(binding)
def value = shell.evaluate('''
multiply(5, 6) //#B
''')
assert value == 30
//#A Create closure within the binding
//#B Call the closure like a normal method
================================================
FILE: listings/chap16/Listing_16_10_ShapeInfoMain.txt
================================================
see: shapes/ShapeInfoMain.java
================================================
FILE: listings/chap16/Listing_16_11_SpringConfig.txt
================================================
see: spring/beans.xml
================================================
FILE: listings/chap16/Listing_16_12_BeanToString.groovy
================================================
import groovy.transform.ToString
import org.codehaus.groovy.control.CompilerConfiguration
import org.codehaus.groovy.control.customizers.*
def conf = new CompilerConfiguration()
def astCustomizer = new ASTTransformationCustomizer(ToString) //#1
def sourceAwareCustomizer =
new SourceAwareCustomizer(astCustomizer) //#2
sourceAwareCustomizer.baseNameValidator = { //#3
name -> name.endsWith 'Bean'
}
conf.addCompilationCustomizers(sourceAwareCustomizer)
def gcl = new GroovyClassLoader(getClass().classLoader, conf) //#4
def clazz = gcl.parseClass '''
class MrBean { String first, last }
''', 'MrBean.groovy'
def result = clazz.newInstance()
result.first = 'Rowan'
result.last = 'Atkinson'
assert result.toString() == 'MrBean(Rowan, Atkinson)'
//#1 Create ToString AST customizer
//#2 Wrap into a source aware customizer
//#3 Create a basename filter
//#4 Use conf with GroovyClassLoader
================================================
FILE: listings/chap16/shapes/Circle.groovy
================================================
package shapes
class Circle implements Shape {
double radius
Circle(double radius) { this.radius = radius }
double area() { return Math.PI * radius ** 2 }
double perimeter() { return 2 * Math.PI * radius }
}
================================================
FILE: listings/chap16/shapes/MaxAreaInfo.groovy
================================================
package shapes
class MaxAreaInfo implements ShapeInfo {
void displayInfo(Shape s1, Shape s2) {
print "The shape with the biggest area is: "
println s1.area() > s2.area() ? s1.class.simpleName : s2.class.simpleName
}
}
================================================
FILE: listings/chap16/shapes/MaxPerimeterInfo.java
================================================
package shapes;
public class MaxPerimeterInfo {
void displayInfo(Square s, Circle c) {
System.out.print("The shape with the biggest perimeter is: ");
System.out.println(s.perimeter() > c.perimeter() ? "square" : "circle");
}
}
================================================
FILE: listings/chap16/shapes/Shape.java
================================================
package shapes;
public interface Shape {
double area();
double perimeter();
}
================================================
FILE: listings/chap16/shapes/ShapeInfo.java
================================================
package shapes;
public interface ShapeInfo {
void displayInfo(Shape s1, Shape s2);
}
================================================
FILE: listings/chap16/shapes/ShapeInfoMain.java
================================================
package shapes;
// Java
public class ShapeInfoMain {
public static void main(String[] args) {
Square s = new Square(7);
Circle c = new Circle(4);
new MaxAreaInfo().displayInfo(s, c);
new MaxPerimeterInfo().displayInfo(s, c);
}
}
================================================
FILE: listings/chap16/shapes/Square.java
================================================
package shapes;
public class Square implements Shape {
private double side;
Square(double side) { this.side = side; }
public double area() { return side * side; }
public double perimeter() { return 4 * side; }
}
================================================
FILE: listings/chap16/spring/common/Shape.java
================================================
package spring.common;
public interface Shape {
double area();
double perimeter();
}
================================================
FILE: listings/chap16/spring/common/ShapeInfo.java
================================================
package spring.common;
public interface ShapeInfo {
void displayInfo(Shape s1, Shape s2);
}
================================================
FILE: listings/chap16/spring/groovy/Circle.groovy
================================================
package spring.groovy
import spring.common.Shape
class Circle implements Shape {
double radius
String color = "Blue"
Circle(double radius) { this.radius = radius }
double area() { return Math.PI * radius ** 2 }
double perimeter() { return 2 * Math.PI * radius }
String toString() { return color + " Groovy Circle" }
}
================================================
FILE: listings/chap16/spring/groovy/MaxAreaInfo.groovy
================================================
package spring.groovy
import spring.common.Shape
import spring.common.ShapeInfo
class MaxAreaInfo implements ShapeInfo {
void displayInfo(Shape s1, Shape s2) {
print "The shape with the biggest area is: "
if (s1.area() > s2.area()) println s1 else println s2
}
}
================================================
FILE: listings/chap16/spring/java/MaxPerimeterInfo.java
================================================
package spring.java;
import spring.common.Shape;
import spring.common.ShapeInfo;
public class MaxPerimeterInfo implements ShapeInfo {
public String getPrefix() {
return null;
}
public void setPrefix(String value) {
}
public void displayInfo(Shape s1, Shape s2) {
System.out.print("The shape with the biggest perimeter is: ");
System.out.println(s1.perimeter() > s2.perimeter() ? s1.getClass().getName()
: s2.getClass().getName());
}
}
================================================
FILE: listings/chap16/spring/java/ShapeInfoFactoryMain.java
================================================
package spring.java;
import spring.common.Shape;
import spring.common.ShapeInfo;
import java.lang.reflect.Constructor;
public class ShapeInfoFactoryMain
{
public static void main(String[] args) {
try {
Shape s = new Square(7);
Class groovyCircle = Class.forName("spring.groovy.Circle");
Class groovyMaxAreaInfo = Class.forName("spring.groovy.MaxAreaInfo");
Constructor cons = groovyCircle.getConstructors()[0];
Shape c = (Shape) cons.newInstance(4);
ShapeInfo info = (ShapeInfo) groovyMaxAreaInfo.newInstance();
info.displayInfo(s, c);
new MaxPerimeterInfo().displayInfo(s, c);
} catch (Exception e) {
e.printStackTrace();
}
}
}
================================================
FILE: listings/chap16/spring/java/ShapeInfoMain.java
================================================
package spring.java;
import spring.groovy.Circle;
import spring.groovy.MaxAreaInfo;
import spring.common.Shape;
public class ShapeInfoMain
{
public static void main(String[] args) {
Shape s = new Square(7);
Shape c = new Circle(4);
new MaxAreaInfo().displayInfo(s, c);
new MaxPerimeterInfo().displayInfo(s, c);
}
}
================================================
FILE: listings/chap16/spring/java/ShapeInfoSpringMain.java
================================================
package spring.java;
import spring.common.Shape;
import spring.common.ShapeInfo;
//import org.springframework.core.io.Resource;
//import org.springframework.core.io.FileSystemResource;
//import org.springframework.beans.factory.xml.XmlBeanFactory;
//import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class ShapeInfoSpringMain
{
public static void main(String[] args) {
try {
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
// Resource resource = new FileSystemResource("spring/beans.xml");
// BeanFactory factory = new XmlBeanFactory(resource);
Shape s = new Square(7);
Shape c = (Shape) ctx.getBean("circle");
ShapeInfo info = (ShapeInfo) ctx.getBean("maxareainfo3");
info.displayInfo(s, c);
new MaxPerimeterInfo().displayInfo(s, c);
} catch (Exception e) {
e.printStackTrace();
}
}
}
================================================
FILE: listings/chap16/spring/java/Square.java
================================================
package spring.java;
import spring.common.Shape;
public class Square implements Shape {
private double side;
private String color = "White";
public Square(double side) { this.side = side; }
public double area() { return side * side; }
public double perimeter() { return 4 * side; }
public String toString(){ return color + " Java Square"; }
}
================================================
FILE: listings/chap16/spring/resources/beans.xml
================================================
================================================
FILE: listings/chap17/.classpath
================================================
================================================
FILE: listings/chap17/.project
================================================
chap17org.eclipse.jdt.core.javabuilderorg.eclipse.jdt.groovy.core.groovyNatureorg.eclipse.jdt.core.javanature
================================================
FILE: listings/chap17/Converter.groovy
================================================
class Converter {
static celsius (fahrenheit) { (fahrenheit - 32) * 5 / 9 }
}
================================================
FILE: listings/chap17/Counter.groovy
================================================
class Counter {
int biggerThan(items, threshold) {
items.grep{ it > threshold }.size()
}
}
================================================
FILE: listings/chap17/Farm.groovy
================================================
class Farm {
def getMachines() {
/* some expensive code here */
throw new RuntimeException('should not reach here')
}
}
================================================
FILE: listings/chap17/Listing_17_01_Celsius.groovy
================================================
import static Converter.celsius
assert 20 == celsius(68)
assert 35 == celsius(95)
assert -17 == celsius(0).toInteger() //#A
assert 0 == celsius(32)
//#A Round down to whole number
================================================
FILE: listings/chap17/Listing_17_02_CounterTest.groovy
================================================
class Listing_17_02_CounterTest extends GroovyTestCase {
static final Integer[] NEG_NUMBERS = [-2, -3, -4] //#A
static final Integer[] POS_NUMBERS = [4, 5, 6] //#A
static final Integer[] MIXED_NUMBERS = [4, -6, 0] //#A
private Counter counter
void setUp() {
counter = new Counter()
}
void testCounterWorks() {
assertEquals(2, counter.biggerThan([5, 10, 15], 7))
}
void testCountHowManyFromSampleNumbers() {
check(0, NEG_NUMBERS, -1) //#B
check(0, NEG_NUMBERS, -2) //#B
check(2, NEG_NUMBERS, -4) //#B
check(3, NEG_NUMBERS, -5) //#B
check(0, POS_NUMBERS, 7) //#B
check(0, POS_NUMBERS, 6) //#B
check(2, POS_NUMBERS, 4) //#B
check(3, POS_NUMBERS, 3) //#B
check(0, MIXED_NUMBERS, 5) //#B
check(1, MIXED_NUMBERS, 2) //#B
check(1, MIXED_NUMBERS, 1) //#B
check(1, MIXED_NUMBERS, 0) //#B
check(2, MIXED_NUMBERS, -1) //#B
check(3, MIXED_NUMBERS, -7) //#B
}
void testInputDataUnchanged() { //#C
def numbers = NEG_NUMBERS.clone()
def origLength = numbers.size()
counter.biggerThan(numbers, 0 /* don't care */)
assertLength origLength, numbers
assertArrayEquals NEG_NUMBERS, numbers
}
void testCountHowManyFromSampleStrings() { //#D
check(2, ['Dog', 'Cat', 'Antelope'], 'Bird')
}
void testInputDataAssumptions() { //#E
assertTrue NEG_NUMBERS.every { it < 0 }
assertTrue POS_NUMBERS.every { it > 0 }
assertContains 0, MIXED_NUMBERS
int negCount = 0
int posCount = 0
MIXED_NUMBERS.each {
if (it < 0) negCount++ else if (it > 0) posCount++
}
assert negCount && posCount
}
private check(expectedCount, items, threshold) {
assertEquals(expectedCount,
counter.biggerThan(items, threshold)
)
}
}
//#A Constants repeated in the test
//#B Use a helper method to make code simpler
//#C Tests proving we don’t change the array
//#D Calculator doesn’t only work with numbers
//#E Test constants sanity check
================================================
FILE: listings/chap17/Listing_17_03_HashMapTest.groovy
================================================
class Listing_17_03_HashMapTest extends GroovyTestCase {
static final KEY = new Object()
static final MAP = [key1: new Object(), key2: new Object()]
void testHashtableRejectsNull() {
shouldFail(NullPointerException) {
new Hashtable()[KEY] = null
}
}
void testBadInitialSize() {
def msg = shouldFail(IllegalArgumentException) { //#A
new HashMap(-1)
}
assertEquals "Illegal initial capacity: -1", msg //#B
}
void testHashMapAcceptsNull() {
def myMap = new HashMap()
myMap[KEY] = null
assert myMap.keySet().contains(KEY)
}
void testHashMapReturnsOriginalObjects() {
def myMap = new HashMap()
MAP.entrySet().each {
myMap[it] = MAP[it]
assertSame MAP[it], myMap[it]
}
assert MAP.dump().contains('java.lang.Object') //#C
assert myMap.size() == MAP.size()
}
}
//#A Check that the right kind of exception is thrown
//#B Check the message
//#C Use Groovy inspection to examine the map
================================================
FILE: listings/chap17/Listing_17_04_GroovyTestSuite.groovy
================================================
import junit.framework.*
import junit.textui.TestRunner
static Test suite() {
def suite = new TestSuite()
def gts = new GroovyTestSuite()
suite.addTestSuite(gts.compile("Listing_17_02_CounterTest.groovy"))
suite.addTestSuite(gts.compile("Listing_17_03_HashMapTest.groovy"))
return suite
}
TestRunner.run(suite())
================================================
FILE: listings/chap17/Listing_17_05_AllTestSuite.groovy
================================================
def suite = AllTestSuite.suite(".", "Listing_17_*Counter*Test.groovy")
junit.textui.TestRunner.run(suite)
================================================
FILE: listings/chap17/Listing_17_06_DataDrivenJUnitTest.groovy
================================================
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
import org.junit.runners.Parameterized.Parameters
import static Converter.celsius
@RunWith(Parameterized) //#1
class Listing_17_06_DataDrivenJUnitTest {
private c, f, scenario
@Parameters static scenarios() {[ //#2
[0, 32, 'Freezing'],
[20, 68, 'Garden party conditions'],
[35, 95, 'Beach conditions'],
[100, 212, 'Boiling']
]*.toArray()}
Listing_17_06_DataDrivenJUnitTest(c, f, scenario) { //#3
this.c = c
this.f = f
this.scenario = scenario
}
@Test void convert() {
def actual = celsius(f)
def msg = "$scenario: ${f}°F should convert into ${c}°C"
assert c == actual, msg
}
}
//#1 Special test runner
//#2 Array of test data
//#3 Constructor parameters consume a row of test data
================================================
FILE: listings/chap17/Listing_17_07_PropertyBased.groovy
================================================
@Grab('net.java.quickcheck:quickcheck:0.6')
import static net.java.quickcheck.generator.PrimitiveGenerators.*
import static java.lang.Math.round
import static Converter.celsius
def gen = integers(-40, 240) //#1
def liquidC = 0..100
def liquidF = 32..212
100.times {
int f = gen.next() //#2
int c = round(celsius(f))
assert c <= f //#3
assert c in liquidC == f in liquidF //#4
}
//#1 Select integers from this range
//#2 Get the next integer
//#3 Celsius less than Fahrenheit (above -40 degrees)
//#4 Water should be liquid in this range
================================================
FILE: listings/chap17/Listing_17_08_Balancer.groovy
================================================
import static org.junit.Assert.assertSame
def relay(request, farm) { //#|A
farm.machines.sort { it.load }[0].send(request) //#|A
} //#|A
class FakeMachine { //#B
def load
def send(request) { return this }
}
final LOW_LOAD = 5, HIGH_LOAD = 10
def farm = [machines: [ //#|C
new FakeMachine(load:HIGH_LOAD), //#|C
new FakeMachine(load:LOW_LOAD)]] //#|C
assertSame(LOW_LOAD, relay(null, farm).load)
//#A Subject under test
//#B Replacement class
//#C Map replaces farm
================================================
FILE: listings/chap17/Listing_17_09_BalancerStub.groovy
================================================
import groovy.mock.interceptor.StubFor
def relay(request) {
new Farm().getMachines().sort { it.load }[0].send(request)
}
def fakeOne = new Expando(load:10, send: { false } )
def fakeTwo = new Expando(load:5, send: { true } )
def farmStub = new StubFor(Farm) //#A
farmStub.demand.getMachines { [fakeOne, fakeTwo ] } //#B
farmStub.use { //#|C
assert relay(null) //#|C
} //#|C
//#A Create stub
//#B Specify demanded behavior
//#C Call the class under test using stub
================================================
FILE: listings/chap17/Listing_17_10_BalancerMock.groovy
================================================
import groovy.mock.interceptor.MockFor
class SortableFarm extends Farm {
void sort() {
/* here the Farm would sort its machines by load */
}
}
def relay(request) {
def farm = new SortableFarm()
farm.sort()
farm.getMachines()[0].send(request)
}
def farmMock = new MockFor(SortableFarm) //#A
farmMock.demand.sort(){} //#|B
farmMock.demand.getMachines { [new Expando(send: {} )] } //#|B
farmMock.use {
relay(null)
}
//#A Create mock
//#B Specify demanded behavior
================================================
FILE: listings/chap17/Listing_17_11_LoggingCounterTest.groovy
================================================
import java.util.logging.Level
class Listing_17_11_LoggingCounterTest extends GroovyLogTestCase {
static final MIXED_NUMBERS = [99, 2, 1, 0, -1, -2, -99] //#A
private count
void setUp() {
count = new LoggingCounter()
}
void testCounterAndLog() {
def log = stringLog(Level.FINER, 'LoggingCounter') { //#B
def bigger = count.biggerThan(MIXED_NUMBERS, -1) //#C
assertEquals(4, bigger) //#D
}
checkLogCount(1, "was equal", log)
checkLogCount(4, "was bigger", log)
checkLogCount(2, "was smaller", log)
checkLogCount(4, /[^d][^o][^n][^'][^t] count this one/, log)
checkLogCount(3, "don't count this one", log)
}
private checkLogCount(expectedCount, regex, log) { //#E
def matcher = (log =~ regex)
assertTrue log, expectedCount == matcher.count
}
}
//#A Test data
//#B Set up stringLog
//#C Invoke SUT
//#D Traditional JUnit style assert
//#E Helper method asserting patterns within the log
================================================
FILE: listings/chap17/Listing_17_12_JUnitPerf.groovy
================================================
@Grab('junitperf:junitperf:1.9.1')
@GrabResolver('https://repository.jboss.org/')
import com.clarkware.junitperf.*
import junit.framework.*
import junit.textui.TestRunner
import static Converter.celsius
class Listing_17_12_JUnitPerf extends TestCase {
Listing_17_12_JUnitPerf(String testName) {
super(testName) //#A
}
void testConverter() { //#B
assert 0 == celsius(32) //#C
assert 100 == celsius(212) //#C
}
static main(args) {
TestRunner.run(suite())
}
static Test suite() {
def testCase = new Listing_17_12_JUnitPerf("testConverter") //#D
def numUsers = 20 //#E
def stagger = new ConstantTimer(100) //#E
def loadTest = new LoadTest(testCase, numUsers, stagger) //#F
def timeLimit = 2100 //#G
return new TimedTest(loadTest, timeLimit) //#H
}
}
//#A Call super
//#B Traditional nontimed JUnit test
//#C Class under test
//#D Define test case
//#E 20 users for load staggered at 100 ms
//#F Decorate testcase to simulate load
//#G Must return within 2100 ms
//#H Return decorated time-constrained test
================================================
FILE: listings/chap17/Listing_17_13_SpockSimple.groovy
================================================
@Grab('org.spockframework:spock-core:1.0-groovy-2.4')
import spock.lang.Specification
class GivenWhenThenSpec extends Specification {
def "test adding a new item to a set"() {
given:
def items = [4, 6, 3, 2] as Set
when:
items << 1
then:
items.size() == 5
}
}
================================================
FILE: listings/chap17/Listing_17_14_SpockMock.groovy
================================================
@Grab('org.spockframework:spock-core:1.0-groovy-2.4')
import spock.lang.Specification
class Listing_17_14_SpockMock extends Specification {
def "buy ticket for a movie theater"() {
given:
def purchase = new Purchase("Lord of the Rings", 2)
MovieTheater theater = Mock() //#A
theater.hasSeatsAvailable("Lord of the Rings", 2) >> true //#B
when:
purchase.fill(theater)
then:
purchase.completed
1 * theater.purchaseTicket("Lord of the Rings", 2) //#C
}
}
//#A Creation of mock theater
//#B Mock hasSeatsAvailable call returning true
//#C Assert purchaseTicket has been called 1 time
================================================
FILE: listings/chap17/Listing_17_15_SpockMockWildcards.groovy
================================================
@Grab('org.spockframework:spock-core:1.0-groovy-2.4')
import spock.lang.Specification
class Listing_17_15_SpockMockWildcards extends Specification {
def "cannot buy a ticket when the movie is sold out"() {
given:
def purchase = new Purchase("Lord of the rings", 2)
MovieTheater theater = Mock()
when:
theater.hasSeatsAvailable(_, _) >> false //#A
purchase.fill(theater)
then:
!purchase.completed
0 * theater.purchaseTicket(_, _) //#B
}
}
//#A Mock hasSeatsAvailable call, any args, return false
//#B The purchaseTicket method has not been called
================================================
FILE: listings/chap17/Listing_17_16_SpockMockClosureChecks.groovy
================================================
@Grab('org.spockframework:spock-core:1.0-groovy-2.4')
import spock.lang.Specification
class Listing_17_16_SpockMockClosureChecks extends Specification {
def "on couples night tickets are sold in pairs"() {
given:
def purchase = new Purchase("Lord of the Rings", 2)
MovieTheater theater = Mock()
theater.hasSeatsAvailable("Lord of the Rings", 2) >> true
when:
purchase.fill(theater)
then:
1 * theater.purchaseTicket(_, { it % 2 == 0 }) //#1
}
}
//#1 Closure argument checking
================================================
FILE: listings/chap17/Listing_17_17_SpockDataDriven.groovy
================================================
@Grab('org.spockframework:spock-core:1.0-groovy-2.4')
import spock.lang.*
import static Converter.celsius
class Listing_17_17_SpockDataDriven extends Specification {
@Unroll
// def "test temperature scenarios"() {
def "Scenario #scenario: #tempFºF should convert to #tempCºC"() {
expect:
celsius(tempF) == tempC
where:
scenario | tempF || tempC
'Freezing' | 32 || 0
'Garden party conditions' | 68 || 20
'Beach conditions' | 95 || 35
'Boiling' | 212 || 100
}
}
================================================
FILE: listings/chap17/LoggingCounter.groovy
================================================
import java.util.logging.*
class LoggingCounter {
static final LOG = Logger.getLogger('LoggingCounter')
def biggerThan(items, target) {
int count = 0
items.each {
if (it > target) {
count++
LOG.finer "item was bigger - count this one"
} else if (it == target) {
LOG.finer "item was equal - don't count this one"
} else {
LOG.finer "item was smaller - don't count this one"
}
}
return count
}
}
================================================
FILE: listings/chap17/MovieTheater.groovy
================================================
interface MovieTheater {
void purchaseTicket(name, number)
boolean hasSeatsAvailable(name, number)
}
================================================
FILE: listings/chap17/Purchase.groovy
================================================
import groovy.transform.TupleConstructor
@TupleConstructor
class Purchase {
def name, number, completed = false
def fill(theater) {
if (theater.hasSeatsAvailable(name, number)) {
theater.purchaseTicket(name, number)
completed = true
}
}
}
================================================
FILE: listings/chap17/automation/build.gradle
================================================
apply plugin: 'groovy'
version = '1.0'
repositories {
mavenCentral()
}
dependencies {
compile "org.codehaus.groovy:groovy-all:2.4.0"
testCompile "junit:junit:4.12"
}
task initProject () << {
if (hasProperty(initPlugins)) {
initPlugins.split(',').each { plug ->
project.apply {
plugin(plug.trim())
}
}
}
project.sourceSets*.allSource.srcDirTrees.flatten().dir.each { dir ->
dir.mkdirs()
}
}
================================================
FILE: listings/chap17/automation/gradle/wrapper/gradle-wrapper.properties
================================================
#Thu Apr 10 09:16:15 EST 2014
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=http\://services.gradle.org/distributions/gradle-2.2.1-bin.zip
================================================
FILE: listings/chap17/automation/gradlew
================================================
#!/bin/bash
##############################################################################
## ##
## Gradle wrapper script for UN*X ##
## ##
##############################################################################
# Uncomment those lines to set JVM options. GRADLE_OPTS and JAVA_OPTS can be used together.
GRADLE_OPTS="$GRADLE_OPTS -Xmx640m"
# JAVA_OPTS="$JAVA_OPTS -Xmx512m"
GRADLE_APP_NAME=Gradle
warn ( ) {
echo "${PROGNAME}: $*"
}
die ( ) {
warn "$*"
exit 1
}
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
case "`uname`" in
CYGWIN* )
cygwin=true
;;
Darwin* )
darwin=true
;;
MINGW* )
msys=true
;;
esac
# Attempt to set JAVA_HOME if it's not already set.
if [ -z "$JAVA_HOME" ] ; then
if $darwin ; then
[ -z "$JAVA_HOME" -a -d "/Library/Java/Home" ] && export JAVA_HOME="/Library/Java/Home"
[ -z "$JAVA_HOME" -a -d "/System/Library/Frameworks/JavaVM.framework/Home" ] && export JAVA_HOME="/System/Library/Frameworks/JavaVM.framework/Home"
else
javaExecutable="`which javac`"
[ -z "$javaExecutable" -o "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ] && die "JAVA_HOME not set and cannot find javac to deduce location, please set JAVA_HOME."
# readlink(1) is not available as standard on Solaris 10.
readLink=`which readlink`
[ `expr "$readLink" : '\([^ ]*\)'` = "no" ] && die "JAVA_HOME not set and readlink not available, please set JAVA_HOME."
javaExecutable="`readlink -f \"$javaExecutable\"`"
javaHome="`dirname \"$javaExecutable\"`"
javaHome=`expr "$javaHome" : '\(.*\)/bin'`
export JAVA_HOME="$javaHome"
fi
fi
# For Cygwin, ensure paths are in UNIX format before anything is touched.
if $cygwin ; then
[ -n "$JAVACMD" ] && JAVACMD=`cygpath --unix "$JAVACMD"`
[ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
fi
STARTER_MAIN_CLASS=org.gradle.wrapper.GradleWrapperMain
CLASSPATH=`dirname "$0"`/gradle/wrapper/gradle-wrapper.jar
WRAPPER_PROPERTIES=`dirname "$0"`/gradle/wrapper/gradle-wrapper.properties
# Determine the Java command to use to start the JVM.
if [ -z "$JAVACMD" ] ; then
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
else
JAVACMD="java"
fi
fi
if [ ! -x "$JAVACMD" ] ; then
die "JAVA_HOME is not defined correctly, can not execute: $JAVACMD"
fi
if [ -z "$JAVA_HOME" ] ; then
warn "JAVA_HOME environment variable is not set"
fi
# For Darwin, add GRADLE_APP_NAME to the JAVA_OPTS as -Xdock:name
if $darwin; then
JAVA_OPTS="$JAVA_OPTS -Xdock:name=$GRADLE_APP_NAME"
# we may also want to set -Xdock:image
fi
# For Cygwin, switch paths to Windows format before running java
if $cygwin ; then
JAVA_HOME=`cygpath --path --mixed "$JAVA_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
SEP=""
for dir in $ROOTDIRSRAW ; do
ROOTDIRS="$ROOTDIRS$SEP$dir"
SEP="|"
done
OURCYGPATTERN="(^($ROOTDIRS))"
# Add a user-defined pattern to the cygpath arguments
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
i=0
for arg in "$@" ; do
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
else
eval `echo args$i`="\"$arg\""
fi
i=$((i+1))
done
case $i in
(0) set -- ;;
(1) set -- "$args0" ;;
(2) set -- "$args0" "$args1" ;;
(3) set -- "$args0" "$args1" "$args2" ;;
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac
fi
GRADLE_APP_BASE_NAME=`basename "$0"`
"$JAVACMD" $JAVA_OPTS $GRADLE_OPTS \
-classpath "$CLASSPATH" \
-Dorg.gradle.appname="$GRADLE_APP_BASE_NAME" \
-Dorg.gradle.wrapper.properties="$WRAPPER_PROPERTIES" \
$STARTER_MAIN_CLASS \
"$@"
================================================
FILE: listings/chap17/automation/gradlew.bat
================================================
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem ##
@rem Gradle startup script for Windows ##
@rem ##
@rem ##########################################################################
@rem
@rem $Revision: 10602 $ $Date: 2008-01-25 02:49:54 +0100 (ven., 25 janv. 2008) $
@rem
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
@rem Uncomment those lines to set JVM options. GRADLE_OPTS and JAVA_OPTS can be used together.
@rem set GRADLE_OPTS=%GRADLE_OPTS% -Xmx512m
@rem set JAVA_OPTS=%JAVA_OPTS% -Xmx512m
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.\
@rem Determine the command interpreter to execute the "CD" later
set COMMAND_COM="cmd.exe"
if exist "%SystemRoot%\system32\cmd.exe" set COMMAND_COM="%SystemRoot%\system32\cmd.exe"
if exist "%SystemRoot%\command.com" set COMMAND_COM="%SystemRoot%\command.com"
@rem Use explicit find.exe to prevent cygwin and others find.exe from being used
set FIND_EXE="find.exe"
if exist "%SystemRoot%\system32\find.exe" set FIND_EXE="%SystemRoot%\system32\find.exe"
if exist "%SystemRoot%\command\find.exe" set FIND_EXE="%SystemRoot%\command\find.exe"
:check_JAVA_HOME
@rem Make sure we have a valid JAVA_HOME
if not "%JAVA_HOME%" == "" goto have_JAVA_HOME
echo.
echo ERROR: Environment variable JAVA_HOME has not been set.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
echo.
goto end
:have_JAVA_HOME
@rem Validate JAVA_HOME
%COMMAND_COM% /C DIR "%JAVA_HOME%" 2>&1 | %FIND_EXE% /I /C "%JAVA_HOME%" >nul
if not errorlevel 1 goto init
echo.
echo ERROR: JAVA_HOME might be set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation if there are problems.
echo.
:init
@rem get name of script to launch with full path
@rem Get command-line arguments, handling Windowz variants
SET _marker=%JAVA_HOME: =%
@rem IF NOT "%_marker%" == "%JAVA_HOME%" ECHO JAVA_HOME "%JAVA_HOME%" contains spaces. Please change to a location without spaces if this causes problems.
if not "%OS%" == "Windows_NT" goto win9xME_args
if "%eval[2+2]" == "4" goto 4NT_args
IF "%_marker%" == "%JAVA_HOME%" goto :win9xME_args
set _FIXPATH=
call :fixpath "%JAVA_HOME%"
set JAVA_HOME=%_FIXPATH:~1%
goto win9xME_args
:fixpath
if not %1.==. (
for /f "tokens=1* delims=;" %%a in (%1) do (
call :shortfilename "%%a" & call :fixpath "%%b"
)
)
goto :EOF
:shortfilename
for %%i in (%1) do set _FIXPATH=%_FIXPATH%;%%~fsi
goto :EOF
:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2
:win9xME_args_slurp
if "x%~1" == "x" goto execute
set CMD_LINE_ARGS=%*
goto execute
:4NT_args
@rem Get arguments from the 4NT Shell from JP Software
set CMD_LINE_ARGS=%$
:execute
@rem Setup the command line
set STARTER_MAIN_CLASS=org.gradle.wrapper.GradleWrapperMain
set CLASSPATH=%DIRNAME%\gradle\wrapper\gradle-wrapper.jar
set WRAPPER_PROPERTIES=%DIRNAME%\gradle\wrapper\gradle-wrapper.properties
set JAVA_EXE=%JAVA_HOME%\bin\java.exe
set GRADLE_OPTS=%JAVA_OPTS% %GRADLE_OPTS% -Dorg.gradle.wrapper.properties="%WRAPPER_PROPERTIES%"
"%JAVA_EXE%" %GRADLE_OPTS% -classpath "%CLASSPATH%" %STARTER_MAIN_CLASS% %CMD_LINE_ARGS%
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
if not "%OS%"=="Windows_NT" echo 1 > nul | choice /n /c:1
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit "%ERRORLEVEL%"
exit /b "%ERRORLEVEL%"
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega
================================================
FILE: listings/chap17/automation/pom.xml
================================================
4.0.0ReGinAChap17jar1.0Chap17org.codehaus.gmavengmaven-plugin${gmaven.version}compiletestCompile1.7org.codehaus.gmaven.runtimegmaven-runtime-1.71.3org.codehaus.groovygroovy-allorg.codehaus.groovygroovy-all${groovy.version}compileorg.codehaus.gmavengmaven-plugin1.3org.apache.maven.pluginsmaven-compiler-plugin2.3.21.51.5org.apache.maven.pluginsmaven-surefire-plugin2.8org.apache.maven.surefiresurefire-junit472.8junitjunit4.8.2testorg.testngtestng6.0.1testorg.codehaus.groovygroovy-all${groovy.version}test1.31.8.0-rc-3
================================================
FILE: listings/chap17/automation/src/main/groovy/Calculator.groovy
================================================
class Calculator {
def add(number1, number2) {
return number1 + number2
}
}
================================================
FILE: listings/chap17/automation/src/test/groovy/CalculatorTest.groovy
================================================
import org.junit.Test
class CalculatorTest {
@Test
void testAdd() {
def calculator = new Calculator()
assert 10 == calculator.add(3, 7)
}
}
================================================
FILE: listings/chap17/cobertura/build.gradle
================================================
plugins {
id 'net.saliman.cobertura' version '2.2.6'
}
apply plugin: 'groovy'
repositories {
mavenCentral()
}
dependencies {
compile 'org.codehaus.groovy:groovy-all:2.4.0'
testCompile 'junit:junit:4.12'
}
================================================
FILE: listings/chap17/cobertura/gradle/wrapper/gradle-wrapper.properties
================================================
#Thu Apr 10 09:16:15 EST 2014
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=http\://services.gradle.org/distributions/gradle-2.2.1-bin.zip
================================================
FILE: listings/chap17/cobertura/gradlew
================================================
#!/bin/bash
##############################################################################
## ##
## Gradle wrapper script for UN*X ##
## ##
##############################################################################
# Uncomment those lines to set JVM options. GRADLE_OPTS and JAVA_OPTS can be used together.
GRADLE_OPTS="$GRADLE_OPTS -Xmx640m"
# JAVA_OPTS="$JAVA_OPTS -Xmx512m"
GRADLE_APP_NAME=Gradle
warn ( ) {
echo "${PROGNAME}: $*"
}
die ( ) {
warn "$*"
exit 1
}
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
case "`uname`" in
CYGWIN* )
cygwin=true
;;
Darwin* )
darwin=true
;;
MINGW* )
msys=true
;;
esac
# Attempt to set JAVA_HOME if it's not already set.
if [ -z "$JAVA_HOME" ] ; then
if $darwin ; then
[ -z "$JAVA_HOME" -a -d "/Library/Java/Home" ] && export JAVA_HOME="/Library/Java/Home"
[ -z "$JAVA_HOME" -a -d "/System/Library/Frameworks/JavaVM.framework/Home" ] && export JAVA_HOME="/System/Library/Frameworks/JavaVM.framework/Home"
else
javaExecutable="`which javac`"
[ -z "$javaExecutable" -o "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ] && die "JAVA_HOME not set and cannot find javac to deduce location, please set JAVA_HOME."
# readlink(1) is not available as standard on Solaris 10.
readLink=`which readlink`
[ `expr "$readLink" : '\([^ ]*\)'` = "no" ] && die "JAVA_HOME not set and readlink not available, please set JAVA_HOME."
javaExecutable="`readlink -f \"$javaExecutable\"`"
javaHome="`dirname \"$javaExecutable\"`"
javaHome=`expr "$javaHome" : '\(.*\)/bin'`
export JAVA_HOME="$javaHome"
fi
fi
# For Cygwin, ensure paths are in UNIX format before anything is touched.
if $cygwin ; then
[ -n "$JAVACMD" ] && JAVACMD=`cygpath --unix "$JAVACMD"`
[ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
fi
STARTER_MAIN_CLASS=org.gradle.wrapper.GradleWrapperMain
CLASSPATH=`dirname "$0"`/gradle/wrapper/gradle-wrapper.jar
WRAPPER_PROPERTIES=`dirname "$0"`/gradle/wrapper/gradle-wrapper.properties
# Determine the Java command to use to start the JVM.
if [ -z "$JAVACMD" ] ; then
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
else
JAVACMD="java"
fi
fi
if [ ! -x "$JAVACMD" ] ; then
die "JAVA_HOME is not defined correctly, can not execute: $JAVACMD"
fi
if [ -z "$JAVA_HOME" ] ; then
warn "JAVA_HOME environment variable is not set"
fi
# For Darwin, add GRADLE_APP_NAME to the JAVA_OPTS as -Xdock:name
if $darwin; then
JAVA_OPTS="$JAVA_OPTS -Xdock:name=$GRADLE_APP_NAME"
# we may also want to set -Xdock:image
fi
# For Cygwin, switch paths to Windows format before running java
if $cygwin ; then
JAVA_HOME=`cygpath --path --mixed "$JAVA_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
SEP=""
for dir in $ROOTDIRSRAW ; do
ROOTDIRS="$ROOTDIRS$SEP$dir"
SEP="|"
done
OURCYGPATTERN="(^($ROOTDIRS))"
# Add a user-defined pattern to the cygpath arguments
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
i=0
for arg in "$@" ; do
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
else
eval `echo args$i`="\"$arg\""
fi
i=$((i+1))
done
case $i in
(0) set -- ;;
(1) set -- "$args0" ;;
(2) set -- "$args0" "$args1" ;;
(3) set -- "$args0" "$args1" "$args2" ;;
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac
fi
GRADLE_APP_BASE_NAME=`basename "$0"`
"$JAVACMD" $JAVA_OPTS $GRADLE_OPTS \
-classpath "$CLASSPATH" \
-Dorg.gradle.appname="$GRADLE_APP_BASE_NAME" \
-Dorg.gradle.wrapper.properties="$WRAPPER_PROPERTIES" \
$STARTER_MAIN_CLASS \
"$@"
================================================
FILE: listings/chap17/cobertura/gradlew.bat
================================================
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem ##
@rem Gradle startup script for Windows ##
@rem ##
@rem ##########################################################################
@rem
@rem $Revision: 10602 $ $Date: 2008-01-25 02:49:54 +0100 (ven., 25 janv. 2008) $
@rem
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
@rem Uncomment those lines to set JVM options. GRADLE_OPTS and JAVA_OPTS can be used together.
@rem set GRADLE_OPTS=%GRADLE_OPTS% -Xmx512m
@rem set JAVA_OPTS=%JAVA_OPTS% -Xmx512m
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.\
@rem Determine the command interpreter to execute the "CD" later
set COMMAND_COM="cmd.exe"
if exist "%SystemRoot%\system32\cmd.exe" set COMMAND_COM="%SystemRoot%\system32\cmd.exe"
if exist "%SystemRoot%\command.com" set COMMAND_COM="%SystemRoot%\command.com"
@rem Use explicit find.exe to prevent cygwin and others find.exe from being used
set FIND_EXE="find.exe"
if exist "%SystemRoot%\system32\find.exe" set FIND_EXE="%SystemRoot%\system32\find.exe"
if exist "%SystemRoot%\command\find.exe" set FIND_EXE="%SystemRoot%\command\find.exe"
:check_JAVA_HOME
@rem Make sure we have a valid JAVA_HOME
if not "%JAVA_HOME%" == "" goto have_JAVA_HOME
echo.
echo ERROR: Environment variable JAVA_HOME has not been set.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
echo.
goto end
:have_JAVA_HOME
@rem Validate JAVA_HOME
%COMMAND_COM% /C DIR "%JAVA_HOME%" 2>&1 | %FIND_EXE% /I /C "%JAVA_HOME%" >nul
if not errorlevel 1 goto init
echo.
echo ERROR: JAVA_HOME might be set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation if there are problems.
echo.
:init
@rem get name of script to launch with full path
@rem Get command-line arguments, handling Windowz variants
SET _marker=%JAVA_HOME: =%
@rem IF NOT "%_marker%" == "%JAVA_HOME%" ECHO JAVA_HOME "%JAVA_HOME%" contains spaces. Please change to a location without spaces if this causes problems.
if not "%OS%" == "Windows_NT" goto win9xME_args
if "%eval[2+2]" == "4" goto 4NT_args
IF "%_marker%" == "%JAVA_HOME%" goto :win9xME_args
set _FIXPATH=
call :fixpath "%JAVA_HOME%"
set JAVA_HOME=%_FIXPATH:~1%
goto win9xME_args
:fixpath
if not %1.==. (
for /f "tokens=1* delims=;" %%a in (%1) do (
call :shortfilename "%%a" & call :fixpath "%%b"
)
)
goto :EOF
:shortfilename
for %%i in (%1) do set _FIXPATH=%_FIXPATH%;%%~fsi
goto :EOF
:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2
:win9xME_args_slurp
if "x%~1" == "x" goto execute
set CMD_LINE_ARGS=%*
goto execute
:4NT_args
@rem Get arguments from the 4NT Shell from JP Software
set CMD_LINE_ARGS=%$
:execute
@rem Setup the command line
set STARTER_MAIN_CLASS=org.gradle.wrapper.GradleWrapperMain
set CLASSPATH=%DIRNAME%\gradle\wrapper\gradle-wrapper.jar
set WRAPPER_PROPERTIES=%DIRNAME%\gradle\wrapper\gradle-wrapper.properties
set JAVA_EXE=%JAVA_HOME%\bin\java.exe
set GRADLE_OPTS=%JAVA_OPTS% %GRADLE_OPTS% -Dorg.gradle.wrapper.properties="%WRAPPER_PROPERTIES%"
"%JAVA_EXE%" %GRADLE_OPTS% -classpath "%CLASSPATH%" %STARTER_MAIN_CLASS% %CMD_LINE_ARGS%
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
if not "%OS%"=="Windows_NT" echo 1 > nul | choice /n /c:1
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit "%ERRORLEVEL%"
exit /b "%ERRORLEVEL%"
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega
================================================
FILE: listings/chap17/cobertura/src/main/groovy/BiggestPairCalc.groovy
================================================
class BiggestPairCalc {
int sumBiggestPair(a, b, c) {
def op1 = a
def op2 = b
if (c > a) {
op1 = c
} else if (c > b) {
op2 = c
}
return op1 + op2
}
}
================================================
FILE: listings/chap17/cobertura/src/main/groovy/BiggestPairCalcFixed.groovy
================================================
class BiggestPairCalcFixed {
int sumBiggestPair(int a, int b, int c) {
def op1 = a
def op2 = b
if (c > [a, b].min()) {
op1 = c
op2 = [a, b].max()
}
return op1 + op2
}
}
================================================
FILE: listings/chap17/cobertura/src/test/groovy/BiggestPairCalcTest.groovy
================================================
class BiggestPairCalcTest extends GroovyTestCase {
void testSumBiggestPair() {
def calc = new BiggestPairCalc()
testCalc(calc)
// def fixed = new BiggestPairCalcFixed()
// testCalc(fixed)
// assertEquals(11, fixed.sumBiggestPair(5, 2, 6))
// assertEquals(15, fixed.sumBiggestPair(5, 9, 6))
// assertEquals(16, fixed.sumBiggestPair(10, 2, 6))
}
private void testCalc(calc) {
assertEquals(9, calc.sumBiggestPair(5, 4, 1))
assertEquals(15, calc.sumBiggestPair(5, 9, 6))
assertEquals(16, calc.sumBiggestPair(10, 2, 6))
//assertEquals(11, calc.sumBiggestPair(5, 2, 6))
}
}
================================================
FILE: listings/chap17/extra_ParameterizedTestNG.groovy
================================================
@Grab('org.codehaus.groovy:groovy-testng:2.4.0')
@Grab('com.google.code.guice:guice:1.0')
@GrabConfig(systemClassLoader = true)
import org.testng.annotations.DataProvider
import org.testng.annotations.Test
import static Converter.celsius
class extra_ParameterizedTestNG {
Object[][] scenarios = [
[ 0, 32, 'Freezing'],
[ 20, 68, 'Garden party conditions'],
[ 35, 95, 'Beach conditions'],
[100, 212, 'Boiling']
]
@DataProvider(name = 'scenarios')
Object[][] scenarios() { scenarios }
@Test(dataProvider = 'scenarios')
void convert(c, f, scenario) {
def actual = celsius(f)
def msg = "$scenario: $fºF should convert into $cºC"
assert c == actual, msg
}
}
================================================
FILE: listings/chap17/extra_TestNG.groovy
================================================
@Grab('org.codehaus.groovy:groovy-testng:2.4.0')
@Grab('com.google.code.guice:guice:1.0')
@GrabConfig(systemClassLoader=true)
import org.testng.annotations.Test
class extra_TestNG {
@Test
void shouldAdd() {
assert 2 == 1 + 1
}
}
================================================
FILE: listings/chap17/snippet1701_JUnit4.groovy
================================================
import org.junit.Test
import static org.junit.Assert.assertEquals
class SimpleJUnit4Test {
@Test
void shouldAdd() {
assertEquals("Groovy should add correctly", 2, 1 + 1)
}
}
================================================
FILE: listings/chap17/snippet1704_listPropertyCheck.groovy
================================================
@Grab('net.java.quickcheck:quickcheck:0.6')
import static net.java.quickcheck.generator.PrimitiveGenerators.*
import static net.java.quickcheck.generator.CombinedGeneratorsIterables.*
for (words in someNonEmptyLists(strings())) {
assert words*.size().sum() == words.sum().size()
}
================================================
FILE: listings/chap17/test-output/Command line suite/Command line test.html
================================================
TestNG: Command line test
Command line test
Tests passed/Failed/Skipped:
1/0/0
Started on:
Thu Jun 04 12:16:31 CEST 2015
Total time:
0 seconds (2 ms)
Included groups:
Excluded groups:
(Hover the method name to see the test class name)
PASSED TESTS
Test method
Exception
Time (seconds)
Instance
shouldAdd Test class: extra_TestNG
0
extra_TestNG@2ec2a43e
================================================
FILE: listings/chap17/test-output/Command line suite/Command line test.xml
================================================
================================================
FILE: listings/chap17/test-output/emailable-report.html
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Command line suite">
<test name="Command line test" preserve-order="false">
<classes>
<class name="extra_TestNG"/>
</classes>
</test> <!-- Command line test -->
</suite> <!-- Command line suite -->
Tests for Command line suite
Command line test (1 class)
Groups for Command line suite
Times for Command line suite
Total running time: 1 ms
Reporter output for Command line suite
0 ignored methods
Methods in chronological order
extra_TestNG
shouldAdd0 ms
================================================
FILE: listings/chap17/test-output/junitreports/TEST-extra_ParameterizedTestNG.xml
================================================
================================================
FILE: listings/chap17/test-output/junitreports/TEST-extra_TestNG.xml
================================================
================================================
FILE: listings/chap17/test-output/old/Command line suite/Command line test.properties
================================================
[SuiteResult context=Command line test]
================================================
FILE: listings/chap17/test-output/old/Command line suite/classes.html
================================================
Class name
Method name
Groups
extra_TestNG
@Test
shouldAdd
@BeforeClass
@BeforeMethod
@AfterMethod
@AfterClass
================================================
FILE: listings/chap17/test-output/old/Command line suite/groups.html
================================================
Groups used for this test run
================================================
FILE: listings/chap17/test-output/old/Command line suite/index.html
================================================
Results for Command line suite
================================================
FILE: listings/chap17/test-output/old/Command line suite/main.html
================================================
Results for Command line suite
Select a result on the left-hand pane.
================================================
FILE: listings/chap17/test-output/old/Command line suite/methods-alphabetical.html
================================================
Methods run, sorted chronologically
>> means before, << means after
Command line suite(Hover the method name to see the test class name)
Time
Delta (ms)
Suite configuration
Test configuration
Class configuration
Groups configuration
Method configuration
Test method
Thread
Instances
15/06/04 12:16:31
0
shouldAdd
main@1098448570
================================================
FILE: listings/chap17/test-output/old/Command line suite/methods-not-run.html
================================================
Methods that were not run
================================================
FILE: listings/chap17/test-output/old/Command line suite/methods.html
================================================
Methods run, sorted chronologically
>> means before, << means after
Command line suite(Hover the method name to see the test class name)
Time
Delta (ms)
Suite configuration
Test configuration
Class configuration
Groups configuration
Method configuration
Test method
Thread
Instances
15/06/04 12:16:31
0
shouldAdd
main@1098448570
================================================
FILE: listings/chap17/test-output/old/Command line suite/reporter-output.html
================================================
Reporter output
================================================
FILE: listings/chap17/test-output/old/Command line suite/testng.xml.html
================================================
testng.xml for Command line suite<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="Command line suite"> <test name="Command line test" preserve-order="false"> <classes> <class name="extra_TestNG"/> </classes> </test> <!-- Command line test --> </suite> <!-- Command line suite -->
================================================
FILE: listings/chap17/test-output/old/Command line suite/toc.html
================================================
Results for Command line suite