blob: cfa3312f21def32053eb00e404fabb9a8f0fa219 [file] [log] [blame]
package org.eclipse.persistence.internal.jpa;
import java.io.ObjectStreamException;
import java.io.Serializable;
import java.util.Map;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import org.eclipse.persistence.internal.sessions.ObjectChangeSet;
import org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork;
import org.eclipse.persistence.internal.sessions.UnitOfWorkChangeSet;
/**
*
* @author dclarke
* @since EclipseLink 1.1.2 Example
*/
public class SerializedEntityManager implements Serializable {
private static final long serialVersionUID = 1L;
private String sessionName;
private Map<?, ?> properties;
private Map<Object, Object> cloneMappings;
private Map<Object, Object> newObjectsCloneToOriginal;
private Map<Object, ObjectChangeSet> changeSets;
@SuppressWarnings("unchecked")
public SerializedEntityManager(EntityManagerImpl entityManager) {
this.sessionName = entityManager.getServerSession().getName();
this.properties = entityManager.properties;
if (entityManager.extendedPersistenceContext != null) {
RepeatableWriteUnitOfWork uow = (RepeatableWriteUnitOfWork) entityManager.getUnitOfWork();
this.cloneMappings = uow.getCloneMapping();
this.newObjectsCloneToOriginal = uow.getNewObjectsCloneToOriginal();
UnitOfWorkChangeSet uowcs = (UnitOfWorkChangeSet) uow.getUnitOfWorkChangeSet();
if (uowcs != null) {
this.changeSets = uowcs.getCloneToObjectChangeSet();
}
}
}
public String getSessionName() {
return this.sessionName;
}
public Map<?, ?> getProperties() {
return properties;
}
public Map<Object, Object> getCloneMappings() {
return cloneMappings;
}
public Map<Object, ObjectChangeSet> getChangeSets() {
return this.changeSets;
}
public Map<Object, Object> getNewObjectsCloneToOriginal() {
return this.newObjectsCloneToOriginal;
}
public Object readResolve() throws ObjectStreamException {
EntityManagerFactory emf = Persistence.createEntityManagerFactory(getSessionName());
EntityManagerImpl em = (EntityManagerImpl) emf.createEntityManager(this.properties);
return new EntityManagerHandle(em, getCloneMappings(), getChangeSets(), getNewObjectsCloneToOriginal());
}
}