Git Product home page Git Product logo

neo4j-timetree's Introduction

GraphAware Neo4j TimeTree - RETIRED

GraphAware Neo4j TimeTree Has Been Retired

As of May 2021, this repository has been retired.

GraphAware TimeTree is a simple library for representing time in Neo4j as a tree of time instants. The tree is built on-demand, supports resolutions of one year down to one millisecond and has time zone support. It also supports attaching event nodes to time instants (created on demand).

Community vs Enterprise

This open-source (GPL) version of the module is compatible with GraphAware Framework Community (GPL), which in turn is compatible with Neo4j Community Edition (GPL) only. It will not work with Neo4j Enterprise Edition, which is a proprietary and commercial software product of Neo4j, Inc..

GraphAware offers an Enterprise version of the GraphAware Framework to licensed users of Neo4j Enterprise Edition. Please get in touch to receive access.

Getting the Software

Server Mode

When using Neo4j in the standalone server mode, you will need the GraphAware Neo4j Framework and GraphAware Neo4j TimeTree .jar files (both of which you can download here) dropped into the plugins directory of your Neo4j installation. Starting in version 3.2, Neo4j has increased security for procedures and functions (sandboxing). Procedures that use internal APIs have to be allowed in $NEO4J_HOME/conf/neoj4.conf. As an example: dbms.security.procedures.unrestricted=ga.timetree.*

After adding the required plugins and updating neo4j.conf, restart Neo4j and you will be able to use the REST APIs of the TimeTree. Also note the additional, optional, installation instructions in the Automatic Event Attachment section.

Embedded Mode / Java Development

Java developers that use Neo4j in embedded mode and those developing Neo4j server plugins, unmanaged extensions, GraphAware Runtime Modules, or Spring MVC Controllers can include use the TimeTree as a dependency for their Java project.

Releases

Releases are synced to Maven Central repository. When using Maven for dependency management, include the following dependency in your pom.xml and edit the version number.

<dependencies>
    ...
    <dependency>
        <groupId>com.graphaware.neo4j</groupId>
        <artifactId>timetree</artifactId>
        <version>A.B.C.D.E</version>
    </dependency>
    ...
</dependencies>

Snapshots

To use the latest development version, just clone this repository, run mvn clean install and change the version in the dependency above to A.B.C.D.E-SNAPSHOT.

Note on Versioning Scheme

The version number has two parts. The first four numbers indicate compatibility with Neo4j GraphAware Framework. The last number is the version of the TimeTree library. For example, version 2.0.3.4.3 is version 3 of the TimeTree compatible with GraphAware Neo4j Framework 2.0.3.4.

Using GraphAware TimeTree

TimeTree allows you to represent events as nodes and link them to nodes representing instants of time in order to capture the time of the event's occurrence. For instance, if you wanted to express the fact that an email was sent on a specific day, you would create a node labelled Email and link it to a node labelled Day using a SENT_ON relationship.

email linked to day

In order to be able to ask interesting queries, such as "show me all emails sent in a specific month", people often built a time-tree in Neo4j with a root, years on the first level, months on the second level, etc. Something like this:

time tree

One way of building such tree is of course pre-generating it, for instance using a Cypher query. The approach taken by GraphAware TimeTree is to build the tree on-demand, as nodes representing time instants are requested. For example, you can ask the library "give me a node representing 24th May 2014". You'll get the node (Java) or its ID (REST) and can start linking to it. In the background, a node representing May (labelled Month) and a node representing 2014 (labelled Year) will be created, if they do not exist. Links between nodes on the same level as well as between levels are automatically maintained.

There are 4 types of relationships (hopefully self-explanatory):

  • CHILD
  • NEXT
  • FIRST
  • LAST

When using SingleTimeTree, the root of the tree is labelled TimeTreeRoot. You can create multiple time trees in your graph, in which case you should use CustomRootTimeTree and supply a node from your graph that will serve as the root of the tree.

The graph above, if generated by GraphAware SingleTimeTree, would thus look like this:

GraphAware TimeTree generated time tree

You can select the "resolution" of the time instant you will get from TimeTree. For instance, you only know that a certain event happened in April, nothing more. In that case, you can request the node representing April. Equally, you can request nodes representing concrete millisecond instants, if you so desire.

You may also provide a time-zone to the TimeTree APIs in order to create correctly labelled nodes for specific time instants.

Finally, the GraphAware TimeTree supports both attaching event nodes to time instants, and fetching events attached to a time instant and all its children or between two time instants and all their children. For instance, you can ask for all events that happened in April, which will return events attached to the April node as well as all its children and their children, etc.

Cypher

The TimeTree plugin offers a series of stored procedures in order to work with instant nodes and events efficiently.

Instant nodes

To get a node representing a time instant :

CALL ga.timetree.single({time: 1463659567468})

If you would like that the instant node is created if it doesn't exist for the given time, you can user single with option create instead :

CALL ga.timetree.single({time: 1463659567468, create: true})

This will create the time tree nodes in the graph :

GraphAware TimeTree procedure merge

The following parameters can be passed in the map:

  • time: (mandatory) the long representation of the time
  • resolution : default resolution is Day
  • timezone : default timezone is UTC
  • root: by default the time instants are attached to the default TimeTreeRoot, you can pass a node that will be used as time tree root
  • create: create the time tree node if not exist, by default to false

You can also get or create a node that represent the current time with the now() procedure :

CALL ga.timetree.now({})

Except for the time parameter, all other parameters can be passed in the map

You can also retrieve a range of instant nodes, by invoking the range procedure call :

CALL ga.timetree.range({start: 1463659567468, end: 1463859569504, create: true})

For the range call, an additional create parameter is available (by default to false). If set to true, the instant nodes will be created if they don't exist.

GraphAware TimeTree range

Attaching events to the time tree

You can attach any node to a time instant with the events.attach procedure call :

CREATE (e:Email {text: "I used the timetree"})
WITH e
CALL ga.timetree.events.attach({node: e, time: 1463659567468, relationshipType: "SENT_ON"})
YIELD node RETURN node

GraphAware TimeTree procedure attach

The following parameters can be passed in the map :

  • time: (mandatory) the long representation of the time
  • node: (mandatory) the event node to be attached to the time tree
  • relationshipType: (mandatory) the name of the relationship type to be created between the event node and the instant node
  • direction: default to OUTGOING, can be of OUTGOING or INCOMING
  • resolution : default resolution is Day
  • timezone : default timezone is UTC
  • root: The time tree root to be used (default to the default TimeTreeRoot)

Retrieving events from the time tree

The most usage of the timetree is retrieving events from it. For finding events that occured at a specific time, you can use the events.single procedure call :

CALL ga.timetree.events.single({time: 1463659567468}) YIELD node RETURN node

GraphAware TimeTree procedure events retrieve

The procedure yield more than the node. The relationship type as well as the direction between the event and the time instant can also be returned :

CALL ga.timetree.events.single({time: 1463659567468}) YIELD node, relationshipType, direction RETURN *

GraphAware TimeTree procedure single and yield all

The following parameters can be passed in the map :

  • time: (mandatory) the long representation of the time
  • relationshipTypes: a List of relationshipType names that for constraining the search
  • direction: default to OUTGOING, can be of OUTGOING or INCOMING
  • resolution : default resolution is Day
  • timezone : default timezone is UTC
  • root: The time tree root to be used (default to the default TimeTreeRoot)

As for the time instants, you can also retrieve events for a range in time :

CALL ga.timetree.events.range({start: 1463659567468, end: 1463859569504}) YIELD node, relationshipType, direction RETURN *

GraphAware TimeTree procedure retrieve in range

The same parameters from the events.single call apply for the range call, except time of course.

REST API

When deployed in server mode, there are the following URLs that you can issue GET requests to:

  • http://your-server-address:7474/graphaware/timetree/single/{time} to get a node representing a time instant, where time must be replaced by a long number representing the number of milliseconds since 1/1/1970. The default resolution is Day and the default time zone is UTC
  • http://your-server-address:7474/graphaware/timetree/single/{time}/events to get events attached to a time instant, where time must be replaced by a long number representing the number of milliseconds since 1/1/1970. The default resolution is Day and the default time zone is UTC
  • http://your-server-address:7474/graphaware/timetree/range/{startTime}/{endTime} to get nodes representing time instants between {startTime} and {endTime} (inclusive). The default resolution is Day and the default time zone is UTC
  • http://your-server-address:7474/graphaware/timetree/range/{startTime}/{endTime}/events to get events that occurred between {startTime} and {endTime} (inclusive). The default resolution is Day and the default time zone is UTC
  • http://your-server-address:7474/graphaware/timetree/now to get a node representing now. Defaults are the same as above.
  • http://your-server-address:7474/graphaware/timetree/{rootNodeId}/single/{time} to get a node representing a time instant, where {time} must be replaced by a long number representing the number of milliseconds since 1/1/1970 and {rootNodeId} must be replaced by the ID of an existing node that should serve as the tree root. Defaults are the same as above.
  • http://your-server-address:7474/graphaware/timetree/{rootNodeId}/single/{time}/events to get events attached to a time instant, where {time} must be replaced by a long number representing the number of milliseconds since 1/1/1970 and {rootNodeId} must be replaced by the ID of an existing node that should serve as the tree root. Defaults are the same as above.
  • http://your-server-address:7474/graphaware/timetree/{rootNodeId}/range/{startTime}/{endTime}/events to get events that occurred between {startTime} and {endTime} (inclusive) and {rootNodeId} must be replaced by the ID of an existing node that should serve as the tree root. Defaults are the same as above.
  • http://your-server-address:7474/graphaware/timetree/{rootNodeId}/now to get a node representing now, where {rootNodeId} must be replaced by the ID of an existing node that should serve as the tree root. Defaults are the same as above.

Additionally, you can issue POST requests to:

  • http://your-server-address:7474/graphaware/timetree/single/{time} to get or create a node representing a time instant, where time must be replaced by a long number representing the number of milliseconds since 1/1/1970. The default resolution is Day and the default time zone is UTC
  • http://your-server-address:7474/graphaware/timetree/range/{startTime}/{endTime} to get or create nodes representing time instants between {startTime} and {endTime} (inclusive). The default resolution is Day and the default time zone is UTC
  • http://your-server-address:7474/graphaware/timetree/now to get or create a node representing now. Defaults are the same as above.
  • http://your-server-address:7474/graphaware/timetree/{rootNodeId}/single/{time} to get or create a node representing a time instant, where {time} must be replaced by a long number representing the number of milliseconds since 1/1/1970 and {rootNodeId} must be replaced by the ID of an existing node that should serve as the tree root. Defaults are the same as above.
  • http://your-server-address:7474/graphaware/timetree/{rootNodeId}/now to get or create a node representing now, where {rootNodeId} must be replaced by the ID of an existing node that should serve as the tree root. Defaults are the same as above.

You have four query parameters:

  • resolution, which can take on the following values:

    • Year
    • Month
    • Day
    • Hour
    • Minute
    • Second
    • Millisecond
  • timezone, which can be a String representation of any java.util.TimeZone

  • relationshipTypes, which is a String representation of the RelationshipTypes, one of which relate the event to a time instant, separated by a comma. The default is all relationships, which is useful if you have different kinds of events occurring at the same time instant, and related to the time instant with different relationship types. Here the default will give you all events that occurred at that time instant.

    For instance, issuing the following request, asking for the hour node representing 5th April 2014 1pm (UTC time) in the GMT+1 time zone

    GET http://your-server-address:7474/graphaware/timetree/single/1396706182123?resolution=Hour&timezone=GMT%2B1
    

    on an empty database will result in the following graph being generated. The response body will contain the Neo4j node of the node representing the hour. You can then use it in order to link to it. Example response:

{
  "id": 4,
  "properties": {
    "value": 14
  },
  "labels": [
    "Hour"
  ]
}
  • direction, which is a String representation of the Direction, with which the event is related to the time instant from the time instant's point of view. Defaults to INCOMING. Permitted values are INCOMING,OUTGOING,BOTH.

GraphAware TimeTree generated time tree

The response to calls returning events contain a list of events with relationship names attaching these to instants, e.g.:

[
  {
    "node": {
      "id": 99,
      "properties": {
        "name": "eventA"
      },
      "labels": ["Event"]
    },
    "relationshipType": "STARTED_ON_DAY",
    "direction": "INCOMING"
  },
  {
    "node": {
      "id": 100,
      "properties": {
        "name": "eventB"
      },
      "labels": ["Event"]
    },
    "relationshipType": "ENDED_ON_DAY",
    "direction": "INCOMING"
  }
]

Attaching an event to a time instant requires a POST request to:

  • http://your-server-address:7474/graphaware/timetree/single/event to attach an existing event node to a node representing a time instant.
  • http://your-server-address:7474/graphaware/timetree/{rootNodeId}/single/event to attach an existing event node to a node representing a time instant, where {rootNodeId} must be replaced by the ID of an existing node that should serve as the tree root

The POST body resembles:

{
  "node": {
    "id": 99
  },
  "relationshipType": "HAS_EVENT",
  "direction":"INCOMING",
  "timezone": "UTC",
  "resolution": "DAY",
  "time": 1403506278000
}

where

  • node.id is the node ID of an existing event node
  • relationshipType is the name of the relationship type that should be used to attach the event to the time instant.
  • direction (optional) is the name of the direction (INCOMING or OUTGOING) that should be used to attach the event to the time instant, from the tree's point of view. By default, it is INCOMING, i.e., the relationship is directed from the event to the time instant.
  • timezone is a String representation of any java.util.TimeZone (optional)
  • resolution as described above (optional)
  • time is a number representing the number of milliseconds since 1/1/1970

It is also possible to attach a brand new event that does not exist yet. In this case, specify node.labels and node.properties instead if node.id. the body of the POST should resemble:

{
  "node": {
    "properties": {
      "name": "eventA"
    },
    "labels": ["Event"]
  },
  "relationshipType": "HAS_EVENT",
  "direction": "INCOMING",
  "timezone": "UTC",
  "resolution": "DAY",
  "time": 1403506278000
}

Automatic Event Attachment

All TimeTree versions compatible with Neo4j 2.2.0+ have the capability of automatically attaching events to the tree.

By default, any node created with label Event that contains a property named timestamp (with value as a long representing the timestamp in milliseconds), will be attached to the tree with an outgoing relationship AT_TIME from the event node to tree.

Required configuration as well as overriding the defaults are specified in neo4j.conf as follows:

#For the framework to work at all, you need this
dbms.unmanaged_extension_classes=com.graphaware.server=/graphaware

# Runtime must be enabled like this
com.graphaware.runtime.enabled=true

# A Runtime module that takes care of attaching the events like this (TT is the ID of the module)
com.graphaware.module.TT.1=com.graphaware.module.timetree.module.TimeTreeModuleBootstrapper

# autoAttach must be set to true
com.graphaware.module.TT.autoAttach=true

# Optionally, nodes which represent events and should be attached automatically have to be defined (defaults to nodes with label Event)
com.graphaware.module.TT.event=hasLabel('Email')

# Optionally, a property on the event nodes that represents the the time (long) at which the event took place must be specified (defaults to "timestamp")
com.graphaware.module.TT.timestamp=time

# Optionally, a property on the event nodes that represents the node ID (long) of the root node for the tree, to which the event should be attached (defaults to "timeTreeRootId")
com.graphaware.module.TT.customTimeTreeRootProperty=rootId

# Optionally, a resolution can be specified (defaults to DAY)
com.graphaware.module.TT.resolution=HOUR

# Optionally, a time zone can be specified (defaults to UTC)
com.graphaware.module.TT.timezone=GMT+1

# Optionally, a relationship type with which the events will be attached to the tree can be specified (defaults to AT_TIME)
com.graphaware.module.TT.relationship=SENT_ON

# Optionally, a relationship direction (from the tree's point of view), with which the events will be attached to the tree can be specified (defaults to INCOMING)
com.graphaware.module.TT.direction=INCOMING

For more information on the com.graphaware.module.TT.event setting, i.e. how to write expressions that define which nodes should be attached to the tree, please refer to Inclusion Policies.

Examples of relevant expressions that can be used:

  • hasProperty('propertyName') - returns boolean. Example: hasProperty('name')
  • getProperty('propertyName','defaultValue') - returns Object. Example: getProperty('name','unknown') == 'Michal'
  • getDegree() or degree - returns int. Examples: degree > 1
  • getDegree('typeOrDirection') - returns int. Examples: getDegree('OUTGOING') == 0 or getDegree('FRIEND_OF') > 1000
  • getDegree('type', 'direction') - returns int. Examples: getDegree('FRIEND_OF','OUTGOING') > 0
  • hasLabel('label') - returns boolean. Example: hasLabel('Person')

Of course, the expressions can be combined with logical operators, for instance:

  • hasLabel('Event') || hasProperty('startDate') || getProperty('significance', 0) > 20

By default, events are attached to a single tree, unless the events have a timeTreeRootId (or its equivalent changed in config) property, in which case a tree rooted at the node with the specified ID will be used to attach the event.

Note that you can define multiple modules if desired, e.g.:

com.graphaware.runtime.enabled=true

com.graphaware.module.TT.1=com.graphaware.module.timetree.module.TimeTreeModuleBootstrapper
com.graphaware.module.TT.event=hasProperty('timestamp_enabled')
com.graphaware.module.TT.relationship=ENABLED_ON
com.graphaware.module.TT.autoAttach=true
com.graphaware.module.TT.timestamp=timestamp_enabled

com.graphaware.module.TS.2=com.graphaware.module.timetree.module.TimeTreeModuleBootstrapper
com.graphaware.module.TS.event=hasProperty('timestamp_disabled')
com.graphaware.module.TS.relationship=DISABLED_ON
com.graphaware.module.TS.autoAttach=true
com.graphaware.module.TS.timestamp=timestamp_disabled

...

Java API

Java API has the same functionality as the rest API. Please refer to its Javadoc (look at the TimeTree and TimedEvents interfaces).

License

Copyright (c) 2013-2020 GraphAware

GraphAware is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.

neo4j-timetree's People

Contributors

albertodelazzari avatar aldrinm avatar alenegro81 avatar atg103 avatar bachmanm avatar ikwattro avatar ivy2012 avatar jotomo avatar luanne avatar michal-trnka avatar omarlarus avatar subvertallchris avatar tbaum avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

neo4j-timetree's Issues

CORS headers

Check to add CORS headers, is also relevant for our other modules where API endpoints are provided

SpringData Neo4j 4 + remote database = TimeTree doesn't work?

Hi,
I'm not sure if it's the best place to ask that kind of question but I don't know where I can ask it to quickly have an answer.

For my project, I use Spring Data Neo4j 4 and a remote instance of Neo4j. My application is a Spring Boot Application running on port 8090 and my Neo4j database run on 8030 port (everything in localhost). Everything works fine and now I want to use a TimeTree to manage multiples events. I add the TimeTree and Framework jar from GraphAware to my database plugins folder.
Here is my SDN 4 configuration file :

Neo4jConfig extends Neo4jConfiguration {

    @Value("${neo4j.url}")
    private String // "http://localhost:8030"

    @Bean
    public Neo4jServer neo4jServer() {
        return new RemoteServer(url);
    }

    @Override
    public SessionFactory getSessionFactory() {
        return new SessionFactory("com.zenika.client.mood");
   }

    @Bean
    public Session getSession() throws Exception {
        return super.getSession();
    }
}

Events can be of different kind (vote, poke, ...) then I want to have CustomTimeTree (eg. : one for each type event). The problem is, for that kind of tree, I need a Node object but I can't find a way to have it with SDN 4. If I use a SingleTimeTree, I need a GraphDatabaseService object but this object seems to exist in SDN (3 & 4) only for embedded database. Moreover, if I try to create my own custom object extending Node, I need the GraphDatabaseService I can't have because of the remote configuration...

I tried to use my database as an embedded one by using the file URI of my database for my configuration. This way, the TimeTree works fine but other functions of my application can't be used. Indeed, to allow the TimeTree manager to add its nodes to my database I must shutdown the neo4j server, otherwise I got this error :
org.neo4j.kernel.StoreLockException: Store and its lock file has been locked by another process
For this case, here is my configuration and the class creating the TimeTree :

 Neo4jConfig extends Neo4jConfiguration {

        @Value("${neo4j.url}")
        private String // "http://localhost:8030"

        @Bean
        public Neo4jServer neo4jServer() {
            return new RemoteServer(url);
        }

        @Override
        public SessionFactory getSessionFactory() {
            return new SessionFactory("com.zenika.client.mood");
         }

        @Bean
        public Session getSession() throws Exception {
            return super.getSession();
        }

        @Bean
        public GraphDatabaseService getGraphDatabaseService() {
            return new GraphDatabaseFactory().newEmbeddedDatabase("[path to neo4j root folder]/data/graph.db");
        }
    }
public class GATimeTreeService {

    public void test() {
        SingleTimeTree stt = new SingleTimeTree(graphDatabaseService);
        TimeInstantVO timeInstantVO = new TimeInstantVO(new Date().getTime(), Resolution.MONTH.name(), "UTC+01:00");
        TimeInstant timeInstant = TimeInstant.fromValueObject(timeInstantVO);
        stt.getOrCreateInstant(timeInstant);
    }

}

I pretty lost because everything I found was for embedded database and I have no idea how to use GraphAware TimeTree with a remote database... So I have three questions.

Did I miss something?
Is communication with remote database for TimeTree a feature not available yet? If yes, when will it be available?
How can I use TimeTree in my situation without create and manage it by myself?

Automatic Event Attachment (multiple props) does not seem to work

Hi,

Running neo4j 2.2.2.
I'm trying to auto-attach with the following settings:

com.graphaware.runtime.enabled=true
com.graphaware.module.TT.1=com.graphaware.module.timetree.module.TimeTreeModuleBootstrapper
com.graphaware.module.TT.event=hasProperty('timestamp') || hasProperty('mytimestamp')
com.graphaware.module.TT.autoAttach=true

For created nodes like this, automatic attachment works fine:

create (n:MyNode { timestamp: 1444632997000 }) return n;

However, if I try the same for a new node with the property "mytimestamp", it fails:

create (n:MyNode { mytimestamp: 1444632997000 }) return n;

Please collaborate.
Is my boolean expression for the .event property not correct?

EDIT: I see what's wrong here now. ".event" only defines which nodes will qualify, and not which properties are the timestamps. Sorry for asking too quick.
But this leads me to the new question: can I work with multiple "timestamp properties" on nodes?
F.e. can I auto-attach both timestamps in the following node to the TimeTree? Or better: what is best practice for working with ranges?

create (n:MyNode {
timestamp_from: 1444531887000,
timestamp_to: 1444632997000
}) return n;

"Cannot inherit from final class" error with multiple plugins

Hello,

I am trying to run time-tree plugin along with neo4j-contrib/neo4j-elasticsearch plugin. Even though I can run each plugin individually, I get the following error when I try to start the database with both plugins are active.

2016-10-10 14:37:27.911+0000 INFO  Starting...
2016-10-10 14:37:28.403+0000 INFO  Bolt enabled on localhost:7687.
2016-10-10 14:37:31.305+0000 INFO  [c.g.r.b.RuntimeKernelExtension] GraphAware Runtime disabled.
2016-10-10 14:37:34.974+0000 ERROR Failed to start Neo4j: Starting Neo4j failed: Component 'org.neo4j.server.database.LifecycleManagingDatabase@349cc412' was successfully initialized, but failed to start. Please see attached cause exception. Starting Neo4j failed: Component 'org.neo4j.server.database.LifecycleManagingDatabase@349cc412' was successfully initialized, but failed to start. Please see attached cause exception.
org.neo4j.server.ServerStartupException: Starting Neo4j failed: Component 'org.neo4j.server.database.LifecycleManagingDatabase@349cc412' was successfully initialized, but failed to start. Please see attached cause exception.
    at org.neo4j.server.exception.ServerStartupErrors.translateToServerStartupError(ServerStartupErrors.java:68)
    at org.neo4j.server.AbstractNeoServer.start(AbstractNeoServer.java:215)
    at org.neo4j.server.ServerBootstrapper.start(ServerBootstrapper.java:90)
    at org.neo4j.server.ServerBootstrapper.start(ServerBootstrapper.java:67)
    at org.neo4j.server.CommunityEntryPoint.main(CommunityEntryPoint.java:28)
Caused by: org.neo4j.kernel.lifecycle.LifecycleException: Component 'org.neo4j.server.database.LifecycleManagingDatabase@349cc412' was successfully initialized, but failed to start. Please see attached cause exception.
    at org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:444)
    at org.neo4j.kernel.lifecycle.LifeSupport.start(LifeSupport.java:107)
    at org.neo4j.server.AbstractNeoServer.start(AbstractNeoServer.java:187)
    ... 3 more
Caused by: java.lang.RuntimeException: Error starting org.neo4j.kernel.impl.factory.CommunityFacadeFactory, /home/ahmetkizilay/WORK/TOOLS/neo4j-community-3.0.6/data/databases/graph.db
    at org.neo4j.kernel.impl.factory.GraphDatabaseFacadeFactory.newFacade(GraphDatabaseFacadeFactory.java:144)
    at org.neo4j.kernel.impl.factory.CommunityFacadeFactory.newFacade(CommunityFacadeFactory.java:40)
    at org.neo4j.kernel.impl.factory.GraphDatabaseFacadeFactory.newFacade(GraphDatabaseFacadeFactory.java:108)
    at org.neo4j.server.CommunityNeoServer.lambda$static$0(CommunityNeoServer.java:55)
    at org.neo4j.server.database.LifecycleManagingDatabase.start(LifecycleManagingDatabase.java:89)
    at org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:434)
    ... 5 more
Caused by: org.neo4j.kernel.lifecycle.LifecycleException: Component 'org.neo4j.kernel.impl.proc.Procedures@22067885' was successfully initialized, but failed to start. Please see attached cause exception.
    at org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:444)
    at org.neo4j.kernel.lifecycle.LifeSupport.start(LifeSupport.java:107)
    at org.neo4j.kernel.impl.factory.GraphDatabaseFacadeFactory.newFacade(GraphDatabaseFacadeFactory.java:140)
    ... 10 more
Caused by: java.lang.VerifyError: Cannot inherit from final class
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:411)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at org.neo4j.kernel.impl.proc.ProcedureJarLoader$1.fetchNextOrNull(ProcedureJarLoader.java:132)
    at org.neo4j.kernel.impl.proc.ProcedureJarLoader$1.fetchNextOrNull(ProcedureJarLoader.java:110)
    at org.neo4j.collection.PrefetchingRawIterator.peek(PrefetchingRawIterator.java:50)
    at org.neo4j.collection.PrefetchingRawIterator.hasNext(PrefetchingRawIterator.java:36)
    at org.neo4j.kernel.impl.proc.ProcedureJarLoader.loadProcedures(ProcedureJarLoader.java:85)
    at org.neo4j.kernel.impl.proc.ProcedureJarLoader.loadProceduresFromDir(ProcedureJarLoader.java:77)
    at org.neo4j.kernel.impl.proc.Procedures.start(Procedures.java:125)
    at org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:434)
    ... 12 more

Is there a way to avoid this problem?

Also, the issue is mirrored here

How to define multiple nodes for auto attachment in neo4j.properties

It's clear how to specify a single label for automatically attaching events to the TimeTree in neo4j.properties. I've followed those instructions and had success.

# Nodes which represent events and should be attached automatically have to be defined
com.graphaware.module.TT.event=hasLabel('Email')

What's not clear is how to specify multiple labels for automatic attachment in neo4j.properties. Could you provide an example?

(I did review the Inclusion Policies documentation, but it still wasn't clear to me how to accomplish this in neo4j.properties.)

insufficient Time Root exists check

The getTimeRoot() check doesn't ensure that the timeTreeRoot was committed. Hence if the first transaction was not committed. The application always throws an exception that the time root doesn't exist.

protected Node getTimeRoot() {
    if (timeTreeRoot != null) {
        return timeTreeRoot;
    }
    ....
}

Suggestion for improvement:

protected Node getTimeRoot() {
    try { timeTreeRoot.getDegree() } catch(Exception e) { timeTreeRoot = null; }

    if (timeTreeRoot != null) {
        return timeTreeRoot;
    }
    ....
}

Safer way to manage root:

protected synchronized Node getTimeRoot() {
    try {
        if (timeTreeRoot == null)
            throw new NotFoundException();
        timeTreeRoot.getDegree();
    } catch (NotFoundException e) {
        try (ResourceIterator<Node> roots = db.findNodes(TimeTreeRoot)) {
            Node root = roots.next();
            if (roots.hasNext())
                throw new IllegalStateException("multiple time roots found!");
            timeTreeRoot = root;
        } catch (NoSuchElementException e1) {
            timeTreeRoot = database.createNode(TimeTreeRoot);
        }
    }

    return timeTreeRoot;
}

FR: Configurable relationship direction between timeNode and event

This is a Feature Request

Why ?

Take the following graph :

(user)-[:LAST_EVENT]->(event)-[:PREV_EVENT]->(event)
(event)-[:OPENED_PR]->(pullRequest)-[:ON_REPO]->(repository)
(event)-[:AT_TIME]->(minute)

Let's say I want to find people having worked on the same repositories than me (so here the OPENED_PR rel type can also be OPENED_ISSUE, CLOSED_PR, etc..), I can not traverse the graph in "blind" (so with no relationship type defined) without traversing the time tree too or if I go in "blind" it has several performance impact on the queries.

The current implementation of the plugin forces me to define all possible relationship types from the event node in order to avoid to traverse the TT.

Request: method to get events using a List of relationship types

Something like:

List<Event> getEvents(TimeInstant startTime, TimeInstant endTime, List<RelationshipType> relationshipTypes);

Then the web APIs could be modified to accept a param that is a list of relationship types instead of a single type.

What do you think? I can try my hand at a PR if you're into it.

Occasional "java.lang.NullPointerException" errors

This is sort of a weird one so I apologize in advance if it's a little unclear.

We're finding that under certain conditions, queries for ranges with hour resolution fail. We get an error from Jetty:

<h2>HTTP ERROR: 500</h2>
       <p>Problem accessing /graphaware/timetree/range/1423494497000/1424099297000. Reason:
       <pre>    java.lang.NullPointerException</pre></p>
       <hr /><i><small>Powered by Jetty://</small></i>

It seems like it only happens under hour resolution and if the older date timestamp greatly exceeds the existing nodes within the graph. So, in the query above, if I adjust the start timestamp up to within a day or so where we actually have data, it'll work. Even stranger is that after I get it working, I can start going back further and things will just work normally, it'll create the missing nodes as I go. As a result, I don't see this problem locally but our CI server complains since it sets up a new DB every time.

For now, we're working around it in the app. We look at what the user requests and if it falls outside of our bounds, we correct it. It does seem like a weird issue, though, so I thought I'd point it out.

Provided Dependencies

There are a few provided dependencies that are normally provided by the GraphAware Framework. However, if people include timetree in their pom, these dependencies are not transitively pulled in. We need to solve this somehow (maven profiles?), so that:

  • people who just use timetree get their dependencies
  • we don't ship unnecessary dependencies for server-mode deployment scenarios

How to config custom relationship on Automatic Event Attachment

I have

com.graphaware.module.TT.event=hasLabel("Item")

associated with

com.graphaware.module.TT.relationship=Created

is there a way to associate

com.graphaware.module.TT.event=hasLabel("Item") && hasProperty('Modified')

with

com.graphaware.module.TT.relationship=Modified

or something equivalent, I would like to keep track of the creation and modification of my items via the timetree.

Support batched transactions

We are planning to use this when we do large data imports (>1M nodes). In order to facilitate speedy imports, I am batching the transactions approximately 20k at a time - which means that I am taking finite control over
the transaction idiom (rather than using try-with-resources):

It seems that internally, you are using the java 7 idiom as follows SingleTimeTree.java:110:

    /**
     * {@inheritDoc}
     */
    @Override
    public Node getOrCreateInstant(TimeInstant timeInstant) {
        Node instant;

        try (Transaction tx = database.beginTx()) {
            DateTime dateTime = new DateTime(timeInstant.getTime(), timeInstant.getTimezone());

            Node timeRoot = getTimeRoot();
            tx.acquireWriteLock(timeRoot);
            instant = getOrCreateInstant(timeRoot, dateTime, timeInstant.getResolution());

            tx.success();
        }

        return instant;
    }

By doing it this way, it greatly slows down the speed of imports. Would there be a way to support batched transactions for faster performance? My cursory glance at SingleTimeTree.java:277 makes me wonder if making this method public:

private Node getOrCreateInstant(Node parent, DateTime dateTime, Resolution targetResolution)

As well as this method at SingletimeTree.java:145:

    protected Node getTimeRoot()

would give me the finite control I need. I haven't gone through your project 100% just yet, so making these methods public could be potentially very dangerous (particularly getTimeRoot, I think). If there is a better or different way, please let me know what you think.

Feature Request: Auto-Attach working with multiple TT roots

It would be nice to be able to use auto-attach with multiple TimeTree Roots.

Proposed solution :

  • new Configuration option com.graphaware.module.TT.rootNode=rootNodeID
  • each event node would need to have this rootNodeID property for the beforeCommit logic to work properly

Prevent retrospectice initialization when auto-attach is enabled.

Hello,

We are having an issue installing the TimeTree plugin in our production environment. This seems to be due to the fact that the initialisation process retrospectively goes and attaches the tree to all pre-existing event nodes we have defined in com.graphaware.module.TT.event=hasLabel('Event') property. We have DB with 1M+ nodes and therefore this takes an extremely long time, eventually causing us to kill the JVM process to restore traffic.

Is there a way to disable this behaviour on startup, i.e. still have auto-attach enabled but only for new Nodes created post startup, and not running the initialization. Perhaps in relation to the initializeUntil configuration?

Thanks in advance for your help.

[OT] public maven-release contains external dependencies

Hi there,
I noticed the jar-files of the public maven-release (e.g. from http://central.maven.org/maven2/com/graphaware/neo4j/timetree/2.1.5.21.17/timetree-2.1.5.21.17.jar ) containig the joda-time classes.

unzip -l timetree-2.1.5.21.17.jar 
...
     2180  08-16-13 18:30   org/joda/time/YearMonthDay$Property.class
     8757  08-16-13 18:30   org/joda/time/YearMonthDay.class
     4373  08-16-13 18:30   org/joda/time/Years.class
...

mixing classes from external artifacts will cause serious issues with the classloader.
Please specify the required dependencies in the pom.xml, that will be sufficient.

thanks a lot,
Thomas

Unexpected behaviour with the range rest api and resolution

Conf
neo4j-community-2.2.2
graphaware-server-community-all-2.2.2.33.jar
graphaware-timetree-2.2.2.33.23.jar

com.graphaware.runtime.enabled=true

# Module TTCREATED for creation logic
com.graphaware.module.TTCREATED.1=com.graphaware.module.timetree.module.TimeTreeModuleBootstrapper
com.graphaware.module.TTCREATED.event=hasLabel('Item') && !hasProperty('modified')
com.graphaware.module.TTCREATED.relationship=Created
com.graphaware.module.TTCREATED.timestamp=created
com.graphaware.module.TTCREATED.timezone=GMT+11
com.graphaware.module.TTCREATED.resolution=SECOND
com.graphaware.module.TTCREATED.autoAttach=true

# Module TTMODIFIED for modification logic
com.graphaware.module.TTMODIFIED.2=com.graphaware.module.timetree.module.TimeTreeModuleBootstrapper
com.graphaware.module.TTMODIFIED.event=hasLabel('Item') && hasProperty('modified')
com.graphaware.module.TTMODIFIED.relationship=Modified
com.graphaware.module.TTMODIFIED.timestamp=modified
com.graphaware.module.TTMODIFIED.timezone=GMT+11
com.graphaware.module.TTMODIFIED.resolution=SECOND
com.graphaware.module.TTMODIFIED.autoAttach=true

Call

http://localhost:7474/graphaware/timetree/range/1338984541742/1439005420669/events?resolution=day

result:

[
    {
        "node":{
            "id":615,
            "properties":{
                "content":"New 4x4",
                "uid":"cid26b2vj00003k5kq477zkrg",
                "created":1438984651247,
                "name":"Dmax",
                "modified":1438999230987
            },
            "labels":[
                "Item"
            ]
        },
        "relationshipType":"Created"
    },
    {
        "node":{
            "id":118,
            "properties":{
                "content":"okokk",
                "uid":"cid2i00hv00003k5mgk2ad1bb",
                "created":1439004290353,
                "name":"Time Test",
                "modified":1439004290606
            },
            "labels":[
                "Item"
            ]
        },
        "relationshipType":"Modified"
    }
]

OK all Good.

http://localhost:7474/graphaware/timetree/range/1338984541742/1439005420669/events?resolution=hour

result:
[ ]

Expecting same as above. And being able to filter on the granularity of the resolution passed.
Every other resolution gives an empty array.

2.2.0.M03 support?

I have something that I'd love to use this for but I it compiled for 2.2.0. Any chance this is happening soon?

mvn-build failing tests

I'm not sure what the intention of the TimeTreeIntegrationTest where. These tests failing in a 404-response.

Failed tests:   graphAwareApisAreMountedWhenPresentOnClasspath(com.graphaware.module.timetree.TimeTreeIntegrationTest): expected:<200> but was:<404>
  verifyLotsOfConcurrentRequestsDoNotCauseExceptions(com.graphaware.module.timetree.TimeTreeIntegrationTest): expected:<1000> but was:<0>
  shouldReturnEvents(com.graphaware.module.timetree.TimeTreeIntegrationTest): expected:<200> but was:<404>

Tests run: 57, Failures: 3, Errors: 0, Skipped: 0

and the verifyLotsOfConcurrentRequestsDoNotCauseExceptions seems to be no real provable test?

Possible to attach multiple events in one POST?

First, thank you for this amazing module โ€“ it really saves labor! And honestly, I'm new enough to Neo4j I don't know how to build such a sophisticated tree on the fly.

To my problem: I have a case where I'm importing a large amount of data. While I am planning to use automatic event connection, my dates are incomplete at the time the imported event nodes are created (using LOAD CSV). I have to run a second sweep to fix all my bad dates, so I've already lost the chance to have the time tree nodes auto-connected to events on CREATE. I see I can POST to /graphaware/timetree/single/event to have these reconnected, but it looks like I have to make a single POST for each event, which on a tight loop can really tax the http connection pool. I can probably address this by serializing the POST requests, but it seems like a much better solution would be for these calls to support an array of events in the post body, rather than only handling one at a time.

Is this already a feature, and I missed it in the documentation? Or what do you think about this enhancement?

Prevent duplicate rel creation

I use TimeTree immediately after a Cypher MERGE, so it sometimes ends in a new node, sometimes does not. I need to connect these maybe-new-maybe-not nodes to the time tree, but only if the relationship does not already exist. For now, I'm forced to perform an extra query to figure out if this should happen, but it would be really nice if this logic could be handled within the plugin. Is that doable?

Change GET to POST

For the API endpoints where the result is affecting the state of the database, I think it would make sense to change the HTTP methods to POST.

In a worst scenario, if a user has url locations to the plugin in his source code (think of Javascript for eg) and the state of nowaydays robots (Google can evaluate Javascript now), if the user's database can be crawled by such robots, they might be creating new TT nodes on every crawl.

This was the worst case, the overall case is that GET requests should be SAFE

autoattach not working

Hi,

i'm using graphaware timetree and uuid plugin

versions:

  • neo4j-community_windows-x64_2_3_2.exe
  • graphaware-server-community-all-2.3.2.37.jar
  • graphaware-uuid-2.3.2.37.8.jar
  • graphaware-timetree-2.3.2.37.24.jar

i manage to create date/time node with the api,

now i'm trying to enable autoattach at first on every node but it's not working

i have this configuration


com.graphaware.runtime.enabled=true
com.graphaware.module.UIDM.1=com.graphaware.module.uuid.UuidBootstrapper
com.graphaware.module.TT.1=com.graphaware.module.timetree.module.TimeTreeModuleBootstrapper
com.graphaware.module.TT.autoAttach=true

am i misconfiguring something ?

Memory leak in TimeInstant.getInstants

Hi,
I have a tree with a chain of Node linked with a :NEXT relation (State)-[:NEXT]->(State)...
These States are linked to a Millisecond resolution time Node as such: (State)-[:AT_TIME]-(Millis)<-[:CHILD]-(Second)...

I have a:
val timedEvents = new TimeTreeBackedEvents(new CustomRootTimeTree(node))
and calling
timedEvents.getEvents(from, to, relation)
where from an to can be 6 hours apart, I noticed that when this code hits:
TimeInstant.getInstants(startTime, endTime)
the JVM get out of memory.

Now I believe the problem come from this area of the method:
while (!startTime.isAfter(endTime)) {
result.add(new TimeInstant(startTime.getTime(), startTime.getTimezone(), startTime.getResolution()));
startTime = startTime.next();
}
My understanding is that we get every milliseconds between the 2 times, that can result in a huge amount of data hence the leak.

So my question is : Is there a way to get the milliseconds nodes between 2 times without looping over every milliseconds ? (using the timetree library)

Best regards
Jean-Paul

Unexpected behaviour with the range rest api

Here is my conf:
graphaware-server-community-all-2.2.2.32.jar
graphaware-timetree-2.2.2.32.22.jar

com.graphaware.runtime.enabled=true

# Module TTCREATED for creation logic
com.graphaware.module.TTCREATED.1=com.graphaware.module.timetree.module.TimeTreeModuleBootstrapper
com.graphaware.module.TTCREATED.event=hasLabel('Item') && !hasProperty('modified')
com.graphaware.module.TTCREATED.relationship=Created
com.graphaware.module.TTCREATED.timestamp=created
com.graphaware.module.TTCREATED.timezone=GMT+11
com.graphaware.module.TTCREATED.resolution=SECOND
com.graphaware.module.TTCREATED.autoAttach=true

# Module TTMODIFIED for modification logic
com.graphaware.module.TTMODIFIED.2=com.graphaware.module.timetree.module.TimeTreeModuleBootstrapper
com.graphaware.module.TTMODIFIED.event=hasLabel('Item') && hasProperty('modified')
com.graphaware.module.TTMODIFIED.relationship=Modified
com.graphaware.module.TTMODIFIED.timestamp=modified
com.graphaware.module.TTMODIFIED.timezone=GMT+11
com.graphaware.module.TTMODIFIED.resolution=SECOND
com.graphaware.module.TTMODIFIED.autoAttach=true

create new Item:

create (item:Item {uid:'${item.uid}' ,name:'${item.name}',content:'${item.content}', created:timestamp()})

then I'v got some updates

match (user:User)-[:Own]->(i:Item {uid:'${newItemUid}'})-[:ofType]->(c:Category) set i.modified=timestamp()

result:
The timetree is showing the edges created and modified as expected.

Item  <id>:93 uid:cicpv995x00003k5kcghumlea name:test content:test modified:1438242754445 created:1438240496379 

but:

http://localhost:7474/graphaware/timetree/range/1438230296379/1438250296379/events?resolution=Second

return: [ ] nothing

start = moment(1438230296379)Thu Jul 30 2015 15:24:56 GMT+1100 (NCT)}
end = moment(1438250296379)Thu Jul 30 2015 20:58:16 GMT+1100 (NCT)}

created = moment(1438240496379) Thu Jul 30 2015 18:14:56 GMT+1100 (NCT)}
modified = moment(1438242754445) Thu Jul 30 2015 18:52:34 GMT+1100 (NCT)}

so the created and modified dates are with in the range, why am I not getting any result ?

Automatic Event Attachment is not working

I am using latest versions of neo4j, and graphaware software, the event has time stamp as configured in neo4j.properties file and it is labeled as should.
From what I understands from the documentation, creating new node labeled with com.graphaware.module.TT.event=hasLabel('eve`nt')
and has the right timestamp com.graphaware.module.TT.timestamp=timestamp
should result in creation of the new node the time tree nodes that are missing and the relationship between the new node and the time tree.
Either there is a bug in the code or in the docs, any advice?
this is my configuration:
screen shot 2015-08-06 at 3 44 52 pm

this is the event:
screen shot 2015-08-06 at 4 36 12 pm

What is wrong?

Getting back uid instead of nodeId

I am using my own uid as i read nodeId (may) be volatile (what is the status on that btw...) so I am wondering how I can get my uid instead of the nodeId as a result from TT module ?

Unable to create time instant of historical dates

Epochs such as 894409200 do not seem to be initialising.

I am using the following code (with objects in place of types) to get the show on the road.

TimeTreeBackedEvents.attachEvent(Node, RelationshipType, TimeInstant.instant(epochs)

I haven't found an exact time but it looks like dates before 2000 and maybe even 2001 seem to be initialised as having 0 epochs.

The same code with epoch: 1472206009, works just fine and creates a new time instant in the tree.

Allow possibility to create "intermediate time nodes" in NEXT chain

With the current implementation, days that are not connected to events are not created. So it makes for e.g. the possibility to do time queries by matching the length of the multiple NEXT relationships between two days impossible.

Would it be possible to make this configurable, so createIntermediateTimeNodes=true for e.g. ?

Automatic Event Attachment is not working on debian

This is my neo4j.properties conf related to time tree.

Runtime must be enabled like this

com.graphaware.runtime.enabled=true

A Runtime module that takes care of attaching the events like this (TT is the ID of the module)

com.graphaware.module.TT.1=com.graphaware.module.timetree.module.TimeTreeModuleBootstrapper

Nodes which represent events and should be attached automatically have to be defined

com.graphaware.module.TT.event=hasLabel('Customer')

Optionally, a property on the event nodes that represents the the time (long) at which the event took place must be specified (defaults to "timestamp")

#com.graphaware.module.TT.timestamp=time

Optionally, a property on the event nodes that represents the node ID (long) of the root node for the tree, to which the event should be attached (defaults to "timeTreeRootId")

com.graphaware.module.TT.customTimeTreeRootProperty=rootId

Optionally, a resolution can be specified (defaults to DAY)

com.graphaware.module.TT.resolution=HOUR

Optionally, a time zone can be specified (defaults to UTC)

#com.graphaware.module.TT.timezone=GMT+5.5

Optionally, a relationship type with which the events will be attached to the tree can be specified (defaults to AT_TIME)

com.graphaware.module.TT.relationship=CREATED_ON

autoAttach must be set to true

com.graphaware.module.TT.autoAttach=true

Query i am using to create node is
CREATE (n:Customer {timestamp: 1436941284 , timeTreeRootId: 42, name: "test"}) return n;

Where 42 is the timetree root node ID.

Its failing to add event automatically to timetree.
If i use POST API to create event, its being attached successfully but not automatically.

Thanks.
Sreekanth

ga.* procedures not visible

I am not seeing any procedures (ga.*) in results for "call dbms.procedures()"

My environment:

  1. Ubuntu 16.04.2 LTS
  2. Neo4j EE 3.0.7
  3. GraphAware plugins: graphaware-server-community-all-3.0.7.44.jar, graphaware-timetree-3.0.7.44.26.jar

I added com.graphaware.runtime.enabled=true to neo4j.conf

I restarted the neo4j server

neo4j.log reports "GraphAware started."

Any help you can give me would be greatly appreciated.

Thanks,
Joel

Hangs if creating relationship in open transaction

Not sure if this is something to fix or just note, but it appears that if you POST to link an event to the tree while a transaction is open, it will timeout.

Running 2.1.7 Enterprise with in Neo4j Server mode.

Timestamp for relationships itself

It's possible for relationships itself to assign timestamp? Or is there a better solution?

For example user creates post:

(user:User)-[:CREATED {timestamp}]->(post:Post)

Or user likes existing post to know when that happened:

(user:User)-[:LIKED {timestamp}]->(post:Post)

For first case attaching timestamp would be ok to assign it to a post node, but in the second case I am not creating new node, just assign relationship of existing nodes.

Thanks!

Avoid getAllNodes in initialize when inclusion policies contains hasLabel

When in the configuration, we define an InclusionPolicy of hasLabel for com.graphaware.module.ID.event, there is no need to get ALL nodes of the db. We can just find nodes by the labels defined by the Inclusion policy.

https://github.com/graphaware/neo4j-timetree/blob/master/src/main/java/com/graphaware/module/timetree/module/TimeTreeModule.java#L101

This might reduce the initialize process on config change by a certain time.

However, I didn't find any method in NodeInclusionPolicy to retrieve the possible labels defined.

TimeTreeBackedEvents.getEvents() throws NPE if no events in range

Added a single event using attachEvent(), then called getEvents() with "from" = 0L and "to" is an instant before the event timestamp. Got the following exception:

java.lang.NullPointerException
    at com.graphaware.module.timetree.SingleTimeTree.findChild(SingleTimeTree.java:345)
    at com.graphaware.module.timetree.SingleTimeTree.getInstantViaClosestChild(SingleTimeTree.java:224)
    at com.graphaware.module.timetree.SingleTimeTree.getInstant(SingleTimeTree.java:215)
    at com.graphaware.module.timetree.SingleTimeTree.getInstant(SingleTimeTree.java:220)
    at com.graphaware.module.timetree.SingleTimeTree.getInstant(SingleTimeTree.java:220)
    at com.graphaware.module.timetree.SingleTimeTree.getInstant(SingleTimeTree.java:189)
    at com.graphaware.module.timetree.SingleTimeTree.getInstantAtOrBefore(SingleTimeTree.java:86)
    at com.graphaware.module.timetree.TimeTreeBackedEvents.getEvents(TimeTreeBackedEvents.java:81)
    at com.graphaware.module.timetree.TimeTreeBackedEvents.getEvents(TimeTreeBackedEvents.java:54)
    ...

Cannot start Neo4j server with TimeTree plugin (windows)

Hi,

I'm trying to install the TimeTree plugin on a standalone Neo4j server on Windows and get this error:

(I tried all combinations with the 3.0.4 or the 3.1.0 Neo4j server, and the 3.0.4.43.x or 3.0.6.43.x Graphaware server and plugins)

PS C:\WINDOWS\system32> neo4j console
2016-11-04 15:38:26.818+0000 INFO  Starting...
2016-11-04 15:38:27.940+0000 INFO  Bolt enabled on localhost:7687.
2016-11-04 15:38:30.103+0000 INFO  [c.g.r.b.RuntimeKernelExtension] GraphAware Runtime enabled, bootstrapping...
2016-11-04 15:38:30.134+0000 INFO  Running in a single-node architecture (Neo4j Community)
2016-11-04 15:38:30.146+0000 INFO  [c.g.r.b.RuntimeKernelExtension] Bootstrapping module with order 1, ID TT, using com.graphaware.module.timetree.module.TimeTreeModule
Bootstrapper
2016-11-04 15:38:30.289+0000 INFO  AutoAttach set to true
2016-11-04 15:38:30.306+0000 INFO  Registering module TT with GraphAware Runtime.
2016-11-04 15:38:30.308+0000 INFO  [c.g.r.b.RuntimeKernelExtension] GraphAware Runtime bootstrapped, starting the Runtime...
2016-11-04 15:38:36.723+0000 INFO  Starting GraphAware...
2016-11-04 15:38:36.727+0000 INFO  Loading module metadata...
2016-11-04 15:38:36.728+0000 INFO  Loading metadata for module TT
2016-11-04 15:38:36.839+0000 INFO  Module TT seems to have been registered before, metadata loaded successfully.
2016-11-04 15:38:36.844+0000 INFO  Module TT has not changed configuration since last run, already initialized.
2016-11-04 15:38:36.952+0000 INFO  Module metadata loaded.
2016-11-04 15:38:36.953+0000 INFO  Starting transaction-driven modules...
2016-11-04 15:38:36.957+0000 INFO  Transaction-driven modules started.
2016-11-04 15:38:36.958+0000 INFO  There are no timer-driven runtime modules. Not scheduling any tasks.
2016-11-04 15:38:36.961+0000 INFO  GraphAware started.
2016-11-04 15:38:36.966+0000 INFO  [c.g.r.b.RuntimeKernelExtension] GraphAware Runtime automatically started.
2016-11-04 15:38:39.702+0000 INFO  Started.
2016-11-04 15:38:39.958+0000 INFO  [c.g.s.f.b.GraphAwareServerBootstrapper] started
2016-11-04 15:38:39.960+0000 INFO  Mounted unmanaged extension [com.graphaware.server] at [/graphaware]
2016-11-04 15:38:40.161+0000 INFO  Mounting GraphAware Framework at /graphaware
2016-11-04 15:38:40.178+0000 INFO  Will try to scan the following packages: {com.**.graphaware.**,org.**.graphaware.**,net.**.graphaware.**}
2016-11-04 15:38:41.313+0000 WARN  Exception encountered during context initialization - cancelling refresh attempt Error creating bean with name 'timeTreeProcedures':
Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: org.neo4j.kernel.api.proc.ProcedureSignature.procedureName([Ljava/lang/String;)Lorg/n
eo4j/kernel/api/proc/ProcedureSignature$ProcedureName;
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'timeTreeProcedures': Invocation of init method failed; nested exception is java.
lang.NoSuchMethodError: org.neo4j.kernel.api.proc.ProcedureSignature.procedureName([Ljava/lang/String;)Lorg/neo4j/kernel/api/proc/ProcedureSignature$ProcedureName;
        at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.ja
va:136)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.j
ava:408)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1570)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:305)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:301)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:196)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:772)
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:835)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:537)
        at com.graphaware.server.foundation.context.BaseWebContextCreator.createWebContext(BaseWebContextCreator.java:35)
        at com.graphaware.server.foundation.bootstrap.GraphAwareBootstrappingFilter.addSpringToHandler(GraphAwareBootstrappingFilter.java:160)
        at com.graphaware.server.foundation.bootstrap.GraphAwareBootstrappingFilter.createGraphAwareHandler(GraphAwareBootstrappingFilter.java:137)
        at com.graphaware.server.foundation.bootstrap.GraphAwareBootstrappingFilter.addGraphAwareHandlers(GraphAwareBootstrappingFilter.java:131)
        at com.graphaware.server.foundation.bootstrap.GraphAwareBootstrappingFilter.bootstrapGraphAware(GraphAwareBootstrappingFilter.java:103)
        at com.graphaware.server.foundation.bootstrap.GraphAwareBootstrappingFilter.init(GraphAwareBootstrappingFilter.java:78)
        at org.eclipse.jetty.servlet.FilterHolder.initialize(FilterHolder.java:138)
        at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:852)
        at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:298)
        at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:741)
        at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
        at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132)
        at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114)
        at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61)
        at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
        at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132)
        at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114)
        at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61)
        at org.eclipse.jetty.server.handler.RequestLogHandler.doStart(RequestLogHandler.java:140)
        at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
        at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132)
        at org.eclipse.jetty.server.Server.start(Server.java:387)
        at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114)
        at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61)
        at org.eclipse.jetty.server.Server.doStart(Server.java:354)
        at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
        at org.neo4j.server.web.Jetty9WebServer.startJetty(Jetty9WebServer.java:363)
        at org.neo4j.server.web.Jetty9WebServer.start(Jetty9WebServer.java:178)
        at org.neo4j.server.AbstractNeoServer.startWebServer(AbstractNeoServer.java:326)
        at org.neo4j.server.AbstractNeoServer.start(AbstractNeoServer.java:218)
        at org.neo4j.server.ServerBootstrapper.start(ServerBootstrapper.java:91)
        at org.neo4j.server.ServerBootstrapper.start(ServerBootstrapper.java:68)
        at org.neo4j.server.CommunityEntryPoint.main(CommunityEntryPoint.java:28)
Caused by: java.lang.NoSuchMethodError: org.neo4j.kernel.api.proc.ProcedureSignature.procedureName([Ljava/lang/String;)Lorg/neo4j/kernel/api/proc/ProcedureSignature$Pro
cedureName;
        at com.graphaware.module.timetree.proc.TimeTreeProcedure.getProcedureName(TimeTreeProcedure.java:188)
        at com.graphaware.module.timetree.proc.TimeTreeProcedure.get(TimeTreeProcedure.java:47)
        at com.graphaware.module.timetree.proc.TimeTreeProcedures.init(TimeTreeProcedures.java:62)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:497)
        at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:354)
        at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcesso
r.java:305)
        at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.ja
va:133)
        ... 44 more
2016-11-04 15:38:42.372+0000 WARN  FAILED o.e.j.s.ServletContextHandler@7cf90451{/graphaware,null,STARTING}: org.springframework.beans.factory.BeanCreationException: Er
ror creating bean with name 'timeTreeProcedures': Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: org.neo4j.kernel.api.proc.Procedure
Signature.procedureName([Ljava/lang/String;)Lorg/neo4j/kernel/api/proc/ProcedureSignature$ProcedureName; Error creating bean with name 'timeTreeProcedures': Invocation
of init method failed; nested exception is java.lang.NoSuchMethodError: org.neo4j.kernel.api.proc.ProcedureSignature.procedureName([Ljava/lang/String;)Lorg/neo4j/kernel
/api/proc/ProcedureSignature$ProcedureName;
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'timeTreeProcedures': Invocation of init method failed; nested exception is java.
lang.NoSuchMethodError: org.neo4j.kernel.api.proc.ProcedureSignature.procedureName([Ljava/lang/String;)Lorg/neo4j/kernel/api/proc/ProcedureSignature$ProcedureName;
        at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.ja
va:136)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.j
ava:408)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1570)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:305)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:301)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:196)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:772)
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:835)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:537)
        at com.graphaware.server.foundation.context.BaseWebContextCreator.createWebContext(BaseWebContextCreator.java:35)
        at com.graphaware.server.foundation.bootstrap.GraphAwareBootstrappingFilter.addSpringToHandler(GraphAwareBootstrappingFilter.java:160)
        at com.graphaware.server.foundation.bootstrap.GraphAwareBootstrappingFilter.createGraphAwareHandler(GraphAwareBootstrappingFilter.java:137)
        at com.graphaware.server.foundation.bootstrap.GraphAwareBootstrappingFilter.addGraphAwareHandlers(GraphAwareBootstrappingFilter.java:131)
        at com.graphaware.server.foundation.bootstrap.GraphAwareBootstrappingFilter.bootstrapGraphAware(GraphAwareBootstrappingFilter.java:103)
        at com.graphaware.server.foundation.bootstrap.GraphAwareBootstrappingFilter.init(GraphAwareBootstrappingFilter.java:78)
        at org.eclipse.jetty.servlet.FilterHolder.initialize(FilterHolder.java:138)
        at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:852)
        at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:298)
        at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:741)
        at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
        at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132)
        at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114)
        at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61)
        at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
        at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132)
        at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114)
        at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61)
        at org.eclipse.jetty.server.handler.RequestLogHandler.doStart(RequestLogHandler.java:140)
        at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
        at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132)
        at org.eclipse.jetty.server.Server.start(Server.java:387)
        at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114)
        at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61)
        at org.eclipse.jetty.server.Server.doStart(Server.java:354)
        at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
        at org.neo4j.server.web.Jetty9WebServer.startJetty(Jetty9WebServer.java:363)
        at org.neo4j.server.web.Jetty9WebServer.start(Jetty9WebServer.java:178)
        at org.neo4j.server.AbstractNeoServer.startWebServer(AbstractNeoServer.java:326)
        at org.neo4j.server.AbstractNeoServer.start(AbstractNeoServer.java:218)
        at org.neo4j.server.ServerBootstrapper.start(ServerBootstrapper.java:91)
        at org.neo4j.server.ServerBootstrapper.start(ServerBootstrapper.java:68)
        at org.neo4j.server.CommunityEntryPoint.main(CommunityEntryPoint.java:28)
Caused by: java.lang.NoSuchMethodError: org.neo4j.kernel.api.proc.ProcedureSignature.procedureName([Ljava/lang/String;)Lorg/neo4j/kernel/api/proc/ProcedureSignature$Pro
cedureName;
        at com.graphaware.module.timetree.proc.TimeTreeProcedure.getProcedureName(TimeTreeProcedure.java:188)
        at com.graphaware.module.timetree.proc.TimeTreeProcedure.get(TimeTreeProcedure.java:47)
        at com.graphaware.module.timetree.proc.TimeTreeProcedures.init(TimeTreeProcedures.java:62)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:497)
        at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:354)
        at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcesso
r.java:305)
        at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.ja
va:133)
        ... 44 more
2016-11-04 15:38:42.385+0000 WARN  FAILED org.eclipse.jetty.server.handler.HandlerList@2f6118af[o.e.j.s.h.MovedContextHandler@6c9ec46a{/,null,AVAILABLE}, o.e.j.s.Servle
tContextHandler@7cf90451{/graphaware,null,STARTING}, o.e.j.s.ServletContextHandler@2977c10e{/db/manage,null,null}, o.e.j.s.ServletContextHandler@1d1893fd{/db/data,null,
null}, o.e.j.w.WebAppContext@3a1b4491{/browser,jar:file:/C:/Users/fhureau/neo4j-community-3.1.0-M12-beta2/lib/neo4j-browser-2.0.0-M05.jar!/browser,null}, o.e.j.s.Servle
tContextHandler@20bc6a2c{/,null,null}]: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'timeTreeProcedures': Invocation of init
method failed; nested exception is java.lang.NoSuchMethodError: org.neo4j.kernel.api.proc.ProcedureSignature.procedureName([Ljava/lang/String;)Lorg/neo4j/kernel/api/pro
c/ProcedureSignature$ProcedureName; Error creating bean with name 'timeTreeProcedures': Invocation of init method failed; nested exception is java.lang.NoSuchMethodErro
r: org.neo4j.kernel.api.proc.ProcedureSignature.procedureName([Ljava/lang/String;)Lorg/neo4j/kernel/api/proc/ProcedureSignature$ProcedureName;
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'timeTreeProcedures': Invocation of init method failed; nested exception is java.
lang.NoSuchMethodError: org.neo4j.kernel.api.proc.ProcedureSignature.procedureName([Ljava/lang/String;)Lorg/neo4j/kernel/api/proc/ProcedureSignature$ProcedureName;
        at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.ja
va:136)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.j
ava:408)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1570)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:305)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:301)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:196)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:772)
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:835)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:537)
        at com.graphaware.server.foundation.context.BaseWebContextCreator.createWebContext(BaseWebContextCreator.java:35)
        at com.graphaware.server.foundation.bootstrap.GraphAwareBootstrappingFilter.addSpringToHandler(GraphAwareBootstrappingFilter.java:160)
        at com.graphaware.server.foundation.bootstrap.GraphAwareBootstrappingFilter.createGraphAwareHandler(GraphAwareBootstrappingFilter.java:137)
        at com.graphaware.server.foundation.bootstrap.GraphAwareBootstrappingFilter.addGraphAwareHandlers(GraphAwareBootstrappingFilter.java:131)
        at com.graphaware.server.foundation.bootstrap.GraphAwareBootstrappingFilter.bootstrapGraphAware(GraphAwareBootstrappingFilter.java:103)
        at com.graphaware.server.foundation.bootstrap.GraphAwareBootstrappingFilter.init(GraphAwareBootstrappingFilter.java:78)
        at org.eclipse.jetty.servlet.FilterHolder.initialize(FilterHolder.java:138)
        at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:852)
        at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:298)
        at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:741)
        at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
        at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132)
        at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114)
        at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61)
        at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
        at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132)
        at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114)
        at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61)
        at org.eclipse.jetty.server.handler.RequestLogHandler.doStart(RequestLogHandler.java:140)
        at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
        at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132)
        at org.eclipse.jetty.server.Server.start(Server.java:387)
        at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114)
        at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61)
        at org.eclipse.jetty.server.Server.doStart(Server.java:354)
        at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
        at org.neo4j.server.web.Jetty9WebServer.startJetty(Jetty9WebServer.java:363)
        at org.neo4j.server.web.Jetty9WebServer.start(Jetty9WebServer.java:178)
        at org.neo4j.server.AbstractNeoServer.startWebServer(AbstractNeoServer.java:326)
        at org.neo4j.server.AbstractNeoServer.start(AbstractNeoServer.java:218)
        at org.neo4j.server.ServerBootstrapper.start(ServerBootstrapper.java:91)
        at org.neo4j.server.ServerBootstrapper.start(ServerBootstrapper.java:68)
        at org.neo4j.server.CommunityEntryPoint.main(CommunityEntryPoint.java:28)
Caused by: java.lang.NoSuchMethodError: org.neo4j.kernel.api.proc.ProcedureSignature.procedureName([Ljava/lang/String;)Lorg/neo4j/kernel/api/proc/ProcedureSignature$Pro
cedureName;
        at com.graphaware.module.timetree.proc.TimeTreeProcedure.getProcedureName(TimeTreeProcedure.java:188)
        at com.graphaware.module.timetree.proc.TimeTreeProcedure.get(TimeTreeProcedure.java:47)
        at com.graphaware.module.timetree.proc.TimeTreeProcedures.init(TimeTreeProcedures.java:62)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:497)
        at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:354)
        at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcesso
r.java:305)
        at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.ja
va:133)
        ... 44 more
2016-11-04 15:38:42.388+0000 WARN  FAILED org.eclipse.jetty.server.handler.RequestLogHandler@3754a084: org.springframework.beans.factory.BeanCreationException: Error cr
eating bean with name 'timeTreeProcedures': Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: org.neo4j.kernel.api.proc.ProcedureSignat
ure.procedureName([Ljava/lang/String;)Lorg/neo4j/kernel/api/proc/ProcedureSignature$ProcedureName; Error creating bean with name 'timeTreeProcedures': Invocation of ini
t method failed; nested exception is java.lang.NoSuchMethodError: org.neo4j.kernel.api.proc.ProcedureSignature.procedureName([Ljava/lang/String;)Lorg/neo4j/kernel/api/p
roc/ProcedureSignature$ProcedureName;
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'timeTreeProcedures': Invocation of init method failed; nested exception is java.
lang.NoSuchMethodError: org.neo4j.kernel.api.proc.ProcedureSignature.procedureName([Ljava/lang/String;)Lorg/neo4j/kernel/api/proc/ProcedureSignature$ProcedureName;
        at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.ja
va:136)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.j
ava:408)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1570)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:305)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:301)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:196)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:772)
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:835)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:537)
        at com.graphaware.server.foundation.context.BaseWebContextCreator.createWebContext(BaseWebContextCreator.java:35)
        at com.graphaware.server.foundation.bootstrap.GraphAwareBootstrappingFilter.addSpringToHandler(GraphAwareBootstrappingFilter.java:160)
        at com.graphaware.server.foundation.bootstrap.GraphAwareBootstrappingFilter.createGraphAwareHandler(GraphAwareBootstrappingFilter.java:137)
        at com.graphaware.server.foundation.bootstrap.GraphAwareBootstrappingFilter.addGraphAwareHandlers(GraphAwareBootstrappingFilter.java:131)
        at com.graphaware.server.foundation.bootstrap.GraphAwareBootstrappingFilter.bootstrapGraphAware(GraphAwareBootstrappingFilter.java:103)
        at com.graphaware.server.foundation.bootstrap.GraphAwareBootstrappingFilter.init(GraphAwareBootstrappingFilter.java:78)
        at org.eclipse.jetty.servlet.FilterHolder.initialize(FilterHolder.java:138)
        at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:852)
        at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:298)
        at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:741)
        at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
        at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132)
        at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114)
        at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61)
        at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
        at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132)
        at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114)
        at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61)
        at org.eclipse.jetty.server.handler.RequestLogHandler.doStart(RequestLogHandler.java:140)
        at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
        at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132)
        at org.eclipse.jetty.server.Server.start(Server.java:387)
        at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114)
        at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61)
        at org.eclipse.jetty.server.Server.doStart(Server.java:354)
        at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
        at org.neo4j.server.web.Jetty9WebServer.startJetty(Jetty9WebServer.java:363)
        at org.neo4j.server.web.Jetty9WebServer.start(Jetty9WebServer.java:178)
        at org.neo4j.server.AbstractNeoServer.startWebServer(AbstractNeoServer.java:326)
        at org.neo4j.server.AbstractNeoServer.start(AbstractNeoServer.java:218)
        at org.neo4j.server.ServerBootstrapper.start(ServerBootstrapper.java:91)
        at org.neo4j.server.ServerBootstrapper.start(ServerBootstrapper.java:68)
        at org.neo4j.server.CommunityEntryPoint.main(CommunityEntryPoint.java:28)
Caused by: java.lang.NoSuchMethodError: org.neo4j.kernel.api.proc.ProcedureSignature.procedureName([Ljava/lang/String;)Lorg/neo4j/kernel/api/proc/ProcedureSignature$Pro
cedureName;
        at com.graphaware.module.timetree.proc.TimeTreeProcedure.getProcedureName(TimeTreeProcedure.java:188)
        at com.graphaware.module.timetree.proc.TimeTreeProcedure.get(TimeTreeProcedure.java:47)
        at com.graphaware.module.timetree.proc.TimeTreeProcedures.init(TimeTreeProcedures.java:62)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:497)
        at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:354)
        at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcesso
r.java:305)
        at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.ja
va:133)
        ... 44 more
2016-11-04 15:38:42.432+0000 WARN  FAILED org.eclipse.jetty.server.Server@324666db: org.springframework.beans.factory.BeanCreationException: Error creating bean with na
me 'timeTreeProcedures': Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: org.neo4j.kernel.api.proc.ProcedureSignature.procedureName([
Ljava/lang/String;)Lorg/neo4j/kernel/api/proc/ProcedureSignature$ProcedureName; Error creating bean with name 'timeTreeProcedures': Invocation of init method failed; ne
sted exception is java.lang.NoSuchMethodError: org.neo4j.kernel.api.proc.ProcedureSignature.procedureName([Ljava/lang/String;)Lorg/neo4j/kernel/api/proc/ProcedureSignat
ure$ProcedureName;
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'timeTreeProcedures': Invocation of init method failed; nested exception is java.
lang.NoSuchMethodError: org.neo4j.kernel.api.proc.ProcedureSignature.procedureName([Ljava/lang/String;)Lorg/neo4j/kernel/api/proc/ProcedureSignature$ProcedureName;
        at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.ja
va:136)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.j
ava:408)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1570)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:305)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:301)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:196)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:772)
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:835)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:537)
        at com.graphaware.server.foundation.context.BaseWebContextCreator.createWebContext(BaseWebContextCreator.java:35)
        at com.graphaware.server.foundation.bootstrap.GraphAwareBootstrappingFilter.addSpringToHandler(GraphAwareBootstrappingFilter.java:160)
        at com.graphaware.server.foundation.bootstrap.GraphAwareBootstrappingFilter.createGraphAwareHandler(GraphAwareBootstrappingFilter.java:137)
        at com.graphaware.server.foundation.bootstrap.GraphAwareBootstrappingFilter.addGraphAwareHandlers(GraphAwareBootstrappingFilter.java:131)
        at com.graphaware.server.foundation.bootstrap.GraphAwareBootstrappingFilter.bootstrapGraphAware(GraphAwareBootstrappingFilter.java:103)
        at com.graphaware.server.foundation.bootstrap.GraphAwareBootstrappingFilter.init(GraphAwareBootstrappingFilter.java:78)
        at org.eclipse.jetty.servlet.FilterHolder.initialize(FilterHolder.java:138)
        at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:852)
        at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:298)
        at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:741)
        at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
        at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132)
        at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114)
        at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61)
        at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
        at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132)
        at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114)
        at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61)
        at org.eclipse.jetty.server.handler.RequestLogHandler.doStart(RequestLogHandler.java:140)
        at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
        at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132)
        at org.eclipse.jetty.server.Server.start(Server.java:387)
        at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114)
        at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61)
        at org.eclipse.jetty.server.Server.doStart(Server.java:354)
        at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
        at org.neo4j.server.web.Jetty9WebServer.startJetty(Jetty9WebServer.java:363)
        at org.neo4j.server.web.Jetty9WebServer.start(Jetty9WebServer.java:178)
        at org.neo4j.server.AbstractNeoServer.startWebServer(AbstractNeoServer.java:326)
        at org.neo4j.server.AbstractNeoServer.start(AbstractNeoServer.java:218)
        at org.neo4j.server.ServerBootstrapper.start(ServerBootstrapper.java:91)
        at org.neo4j.server.ServerBootstrapper.start(ServerBootstrapper.java:68)
        at org.neo4j.server.CommunityEntryPoint.main(CommunityEntryPoint.java:28)
Caused by: java.lang.NoSuchMethodError: org.neo4j.kernel.api.proc.ProcedureSignature.procedureName([Ljava/lang/String;)Lorg/neo4j/kernel/api/proc/ProcedureSignature$Pro
cedureName;
        at com.graphaware.module.timetree.proc.TimeTreeProcedure.getProcedureName(TimeTreeProcedure.java:188)
        at com.graphaware.module.timetree.proc.TimeTreeProcedure.get(TimeTreeProcedure.java:47)
        at com.graphaware.module.timetree.proc.TimeTreeProcedures.init(TimeTreeProcedures.java:62)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:497)
        at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:354)
        at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcesso
r.java:305)
        at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.ja
va:133)
        ... 44 more
2016-11-04 15:38:42.454+0000 ERROR Failed to start Neo4j on localhost:7474: Error creating bean with name 'timeTreeProcedures': Invocation of init method failed; nested
 exception is java.lang.NoSuchMethodError: org.neo4j.kernel.api.proc.ProcedureSignature.procedureName([Ljava/lang/String;)Lorg/neo4j/kernel/api/proc/ProcedureSignature$
ProcedureName;
2016-11-04 15:38:42.456+0000 INFO  Stopping...
2016-11-04 15:38:43.247+0000 INFO  Shutting down GraphAware Runtime...
2016-11-04 15:38:43.247+0000 INFO  Shutting down module TT
2016-11-04 15:38:43.251+0000 INFO  Terminating task scheduler...
2016-11-04 15:38:43.251+0000 INFO  Task scheduler terminated successfully.
2016-11-04 15:38:43.252+0000 INFO  GraphAware Runtime shut down.
2016-11-04 15:38:43.261+0000 INFO  Stopped.
2016-11-04 15:38:43.265+0000 ERROR Failed to start Neo4j: Starting Neo4j failed: Error creating bean with name 'timeTreeProcedures': Invocation of init method failed; n
ested exception is java.lang.NoSuchMethodError: org.neo4j.kernel.api.proc.ProcedureSignature.procedureName([Ljava/lang/String;)Lorg/neo4j/kernel/api/proc/ProcedureSigna
ture$ProcedureName; Starting Neo4j failed: Error creating bean with name 'timeTreeProcedures': Invocation of init method failed; nested exception is java.lang.NoSuchMet
hodError: org.neo4j.kernel.api.proc.ProcedureSignature.procedureName([Ljava/lang/String;)Lorg/neo4j/kernel/api/proc/ProcedureSignature$ProcedureName;
org.neo4j.server.ServerStartupException: Starting Neo4j failed: Error creating bean with name 'timeTreeProcedures': Invocation of init method failed; nested exception i
s java.lang.NoSuchMethodError: org.neo4j.kernel.api.proc.ProcedureSignature.procedureName([Ljava/lang/String;)Lorg/neo4j/kernel/api/proc/ProcedureSignature$ProcedureNam
e;
        at org.neo4j.server.exception.ServerStartupErrors.translateToServerStartupError(ServerStartupErrors.java:68)
        at org.neo4j.server.AbstractNeoServer.start(AbstractNeoServer.java:227)
        at org.neo4j.server.ServerBootstrapper.start(ServerBootstrapper.java:91)
        at org.neo4j.server.ServerBootstrapper.start(ServerBootstrapper.java:68)
        at org.neo4j.server.CommunityEntryPoint.main(CommunityEntryPoint.java:28)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'timeTreeProcedures': Invocation of init method failed; nested excepti
on is java.lang.NoSuchMethodError: org.neo4j.kernel.api.proc.ProcedureSignature.procedureName([Ljava/lang/String;)Lorg/neo4j/kernel/api/proc/ProcedureSignature$Procedur
eName;
        at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.ja
va:136)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.j
ava:408)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1570)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:305)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:301)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:196)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:772)
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:835)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:537)
        at com.graphaware.server.foundation.context.BaseWebContextCreator.createWebContext(BaseWebContextCreator.java:35)
        at com.graphaware.server.foundation.bootstrap.GraphAwareBootstrappingFilter.addSpringToHandler(GraphAwareBootstrappingFilter.java:160)
        at com.graphaware.server.foundation.bootstrap.GraphAwareBootstrappingFilter.createGraphAwareHandler(GraphAwareBootstrappingFilter.java:137)
        at com.graphaware.server.foundation.bootstrap.GraphAwareBootstrappingFilter.addGraphAwareHandlers(GraphAwareBootstrappingFilter.java:131)
        at com.graphaware.server.foundation.bootstrap.GraphAwareBootstrappingFilter.bootstrapGraphAware(GraphAwareBootstrappingFilter.java:103)
        at com.graphaware.server.foundation.bootstrap.GraphAwareBootstrappingFilter.init(GraphAwareBootstrappingFilter.java:78)
        at org.eclipse.jetty.servlet.FilterHolder.initialize(FilterHolder.java:138)
        at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:852)
        at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:298)
        at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:741)
        at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
        at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132)
        at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114)
        at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61)
        at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
        at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132)
        at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114)
        at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61)
        at org.eclipse.jetty.server.handler.RequestLogHandler.doStart(RequestLogHandler.java:140)
        at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
        at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132)
        at org.eclipse.jetty.server.Server.start(Server.java:387)
        at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114)
        at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61)
        at org.eclipse.jetty.server.Server.doStart(Server.java:354)
        at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
        at org.neo4j.server.web.Jetty9WebServer.startJetty(Jetty9WebServer.java:363)
        at org.neo4j.server.web.Jetty9WebServer.start(Jetty9WebServer.java:178)
        at org.neo4j.server.AbstractNeoServer.startWebServer(AbstractNeoServer.java:326)
        at org.neo4j.server.AbstractNeoServer.start(AbstractNeoServer.java:218)
        ... 3 more
Caused by: java.lang.NoSuchMethodError: org.neo4j.kernel.api.proc.ProcedureSignature.procedureName([Ljava/lang/String;)Lorg/neo4j/kernel/api/proc/ProcedureSignature$Pro
cedureName;
        at com.graphaware.module.timetree.proc.TimeTreeProcedure.getProcedureName(TimeTreeProcedure.java:188)
        at com.graphaware.module.timetree.proc.TimeTreeProcedure.get(TimeTreeProcedure.java:47)
        at com.graphaware.module.timetree.proc.TimeTreeProcedures.init(TimeTreeProcedures.java:62)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:497)
        at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:354)
        at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcesso
r.java:305)
        at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.ja
va:133)
        ... 44 more

Server, runtime and module being registered in neo4j.conf with:

dbms.unmanaged_extension_classes=com.graphaware.server=/graphaware
com.graphaware.runtime.enabled=true
com.graphaware.module.TT.1=com.graphaware.module.timetree.module.TimeTreeModuleBootstrapper
com.graphaware.module.TT.autoAttach=true

Could I be missing something in the configuration?
Thanks!

A RequestDispatcher could not be located for the default servlet 'default'

I am trying to add graphaware/neo4j/timetree to my project, but I am getting this error: org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.IllegalStateException: A RequestDispatcher could not be located for the default servlet 'default'

neo4j/plugins folder

total 26M
-rw-r--r-- 1 admin admin 13M Jan  1 10:11 graphaware-server-community-all-3.1.0.44.jar
-rw-r--r-- 1 admin admin 13M Jan  1 10:11 graphaware-timetree-3.1.0.44.26.jar

I added this to my neo4j.conf: dbms.unmanaged_extension_classes=com.graphaware.server=/graphaware

The response from postman to POST http://localhost:7474/graphaware/timetree/now has a 500 status code with the error above:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/>
<title>Error 500 </title>
</head>
<body>
<h2>HTTP ERROR: 500</h2>
<p>Problem accessing /graphaware/timetree/now. Reason:
<pre>    org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.IllegalStateException: A RequestDispatcher could not be located for the default servlet 'default'</pre></p>
<hr /><i><small>Powered by Jetty://</small></i>
</body>
</html>

Struggling to get a working install of TimeTree

Trying to put together a Docker container which builds on neo4j:3.2 to include a working TimeTree:

https://gitlab.com/nrvale0/neo4j-hacking/

FROM neo4j:3.2
ENV TERM=ansi

RUN apk --no-cache add wget ca-certificates
RUN mkdir -p /plugins

COPY ./scripts/build.sh /build.sh
RUN chmod +x /build.sh && /build.sh

COPY ./Dockerfile /Dockerfile

and here is the build.sh:

#!/bin/bash

echo "Executing custom configuration script $0..."

: ${FRAMEWORK_URL:="https://github.com/graphaware/neo4j-framework/releases/tag/graphaware-parent-3.2.1.51"}
: ${TIMETREE_URL:="https://github.com/graphaware/neo4j-timetree/releases/tag/timetree-3.2.1.51.27"}

set -eu

pushd `pwd` > /dev/null 2>&1
cd /plugins
 
if [ ! -f graphaware-parent*jar ]; then
    (set -x; \
     wget -q -c "${FRAMEWORK_URL}")
	 
fi

if [ ! -f timetree*jar ]; then
    (set -x; \
     wget -q -c "${TIMETREE_URL}")
fi

chmod -R +rx /plugins

cat <<EOF >> /var/lib/neo4j/conf/neo4j.conf

###### GraphAware TimeTree config

# This TimeTree config snippet take from https://github.com/graphaware/neo4j-timetree#automatic-event-attachment

#For the framework to work at all, you need this
dbms.unmanaged_extension_classes=com.graphaware.server=/graphaware

# Runtime must be enabled like this
com.graphaware.runtime.enabled=true

# A Runtime module that takes care of attaching the events like this (TT is the ID of the module)
com.graphaware.module.TT.1=com.graphaware.module.timetree.module.TimeTreeModuleBootstrapper

# autoAttach must be set to true
com.graphaware.module.TT.autoAttach=true

# Optionally, nodes which represent events and should be attached automatically have to be defined (defaults to nodes with label Event)
com.graphaware.module.TT.event=hasLabel('Email')

# Optionally, a property on the event nodes that represents the the time (long) at which the event took place must be specified (defaults to "timestamp")
com.graphaware.module.TT.timestamp=time

# Optionally, a property on the event nodes that represents the node ID (long) of the root node for the tree, to which the event should be attached (defaults to "timeTreeRootId")
com.graphaware.module.TT.customTimeTreeRootProperty=rootId

# Optionally, a resolution can be specified (defaults to DAY)
com.graphaware.module.TT.resolution=HOUR

# Optionally, a time zone can be specified (defaults to UTC)
com.graphaware.module.TT.timezone=GMT+1

# Optionally, a relationship type with which the events will be attached to the tree can be specified (defaults to AT_TIME)
com.graphaware.module.TT.relationship=SENT_ON

# Optionally, a relationship direction (from the tree's point of view), with which the events will be attached to the tree can be specified (defaults to INCOMING)
com.graphaware.module.TT.direction=INCOMING

###### End of GraphAware TimeTree config

EOF

popd

When I start the container (either with docker run) with Docker Compose like so:

version: '3'

services:
  graphdb:
    build: ./services/graphdb
    image: docker-compose-built/neo4j:3.2
    hostname: graphdb
    container_name: graphdb
    ports:
      - 7474:7474
      - 7687:7687
    environment:
      - NEO4J_AUTH=none
    volumes:
      - ./services/graphdb/data:/data
      - ./services/graphdb/logs:/logs

I'm getting the following stack trace and I'm not sure why. I've Google-d some other pages which suggest that it might be permissions related however neo4j is running as root in the container and the perms on the /plugins directory and contents are +rx so I suspect that's not it.

graphdb    | Active database: graph.db                                                                                                                                                        
graphdb    | Directories in use:                                                                                                                                                              
graphdb    |   home:         /var/lib/neo4j                                                                                                                                                   
graphdb    |   config:       /var/lib/neo4j/conf                                                                                                                                              
graphdb    |   logs:         /logs                                                                                                                                                            
graphdb    |   plugins:      /plugins                                                                                                                                                         
graphdb    |   import:       /var/lib/neo4j/import                                                                                                                                            
graphdb    |   data:         /var/lib/neo4j/data                                                                                                                                              
graphdb    |   certificates: /var/lib/neo4j/certificates                                       
graphdb    |   run:          /var/lib/neo4j/run                                                                                                                                               
graphdb    | Starting Neo4j.                                                                                                                                                                  
graphdb    | 2017-09-09 19:11:27.732+0000 WARN  Unknown config option: causal_clustering.discovery_listen_address                                                                             
graphdb    | 2017-09-09 19:11:27.733+0000 WARN  Unknown config option: causal_clustering.raft_advertised_address                                                                              
graphdb    | 2017-09-09 19:11:27.733+0000 WARN  Unknown config option: causal_clustering.raft_listen_address                                                                                  
graphdb    | 2017-09-09 19:11:27.733+0000 WARN  Unknown config option: ha.host.coordination                                                                                                   
graphdb    | 2017-09-09 19:11:27.733+0000 WARN  Unknown config option: causal_clustering.discovery_advertised_address                                                                         
graphdb    | 2017-09-09 19:11:27.733+0000 WARN  Unknown config option: causal_clustering.transaction_advertised_address                                                                       
graphdb    | 2017-09-09 19:11:27.733+0000 WARN  Unknown config option: ha.host.data                                                                                                           
graphdb    | 2017-09-09 19:11:27.733+0000 WARN  Unknown config option: causal_clustering.transaction_listen_address                                                                           
graphdb    | 2017-09-09 19:11:27.752+0000 INFO  ======== Neo4j 3.2.3 ========                                                                                                                 
graphdb    | 2017-09-09 19:11:27.798+0000 INFO  Starting...                                                                                                                                   
graphdb    | 2017-09-09 19:11:28.936+0000 INFO  Bolt enabled on 0.0.0.0:7687.                                                                                                                 
graphdb    | 2017-09-09 19:11:32.468+0000 INFO  Started.                                                                                                                                      
graphdb    | 2017-09-09 19:11:32.713+0000 INFO  Mounted unmanaged extension [com.graphaware.server] at [/graphaware]                                                                          
graphdb    | 2017-09-09 19:11:33.238+0000 ERROR The ResourceConfig instance does not contain any root resource classes.                                                                       
graphdb    | 2017-09-09 19:11:33.238+0000 WARN  unavailable The ResourceConfig instance does not contain any root resource classes.                                                           
graphdb    | com.sun.jersey.api.container.ContainerException: The ResourceConfig instance does not contain any root resource classes.                                                         
graphdb    |    at com.sun.jersey.server.impl.application.RootResourceUriRules.<init>(RootResourceUriRules.java:99)                                                                           
graphdb    |    at com.sun.jersey.server.impl.application.WebApplicationImpl._initiate(WebApplicationImpl.java:1359)                                                                          
graphdb    |    at com.sun.jersey.server.impl.application.WebApplicationImpl.access$700(WebApplicationImpl.java:180)                                                                          
graphdb    |    at com.sun.jersey.server.impl.application.WebApplicationImpl$13.f(WebApplicationImpl.java:799)                                                                                
graphdb    |    at com.sun.jersey.server.impl.application.WebApplicationImpl$13.f(WebApplicationImpl.java:795)                                                                                
graphdb    |    at com.sun.jersey.spi.inject.Errors.processWithErrors(Errors.java:193)                                                                                                        
graphdb    |    at com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:795)                                                                             
graphdb    |    at com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:790)                                                                             
graphdb    |    at com.sun.jersey.spi.container.servlet.ServletContainer.initiate(ServletContainer.java:509)                                                                                  
graphdb    |    at com.sun.jersey.spi.container.servlet.ServletContainer$InternalWebComponent.initiate(ServletContainer.java:339)                                                             
graphdb    |    at com.sun.jersey.spi.container.servlet.WebComponent.load(WebComponent.java:605)                                                                                              
graphdb    |    at com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:207)                                                                                              
graphdb    |    at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:394)                                                                                      
graphdb    |    at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:577)                                                                                      
graphdb    |    at javax.servlet.GenericServlet.init(GenericServlet.java:244)                                                                                                                 
graphdb    |    at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:612)                                                                                                
graphdb    |    at org.eclipse.jetty.servlet.ServletHolder.initialize(ServletHolder.java:395)                                                                                                 
graphdb    |    at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:871)                                                                                               
graphdb    |    at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:298)                                                                               
graphdb    |    at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:741)                                                                                           
graphdb    |    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)                                                                                        
graphdb    |    at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132)                                                                                     
graphdb    |    at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114)                                                                                   
graphdb    |    at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61)                                                                                          
graphdb    |    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)                                                                                        
graphdb    |    at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132)                                                                                     
graphdb    |    at org.eclipse.jetty.server.Server.start(Server.java:387)                                                                                                                     
graphdb    |    at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114)                                                                                   
graphdb    |    at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61)                                                                                          
graphdb    |    at org.eclipse.jetty.server.Server.doStart(Server.java:354)                    
graphdb    |    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)                                                                                         
graphdb    |    at org.neo4j.server.web.Jetty9WebServer.startJetty(Jetty9WebServer.java:363)   
graphdb    |    at org.neo4j.server.web.Jetty9WebServer.start(Jetty9WebServer.java:178)                                                                                                       
graphdb    |    at org.neo4j.server.AbstractNeoServer.startWebServer(AbstractNeoServer.java:319)                                                                                              
graphdb    |    at org.neo4j.server.AbstractNeoServer.access$700(AbstractNeoServer.java:99)                                                                                                                                                                                                                                                                                         [104/1932]
graphdb    |    at org.neo4j.server.AbstractNeoServer$ServerComponentsLifecycleAdapter.start(AbstractNeoServer.java:510)
graphdb    |    at org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:434)
graphdb    |    at org.neo4j.kernel.lifecycle.LifeSupport.start(LifeSupport.java:107)
graphdb    |    at org.neo4j.server.AbstractNeoServer.start(AbstractNeoServer.java:207)
graphdb    |    at org.neo4j.server.ServerBootstrapper.start(ServerBootstrapper.java:107)
graphdb    |    at org.neo4j.server.ServerBootstrapper.start(ServerBootstrapper.java:80)
graphdb    |    at org.neo4j.server.CommunityEntryPoint.main(CommunityEntryPoint.java:28)
graphdb    | 2017-09-09 19:11:33.239+0000 WARN  FAILED o.e.j.s.ServletContextHandler@61eca942{/graphaware,null,STARTING}: javax.servlet.ServletException: org.neo4j.server.web.NeoServletContainer-700e7de9@e32a8ce3==org.neo4j.server.web.NeoServletContainer,-1,false org.neo4j.server.web.NeoServletContainer-700e7de9@e32a8ce3==org.neo4j.server.web.NeoServletContainer,-1,false
graphdb    | javax.servlet.ServletException: org.neo4j.server.web.NeoServletContainer-700e7de9@e32a8ce3==org.neo4j.server.web.NeoServletContainer,-1,false
graphdb    |    at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:633)
graphdb    |    at org.eclipse.jetty.servlet.ServletHolder.initialize(ServletHolder.java:395)
graphdb    |    at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:871)
graphdb    |    at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:298)
graphdb    |    at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:741)
graphdb    |    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
graphdb    |    at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132)
graphdb    |    at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114)
graphdb    |    at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61)
graphdb    |    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
graphdb    |    at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132)
graphdb    |    at org.eclipse.jetty.server.Server.start(Server.java:387)
graphdb    |    at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114)
graphdb    |    at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61)
graphdb    |    at org.eclipse.jetty.server.Server.doStart(Server.java:354)
graphdb    |    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
graphdb    |    at org.neo4j.server.web.Jetty9WebServer.startJetty(Jetty9WebServer.java:363)
graphdb    |    at org.neo4j.server.web.Jetty9WebServer.start(Jetty9WebServer.java:178)
graphdb    |    at org.neo4j.server.AbstractNeoServer.startWebServer(AbstractNeoServer.java:319)
graphdb    |    at org.neo4j.server.AbstractNeoServer.access$700(AbstractNeoServer.java:99)
graphdb    |    at org.neo4j.server.AbstractNeoServer$ServerComponentsLifecycleAdapter.start(AbstractNeoServer.java:510)
graphdb    |    at org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:434)
graphdb    |    at org.neo4j.kernel.lifecycle.LifeSupport.start(LifeSupport.java:107)
graphdb    |    at org.neo4j.server.AbstractNeoServer.start(AbstractNeoServer.java:207)
graphdb    |    at org.neo4j.server.ServerBootstrapper.start(ServerBootstrapper.java:107)
graphdb    |    at org.neo4j.server.ServerBootstrapper.start(ServerBootstrapper.java:80)
graphdb    |    at org.neo4j.server.CommunityEntryPoint.main(CommunityEntryPoint.java:28)
graphdb    | Caused by: com.sun.jersey.api.container.ContainerException: The ResourceConfig instance does not contain any root resource classes.
graphdb    |    at com.sun.jersey.server.impl.application.RootResourceUriRules.<init>(RootResourceUriRules.java:99)
graphdb    |    at com.sun.jersey.server.impl.application.WebApplicationImpl._initiate(WebApplicationImpl.java:1359)
graphdb    |    at com.sun.jersey.server.impl.application.WebApplicationImpl.access$700(WebApplicationImpl.java:180)
graphdb    |    at com.sun.jersey.server.impl.application.WebApplicationImpl$13.f(WebApplicationImpl.java:799)
graphdb    |    at com.sun.jersey.server.impl.application.WebApplicationImpl$13.f(WebApplicationImpl.java:795)
graphdb    |    at com.sun.jersey.spi.inject.Errors.processWithErrors(Errors.java:193)
graphdb    |    at com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:795)
graphdb    |    at com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:790)
graphdb    |    at com.sun.jersey.spi.container.servlet.ServletContainer.initiate(ServletContainer.java:509)
graphdb    |    at com.sun.jersey.spi.container.servlet.ServletContainer$InternalWebComponent.initiate(ServletContainer.java:339)
graphdb    |    at com.sun.jersey.spi.container.servlet.WebComponent.load(WebComponent.java:605)
graphdb    |    at com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:207)
graphdb    |    at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:394)
graphdb    |    at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:577)
graphdb    |    at javax.servlet.GenericServlet.init(GenericServlet.java:244)
graphdb    |    at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:612)
graphdb    |    ... 26 more
graphdb    | 2017-09-09 19:11:33.240+0000 WARN  FAILED org.eclipse.jetty.server.handler.HandlerList@631a6e5b[o.e.j.s.h.MovedContextHandler@d563b05{/,null,AVAILABLE}, o.e.j.s.ServletContextHandler@61eca942{/graphaware,null,STARTING}, o.e.j.s.ServletContextHandler@9f42554{/db/manage,null,null}, o.e.j.s.ServletContextHandler@41271353{/db/data,null,null}, o.e.j.w.WebAppContext@71ffd5
9a{/browser,jar:file:/var/lib/neo4j/lib/neo4j-browser-3.0.5.jar!/browser,null}, o.e.j.s.ServletContextHandler@4dcd46b3{/,null,null}]: javax.servlet.ServletException: org.neo4j.server.web.NeoServletContainer-700e7de9@e32a8ce3==org.neo4j.server.web.NeoServletContainer,-1,false org.neo4j.server.web.NeoServletContainer-700e7de9@e32a8ce3==org.neo4j.server.web.NeoServletContainer,-1,fa
lse
graphdb    | javax.servlet.ServletException: org.neo4j.server.web.NeoServletContainer-700e7de9@e32a8ce3==org.neo4j.server.web.NeoServletContainer,-1,false
graphdb    |    at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:633)
graphdb    |    at org.eclipse.jetty.servlet.ServletHolder.initialize(ServletHolder.java:395)
graphdb    |    at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:871)
graphdb    |    at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:298)
graphdb    |    at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:741)
graphdb    |    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
graphdb    |    at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132)
graphdb    |    at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114)
graphdb    |    at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61)
graphdb    |    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
graphdb    |    at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132)
graphdb    |    at org.eclipse.jetty.server.Server.start(Server.java:387)
graphdb    |    at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114)
graphdb    |    at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61)
graphdb    |    at org.eclipse.jetty.server.Server.doStart(Server.java:354)
graphdb    |    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
graphdb    |    at org.neo4j.server.web.Jetty9WebServer.startJetty(Jetty9WebServer.java:363)
graphdb    |    at org.neo4j.server.web.Jetty9WebServer.start(Jetty9WebServer.java:178)
graphdb    |    at org.neo4j.server.AbstractNeoServer.startWebServer(AbstractNeoServer.java:319)
graphdb    |    at org.neo4j.server.AbstractNeoServer.access$700(AbstractNeoServer.java:99)
graphdb    |    at org.neo4j.server.AbstractNeoServer$ServerComponentsLifecycleAdapter.start(AbstractNeoServer.java:510)
graphdb    |    at org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:434)
graphdb    |    at org.neo4j.kernel.lifecycle.LifeSupport.start(LifeSupport.java:107)
graphdb    |    at org.neo4j.server.AbstractNeoServer.start(AbstractNeoServer.java:207)
graphdb    |    at org.neo4j.server.ServerBootstrapper.start(ServerBootstrapper.java:107)
graphdb    |    at org.neo4j.server.ServerBootstrapper.start(ServerBootstrapper.java:80)
graphdb    |    at org.neo4j.server.CommunityEntryPoint.main(CommunityEntryPoint.java:28)
graphdb    | Caused by: com.sun.jersey.api.container.ContainerException: The ResourceConfig instance does not contain any root resource classes.
graphdb    |    at com.sun.jersey.server.impl.application.RootResourceUriRules.<init>(RootResourceUriRules.java:99)
graphdb    |    at com.sun.jersey.server.impl.application.WebApplicationImpl._initiate(WebApplicationImpl.java:1359)
graphdb    |    at com.sun.jersey.server.impl.application.WebApplicationImpl.access$700(WebApplicationImpl.java:180)
graphdb    |    at com.sun.jersey.server.impl.application.WebApplicationImpl$13.f(WebApplicationImpl.java:799)
graphdb    |    at com.sun.jersey.server.impl.application.WebApplicationImpl$13.f(WebApplicationImpl.java:795)
graphdb    |    at com.sun.jersey.spi.inject.Errors.processWithErrors(Errors.java:193)
graphdb    |    at com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:795)
graphdb    |    at com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:790)
graphdb    |    at com.sun.jersey.spi.container.servlet.ServletContainer.initiate(ServletContainer.java:509)
graphdb    |    at com.sun.jersey.spi.container.servlet.ServletContainer$InternalWebComponent.initiate(ServletContainer.java:339)
graphdb    |    at com.sun.jersey.spi.container.servlet.WebComponent.load(WebComponent.java:605)
graphdb    |    at com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:207)
graphdb    |    at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:394)
graphdb    |    at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:577)
graphdb    |    at javax.servlet.GenericServlet.init(GenericServlet.java:244)
graphdb    |    at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:612)
graphdb    |    ... 26 more
graphdb    | 2017-09-09 19:11:33.262+0000 WARN  FAILED org.eclipse.jetty.server.Server@14f2ee6b: javax.servlet.ServletException: org.neo4j.server.web.NeoServletContainer-700e7de9@e32a8ce3==org.neo4j.server.web.NeoServletContainer,-1,false org.neo4j.server.web.NeoServletContainer-700e7de9@e32a8ce3==org.neo4j.server.web.NeoServletContainer,-1,false
graphdb    | javax.servlet.ServletException: org.neo4j.server.web.NeoServletContainer-700e7de9@e32a8ce3==org.neo4j.server.web.NeoServletContainer,-1,false
graphdb    |    at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:633)
graphdb    |    at org.eclipse.jetty.servlet.ServletHolder.initialize(ServletHolder.java:395)
graphdb    |    at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:871)
graphdb    |    at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:298)
graphdb    |    at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:741)
graphdb    |    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
graphdb    |    at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132)
graphdb    |    at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114)
graphdb    |    at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61)
graphdb    |    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
graphdb    |    at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132)
graphdb    |    at org.eclipse.jetty.server.Server.start(Server.java:387)
graphdb    |    at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114)
graphdb    |    at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61)
graphdb    |    at org.eclipse.jetty.server.Server.doStart(Server.java:354)
graphdb    |    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
graphdb    |    at org.neo4j.server.web.Jetty9WebServer.startJetty(Jetty9WebServer.java:363)
graphdb    |    at org.neo4j.server.web.Jetty9WebServer.start(Jetty9WebServer.java:178)
graphdb    |    at org.neo4j.server.AbstractNeoServer.startWebServer(AbstractNeoServer.java:319)
graphdb    |    at org.neo4j.server.AbstractNeoServer.access$700(AbstractNeoServer.java:99)
graphdb    |    at org.neo4j.server.AbstractNeoServer$ServerComponentsLifecycleAdapter.start(AbstractNeoServer.java:510)
graphdb    |    at org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:434)
graphdb    |    at org.neo4j.kernel.lifecycle.LifeSupport.start(LifeSupport.java:107)
graphdb    |    at org.neo4j.server.AbstractNeoServer.start(AbstractNeoServer.java:207)
graphdb    |    at org.neo4j.server.ServerBootstrapper.start(ServerBootstrapper.java:107)
graphdb    |    at org.neo4j.server.ServerBootstrapper.start(ServerBootstrapper.java:80)
graphdb    |    at org.neo4j.server.CommunityEntryPoint.main(CommunityEntryPoint.java:28)
graphdb    | Caused by: com.sun.jersey.api.container.ContainerException: The ResourceConfig instance does not contain any root resource classes.
graphdb    |    at com.sun.jersey.server.impl.application.RootResourceUriRules.<init>(RootResourceUriRules.java:99)
graphdb    |    at com.sun.jersey.server.impl.application.WebApplicationImpl._initiate(WebApplicationImpl.java:1359)
graphdb    |    at com.sun.jersey.server.impl.application.WebApplicationImpl.access$700(WebApplicationImpl.java:180)
graphdb    |    at com.sun.jersey.server.impl.application.WebApplicationImpl$13.f(WebApplicationImpl.java:799)
graphdb    |    at com.sun.jersey.server.impl.application.WebApplicationImpl$13.f(WebApplicationImpl.java:795)
graphdb    |    at com.sun.jersey.spi.inject.Errors.processWithErrors(Errors.java:193)
graphdb    |    at com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:795)
graphdb    |    at com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:790)
graphdb    |    at com.sun.jersey.spi.container.servlet.ServletContainer.initiate(ServletContainer.java:509)
graphdb    |    at com.sun.jersey.spi.container.servlet.ServletContainer$InternalWebComponent.initiate(ServletContainer.java:339)
graphdb    |    at com.sun.jersey.spi.container.servlet.WebComponent.load(WebComponent.java:605)
graphdb    |    at com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:207)
graphdb    |    at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:394)
graphdb    |    at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:577)
graphdb    |    at javax.servlet.GenericServlet.init(GenericServlet.java:244)
graphdb    |    at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:612)
graphdb    |    ... 26 more
graphdb    | 2017-09-09 19:11:33.263+0000 ERROR Failed to start Neo4j on 0.0.0.0:7474: org.neo4j.server.web.NeoServletContainer-700e7de9@e32a8ce3==org.neo4j.server.web.NeoServletContainer,-1,false
graphdb    | 2017-09-09 19:11:33.263+0000 INFO  Stopping...
graphdb    | 2017-09-09 19:11:33.362+0000 INFO  Stopped.
graphdb    | 2017-09-09 19:11:33.364+0000 ERROR Failed to start Neo4j: Starting Neo4j failed: Component 'org.neo4j.server.AbstractNeoServer$ServerComponentsLifecycleAdapter@216419a0' was successfully initialized, but failed to start. Please see the attached cause exception "The ResourceConfig instance does not contain any root resource classes.". Starting Neo4j failed: Component
'org.neo4j.server.AbstractNeoServer$ServerComponentsLifecycleAdapter@216419a0' was successfully initialized, but failed to start. Please see the attached cause exception "The ResourceConfig instance does not contain any root resource classes.".
graphdb    | org.neo4j.server.ServerStartupException: Starting Neo4j failed: Component 'org.neo4j.server.AbstractNeoServer$ServerComponentsLifecycleAdapter@216419a0' was successfully initialized, but failed to start. Please see the attached cause exception "The ResourceConfig instance does not contain any root resource classes.".
graphdb    |    at org.neo4j.server.exception.ServerStartupErrors.translateToServerStartupError(ServerStartupErrors.java:68)
graphdb    |    at org.neo4j.server.AbstractNeoServer.start(AbstractNeoServer.java:215)
graphdb    |    at org.neo4j.server.ServerBootstrapper.start(ServerBootstrapper.java:107)
graphdb    |    at org.neo4j.server.ServerBootstrapper.start(ServerBootstrapper.java:80)
graphdb    |    at org.neo4j.server.CommunityEntryPoint.main(CommunityEntryPoint.java:28)
graphdb    | Caused by: org.neo4j.kernel.lifecycle.LifecycleException: Component 'org.neo4j.server.AbstractNeoServer$ServerComponentsLifecycleAdapter@216419a0' was successfully initialized, but failed to start. Please see the attached cause exception "The ResourceConfig instance does not contain any root resource classes.".
graphdb    |    at org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:444)
graphdb    |    at org.neo4j.kernel.lifecycle.LifeSupport.start(LifeSupport.java:107)
graphdb    |    at org.neo4j.server.AbstractNeoServer.start(AbstractNeoServer.java:207)
graphdb    |    ... 3 more
graphdb    | Caused by: javax.servlet.ServletException: org.neo4j.server.web.NeoServletContainer-700e7de9@e32a8ce3==org.neo4j.server.web.NeoServletContainer,-1,false
graphdb    |    at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:633)
graphdb    |    at org.eclipse.jetty.servlet.ServletHolder.initialize(ServletHolder.java:395)
graphdb    |    at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:871)
graphdb    |    at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:298)
graphdb    |    at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:741)
graphdb    |    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
graphdb    |    at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132)
graphdb    |    at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114)
graphdb    |    at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61)
graphdb    |    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
graphdb    |    at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132)
graphdb    |    at org.eclipse.jetty.server.Server.start(Server.java:387)
graphdb    |    at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114)
graphdb    |    at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61)
graphdb    |    at org.eclipse.jetty.server.Server.doStart(Server.java:354)
graphdb    |    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
graphdb    |    at org.neo4j.server.web.Jetty9WebServer.startJetty(Jetty9WebServer.java:363)
graphdb    |    at org.neo4j.server.web.Jetty9WebServer.start(Jetty9WebServer.java:178)
graphdb    |    at org.neo4j.server.AbstractNeoServer.startWebServer(AbstractNeoServer.java:319)
graphdb    |    at org.neo4j.server.AbstractNeoServer.access$700(AbstractNeoServer.java:99)
graphdb    |    at org.neo4j.server.AbstractNeoServer$ServerComponentsLifecycleAdapter.start(AbstractNeoServer.java:510)
graphdb    |    at org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:434)
graphdb    |    ... 5 more
graphdb    | Caused by: com.sun.jersey.api.container.ContainerException: The ResourceConfig instance does not contain any root resource classes.
graphdb    |    at com.sun.jersey.server.impl.application.RootResourceUriRules.<init>(RootResourceUriRules.java:99)
graphdb    |    at com.sun.jersey.server.impl.application.WebApplicationImpl._initiate(WebApplicationImpl.java:1359)
graphdb    |    at com.sun.jersey.server.impl.application.WebApplicationImpl.access$700(WebApplicationImpl.java:180)
graphdb    |    at com.sun.jersey.server.impl.application.WebApplicationImpl$13.f(WebApplicationImpl.java:799)
graphdb    |    at com.sun.jersey.server.impl.application.WebApplicationImpl$13.f(WebApplicationImpl.java:795)
graphdb    |    at com.sun.jersey.spi.inject.Errors.processWithErrors(Errors.java:193)
graphdb    |    at com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:795)
graphdb    |    at com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:790)
graphdb    |    at com.sun.jersey.spi.container.servlet.ServletContainer.initiate(ServletContainer.java:509)
graphdb    |    at com.sun.jersey.spi.container.servlet.ServletContainer$InternalWebComponent.initiate(ServletContainer.java:339)
graphdb    |    at com.sun.jersey.spi.container.servlet.WebComponent.load(WebComponent.java:605)
graphdb    |    at com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:207)
graphdb    |    at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:394)
graphdb    |    at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:577)
graphdb    |    at javax.servlet.GenericServlet.init(GenericServlet.java:244)
graphdb    |    at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:612)
graphdb    |    ... 26 more
graphdb    | 2017-09-09 19:11:33.366+0000 INFO  Neo4j Server shutdown initiated by request
graphdb exited with code 1

Sort of at a loss as to what might be going wrong. Any advice?

thx!

Trying to make it work...

I am following the readme but I can't get it to work, maybe there is something I misunderstood...

added the plugins

graphaware-server-community-all-2.2.2.31.jar
graphaware-timetree-2.2.2.31.22.jar
graphaware-uuid-2.2.2.31.7.jar

set the neo4j.properties

com.graphaware.runtime.enabled=true

# A Runtime module that takes care of attaching the events like this (TT is the ID of the module)
com.graphaware.module.TT.1=com.graphaware.module.timetree.module.TimeTreeModuleBootstrapper

# Nodes which represent events and should be attached automatically have to be defined
com.graphaware.module.TT.event=hasLabel("Item")

# Optionally, a property on the event nodes that represents the the time (long) at which the event took place must be specified (defaults to "timestamp")
com.graphaware.module.TT.timestamp=time

# Optionally, a property on the event nodes that represents the node ID (long) of the root node for the tree, to which the event should be attached (defaults to "timeTreeRootId")
com.graphaware.module.TT.customTimeTreeRootProperty=rootId

# Optionally, a resolution can be specified (defaults to DAY)
com.graphaware.module.TT.resolution=HOUR

# Optionally, a time zone can be specified (defaults to UTC)
com.graphaware.module.TT.timezone=GMT+11

# Optionally, a relationship type with which the events will be attached to the tree can be specified (defaults to AT_TIME)
com.graphaware.module.TT.relationship=Created

# autoAttach must be set to true
com.graphaware.module.TT.autoAttach=true

I've got an empty graph, I call

http://localhost:7474/graphaware/timetree/now?resolution=second

I get the Time tree :)

then I create an Item

create (i:Item {name:'test'}) return i

I get the Item back but no "Created" link to the TT is created... I must be missing something. Could you advice ?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.