ノード間の関係を作成するサーブレットがあります。これはループで行います。ループで 1 ~ 999 以上の関係を作成する場合があります。これは、データを配列リストから Neo4j にロードすることによって行われます。初めて実行すると、うまく機能します。2回目に5秒で実行すると、 java.lang.NullPointerException
. 約 1 分後、再び正常に動作します。これはサーブレットのコードです
public class InputDebtDataToNeo4j extends HttpServlet {
static GraphDatabaseService graphDB = new GraphDatabaseFactory().newEmbeddedDatabase("C:\\Users\\Jovo\\Documents\\NetBeansProjects\\DebtSolutions\\build\\web\\NEO4J databases\\db1");
//Neo4jSinletonDbStart nn=new Neo4jSinletonDbStart();
//GraphDatabaseService graphDB =nn.getInstance();
private ArrayList<InputData> l111;
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
HttpSession session=request.getSession(true);
l111= (ArrayList<InputData>) session.getAttribute("hasdata");
long mynodenumber;
mynodenumber = Long.parseLong(session.getAttribute("node_id").toString());
Transaction tx = graphDB.beginTx();
try {
Node firstNode;
Node secondNode;
for (InputData element : l111)
{
Relationship relationship = null;
firstNode=graphDB.getNodeById(mynodenumber);
secondNode=graphDB.getNodeById(element.getNodeidnumber());
relationship = firstNode.createRelationshipTo( secondNode, RelTypes.OWES );
relationship.setProperty( "amount", "'"+element.getDebtamount()+"'" );
out.println( relationship.getStartNode().toString());
out.println( relationship.getProperty( "amount" ) );
out.println( relationship.getEndNode().toString() );
}
tx.success();
//response.sendRedirect("DebtSolutions.jsp");
}
catch(Exception e )
{
tx.failure();
out.println(e.toString());
}
finally {
tx.finish();
graphDB.shutdown();
out.close();
}
}
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
* Handles the HTTP
* <code>GET</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Handles the HTTP
* <code>POST</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Returns a short description of the servlet.
*
* @return a String containing servlet description
*/
@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
}
私が得るものは
org.neo4j.graphdb.TransactionFailureException: Failed to mark transaction as rollback only
私が気づいたのは、Netbeans で変更を加えたときに常に正常に動作することです。たとえば、空の改行を入力して保存すると、サーブレットがリロードされ、例外が発生する他の方法で Neo4j が開始されます。