Соединение Orientdb не закрывается

Я использую Orientdb 2.2.12.

Ниже приведен единственный источник, из которого я получаю экземпляр подключения.

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() JConsole показывает активное соединение с Orientdb.

    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 java.io.BufferedInputStream@1780dcd
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)

Это баг или я что-то не так делаю?


person Prakash Pandey    schedule 09.11.2016    source источник


Ответы (1)


Если ваш сервер работает, вы увидите это в JConsole.

person Alessandro Rota    schedule 09.11.2016
comment
В 100-поточной системе у одного есть 100 незакрытых соединений Orientdb. Не приведет ли это к проблеме с кучей памяти? - person Prakash Pandey; 09.11.2016