在3.0.0中,与ODatabaseDocumentTx不同,OrientDB构造函数在内存DB中抛出异常

时间:2018-05-14 05:49:44

标签: orientdb

摘要

Am在OrientDB 3.0.0上;并试图避免使用Depreicated 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:无法打开数据库&#39; neurosys_orientdb_odb&#39;   在com.orientechnologies.orient.core.db.OrientDBEmbedded.open(OrientDBEmbedded.java:140)   at com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx.open(ODatabaseDocumentTx.java:908)   at com.orientechnologies.orient.core.db.OPartitionedDatabasePool $ DatabaseDocumentTxPooled.internalOpen(OPartitionedDatabasePool.java:441)   at com.orientechnologies.orient.core.db.OPartitionedDatabasePool.openDatabase(OPartitionedDatabasePool.java:306)   在com.orientechnologies.orient.core.db.OPartitionedDatabasePool.acquire(OPartitionedDatabasePool.java:261)   ...   在org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)   引起:com.orientechnologies.orient.core.exception.OStorageException:无法打开存储&#39; neurosys_orientdb_odb&#39;因为它在路径中不存在:D:\ orientdb./neurosys_orientdb_odb   at com.orientechnologies.orient.core.storage.impl.local.OAbstractPaginatedStorage.open(OAbstractPaginatedStorage.java:267)   在com.orientechnologies.orient.core.db.OrientDBEmbedded.open(OrientDBEmbedded.java:131)   ......还有34个

可能的原因 看起来路径变得混乱并且假设unix约定路径,即使对于内存DB也是如此。我在Windows上,但我不明白为什么这对内存数据库来说很重要,而且它适用于已弃用的数据库。所以我认为这是一个错误,如果不是,请让我知道我错过了什么。

感谢, 阿琼

2 个答案:

答案 0 :(得分:0)

使用内存存储的数据库由表单memory:的URL指定,例如memory:test。允许分层路径,例如memory:subdir / test。 问题似乎是DB的路径不存在。

D:\orientdb./neurosys_orientdb_odb

您的路径中有.是否正确?

如果没有尝试使用\而不是/,请删除路径中的.

如果这可以解决您的问题,请告诉我。

希望它有所帮助。

此致

答案 1 :(得分:0)

我通过区分urldatabase来解决我的问题,而不是将数据库包含在网址中。

然后让IOC友好一步;写了一个返回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&amp;见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常量