Neo4j—Java堆空间错误—TraversalDescription.traverse(节点);

Neo4j—Java堆空间错误—TraversalDescription.traverse(节点);,neo4j,Neo4j,如果maxDepth为3,则代码运行正常,如果maxDepth=4,则此代码挂起对td.traverse(start)(第38行)的调用,然后我得到: 线程“main”java.lang.OutOfMemoryError中出现异常:java堆空间 位于java.util.Arrays.copyOf(Arrays.java:2882) 位于java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:100) 位

如果maxDepth为3,则代码运行正常,如果maxDepth=4,则此代码挂起对td.traverse(start)(第38行)的调用,然后我得到:

线程“main”java.lang.OutOfMemoryError中出现异常:java堆空间 位于java.util.Arrays.copyOf(Arrays.java:2882) 位于java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:100) 位于java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:515) 位于java.lang.StringBuilder.append(StringBuilder.java:189) 位于com.sun.jersey.core.util.ReaderWriter.readFromAsString(ReaderWriter.java:172) 位于com.sun.jersey.core.util.ReaderWriter.readFromAsString(ReaderWriter.java:157) 位于com.sun.jersey.core.provider.AbstractMessageReaderWriterProvider.readFromAsString(AbstractMessageReaderWriterProvider.java:114) 位于com.sun.jersey.core.impl.provider.entity.StringProvider.readFrom(StringProvider.java:73) 位于com.sun.jersey.core.impl.provider.entity.StringProvider.readFrom(StringProvider.java:58) 位于com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:552) 在com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:505)上 位于org.neo4j.rest.graphdb.RequestResult.extractFrom(RequestResult.java:87) 位于org.neo4j.rest.graphdb.ExecutingRestRequest.post(ExecutingRestRequest.java:138) 位于org.neo4j.rest.graphdb.ExecutingRestAPI.traverse(ExecutingRestAPI.java:486) 位于org.neo4j.rest.graphdb.RestAPIFacade.traverse(RestAPIFacade.java:202) 位于org.neo4j.rest.graphdb.traversal.restraversal.traverse(restraversal.java:162) 位于com.tr.cmg.alloy.dao.psd.RelationalPathSearchDAO.executeRelationalPathSearch(RelationalPathSearchDAO.java:38) 位于com.tr.cmg.alloy.dao.psd.RelationalPathSearchDAO.main(RelationalPathSearchDAO.java:115)

包com.tr.cmg.alloy.dao.psd;
导入java.util.ArrayList;
导入org.neo4j.graphdb.Direction;
导入org.neo4j.graphdb.Node;
导入org.neo4j.graphdb.Path;
导入org.neo4j.graphdb.Relationship;
导入org.neo4j.graphdb.traversal.TraversalDescription;
导入org.neo4j.rest.graphdb.index.RestIndex;
导入org.neo4j.rest.graphdb.traversal.restraversaldescription;
导入com.tr.cmg.alloy.aspects.audit.DaoTierAuditAspect;
导入com.tr.cmg.alloy.dao.psd.relationship.RelationType;
导入com.tr.cmg.alloy.dao.support.neo4j.neo4jdao支持;
导入com.tr.cmg.alloy.domain.psd.NodeType;
导入com.tr.cmg.alloy.services.psd.rps.RelationalPathSearch;
导入com.tr.cmg.alloy.services.psd.rps.RelationalPathSearchResult;
公共类RelationalPathSearchDAO扩展了NEO4JDAO支持{
公共关系路径搜索结果executeRelationalPathSearch(
关系路径搜索(rps){
RestIndex personIndex=API.getIndex(NodeType.PERSON.name());
Node start=personIndex.get(“KEY”,rps.getPerson1PermId()).getSingle();
Node end=personIndex.get(“KEY”,rps.getPerson2PermId()).getSingle();
Iterable节点=null;
Iterable关系=null;
如果(开始!=null&&end!=null){
TraversalDescription td=createTraversalDescription(rps);
节点=空;
关系=空;
用于(路径位置:td.横向(起点)){
//日志审核记录信息
道蒂亚罗
.storeSqlStatement(“关系路径Neo4j查询:”
+rps.getPerson1PermId()+“->”
+getPerson2PermId());
DaoTierAuditAspect.storeSqlParameters(“”);
系统输出打印项次(位置);
if(position.endNode().equals(end)){
nodes=position.nodes();
关系=位置。关系();
打破
}
}
如果(节点==null){
ArrayList x=新的ArrayList();
x、 添加(开始);
x、 添加(结束);
节点=x;
}
}
返回新的RelationalPathSearchResult(节点、关系);
}
私有TraversalDescription CreateTranversalDescription(RelationalPathSearch rps){
RestTraversalDescription rtd=(RestTraversalDescription)API.createTraversalDescription();
最大深度(4);
返回rtd
.depthFirst()
.关系(RelationType.IsDirector、Direction.BOTH)
.关系(RelationType.HasGradedFrom、Direction.BOTH)
.关系(RelationType.Isofier、Direction.BOTH)
.关系(RelationType.IsUnknownOfficerDirector,Direction.BOTH)
.关系(RelationType.IsInsiderAt、Direction.BOTH)
.关系(RelationType.IsEquityAnalystAt,Direction.BOTH)
.关系(RelationType.IsMemberOrChairmanOf,Direction.BOTH)
.关系(RelationType.IsChiefInvestmentOfficerAt、Direction.BOTH)
.关系(RelationType.IsDirectorOfResearch,Direction.BOTH)
.relationships(RelationType.IsPortfolioManagerAt,Direction.BOTH)
.关系(RelationType.IsTraderAt、Direction.BOTH)
.关系(RelationType.IsEconomistAt、Direction.BOTH)
.关系(RelationType.IsSalesProfessional、Direction.BOTH)
.relationships(RelationType.IsStrategistAt,Direction.BOTH)
.关系(RelationType.IsExecutiveOfficerAt、Direction.BOTH)
.关系(RelationType.IsShariahSupervisoryAt,Direction.BOTH)
.关系(RelationType.IsNoneExecutiveat、Direction.BOTH)
.关系(RelationType.IsVEExecutive、Direction.BOTH)
.关系(RelationType.isProvisingResearch、Direction.BOTH)
.关系(RelationType.IsAnalystAt、Direction.BOTH)
.relationships(RelationType.isrutermessengeruserat,Direction.BOTH)
.关系(RelationType.isProvisingAssetClassCoverage on,Direction.BOTH)
.关系(RelationType.IsSpeakingLanguageOf,Direction.BOTH)
R
package com.tr.cmg.alloy.dao.psd;

import java.util.ArrayList;

import org.neo4j.graphdb.Direction;
import org.neo4j.graphdb.Node;
import org.neo4j.graphdb.Path;
import org.neo4j.graphdb.Relationship;
import org.neo4j.graphdb.traversal.TraversalDescription;
import org.neo4j.rest.graphdb.index.RestIndex;
import org.neo4j.rest.graphdb.traversal.RestTraversalDescription;

import com.tr.cmg.alloy.aspects.audit.DaoTierAuditAspect;
import com.tr.cmg.alloy.dao.psd.relationship.RelationType;
import com.tr.cmg.alloy.dao.support.neo4j.Neo4jDaoSupport;
import com.tr.cmg.alloy.domain.psd.NodeType;
import com.tr.cmg.alloy.services.psd.rps.RelationalPathSearch;
import com.tr.cmg.alloy.services.psd.rps.RelationalPathSearchResult;

public class RelationalPathSearchDAO extends Neo4jDaoSupport{

public RelationalPathSearchResult executeRelationalPathSearch(
        RelationalPathSearch rps) {

    RestIndex<Node> personIndex = API.getIndex(NodeType.PERSON.name());

    Node start = personIndex.get("KEY", rps.getPerson1PermId()).getSingle();
    Node end = personIndex.get("KEY", rps.getPerson2PermId()).getSingle();

    Iterable<Node> nodes = null;
    Iterable<Relationship> relationships = null;

    if (start != null && end != null) {

        TraversalDescription td = createTraversalDescription(rps);
        nodes = null;
        relationships = null;
        for (Path position : td.traverse(start)) {

            // Log audit record info
            DaoTierAuditAspect
                    .storeSqlStatement("Relational Path Neo4j Query: "
                            + rps.getPerson1PermId() + " -> "
                            + rps.getPerson2PermId());
            DaoTierAuditAspect.storeSqlParameters("");

            System.out.println(position);

            if (position.endNode().equals(end)) {
                nodes = position.nodes();
                relationships = position.relationships();
                break;
            }
        }

        if(nodes == null) {
            ArrayList<Node> x = new ArrayList<Node>();
            x.add(start);
            x.add(end);
            nodes = x;
        }
    }

    return new RelationalPathSearchResult(nodes, relationships);

}

private TraversalDescription createTraversalDescription(RelationalPathSearch rps) {

    RestTraversalDescription rtd = (RestTraversalDescription) API.createTraversalDescription();
    rtd.maxDepth(4);

    return  rtd
            .depthFirst()
            .relationships(RelationType.IsDirector, Direction.BOTH)
            .relationships(RelationType.HasGraduatedFrom, Direction.BOTH)
            .relationships(RelationType.IsOfficer, Direction.BOTH)
            .relationships(RelationType.IsUnknownOfficerDirectorAt, Direction.BOTH)
            .relationships(RelationType.IsInsiderAt, Direction.BOTH)
            .relationships(RelationType.IsEquityAnalystAt, Direction.BOTH)
            .relationships(RelationType.IsMemberOrChairmanOf, Direction.BOTH)
            .relationships(RelationType.IsChiefInvestmentOfficerAt, Direction.BOTH)
            .relationships(RelationType.IsDirectorOfResearchAt, Direction.BOTH)
            .relationships(RelationType.IsPortfolioManagerAt, Direction.BOTH)
            .relationships(RelationType.IsTraderAt, Direction.BOTH)
            .relationships(RelationType.IsEconomistAt, Direction.BOTH)
            .relationships(RelationType.IsSalesProfessionalAt, Direction.BOTH)
            .relationships(RelationType.IsStrategistAt, Direction.BOTH)
            .relationships(RelationType.IsExecutiveOfficerAt, Direction.BOTH)
            .relationships(RelationType.IsShariahSupervisoryAt, Direction.BOTH)
            .relationships(RelationType.IsNonExecutiveAt, Direction.BOTH)
            .relationships(RelationType.IsVEExecutive, Direction.BOTH)
            .relationships(RelationType.IsProvidingResearchOn, Direction.BOTH)
            .relationships(RelationType.IsAnalystAt, Direction.BOTH)
            .relationships(RelationType.IsReuterMessengerUserAt, Direction.BOTH)
            .relationships(RelationType.IsProvidingAssetClassCoverageOn, Direction.BOTH)
            .relationships(RelationType.IsSpeakingLanguageOf, Direction.BOTH)
            .relationships(RelationType.IsProvidingGeographyCoverageOf, Direction.BOTH)
            .relationships(RelationType.IsUnknownSellSideBuySideAt, Direction.BOTH)
            .relationships(RelationType.IsUnknownInsiderAt, Direction.BOTH)
            .relationships(RelationType.IsUnknownResearchAnalystAt, Direction.BOTH)
            .relationships(RelationType.IsUnknownVEExecutiveAt, Direction.BOTH)
            .relationships(RelationType.IsUnknownReutersMessengerUserAt, Direction.BOTH)
            .relationships(RelationType.IsUnknownStreetEventsUserAt, Direction.BOTH);
}

public static void main(String[] args) {

    RelationalPathSearchDAO dao = new RelationalPathSearchDAO();

    RelationalPathSearch rps = new RelationalPathSearch();
    rps.setPerson1PermId("34414591164");
    rps.setPerson2PermId("34414710307");

    RelationalPathSearchResult result = dao.executeRelationalPathSearch(rps);
    result.toJSON();

}