DATAJPA-189, DATAJPA-190 - Improvements to MergingPersistenceUnitManager.
MergingPersistenceUnitManager now also merges mapping file locations. We also make sure now that the persistence unit root URL does not get added twice accidentally as some persistence providers refuse to work then.
This commit is contained in:
@@ -61,29 +61,45 @@ 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()) {
|
||||
String persistenceUnitName = pui.getPersistenceUnitName();
|
||||
|
||||
// Add jar file url to PUI
|
||||
for (URL url : oldPui.getJarFileUrls()) {
|
||||
if (!pui.getJarFileUrls().contains(url)) {
|
||||
log.debug("Adding {} to persistence units", url);
|
||||
log.debug("Adding JAR file URL {} to persistence unit {}.", url, persistenceUnitName);
|
||||
pui.addJarFileUrl(url);
|
||||
}
|
||||
}
|
||||
|
||||
for (String className : oldPui.getManagedClassNames()) {
|
||||
|
||||
if (!pui.getManagedClassNames().contains(className)) {
|
||||
log.debug("Adding class {} to PersistenceUnit {}", className, pui.getPersistenceUnitName());
|
||||
log.debug("Adding class {} to PersistenceUnit {}", className, persistenceUnitName);
|
||||
pui.addManagedClassName(className);
|
||||
}
|
||||
}
|
||||
|
||||
pui.addJarFileUrl(oldPui.getPersistenceUnitRootUrl());
|
||||
for (String mappingFileName : oldPui.getMappingFileNames()) {
|
||||
if (!pui.getMappingFileNames().contains(mappingFileName)) {
|
||||
log.debug("Adding mapping file to persistence unit {}.", mappingFileName, persistenceUnitName);
|
||||
pui.addMappingFileName(mappingFileName);
|
||||
}
|
||||
}
|
||||
|
||||
URL newUrl = pui.getPersistenceUnitRootUrl();
|
||||
URL oldUrl = oldPui.getPersistenceUnitRootUrl();
|
||||
|
||||
boolean hasNewRootUrl = newUrl != null;
|
||||
boolean rootUrlsDiffer = hasNewRootUrl && !newUrl.equals(oldUrl);
|
||||
boolean urlNotInJarUrls = hasNewRootUrl && !pui.getJarFileUrls().contains(oldUrl);
|
||||
|
||||
if (hasNewRootUrl && rootUrlsDiffer && urlNotInJarUrls) {
|
||||
pui.addJarFileUrl(oldUrl);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,7 +25,6 @@ import java.util.Arrays;
|
||||
|
||||
import javax.persistence.spi.PersistenceUnitInfo;
|
||||
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
@@ -59,11 +58,7 @@ public class MergingPersistenceUnitManagerUnitTests {
|
||||
verify(newInfo).addJarFileUrl(jarFileUrl);
|
||||
}
|
||||
|
||||
/**
|
||||
* @FIXME - Reactivate as soon as Spring 3.1.1 gets released
|
||||
*/
|
||||
@Test
|
||||
@Ignore
|
||||
public void mergesManagedClassesCorrectly() {
|
||||
|
||||
MergingPersistenceUnitManager manager = new MergingPersistenceUnitManager();
|
||||
@@ -74,5 +69,54 @@ public class MergingPersistenceUnitManagerUnitTests {
|
||||
PersistenceUnitInfo info = manager.obtainPersistenceUnitInfo("pu");
|
||||
assertThat(info.getManagedClassNames().size(), is(2));
|
||||
assertThat(info.getManagedClassNames(), hasItems(User.class.getName(), Role.class.getName()));
|
||||
|
||||
assertThat(info.getMappingFileNames().size(), is(2));
|
||||
assertThat(info.getMappingFileNames(), hasItems("foo.xml", "bar.xml"));
|
||||
|
||||
System.out.println(info.getPersistenceUnitRootUrl());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void addsOldPersistenceUnitRootUrlIfDifferentFromNewOne() throws MalformedURLException {
|
||||
|
||||
MutablePersistenceUnitInfo newInfo = new MutablePersistenceUnitInfo();
|
||||
newInfo.setPersistenceUnitRootUrl(new URL("file:bar"));
|
||||
|
||||
when(oldInfo.getPersistenceUnitRootUrl()).thenReturn(new URL("file:/foo"));
|
||||
|
||||
MergingPersistenceUnitManager manager = new MergingPersistenceUnitManager();
|
||||
manager.postProcessPersistenceUnitInfo(newInfo, oldInfo);
|
||||
|
||||
assertThat(newInfo.getJarFileUrls().size(), is(1));
|
||||
assertThat(newInfo.getJarFileUrls(), hasItems(oldInfo.getPersistenceUnitRootUrl()));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void doesNotAddNewPuRootUrlIfNull() throws MalformedURLException {
|
||||
|
||||
MutablePersistenceUnitInfo newInfo = new MutablePersistenceUnitInfo();
|
||||
|
||||
when(oldInfo.getPersistenceUnitRootUrl()).thenReturn(new URL("file:/foo"));
|
||||
|
||||
MergingPersistenceUnitManager manager = new MergingPersistenceUnitManager();
|
||||
manager.postProcessPersistenceUnitInfo(newInfo, oldInfo);
|
||||
|
||||
assertThat(newInfo.getJarFileUrls().isEmpty(), is(true));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void doesNotAddNewPuRootUrlIfAlreadyOnTheListOfJarFileUrls() throws MalformedURLException {
|
||||
|
||||
when(oldInfo.getPersistenceUnitRootUrl()).thenReturn(new URL("file:foo"));
|
||||
|
||||
MutablePersistenceUnitInfo newInfo = new MutablePersistenceUnitInfo();
|
||||
newInfo.setPersistenceUnitRootUrl(new URL("file:bar"));
|
||||
newInfo.addJarFileUrl(oldInfo.getPersistenceUnitRootUrl());
|
||||
|
||||
MergingPersistenceUnitManager manager = new MergingPersistenceUnitManager();
|
||||
manager.postProcessPersistenceUnitInfo(newInfo, oldInfo);
|
||||
|
||||
assertThat(newInfo.getJarFileUrls().size(), is(1));
|
||||
assertThat(newInfo.getJarFileUrls(), hasItems(oldInfo.getPersistenceUnitRootUrl()));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
|
||||
<persistence-unit name="pu">
|
||||
<mapping-file>foo.xml</mapping-file>
|
||||
<class>org.springframework.data.jpa.domain.sample.User</class>
|
||||
</persistence-unit>
|
||||
</persistence>
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
|
||||
<persistence-unit name="pu">
|
||||
<mapping-file>bar.xml</mapping-file>
|
||||
<class>org.springframework.data.jpa.domain.sample.Role</class>
|
||||
</persistence-unit>
|
||||
</persistence>
|
||||
|
||||
Reference in New Issue
Block a user