使用 Java 连接到嵌入式 OrientDB 服务器

Posted

技术标签:

【中文标题】使用 Java 连接到嵌入式 OrientDB 服务器【英文标题】:Connecting to an embedded OrientDB server in Java 【发布时间】:2022-01-12 09:07:49 【问题描述】:

我希望在多台机器上运行 Java 进程,每台机器都需要启动本地 OrientBD 服务器、加载图表、执行我们的进程,然后关闭。因此,我需要能够在 Java 中嵌入 OServer 启动进程。

有很多关于如何执行此操作的建议,包括 SA 问题,但大多数似乎已过时(因此请不要过早地将其标记为重复)。最直接相关的似乎是this,但它不起作用——至少对我来说。使用下面的代码,我得到了后续错误:

    try 
        final OServer server = OServerMain.create();
        server.startup(server.getClass().getResourceAsStream("/orientdb-server-config.xml"));
        server.activate();
     catch (Exception e) 
        e.printStackTrace();
        System.exit(-1);
    

2021-12-07 21:47:39:323 INFO  Loading configuration from input stream [OServerConfigurationLoaderXml]
2021-12-07 21:47:39:633 INFO  OrientDB Server v3.2.3 (build dc98198215aa57baf29b32adb657dc3733acdb55, branch develop) is starting up... [OServer]java.lang.NullPointerException
    at com.orientechnologies.orient.core.Orient.onEmbeddedFactoryInit(Orient.java:957)
    at com.orientechnologies.orient.core.db.OrientDBEmbedded.<init>(OrientDBEmbedded.java:97)
    at com.orientechnologies.orient.core.db.OrientDBInternal.embedded(OrientDBInternal.java:119)
    at com.orientechnologies.orient.server.OServer.startupFromConfiguration(OServer.java:388)
    at com.orientechnologies.orient.server.OServer.startup(OServer.java:314)
    at ems.definitions.instance.Graph.<init>(Graph.java:47)

我使用的是 OrientDB 3.2.3 版;从here 下载的“全部”.jar。注意这个jar不包含参数文件orientdb-server-config.xml,所以我直接从源GitHub下载了。

我的具体实现、我的一般方法或我正在使用的默认配置文件是否存在问题?我期待听到您的想法。

【问题讨论】:

【参考方案1】:

问题有三个方面:

    我使用的是网站提供的“ALL”.jar。相反,我需要使用完整源代码中提供的库。 我没有考虑到当代码失败时,它没有删除它创建一半的数据库,因此无法执行我试图修复的代码。为了避免这种情况,我必须在初始化之前实施临时故障保护以删除数据库。 我通常使用了错误的 (?) 策略。

我的工作方法如下。

orientDB = new OrientDB("embedded:/tmp/","admin","adminpwd", OrientDBConfig.defaultConfig());

/** THIS IS VERY MUCH ONLY FOR LOCAL TESTING **/
if(orientDB.exists(name))
    orientDB.drop(name);

if(!orientDB.exists(name)) // if the database does not already exist, create it.
    orientDB.execute("create database " + name + " PLOCAL users ( admin identified by 'adminpwd' role admin)");
db = orientDB.open(name, "admin", "adminpwd");

【讨论】:

以上是关于使用 Java 连接到嵌入式 OrientDB 服务器的主要内容,如果未能解决你的问题,请参考以下文章

OrientDB 中的嵌入式列表查询性能

使用连接到 WCF 服务的 Java 客户端在 XML 正文中嵌入 XML 指令

OrientDB - 将本地数据库与远程数据库同步

使用 proguard 后,Android apk 未连接到 Azure 服务器

使用 FireDAC 连接到嵌入式 Firebird 2.5

Spring JMS - 无法使用嵌入式代理连接到代理 URL