2016-11-09 155 views
0

我正在使用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) 

這是一個錯誤還是我做錯了什麼?

回答

0

如果您的服務器正在運行,您將在JConsole中看到。

+0

在100線程系統上,有一個有100個Orientdb未關閉連接。 請問這不會導致內存堆問題? –