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..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; @@ -47,7 +45,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; @@ -106,7 +104,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); @@ -124,7 +121,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); @@ -144,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); + 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..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 @@ -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,20 @@ 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"); + } + + @Test + void ensureNotLoadingDefaultClassPersistence() { + PolarisDiagnostics diagServices = new PolarisDefaultDiagServiceImpl(); + PolarisEclipseLinkStore store = new PolarisEclipseLinkStore(diagServices); + new PolarisEclipseLinkMetaStoreSessionImpl( + store, Mockito.mock(), () -> "realm", null, "polaris-dev"); + } }