From 9224a4b14f696a38d2a433287003d5b3773f222c Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Wed, 14 Dec 2011 18:26:21 +0100 Subject: [PATCH] DATAJPA-138 - Make MergingPesistenceUnitManager work again. Override isPersistenceUnitOverrideAllowed() newly introduced in Spring 3.1.1 to indicate we can deal with persistence units of the same name. For Spring 3.0.x versions the implementation was not broken. --- .../MergingPersistenceUnitManager.java | 19 ++++++++++++++++++- ...ergingPersistenceUnitManagerUnitTests.java | 19 ++++++++++++++++++- .../data/jpa/support/persistence.xml | 6 ++++++ .../data/jpa/support/persistence2.xml | 6 ++++++ 4 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 src/test/resources/org/springframework/data/jpa/support/persistence.xml create mode 100644 src/test/resources/org/springframework/data/jpa/support/persistence2.xml diff --git a/src/main/java/org/springframework/data/jpa/support/MergingPersistenceUnitManager.java b/src/main/java/org/springframework/data/jpa/support/MergingPersistenceUnitManager.java index bdf531d62..49a7ea1de 100644 --- a/src/main/java/org/springframework/data/jpa/support/MergingPersistenceUnitManager.java +++ b/src/main/java/org/springframework/data/jpa/support/MergingPersistenceUnitManager.java @@ -1,5 +1,5 @@ /* - * Copyright 2011 the original author or authors. + * Copyright 2011-2012 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -57,6 +57,15 @@ public class MergingPersistenceUnitManager extends DefaultPersistenceUnitManager } } + /* + * (non-Javadoc) + * @see org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager#isPersistenceUnitOverrideAllowed() + */ + @Override + protected boolean isPersistenceUnitOverrideAllowed() { + return true; + } + void postProcessPersistenceUnitInfo(MutablePersistenceUnitInfo pui, PersistenceUnitInfo oldPui) { for (URL url : oldPui.getJarFileUrls()) { @@ -68,6 +77,14 @@ public class MergingPersistenceUnitManager extends DefaultPersistenceUnitManager } } + for (String className : oldPui.getManagedClassNames()) { + + if (!pui.getManagedClassNames().contains(className)) { + log.debug("Adding class {} to PersistenceUnit {}", className, pui.getPersistenceUnitName()); + pui.addManagedClassName(className); + } + } + pui.addJarFileUrl(oldPui.getPersistenceUnitRootUrl()); } } diff --git a/src/test/java/org/springframework/data/jpa/support/MergingPersistenceUnitManagerUnitTests.java b/src/test/java/org/springframework/data/jpa/support/MergingPersistenceUnitManagerUnitTests.java index 193670973..cb6b771f4 100644 --- a/src/test/java/org/springframework/data/jpa/support/MergingPersistenceUnitManagerUnitTests.java +++ b/src/test/java/org/springframework/data/jpa/support/MergingPersistenceUnitManagerUnitTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2011 the original author or authors. + * Copyright 2011-2012 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,6 +15,8 @@ */ package org.springframework.data.jpa.support; +import static org.hamcrest.Matchers.*; +import static org.junit.Assert.*; import static org.mockito.Mockito.*; import java.net.MalformedURLException; @@ -27,6 +29,8 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; +import org.springframework.data.jpa.domain.sample.Role; +import org.springframework.data.jpa.domain.sample.User; import org.springframework.orm.jpa.persistenceunit.MutablePersistenceUnitInfo; /** @@ -53,4 +57,17 @@ public class MergingPersistenceUnitManagerUnitTests { manager.postProcessPersistenceUnitInfo(newInfo, oldInfo); verify(newInfo).addJarFileUrl(jarFileUrl); } + + @Test + public void mergesManagedClassesCorrectly() { + + MergingPersistenceUnitManager manager = new MergingPersistenceUnitManager(); + manager.setPersistenceXmlLocations(new String[] { "classpath:org/springframework/data/jpa/support/persistence.xml", + "classpath:org/springframework/data/jpa/support/persistence2.xml" }); + manager.preparePersistenceUnitInfos(); + + PersistenceUnitInfo info = manager.obtainPersistenceUnitInfo("pu"); + assertThat(info.getManagedClassNames().size(), is(2)); + assertThat(info.getManagedClassNames(), hasItems(User.class.getName(), Role.class.getName())); + } } diff --git a/src/test/resources/org/springframework/data/jpa/support/persistence.xml b/src/test/resources/org/springframework/data/jpa/support/persistence.xml new file mode 100644 index 000000000..230d4bb2a --- /dev/null +++ b/src/test/resources/org/springframework/data/jpa/support/persistence.xml @@ -0,0 +1,6 @@ + + + + org.springframework.data.jpa.domain.sample.User + + diff --git a/src/test/resources/org/springframework/data/jpa/support/persistence2.xml b/src/test/resources/org/springframework/data/jpa/support/persistence2.xml new file mode 100644 index 000000000..756e2aa4a --- /dev/null +++ b/src/test/resources/org/springframework/data/jpa/support/persistence2.xml @@ -0,0 +1,6 @@ + + + + org.springframework.data.jpa.domain.sample.Role + +