接続プーリング

Oracle NoSQL Databaseの接続プーリングは、RDFグラフ機能のOraclePoolNoSqlクラスを介して提供されます。このクラスを初期化すると、利用可能な接続のプールからOracleNoSqlConnectionオブジェクトを返すことができます。このオブジェクトは基本的に、Oracle NoSQL Database接続のラッパーです。OracleNoSqlConnectionオブジェクトでdisposeが呼び出されると、クローズされるかわりに接続が実際にプールに返されます。OraclePoolNoSqlの使用方法の詳細は、APIリファレンス情報(Javadoc)を参照してください。

次の例では、3つの初期接続を使用してOraclePoolNoSqlオブジェクトを設定しています。

public static void main(String[] args) throws Exception
{
String szStoreName = args[0];
String szHostName = args[1];
String szHostPort = args[2];
String szModelName = args[3]; 
    
// Property of the pool: wait if no connection is available at request.
boolean bWaitIfBusy = true;
    
System.out.println("Creating OracleNoSQL pool");    
OracleNoSqlPool pool = 
                 OracleNoSqlPool.createInstance(szStoreName,
                                                szHostName,
                                                szHostPort, 
                                                3, // pool size
                                                bWaitIfBusy, 
                                                true);  // lazyInit
System.out.println("Done creating OracleNoSql pool");
    
// grab an Oracle NoSQL connection and do something
System.out.println("Get a connection from the pool");
OracleNoSqlConnection conn = pool.getResource();
    
OracleModelNoSql model =                  
           OracleModelNoSql.createOracleModelNoSql(szModelName, conn);
    
System.out.println("Clear model");
model.removeAll();
    
model.getGraph().add(Triple.create(Node.createURI("u:John"),
                                   Node.createURI("u:cousinOf"),
                                   Node.createURI("u:Jackie")));
model.close();
    
//return connection back to the pool 
conn.dispose();
    
// grab another Oracle NoSQL connection and do something
System.out.println("Get a connection from the pool");
conn = pool.getResource();
    
String queryString = "select ?x ?y ?z WHERE {?x ?y ?z}";
    
System.out.println("Execute query " + queryString);
    
Query query = QueryFactory.create(queryString) ;
QueryExecution qexec = QueryExecutionFactory.create(query, model);
    
try {
      ResultSet results = qexec.execSelect();
      ResultSetFormatter.out(System.out, results, query);
    }
    
finally {
      qexec.close();
    } 
    
model.close();

//return connection back to the pool 
    conn.dispose();

// Close pool. 
// This will close all resources even if they have not been freed up
   System.out.println("Close pool, this will close all resources");
   pool.close();

}