io.pelle.mango.db.util.MergingPersistenceUnitPostProcessor Maven / Gradle / Ivy
The newest version!
/**
* Copyright (c) 2013 Christian Pelster.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Christian Pelster - initial API and implementation
*/
package io.pelle.mango.db.util;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.springframework.orm.jpa.persistenceunit.MutablePersistenceUnitInfo;
import org.springframework.orm.jpa.persistenceunit.PersistenceUnitPostProcessor;
/**
* This merges all JPA entities from multiple jars. To use it, all entities must
* be listed in their respective persistence.xml files using the tag.
*
* @see http://forum.springsource.org/showthread.php?t=61763
*/
public class MergingPersistenceUnitPostProcessor implements PersistenceUnitPostProcessor
{
private String targetPersistenceUnitName;
private final Logger LOG = Logger.getLogger(MergingPersistenceUnitPostProcessor.class);
Map> puiClasses = new HashMap>();
MutablePersistenceUnitInfo targetPui;
List puisToMerge = new ArrayList();
private void mergeManagedClasses(MutablePersistenceUnitInfo sourcePui)
{
LOG.info(String.format("merging persistence unit '%s' to '%s'", sourcePui.getPersistenceUnitName(), targetPui.getPersistenceUnitName()));
for (String managedClassName : sourcePui.getManagedClassNames())
{
targetPui.addManagedClassName(managedClassName);
}
}
/** {@inheritDoc} */
@Override
public void postProcessPersistenceUnitInfo(MutablePersistenceUnitInfo pui)
{
if (pui.getPersistenceUnitName().endsWith(targetPersistenceUnitName))
{
LOG.info(String.format("target persistence unit '%s' (%s)", pui.getPersistenceUnitName(),
StringUtils.join(pui.getManagedClassNames().listIterator(), ",")));
targetPui = pui;
for (MutablePersistenceUnitInfo puiToMerge : puisToMerge)
{
mergeManagedClasses(puiToMerge);
}
}
else
{
if (targetPui == null)
{
LOG.info(String.format("persistence unit '%s' marked for later merging (%s)", pui.getPersistenceUnitName(),
StringUtils.join(pui.getManagedClassNames().listIterator(), ",")));
puisToMerge.add(pui);
}
else
{
mergeManagedClasses(pui);
}
}
}
public void setTargetPersistenceUnitName(String targetPersistenceUnitName)
{
this.targetPersistenceUnitName = targetPersistenceUnitName;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy