Предоставление встроенной базы данных Neo4J OGM через болт

Я использую встроенную базу данных 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. Я пытался вызвать Конфигуратор конфигурации с несколькими 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 ответ

Решение

Прежде всего: 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), ...), Тогда у вас будет открытый порт болта, но, к сожалению, не запущенный браузер.

Другие вопросы по тегам