Skip to content

Commit

Permalink
fix: Apply OGM configuration proper.
Browse files Browse the repository at this point in the history
Fixes #229.
  • Loading branch information
michael-simons committed Sep 18, 2023
1 parent f8da6fa commit 047223d
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 26 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
import io.quarkus.deployment.builditem.nativeimage.NativeImageResourceBuildItem;
import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem;
import io.quarkus.neo4j.deployment.Neo4jDriverBuildItem;
import io.quarkus.neo4j.runtime.Neo4jConfiguration;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
Expand Down Expand Up @@ -160,6 +161,7 @@ Neo4jOgmSessionFactoryBuildItem createSessionFactory(Neo4jOgmRecorder recorder,
Neo4jDriverBuildItem driverBuildItem,
ShutdownContextBuildItem shutdownContext,
BuildProducer<SyntheticBeanBuildItem> syntheticBeans,
Neo4jConfiguration neo4jConfiguration,
Neo4jOgmProperties ogmProperties,
Neo4jOgmBuiltTimeProperties buildTimeProperties,
EntitiesBuildItem allClasses
Expand All @@ -173,7 +175,7 @@ Neo4jOgmSessionFactoryBuildItem createSessionFactory(Neo4jOgmRecorder recorder,
}

var sessionFactoryRuntimeValue = recorder
.initializeSessionFactory(driverBuildItem.getValue(), shutdownContext, ogmProperties, allPackages);
.initializeSessionFactory(driverBuildItem.getValue(), shutdownContext, neo4jConfiguration, ogmProperties, allPackages);

var beanBuildItem = SyntheticBeanBuildItem.configure(SessionFactory.class)
.runtimeValue(sessionFactoryRuntimeValue)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,21 +15,15 @@
*/
package org.neo4j.ogm.quarkus.runtime;

import io.quarkus.neo4j.runtime.Neo4jConfiguration;
import io.quarkus.runtime.RuntimeValue;
import io.quarkus.runtime.ShutdownContext;
import io.quarkus.runtime.annotations.Recorder;

import java.util.function.BiFunction;
import java.util.function.Function;

import org.neo4j.driver.Driver;
import org.neo4j.ogm.config.Configuration;
import org.neo4j.ogm.driver.AbstractConfigurableDriver;
import org.neo4j.ogm.drivers.bolt.driver.BoltDriver;
import org.neo4j.ogm.request.Request;
import org.neo4j.ogm.session.SessionFactory;
import org.neo4j.ogm.transaction.Transaction;
import org.neo4j.ogm.transaction.TransactionManager;

/**
* @author Michael J. Simons
Expand All @@ -49,9 +43,12 @@ public class Neo4jOgmRecorder {
public RuntimeValue<SessionFactory> initializeSessionFactory(
RuntimeValue<Driver> driverRuntimeValue,
ShutdownContext shutdownContext,
Neo4jConfiguration neo4jConfiguration,
Neo4jOgmProperties ogmProperties, String[] allPackages) {

var builder = new Configuration.Builder();
var builder = new Configuration.Builder()
// Actually not needed for the driver to work, but required for the config not to stumble upon null
.uri(neo4jConfiguration.uri);

ogmProperties.database.ifPresent(builder::database);
if (ogmProperties.useNativeTypes) {
Expand All @@ -76,26 +73,12 @@ public RuntimeValue<SessionFactory> initializeSessionFactory(
* @return an OGM driver.
*/
private org.neo4j.ogm.driver.Driver createConfigurableDriver(RuntimeValue<Driver> driverRuntimeValue) {
var delegate = new BoltDriver(driverRuntimeValue.getValue());
return new AbstractConfigurableDriver() {
@Override
protected String getTypeSystemName() {
return "org.neo4j.ogm.drivers.bolt.types.BoltNativeTypes";
}

@Override
public Function<TransactionManager, BiFunction<Transaction.Type, Iterable<String>, Transaction>> getTransactionFactorySupplier() {
return delegate.getTransactionFactorySupplier();
}
return new BoltDriver(driverRuntimeValue.getValue()) {

@Override
public void close() {
delegate.close();
}

@Override
public Request request(Transaction transaction) {
return delegate.request(transaction);
public synchronized void close() {
// We must prevent the bolt driver from closing the driver bean
}
};
}
Expand Down

0 comments on commit 047223d

Please sign in to comment.