Skip to content

Update neo4j driver #320

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 8 commits into from
Mar 28, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -14,25 +14,21 @@
*/
package org.eclipse.jnosql.databases.neo4j.mapping;

import jakarta.annotation.Priority;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.inject.Alternative;
import jakarta.enterprise.inject.Disposes;
import jakarta.enterprise.inject.Produces;
import jakarta.interceptor.Interceptor;
import jakarta.enterprise.inject.Typed;
import org.eclipse.jnosql.communication.Settings;
import org.eclipse.jnosql.databases.neo4j.communication.Neo4JConfiguration;
import org.eclipse.jnosql.databases.neo4j.communication.Neo4JDatabaseManager;
import org.eclipse.jnosql.databases.neo4j.communication.Neo4JDatabaseManagerFactory;
import org.eclipse.jnosql.mapping.core.config.MappingConfigurations;
import org.eclipse.jnosql.mapping.core.config.MicroProfileSettings;

import java.util.function.Supplier;
import java.util.logging.Level;
import java.util.logging.Logger;

@ApplicationScoped
@Alternative
@Priority(Interceptor.Priority.LIBRARY_BEFORE)
class GraphManagerSupplier implements Supplier<Neo4JDatabaseManager> {

private static final String DATABASE_DEFAULT = "neo4j";
Expand All @@ -42,12 +38,13 @@ class GraphManagerSupplier implements Supplier<Neo4JDatabaseManager> {
@Override
@Produces
@ApplicationScoped
@Typed(Neo4JDatabaseManager.class)
public Neo4JDatabaseManager get() {
LOGGER.fine(() -> "Creating a Neo4JDatabaseManager bean");
Settings settings = MicroProfileSettings.INSTANCE;
var configuration = new Neo4JConfiguration();
Neo4JDatabaseManagerFactory managerFactory = configuration.apply(settings);
var database = settings.getOrDefault("database", DATABASE_DEFAULT);
var managerFactory = configuration.apply(settings);
var database = settings.getOrDefault(MappingConfigurations.GRAPH_DATABASE, DATABASE_DEFAULT);
LOGGER.fine(() -> "Creating a Neo4JDatabaseManager bean with database: " + database);
return managerFactory.apply(database);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,12 @@
import jakarta.inject.Inject;
import org.assertj.core.api.SoftAssertions;
import org.eclipse.jnosql.databases.neo4j.communication.DatabaseContainer;
import org.eclipse.jnosql.databases.neo4j.communication.Neo4JConfiguration;
import org.eclipse.jnosql.databases.neo4j.communication.Neo4JConfigurations;
import org.eclipse.jnosql.databases.neo4j.mapping.Neo4JTemplate;
import org.eclipse.jnosql.mapping.Database;
import org.eclipse.jnosql.mapping.core.Converters;
import org.eclipse.jnosql.mapping.core.config.MappingConfigurations;
import org.eclipse.jnosql.mapping.graph.Edge;
import org.eclipse.jnosql.mapping.graph.GraphTemplate;
import org.eclipse.jnosql.mapping.reflection.Reflections;
Expand Down Expand Up @@ -54,6 +56,8 @@ public class GraphTemplateIntegrationTest {
DatabaseContainer.INSTANCE.host();
System.setProperty(Neo4JConfigurations.URI.get(), DatabaseContainer.INSTANCE.host());
System.setProperty(Neo4JConfigurations.DATABASE.get(), "neo4j");
System.setProperty(MappingConfigurations.GRAPH_PROVIDER.get(), Neo4JConfiguration.class.getName());
System.setProperty(MappingConfigurations.GRAPH_DATABASE.get(), "neo4j");
}

@Inject
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ public class RepositoryIntegrationTest {
}

@Inject
private MagazineRepository repository;
private MagazineRepository repository;

@Test
void shouldSave() {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
/*
* Copyright (c) 2025 Contributors to the Eclipse Foundation
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* and Apache License v2.0 which accompanies this distribution.
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
* and the Apache License v2.0 is available at http://www.opensource.org/licenses/apache2.0.php.
*
* You may elect to redistribute this code under either of these licenses.
*
* Contributors:
*
* Otavio Santana
*/
package org.eclipse.jnosql.databases.tinkerpop.communication;

import org.apache.tinkerpop.gremlin.structure.Graph;
import org.eclipse.jnosql.communication.Settings;
import org.eclipse.jnosql.communication.semistructured.DatabaseConfiguration;
import org.eclipse.jnosql.communication.semistructured.DatabaseManager;
import org.eclipse.jnosql.communication.semistructured.DatabaseManagerFactory;

import java.util.logging.Logger;

/**
* Adapter class that integrates both DatabaseConfiguration and GraphConfiguration.
* This class is responsible for creating a DatabaseManagerFactory based on the provided settings.
* It utilizes the GraphConfiguration SPI to create a Graph instance and then wraps it in a DatabaseManagerFactory.
*/
public class DatabaseConfigurationAdapter implements DatabaseConfiguration {


private static final Logger LOGGER = Logger.getLogger(DatabaseConfigurationAdapter.class.getName());

@Override
public DatabaseManagerFactory apply(Settings settings) {
LOGGER.fine(() -> "Creating graph database manager based on settings and GraphConfiguration SPI");
var configuration = GraphConfiguration.getConfiguration();
var graph = configuration.apply(settings);
return GraphDatabaseManagerFactory.of(graph);
}

static class GraphDatabaseManagerFactory implements DatabaseManagerFactory {

private final Graph graph;

private GraphDatabaseManagerFactory(Graph graph) {
this.graph = graph;
}

@Override
public void close() {

}

@Override
public DatabaseManager apply(String database) {
LOGGER.fine(() -> "Creating graph database manager where we will ignore the database name: " + database);
return TinkerpopGraphDatabaseManager.of(graph);
}

public static GraphDatabaseManagerFactory of(Graph graph) {
return new GraphDatabaseManagerFactory(graph);
}
}
}