Предоставление встроенной базы данных Neo4J OGM через болт - PullRequest
0 голосов
/ 27 февраля 2019

Я использую встроенную базу данных Neo4J с OGM и создаю службу базы данных в каталоге через OGM SessionFactory :

Configuration configuration = new Configuration.Builder()
                .uris("C:\neoEmbeddedDb")
                .build();

        factory = new SessionFactory(configuration, packages);

Это работает хорошо, но теперь я хочу просмотретьсоздал базу данных с помощью браузера Neo4J.Когда я читаю, мне нужно открыть свою базу данных через Bolt, чтобы иметь к ней доступ.

В документации Neo4J Embedded они используют GraphDatabaseService и просто указываютдополнительный болт-драйвер для предоставления базы данных:

GraphDatabaseService graphDb = new GraphDatabaseFactory()
                .newEmbeddedDatabaseBuilder( DB_PATH )
                .setConfig( bolt.type, "BOLT" )
                .setConfig( bolt.enabled, "true" )
                .setConfig( bolt.address, "localhost:7687" )
                .newGraphDatabase();

Но, к сожалению, у меня нет этой опции при использовании OGM SessionFactory.Я пытался вызвать Configuration Builder с несколькими URI:

Configuration configuration = new Configuration.Builder()
                .uris(new String[]{this.databasePath.toUri().toString(), "localhost:7687"})
                .build();

Но, похоже, он игнорирует первый URI (расположение моего файла) и вместо этого создает базу данных во временном расположении.

выходные данные отладки записывают в консоль соответствующее сообщение:

Creating temporary file store: file:/C:/Temp/neo4jTmpEmbedded.db2736315981519762299/database/

Может кто-нибудь объяснить, как я могу представить свою встроенную базу данных с помощью болта или получить к ней доступ с помощью браузера Neo4J?

Большое спасибо!


Решение

С помощью meistermeier я смог создать настоящую EmbeddedDatabase и подключить к ней мой OGM.Я добавил параметры подключения к болту, как я нашел их в документации.Теперь база данных создана и правильно выставлена ​​через Bolt.Я могу подключиться к своему Neo4J Desktop Windows Browser.

Окончательный код:

BoltConnector boltConnector = new BoltConnector(_BOLT_CONNECTION_STRING);

GraphDatabaseService graphDb = new GraphDatabaseFactory()
        .newEmbeddedDatabaseBuilder(databasePath.toFile())
        .setConfig(boltConnector.type, "BOLT" )
        .setConfig(boltConnector.enabled, "true" )
        .setConfig(boltConnector.listen_address, "localhost:7687" )
        .setConfig(GraphDatabaseSettings.auth_enabled, "false")
        .newGraphDatabase();

registerShutdownHook(graphDb);

// connect OGM session factory to embedded database
EmbeddedDriver driver = new EmbeddedDriver(graphDb);
final String[] packages = new String[] {
        "Entity domain package",
};

factory = new SessionFactory(driver, packages);

1 Ответ

0 голосов
/ 01 марта 2019

Прежде всего: Neo4j-OGM не отвечает за более сложный запуск базы данных, кроме создания подключения к ней.Предоставление экземпляра Neo4j с пользовательской конфигурацией сделает ваше приложение ответственным за правильную настройку.

Во-вторых: то, чего вы пытаетесь достичь, невозможно.По крайней мере, не с другим экземпляром сервера, который обслуживает браузер Neo4j, который может подключиться к любому серверу протокола болтов после запуска.Вы можете запустить встроенный экземпляр и, если вы действительно этого хотите, открыть порт болта.Но встроенный браузер Neo4j не будет развернут.

Но, в конце концов, позвольте мне объяснить, почему вы видите сообщение о временной папке в БД: в ваших установочных фрагментах я вижу создание двух экземпляров: Один путем создания явногоэкземпляр GraphDatabaseService и другой через конфигурацию.Первое очевидно, второе не так много.Я просто предполагаю, что вы не используете самую последнюю версию Neo4j-OGM (3.1.8 на момент написания этого ответа).

Метод / параметр uris только для дополнительного Uris (ранее 3.1.8) в отношении причинного кластера и маршрутизации.Вы должны будете использовать uri с одним URI (bolt://.... или file:///...) в вашем случае.Поведение Neo4j-OGM в случае неопределенного uri заключается в использовании временного встроенного экземпляра.

Другое решение этой проблемы - не предоставить Configuration, а EmbeddedDriver экземпляр.для SessionFactory.Это может обернуть уже настроенный GraphDatabaseService как new SessionFactory(new EmbeddedDriver(graphDatabaseService), ...).Тогда у вас будет открытый порт болта, но, к сожалению, не запущенный браузер.

...