В 3.0.0, в отличие от ODatabaseDocumentTx, конструктор OrientDB выдает исключение для в БД памяти - PullRequest
0 голосов
/ 14 мая 2018

Сводка

Я использую OrientDB 3.0.0 и пытаюсь избежать устаревших API, таких как ODatabaseDocumentTx.Однако, когда я заменяю его com.orientechnologies.orient.core.db.OrientDB;для тех же конфигов, которые в противном случае работают нормально, он взрывается.

Подробности ниже ...

Конфигурация



    odb.url=memory:neurosys_orientdb_odb
    odb.username=admin
    odb.password=admin
    odb.maxPartitionSize=2
    odb.maxPoolSize=10

Spring Configsиспользуя ODatabaseDocumentTx, который работает

    <bean id="dataSourceOdb" class="com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx" init-method="create">
        <constructor-arg value = "${odb.url}"/>     
</bean>

<bean id="connectionPoolDataSourceOdb" class="com.orientechnologies.orient.core.db.OPartitionedDatabasePool">
    <constructor-arg value = "${odb.url}" index="0"/>
    <constructor-arg value = "${odb.username}" index="1"/>
    <constructor-arg value = "${odb.password}" index="2"/>
    <constructor-arg value = "${odb.maxPartitionSize}" index="3"/>
    <constructor-arg value = "${odb.maxPoolSize}" index="4"/>       
</bean>

Spring Configs с использованием com.orientechnologies.orient.core.db.OrientDB, который не работает

Просто заменяя dataSourceOdb bean.

<bean id="dataSourceOdbNew" class="com.orientechnologies.orient.core.db.OrientDB">  
<constructor-arg value = "${odb.url}"/>
    <constructor-arg value = "${odb.username}" />
    <constructor-arg value = "${odb.password}" />       
<constructor-arg><null /></constructor-arg>

Исключение

com.orientechnologies.orient.core.exception.ODatabaseException: Не удается открытьбазу данных.orientechnologies.orient.core.db.OPartitionedDatabasePool $ DatabaseDocumentTxPooled.internalOpen (OPartitionedDatabasePool.java:441) в com.orientechnologies.orient.core.db.OPartitionedDatabasePool.openDava: OPartitionedDatabasePo:306) at com.orientechnologies.orient.core.db.OPartitionedDatabasePool.acquire (OPartitionedDatabasePool.java:261) ... at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main (RemoteTestRunner.jj)by: com.orientechnologies.orient.core.exception.OStorageException: Невозможно открыть хранилище 'neurosys_orientdb_odb', так как оно не существует в пути: D: \ orientdb./neurosys_orientdb_odb в com.orientechnologies.orient.core.storage.impl.local.OAbstractPaginatedStorage.open (OAbstractPaginatedStorage.java:267) в com.orientechnologies.orient.core.db.OrientDBEmbedded.open (OrientDBEmbedded.java:131) ... еще 34

* 1037причина Похоже, что путь путается, предполагая путь соглашения Unix даже для БД в памяти.Я на Windows, но я не понимаю, почему это имеет значение для БД в памяти.Кроме того, он работает с устаревшим API, поэтому я предполагаю, что это ошибка.Если нет, пожалуйста, дайте мне знать, что мне не хватает.

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

Я решил свою проблему, сделав различие между url и database и не включив базу данных в URL.

Тогда, чтобы сделать вещи на 1 шаг дружественными МОК; написал фабрику, которая возвращает pool

        OrientDB odb = new OrientDB(url, OrientDBConfig.defaultConfig());
    odb.createIfNotExists(database, odbType==null?ODatabaseType.MEMORY:odbType);    

    OrientDBConfig config = OrientDBConfig.builder().build(); //... configBuilder.addConfig(OGlobalConfiguration key, value);
    ODatabasePool pool = new ODatabasePool(odb, database, username, password, config);

Где сейчас находятся конфигурации: (orientdb & see https://orientdb.com/docs/2.1.x/Configuration.html)

odb.url=memory:
odb.database=neurosys_orientdb_odb
odb.username=admin
odb.password=admin
odb.pool.min=1
odb.pool.max=5

Примечание. Приведенные выше конфиги являются пользовательскими для приложения, но соответствуют OGlobalConfiguration константе

0 голосов
/ 18 мая 2018

База данных, использующая память, обозначается URL-адресом формы memory :, например memory: test. Разрешен иерархический путь, например память: subdir / test. Кажется, проблема в том, что путь к БД не существует.

D:\orientdb./neurosys_orientdb_odb

Правильно ли, что у вас есть . на вашем пути?

Если не попытаться использовать \ вместо / и удалить . в пути.

Дайте мне знать, если это решит вашу проблему.

Надеюсь, это поможет.

Привет

...