Java Sparksee在会话关闭时崩溃
当我执行关系创建时,它会在会话关闭时崩溃 守则:Java Sparksee在会话关闭时崩溃,java,session,graph-databases,sparksee,Java,Session,Graph Databases,Sparksee,当我执行关系创建时,它会在会话关闭时崩溃 守则: @Override public boolean applyCreate(final RelationshipStorage storage, final long snapshotId) { final Session sess = db.newSession(); final Graph graph = sess.getGraph(); final Objects startObjs = findNode(gr
@Override
public boolean applyCreate(final RelationshipStorage storage, final long snapshotId)
{
final Session sess = db.newSession();
final Graph graph = sess.getGraph();
final Objects startObjs = findNode(graph, storage.getStartNode());
final Objects endObjs = findNode(graph, storage.getEndNode());
if(startObjs == null || endObjs == null)
{
if(startObjs != null)
{
startObjs.close();
}
if(endObjs != null)
{
endObjs.close();
}
sess.close();
return false;
}
final ObjectsIterator startIt = startObjs.iterator();
final ObjectsIterator endIt = endObjs.iterator();
while(startIt.hasNext())
{
long startNode = startIt.next();
while (endIt.hasNext())
{
final long endNode = endIt.next();
int edgeType = graph.findType(storage.getId());
if (Type.InvalidType == edgeType)
{
edgeType = graph.newEdgeType(storage.getId(), true, false);
}
final long relationship = graph.findOrCreateEdge(edgeType, startNode, endNode);
for (final Map.Entry<String, Object> entry : storage.getProperties().entrySet())
{
graph.setAttribute(relationship,
SparkseeUtils.createOrFindAttributeType(entry.getKey(), entry.getValue(), Type.GlobalType, graph),
SparkseeUtils.getValue(entry.getValue()));
}
int snapshotAttributeId = SparkseeUtils.createOrFindAttributeType(Constants.TAG_SNAPSHOT_ID, snapshotId, Type.GlobalType, graph);
graph.setAttribute(relationship, snapshotAttributeId, SparkseeUtils.getValue(snapshotId));
try
{
int hashAttributeId = SparkseeUtils.createOrFindAttributeType(Constants.TAG_HASH, " ", Type.GlobalType, graph);
graph.setAttribute(relationship, hashAttributeId, SparkseeUtils.getValue(HashCreator.sha1FromRelationship(storage)));
}
catch (NoSuchAlgorithmException e)
{
Log.getLogger().warn("Couldn't execute create node transaction in server: " + id, e);
endObjs.close();
startObjs.close();
startIt.close();
endIt.close();
sess.close();
return false;
}
Log.getLogger().warn("Successfully executed create relationship transaction in server: " + id);
}
}
startObjs.close();
endObjs.close();
startIt.close();
endIt.close();
sess.close();
return true;
}
/**
* Return a Objects array matching the nodeType and properties.
* @param graph the graph.
* @param storage the storage of the node.
* @return Objects which match the attributes.
*/
private Objects findNode(final Graph graph, final NodeStorage storage)
{
Objects objects = null;
if(!storage.getId().isEmpty())
{
int nodeTypeId = SparkseeUtils.createOrFindNodeType(storage, graph);
objects = graph.select(nodeTypeId);
}
for (final Map.Entry<String, Object> entry : storage.getProperties().entrySet())
{
final int attributeId = graph.findAttribute(Type.GlobalType, entry.getKey());
if (objects == null || objects.isEmpty())
{
if(objects != null)
{
objects.close();
}
objects = graph.select(attributeId, Condition.Equal, SparkseeUtils.getValue(entry.getValue()));
}
else
{
objects = graph.select(attributeId, Condition.Equal, SparkseeUtils.getValue(entry.getValue()), objects);
}
}
return objects;
}
@覆盖
公共布尔applyCreate(最终关系存储,最终长快照ID)
{
最终会话sess=db.newSession();
final Graph=sess.getGraph();
final Objects startObjs=findNode(graph,storage.getStartNode());
final Objects endObjs=findNode(graph,storage.getEndNode());
if(startObjs==null | | endObjs==null)
{
if(startObjs!=null)
{
startObjs.close();
}
if(endObjs!=null)
{
endObjs.close();
}
sess.close();
返回false;
}
final ObjectsIterator startIt=startObjs.iterator();
final ObjectsIterator endIt=endObjs.iterator();
while(startIt.hasNext())
{
long startNode=startIt.next();
while(endIt.hasNext())
{
final long endNode=endIt.next();
int-edgeType=graph.findType(storage.getId());
if(Type.InvalidType==edgeType)
{
edgeType=graph.newEdgeType(storage.getId(),true,false);
}
最终长关系=graph.findOrCreateEdge(edgeType、startNode、endNode);
对于(最终的Map.Entry:storage.getProperties().entrySet())
{
graph.setAttribute(关系,
SparkseeUtils.createOrFindAttributeType(entry.getKey()、entry.getValue()、Type.GlobalType、graph),
SparkseeUtils.getValue(entry.getValue());
}
int snapshottributeId=SparkseeUtils.createOrFindAttributeType(Constants.TAG_SNAPSHOT_ID,snapshotId,Type.GlobalType,graph);
setAttribute(关系,snapshotAttributeId,SparkseeUtils.getValue(snapshotId));
尝试
{
int hashAttributeId=SparkseeUtils.createOrFindAttributeType(Constants.TAG_HASH,“”,Type.GlobalType,graph);
setAttribute(关系,hashAttributeId,SparkseeUtils.getValue(HashCreator.sha1FromRelationship(存储));
}
捕获(无算法异常)
{
Log.getLogger().warn(“无法在服务器中执行创建节点事务:”+id,e);
endObjs.close();
startObjs.close();
开始关闭();
endIt.close();
sess.close();
返回false;
}
Log.getLogger().warn(“已在服务器中成功执行创建关系事务:”+id);
}
}
startObjs.close();
endObjs.close();
开始关闭();
endIt.close();
sess.close();
返回true;
}
/**
*返回与节点类型和属性匹配的对象数组。
*@param graph这个图。
*@param storage节点的存储。
*@返回与属性匹配的对象。
*/
私有对象findNode(最终图形、最终节点存储)
{
Objects=null;
如果(!storage.getId().isEmpty())
{
int nodeTypeId=SparkseeUtils.createOrFindNodeType(存储,图形);
objects=graph.select(nodeTypeId);
}
对于(最终的Map.Entry:storage.getProperties().entrySet())
{
final int attributeId=graph.findAttribute(Type.GlobalType,entry.getKey());
if(objects==null | | objects.isEmpty())
{
如果(对象!=null)
{
objects.close();
}
objects=graph.select(attributeId、Condition.Equal、SparkseeUtils.getValue(entry.getValue());
}
其他的
{
objects=graph.select(attributeId,Condition.Equal,SparkseeUtils.getValue(entry.getValue()),objects);
}
}
归还物品;
}
撞车日志:
关闭sparkseejava.lang.RuntimeException:在关闭时会话数据仍处于活动状态
sparkseejavawrapJNI.delete_sparksee_gdb_会话(本机)
方法),位于com.sparcity.sparksee.gdb.Session.delete(Session.java:32)
在com.sparcity.sparksee.gdb.Session.close(Session.java:40)中
main.java.com.bag.server.database.SparkseeDatabaseAccess.applyCreate(SparkseeDatabaseAccess.java:595)
在
main.java.com.bag.main.DatabaseLoader.loadGraph(DatabaseLoader.java:97)
在
main.java.com.bag.main.DatabaseLoader.main(DatabaseLoader.java:191)
我看不出还有什么需要关闭的。
我关闭了所有迭代器和对象。谷歌群组的原始答案: 我必须先关闭临时对象“对象”,然后才能为其指定新对象 Objects tempObj=graph.select(attributeId,Condition.Equal,SparkseeUtils.getValue(entry.getValue()),Objects); objects.close();
对象=tempObj 谷歌群组的原始答案: 我必须先关闭临时对象“对象”,然后才能为其指定新对象 Objects tempObj=graph.select(attributeId,Condition.Equal,SparkseeUtils.getValue(entry.getValue()),Objects); objects.close(); 对象=tempObj