Подключение к встроенному серверу OrientDB в Java

#java #orientdb #graph-databases #orientdb3.0

#java #orientdb #графические базы данных #orientdb3.0

Вопрос:

Я хочу запустить процесс Java на нескольких машинах, каждая из которых должна будет запустить локальный сервер OrientBD, загрузить график, выполнить наши процессы, а затем закрыть. Таким образом, мне нужно иметь возможность встраивать процесс OServer запуска из Java.

Существует множество советов о том, как это сделать, включая вопросы SA, однако большинство из них, похоже, устарели (поэтому, пожалуйста, не помечайте это как дубликат преждевременно). Наиболее актуальным, по-видимому, является это, однако это не работает — по крайней мере, для меня. С помощью приведенного ниже кода я получаю последующую ошибку:

     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; «ВСЕ» .jar загружено отсюда. Обратите внимание, что этот jar не содержит файла параметров orientdb-server-config.xml , поэтому я загрузил его непосредственно с исходного GitHub.

Есть ли проблема с моей конкретной реализацией, моим подходом в целом или с файлом конфигурации по умолчанию, который я использую? Я с нетерпением жду ваших мыслей.

Ответ №1:

Проблема была трехкратной:

  1. Я использовал «ВСЕ» .jar , предоставленное веб-сайтом. Вместо этого мне нужно было использовать библиотеки, предоставленные в полном исходном коде.
  2. Я не учитывал тот факт, что при сбое кода он не удалял базу данных, которую он наполовину создал, поэтому не смог выполнить код, который я пытался исправить. Мне пришлось реализовать временную отказоустойчивость для удаления базы данных перед инициализацией, чтобы избежать этого.
  3. Я использовал неправильную (?) стратегию в целом.

Мой метод работы такой, как показано ниже.

 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");