Я пытаюсь использовать экземпляр orientdb в памяти в многопоточном приложении. Я просмотрел множество примеров кода, но ни один из них не охватывает этот случай. Вот мой тестовый код:
DbTest.java
public class DbTest {
public static void main(String [] args) {
ODatabaseDocumentTx db = new ODatabaseDocumentTx("memory:MyDb").create();
Runnable myRunnable = new MyRunnable(db);
Thread thread = new Thread(myRunnable);
thread.start();
}
}
MyRunnable.java
public class MyRunnable implements Runnable {
private ODatabaseDocumentTx db;
MyRunnable(ODatabaseDocumentTx db) {
this.db = db;
}
public void run() {
ODocument animal = new ODocument("Animal");
animal.field( "name", "Gaudi" );
animal.field( "location", "Madrid" );
animal.save();
}
}
Это дает ошибку
Исключение в потоке "Thread-3" com.orienttechnologies.orient.core.exception.ODatabaseException: экземпляр базы данных не установлен в текущем потоке. Обязательно установите его с помощью: ODatabaseRecordThreadLocal.INSTANCE.set(db);
Я читал, что я должен попытаться использовать пул соединений, но пул соединений, похоже, не работает с базами данных в памяти.
ODatabaseDocumentTx db = ODatabaseDocumentPool.global().acquire("memory:MyDb", "admin", "admin");
Исключение в потоке «основной» com.orienttechnologies.orient.core.exception.OStorageException: невозможно открыть локальное хранилище «MyDb» с режимом = rw
Любые идеи, как это на самом деле должно работать?