0

私は非常に小さな OSGI アプリケーションを Apache Karaf で実行していますが、OrientDB バージョン 2.1.11 で問題なく動作します。しかし、新しい 2.2.3 バージョンで起動しようとすると、次のエラーに直面しました。

Caused by: com.orientechnologies.orient.core.exception.ODatabaseException: Error on opening database 'remote:/localhost/testdb'
    at com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx.<init>(ODatabaseDocumentTx.java:187)
    at com.orientechnologies.orient.core.db.OPartitionedDatabasePool$DatabaseDocumentTxPolled.<init>(OPartitionedDatabasePool.java:118)
    at com.orientechnologies.orient.core.db.OPartitionedDatabasePool$DatabaseDocumentTxPolled.<init>(OPartitionedDatabasePool.java:114)
    at com.orientechnologies.orient.core.db.OPartitionedDatabasePool.initQueue(OPartitionedDatabasePool.java:442)

このエラーは、アプリケーションのインストール時に DB 接続プールを初期化しようとしているときに発生します。いくつかのデバッグの後、根本的な問題はクラス com.orientechnologies.orient.core.Orient のメソッド registerEngines() にあることがわかりました。ここで、OrientDB クラスローダーは OEngine インターフェイスのすべての実装を見つけようとします。

    Iterator<OEngine> engines = OClassLoaderHelper.lookupProviderWithOrientClassLoader(OEngine.class, classLoader);

この呼び出しは、plocal と memory の 2 つの実装のみを返します (registerEngines() と同じバンドル - orientdb-core にあります)。リモート エンジン (com.orientechnologies.orient.client.remote.OEngineRemote) は orientdb-client バンドルにあり、OrientDB クラスローダーはそれを見つけることができません。

DB 接続ポーリングを作成し、説明されているエラーを生成するコード フラグメントを次に示します。

    log.info("Creating OrientDB connection pool");
    OGlobalConfiguration.NETWORK_BINARY_DNS_LOADBALANCING_ENABLED.setValue(true);
    OPartitionedDatabasePool connectionPool = new OPartitionedDatabasePool(url, user, password);
    log.info(String.format("Created OrientDB connection pool: url=%s", url));
4

0 に答える 0