From 27bc0e14fc850a026a4214df9f60986a78429d89 Mon Sep 17 00:00:00 2001 From: guilhermecastro Date: Tue, 6 Aug 2024 00:01:55 -0300 Subject: [PATCH 1/4] allow load eclipse-link configs from outside classpath --- .../eclipselink/PolarisEclipseLinkMetaStoreSessionImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/extension/persistence/eclipselink/src/main/java/io/polaris/extension/persistence/impl/eclipselink/PolarisEclipseLinkMetaStoreSessionImpl.java b/extension/persistence/eclipselink/src/main/java/io/polaris/extension/persistence/impl/eclipselink/PolarisEclipseLinkMetaStoreSessionImpl.java index 43a78436f2..ffc7b8e1bf 100644 --- a/extension/persistence/eclipselink/src/main/java/io/polaris/extension/persistence/impl/eclipselink/PolarisEclipseLinkMetaStoreSessionImpl.java +++ b/extension/persistence/eclipselink/src/main/java/io/polaris/extension/persistence/impl/eclipselink/PolarisEclipseLinkMetaStoreSessionImpl.java @@ -47,7 +47,7 @@ import jakarta.persistence.EntityTransaction; import jakarta.persistence.OptimisticLockException; import jakarta.persistence.Persistence; -import java.io.InputStream; +import java.io.FileInputStream; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -124,7 +124,7 @@ private Map loadProperties(String confFile, String persistenceUn } try { - InputStream input = this.getClass().getClassLoader().getResourceAsStream(confFile); + FileInputStream input = new FileInputStream(confFile); DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse(input); From cfc596c5ace03441810d4c869063f5de2649c892 Mon Sep 17 00:00:00 2001 From: guilhermecastro Date: Tue, 6 Aug 2024 14:19:16 -0300 Subject: [PATCH 2/4] removed ECLIPSELINK_PERSISTENCE_XML property --- .../eclipselink/PolarisEclipseLinkMetaStoreSessionImpl.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/extension/persistence/eclipselink/src/main/java/io/polaris/extension/persistence/impl/eclipselink/PolarisEclipseLinkMetaStoreSessionImpl.java b/extension/persistence/eclipselink/src/main/java/io/polaris/extension/persistence/impl/eclipselink/PolarisEclipseLinkMetaStoreSessionImpl.java index ffc7b8e1bf..a80f27b41e 100644 --- a/extension/persistence/eclipselink/src/main/java/io/polaris/extension/persistence/impl/eclipselink/PolarisEclipseLinkMetaStoreSessionImpl.java +++ b/extension/persistence/eclipselink/src/main/java/io/polaris/extension/persistence/impl/eclipselink/PolarisEclipseLinkMetaStoreSessionImpl.java @@ -106,7 +106,6 @@ public PolarisEclipseLinkMetaStoreSessionImpl( properties.put( JDBC_URL, properties.get(JDBC_URL).replace("{realm}", realmContext.getRealmIdentifier())); } - properties.put(ECLIPSELINK_PERSISTENCE_XML, confFile); emf = Persistence.createEntityManagerFactory(persistenceUnitName, properties); @@ -147,7 +146,7 @@ private Map loadProperties(String confFile, String persistenceUn LOG.warn( "Cannot find or parse the configuration file {} for persistence-unit {}", confFile, - persistenceUnitName); + persistenceUnitName, e); } return Maps.newHashMap(); From bfe2286a4821e09523976186cf5745beb24177b4 Mon Sep 17 00:00:00 2001 From: guilhermecastro Date: Tue, 6 Aug 2024 16:12:11 -0300 Subject: [PATCH 3/4] unit test --- ...olarisEclipseLinkMetaStoreSessionImpl.java | 14 +++++----- .../PolarisEclipseLinkMetaStoreTest.java | 26 ++++++++++++++++++- 2 files changed, 31 insertions(+), 9 deletions(-) diff --git a/extension/persistence/eclipselink/src/main/java/io/polaris/extension/persistence/impl/eclipselink/PolarisEclipseLinkMetaStoreSessionImpl.java b/extension/persistence/eclipselink/src/main/java/io/polaris/extension/persistence/impl/eclipselink/PolarisEclipseLinkMetaStoreSessionImpl.java index a80f27b41e..0463eb55e4 100644 --- a/extension/persistence/eclipselink/src/main/java/io/polaris/extension/persistence/impl/eclipselink/PolarisEclipseLinkMetaStoreSessionImpl.java +++ b/extension/persistence/eclipselink/src/main/java/io/polaris/extension/persistence/impl/eclipselink/PolarisEclipseLinkMetaStoreSessionImpl.java @@ -15,11 +15,9 @@ */ package io.polaris.extension.persistence.impl.eclipselink; -import static org.eclipse.persistence.config.PersistenceUnitProperties.ECLIPSELINK_PERSISTENCE_XML; import static org.eclipse.persistence.config.PersistenceUnitProperties.JDBC_URL; import com.google.common.base.Predicates; -import com.google.common.collect.Maps; import io.polaris.core.PolarisCallContext; import io.polaris.core.context.RealmContext; import io.polaris.core.entity.PolarisBaseEntity; @@ -143,13 +141,13 @@ private Map loadProperties(String confFile, String persistenceUn this.properties = properties; return properties; } catch (Exception e) { - LOG.warn( - "Cannot find or parse the configuration file {} for persistence-unit {}", - confFile, - persistenceUnitName, e); + String errorMessage = + String.format( + "Cannot find or parse the configuration file {} for persistence-unit {}", + confFile, + persistenceUnitName); + throw new IllegalArgumentException(errorMessage, e); } - - return Maps.newHashMap(); } /** {@inheritDoc} */ diff --git a/extension/persistence/eclipselink/src/test/java/com/snowflake/polaris/persistence/impl/eclipselink/PolarisEclipseLinkMetaStoreTest.java b/extension/persistence/eclipselink/src/test/java/com/snowflake/polaris/persistence/impl/eclipselink/PolarisEclipseLinkMetaStoreTest.java index 03cc1026e9..0e31885db5 100644 --- a/extension/persistence/eclipselink/src/test/java/com/snowflake/polaris/persistence/impl/eclipselink/PolarisEclipseLinkMetaStoreTest.java +++ b/extension/persistence/eclipselink/src/test/java/com/snowflake/polaris/persistence/impl/eclipselink/PolarisEclipseLinkMetaStoreTest.java @@ -24,7 +24,14 @@ import io.polaris.core.persistence.PolarisTestMetaStoreManager; import io.polaris.extension.persistence.impl.eclipselink.PolarisEclipseLinkMetaStoreSessionImpl; import io.polaris.extension.persistence.impl.eclipselink.PolarisEclipseLinkStore; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; import java.time.ZoneId; +import java.util.Objects; +import java.util.UUID; +import org.junit.jupiter.api.Test; import org.mockito.Mockito; /** @@ -36,11 +43,20 @@ public class PolarisEclipseLinkMetaStoreTest extends PolarisMetaStoreManagerTest @Override protected PolarisTestMetaStoreManager createPolarisTestMetaStoreManager() { + Path tmpFile = Paths.get(String.format("/tmp/%s-persistence.xml", UUID.randomUUID())); + try { + Files.copy( + Objects.requireNonNull(getClass().getResourceAsStream("/META-INF/persistence.xml")), + tmpFile); + } catch (IOException e) { + throw new RuntimeException(e); + } + PolarisDiagnostics diagServices = new PolarisDefaultDiagServiceImpl(); PolarisEclipseLinkStore store = new PolarisEclipseLinkStore(diagServices); PolarisEclipseLinkMetaStoreSessionImpl session = new PolarisEclipseLinkMetaStoreSessionImpl( - store, Mockito.mock(), () -> "realm", null, "polaris-dev"); + store, Mockito.mock(), () -> "realm", tmpFile.toString(), "polaris-dev"); return new PolarisTestMetaStoreManager( new PolarisMetaStoreManagerImpl(), new PolarisCallContext( @@ -49,4 +65,12 @@ protected PolarisTestMetaStoreManager createPolarisTestMetaStoreManager() { new PolarisConfigurationStore() {}, timeSource.withZone(ZoneId.systemDefault()))); } + + @Test + void throwExceptionIfConfigFileDoesNotExists() { + PolarisDiagnostics diagServices = new PolarisDefaultDiagServiceImpl(); + PolarisEclipseLinkStore store = new PolarisEclipseLinkStore(diagServices); + new PolarisEclipseLinkMetaStoreSessionImpl( + store, Mockito.mock(), () -> "realm", "does not exists", "polaris-dev"); + } } From 13831f787ad928e09179be4e2c227f69736826f9 Mon Sep 17 00:00:00 2001 From: guilhermecastro Date: Tue, 6 Aug 2024 16:14:57 -0300 Subject: [PATCH 4/4] add test to ensure that is not loading the default class path --- .../impl/eclipselink/PolarisEclipseLinkMetaStoreTest.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/extension/persistence/eclipselink/src/test/java/com/snowflake/polaris/persistence/impl/eclipselink/PolarisEclipseLinkMetaStoreTest.java b/extension/persistence/eclipselink/src/test/java/com/snowflake/polaris/persistence/impl/eclipselink/PolarisEclipseLinkMetaStoreTest.java index 0e31885db5..e255976862 100644 --- a/extension/persistence/eclipselink/src/test/java/com/snowflake/polaris/persistence/impl/eclipselink/PolarisEclipseLinkMetaStoreTest.java +++ b/extension/persistence/eclipselink/src/test/java/com/snowflake/polaris/persistence/impl/eclipselink/PolarisEclipseLinkMetaStoreTest.java @@ -73,4 +73,12 @@ void throwExceptionIfConfigFileDoesNotExists() { new PolarisEclipseLinkMetaStoreSessionImpl( store, Mockito.mock(), () -> "realm", "does not exists", "polaris-dev"); } + + @Test + void ensureNotLoadingDefaultClassPersistence() { + PolarisDiagnostics diagServices = new PolarisDefaultDiagServiceImpl(); + PolarisEclipseLinkStore store = new PolarisEclipseLinkStore(diagServices); + new PolarisEclipseLinkMetaStoreSessionImpl( + store, Mockito.mock(), () -> "realm", null, "polaris-dev"); + } }