public void updateTopCallers(){
String queryString1 = "MATCH(a:Account) WHERE a.name='" + key + "' MATCH(p:Person)-[:USED_BY]->(a) RETURN p.id as personId LIMIT 1";
try {
ResultSet resultSet = getQueryResult(queryString1);//in debugging, process didn't continue after this line.
if (resultSet.next()){
ownerId = resultSet.getString("personId");
System.out.println("ownerId:"+ownerId);
//In here also I'm executing few other cypher queries
//using same Neo4jUtil instance.
}
}catch (Exception e){
e.printStackTrace();
}
}Cypher Abfrage ohne resultset in Neo4j Jdbc
Rückkehr stecken ausführt. Ich verwende auch viele Threads für diese Aufgabe gleichzeitig. Wie ich beobachtet habe, tritt dies auf, wenn ich eine einzelne Instanz meiner Neo4jUtil-Klasse verwende (wie im Single-Design-Muster).
Hier ist meine Neo4jUtil-Klasse.
public class Neo4jUtil {
private Neo4jConnection neo4jConnection = null;
private String restUrl = null;
private String driver = null;
private String userName = null;
private String passWord = null;
private static PropertiesUtility propertiesUtility = null;
private Neo4jUtil(){
try {
restUrl = getPropertiesCache().getCofigProperty("neo4j_url");
driver = getPropertiesCache().getCofigProperty("neo4j_driver");
userName = getPropertiesCache().getCofigProperty("neo4j_user");
passWord = getPropertiesCache().getCofigProperty("neo4j_pwd");
createDbConnection();
} catch (Exception e) {
e.printStackTrace();
}
}
private void createDbConnection(){
try {
Class.forName(driver);
neo4jConnection = (Neo4jConnection) DriverManager.getConnection(restUrl,userName,passWord);
System.out.println("neo4jConnection:"+neo4jConnection.toString());
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
private static PropertiesUtility getPropertiesCache() throws Exception {
if(propertiesUtility==null){
propertiesUtility = PropertiesUtility.getInstance();
return propertiesUtility;
}
else {
return propertiesUtility;
}
}
private static class Neo4jHolder{
private static final Neo4jUtil NEO4J_INSTANCE = new Neo4jUtil();
}
public static Neo4jUtil getInstance() {
return Neo4jHolder.NEO4J_INSTANCE;
}
// Querying
public ResultSet getQueryResult(String queryString){
try{
Neo4jStatement stmt = (Neo4jStatement) neo4jConnection.createStatement();
ResultSet rs = stmt.executeQuery(queryString);
return rs;
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
}
Wenn ich folgende Methode bin mit Ergebnis für bestimmte Chiffre gesetzt bekommen es funktioniert gut.
Ich benutze neo4j-jdbc 2.3.2 als meine neo4j Java-Client.
Wenn ich neo4j-rest-graphdb Client verwendet, funktioniert es gut. Ich hatte ein Problem mit diesem Client, wenn ich Threads bin. – Hasitha
was meinst du mit "stecken geblieben" –
Kannst du den Code vereinfachen, ist dieser Code ein Chaos und es ist zu schwer, um über die Beantwortung dieser Frage nachzudenken. –