diff --git a/jnosql-neo4j/src/main/java/org/eclipse/jnosql/databases/neo4j/mapping/GraphManagerSupplier.java b/jnosql-neo4j/src/main/java/org/eclipse/jnosql/databases/neo4j/mapping/GraphManagerSupplier.java index 35cde6429..21a88d898 100644 --- a/jnosql-neo4j/src/main/java/org/eclipse/jnosql/databases/neo4j/mapping/GraphManagerSupplier.java +++ b/jnosql-neo4j/src/main/java/org/eclipse/jnosql/databases/neo4j/mapping/GraphManagerSupplier.java @@ -14,16 +14,14 @@ */ 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; @@ -31,8 +29,6 @@ import java.util.logging.Logger; @ApplicationScoped -@Alternative -@Priority(Interceptor.Priority.LIBRARY_BEFORE) class GraphManagerSupplier implements Supplier { private static final String DATABASE_DEFAULT = "neo4j"; @@ -42,12 +38,13 @@ class GraphManagerSupplier implements Supplier { @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); } diff --git a/jnosql-neo4j/src/test/java/org/eclipse/jnosql/databases/neo4j/integration/GraphTemplateIntegrationTest.java b/jnosql-neo4j/src/test/java/org/eclipse/jnosql/databases/neo4j/integration/GraphTemplateIntegrationTest.java index 99897ca83..1a13c9637 100644 --- a/jnosql-neo4j/src/test/java/org/eclipse/jnosql/databases/neo4j/integration/GraphTemplateIntegrationTest.java +++ b/jnosql-neo4j/src/test/java/org/eclipse/jnosql/databases/neo4j/integration/GraphTemplateIntegrationTest.java @@ -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; @@ -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 diff --git a/jnosql-neo4j/src/test/java/org/eclipse/jnosql/databases/neo4j/integration/RepositoryIntegrationTest.java b/jnosql-neo4j/src/test/java/org/eclipse/jnosql/databases/neo4j/integration/RepositoryIntegrationTest.java index 8c8f1b460..023e78fed 100644 --- a/jnosql-neo4j/src/test/java/org/eclipse/jnosql/databases/neo4j/integration/RepositoryIntegrationTest.java +++ b/jnosql-neo4j/src/test/java/org/eclipse/jnosql/databases/neo4j/integration/RepositoryIntegrationTest.java @@ -51,7 +51,7 @@ public class RepositoryIntegrationTest { } @Inject - private MagazineRepository repository; + private MagazineRepository repository; @Test void shouldSave() { diff --git a/jnosql-tinkerpop/src/main/java/org/eclipse/jnosql/databases/tinkerpop/communication/DatabaseConfigurationAdapter.java b/jnosql-tinkerpop/src/main/java/org/eclipse/jnosql/databases/tinkerpop/communication/DatabaseConfigurationAdapter.java new file mode 100644 index 000000000..86697c883 --- /dev/null +++ b/jnosql-tinkerpop/src/main/java/org/eclipse/jnosql/databases/tinkerpop/communication/DatabaseConfigurationAdapter.java @@ -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); + } + } +}