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