Orientdb连接不关闭

问题描述:

我正在使用Orientdb 2.2.12Orientdb连接不关闭

这下面是从那里我得到连接实例

public static synchronized Connection getOrientDbConnection(String appName) 
    { 
     try { 
      // address of Db Server 
      OServerAdmin serverAdmin = new OServerAdmin 
        ("remote:" + ip + ":" + port + "/" 
          + appName).connect("root", "1234"); 

      if (serverAdmin.existsDatabase()) 
      { 
       serverAdmin.close(); 
       Properties info = new Properties(); 
       info.put("user", "root"); 
       info.put("password", "1234"); 
       Connection conn = (OrientJdbcConnection) DriverManager.getConnection("jdbc:orient:remote:" + ip + ":" + port + "/" 
         + appName, info); 

       //System.out.println(" Database Connection instance returned for : " + appName + " for thread ID : " + Thread.currentThread().getId()); 

       return conn; 
      } 
      else 
      { 
       // "Type_Of_Db", "Type_Of_Storage" 
       serverAdmin.createDatabase("GRAPH", "plocal"); 
       serverAdmin.close(); 

       OrientGraphFactory graphFactory = new OrientGraphFactory(
         "remote:" + ip + ":" + port + "/" + appName); 
       /** 
       * ####################### Do This only Ones-Per-Database ##################### 
       * 1. Create index with unique field 
       *  @name = unique index will be created only one time for a particular database 
       * 
       * 
       */ 
       OrientGraphNoTx graph = graphFactory.getNoTx(); 
       graph.createKeyIndex("name", Vertex.class, new Parameter<String, String>("type", "UNIQUE")); 

       // shutdown the graph which created Index immediately 
       graph.commit(); 
       graph.shutdown(); 

       // close all db pools 
       graphFactory.close(); 

       try 
       { 
        Properties info = new Properties(); 
        info.put("user", "root"); 
        info.put("password", "pcp"); 
        Connection conn = (OrientJdbcConnection) DriverManager.getConnection("jdbc:orient:remote:" +ip + ":" + port + "/" + appName, info); 

        //System.out.println(" Database created and Connection instance return for : " + appName + " for thread ID : " + Thread.currentThread().getId()); 

        return conn; 

       } catch (Exception e) { 
        //System.out.println("Problem creating database or getting connection from database " + " for thread ID : " + Thread.currentThread().getId() + e.getMessage()); 
        e.getMessage(); 
        return null; 
       } 

      } 
     } 
     catch(Exception e) 
     { 
      e.getMessage(); 
     } 
     return null; 
    } 

我的用例单一来源是创造: -

  • 顶点
  • 边缘
  • 更新顶点,边缘等。

App.java

Connection conn = DB.getOrientDbConnection(String appName) 

    // create vertex 
    // create edges 

    conn.commit() 
    conn.close(); 

我面临什么问题?

即使程序完成并且conn.close()完成,显示Orientdb连接的JConsole仍然处于活动状态。

Name: OrientDB <- Asynch Client (/192.168.1.11:4424) 
    State: RUNNABLE 
    Total blocked: 0 Total waited: 136 

Stack trace: 
java.net.SocketInputStream.socketRead0(Native Method) 
java.net.SocketInputStream.socketRead(Unknown Source) 
java.net.SocketInputStream.read(Unknown Source) 
java.net.SocketInputStream.read(Unknown Source) 
java.io.BufferedInputStream.fill(Unknown Source) 
java.io.BufferedInputStream.read(Unknown Source) 
    - locked [email protected] 
java.io.DataInputStream.readByte(Unknown Source) 
com.orientechnologies.orient.enterprise.channel.binary.OChannelBinary.readByte(OChannelBinary.java:68) 
com.orientechnologies.orient.client.binary.OChannelBinaryAsynchClient.beginResponse(OChannelBinaryAsynchClient.java:189) 
com.orientechnologies.orient.client.binary.OAsynchChannelServiceThread.execute(OAsynchChannelServiceThread.java:51) 
com.orientechnologies.common.thread.OSoftThread.run(OSoftThread.java:77) 

这是一个错误还是我做错了什么?

如果您的服务器正在运行,您将在JConsole中看到。

+0

在100线程系统上,有一个有100个Orientdb未关闭连接。 请问这不会导致内存堆问题? –