Spring Data Neo4J и GraphAware TimeTree
Кто-нибудь получил GraphAware TimeTree, работающий с Spring Data Neo4J, используя их Java API, и можете привести простой пример, пожалуйста?
2 ответа
Расширения GraphAware - это код на стороне сервера, а Spring Data Neo4j - на стороне клиента. Имея это в виду, вы можете аннотировать ваши Java-классы, которые используют SDN (предполагая v4) вдоль тех же строк, что и здесь и здесь, чтобы ваше отображение соответствовало структуре TimeTree.
Тем не менее, SDN (v4) пока не имеет явной поддержки неуправляемых расширений и обработчиков событий транзакций (оба из них - GraphAware Framework), поэтому вам придется обрабатывать это самостоятельно. Например, если вы используете функцию автоматического присоединения TimeTree и сохраняете событие из SDN, вам нужно будет перезагрузить его, чтобы получить узлы TimeTree.
Вот мой первый класс репозитория. Кажется, работает, но Майкл или Луанна (или кто-то) может значительно улучшить это. Я еще не включил запросы для событий в диапазоне, но они идут.
Пара замечаний о том, что здесь:
Параметр timeType - это имя отношения между узлом вашего домена и временным деревом.
package myproject.core.repository.timeline;
import org.springframework.data.neo4j.annotation.Query;
import org.springframework.data.neo4j.repository.Neo4jRepository;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import myproject.BaseNode;
@Repository
public interface TimelineRepository extends Neo4jRepository<BaseNode> {
// Attaches a node to the time tree
@Query("match (e:Event {domainId: {domainId}}) with e call ga.timetree.events.attach({node: e, time: {timestamp}, resolution: 'MILLISECOND', relationshipType: {timeType}}) yield node return node;")
public void setTime(@Param("domainId") String domainId, @Param("timeType") String typeType, @Param("timestamp") Long timestamp);
// Detaches a node from the timetree
@Query("match (e:Event {domainId: {domainId}})-[s]-() where type(s) = {timeType} delete s;")
public void unsetTime(@Param("domainId") String domainId, @Param("timeType") String timeType);
}
Ниже приведен конфиг, который у меня есть в моем neo4j.conf. Я использую neo4j 3.0.6. Почти все, что я написал здесь, прямо из документации по адресу https://github.com/graphaware/neo4j-timetree.
#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
#Uncommenting this prevents properties of our Event class from persisting
# 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('Message')
# 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=MILLISECOND
# 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
Вы должны быть в состоянии создать что-то похожее на это (в его самой простой форме)..