HHH-11555 - Add test for issue
This commit is contained in:
parent
549e712f1f
commit
d9ef8fc366
|
@ -0,0 +1,105 @@
|
||||||
|
/*
|
||||||
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
|
*
|
||||||
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
|
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
||||||
|
*/
|
||||||
|
package org.hibernate.jpa.test.serialization;
|
||||||
|
|
||||||
|
import java.io.ByteArrayInputStream;
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.ObjectInputStream;
|
||||||
|
import java.io.ObjectOutputStream;
|
||||||
|
import javax.persistence.Column;
|
||||||
|
import javax.persistence.Entity;
|
||||||
|
import javax.persistence.EntityManager;
|
||||||
|
import javax.persistence.GeneratedValue;
|
||||||
|
import javax.persistence.Id;
|
||||||
|
import javax.persistence.PersistenceException;
|
||||||
|
import javax.persistence.Table;
|
||||||
|
|
||||||
|
import org.hibernate.jpa.test.BaseEntityManagerFunctionalTestCase;
|
||||||
|
|
||||||
|
import org.hibernate.testing.TestForIssue;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Andrea Boriero
|
||||||
|
*/
|
||||||
|
public class EntityManagerDeserializationTest extends BaseEntityManagerFunctionalTestCase {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Class<?>[] getAnnotatedClasses() {
|
||||||
|
return new Class[] {TestEntity.class};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = PersistenceException.class)
|
||||||
|
@TestForIssue(jiraKey = "HHH-11555")
|
||||||
|
public void deserializedEntityManagerPersistenceExceptionManagementTest() throws IOException {
|
||||||
|
EntityManager entityManager = getOrCreateEntityManager();
|
||||||
|
final EntityManager deserializedSession = spoofSerialization( entityManager );
|
||||||
|
try {
|
||||||
|
deserializedSession.getTransaction().begin();
|
||||||
|
TestEntity entity = new TestEntity();
|
||||||
|
entity.setName( "Andrea" );
|
||||||
|
deserializedSession.persist( entity );
|
||||||
|
entity.setName( null );
|
||||||
|
deserializedSession.flush();
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
deserializedSession.getTransaction().rollback();
|
||||||
|
deserializedSession.close();
|
||||||
|
entityManager.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private EntityManager spoofSerialization(EntityManager entityManager) throws IOException {
|
||||||
|
try {
|
||||||
|
// Serialize the incoming out to memory
|
||||||
|
ByteArrayOutputStream serBaOut = new ByteArrayOutputStream();
|
||||||
|
ObjectOutputStream serOut = new ObjectOutputStream( serBaOut );
|
||||||
|
|
||||||
|
serOut.writeObject( entityManager );
|
||||||
|
|
||||||
|
// Now, re-constitute the model from memory
|
||||||
|
ByteArrayInputStream serBaIn =
|
||||||
|
new ByteArrayInputStream( serBaOut.toByteArray() );
|
||||||
|
ObjectInputStream serIn = new ObjectInputStream( serBaIn );
|
||||||
|
|
||||||
|
EntityManager outgoing = (EntityManager) serIn.readObject();
|
||||||
|
|
||||||
|
return outgoing;
|
||||||
|
}
|
||||||
|
catch (ClassNotFoundException cnfe) {
|
||||||
|
throw new IOException( "Unable to locate class on reconstruction" );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
@Table(name = "TEST_ENTITY")
|
||||||
|
public static class TestEntity {
|
||||||
|
@Id
|
||||||
|
@GeneratedValue
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
@Column(nullable = false)
|
||||||
|
String name;
|
||||||
|
|
||||||
|
public Long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(Long id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue