Olá pessoal. Estou fazendo uns testes de performance com o Hibernate utilizando o JunitPerf. Na hora mando simular uns 5 usuário fazendo insert ao mesmo tempo tenho o seguinte erro: [color=darkblue]org.hibernate.HibernateException: identifier of an instance of hibernate.entity.Page was altered from 55805 to 55809[/color].
Isso só acontece quando simulo mais de um usario chamando o metodo add ao mesmo tempo. Já dei uma pesquisada na net e vi que algo relacionado ao contexto do hibernate, ao estado do objeto, parece que depois de persistido o primeiro o hibernate considero os outro como sendo o mesmo objeto que já foi persistido no banco. Não manjo muito de hibernate :roll:
PageDAO
[code]package hibernate.dao;
// Generated 04/09/2011 15:57:05 by Hibernate Tools 3.4.0.CR1
import hibernate.entity.Page;
import java.util.List;
import javax.naming.InitialContext;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.HibernateException;
import org.hibernate.LockMode;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.criterion.Example;
/**
-
Home object for domain model class Page.
-
@see hibernate.entity.Page
-
@author Hibernate Tools
*/
public class PageDAO extends GenericDAO{private static final Log log = LogFactory.getLog(PageDAO.class);
private Session session;
public PageDAO(Session session){
this.session = session;
}public PageDAO()
{
this.session = getSession();
}public void add(Page transientInstance) {
log.debug(“persisting Page instance”);
Session s = getSession();
try {
s.persist(transientInstance);
s.getTransaction().commit();
} catch (HibernateException e) {
s.getTransaction().rollback();
e.printStackTrace();
} finally {
if(session != null && session.isOpen())
s.close();
}
}[/code]
PageTest(Junit)
[code]package hibernate.test;
import hibernate.dao.PageDAO;
import hibernate.entity.Page;
import junit.framework.TestCase;
import org.junit.Before;
import org.junit.Test;
public class PageTest extends TestCase {
private Page page;
private PageDAO pageDao;
@Before
protected void setUp() {
page = new Page();
pageDao = new PageDAO();
page.setPageTitle("Test937");
byte[] s = new byte[3];
page.setPageRestrictions(s);
page.setPageCounter(1 + (int)(Math.random() * 100));
page.setPageIsRedirect((byte) 1);
page.setPageIsNew((byte) 1);
page.setPageRandom(12);
byte[] f = new byte[2];
page.setPageTouched(f);
page.setRevisions(null);
page.setPageLatest(1);
page.setPageLen(3);
}
public PageTest(String testName) {
super(testName);
}
@Test
public void testInsertPage() {
long tempoInicial = System.currentTimeMillis();
pageDao.add(page);
long tempoFinal = System.currentTimeMillis();
System.out
.println(tempoFinal
- tempoInicial
+ "--------------------------------------------------------------------------------");
}
}
[/code]
loadPage(JunitPerf)
[code]package hibernate.testperf;
import com.clarkware.junitperf.LoadTest;
import hibernate.test.PageTest;
import junit.framework.Test;
import junit.framework.TestCase;
public class loadPage{
public static Test save(){
int user = 5;
int interacoes = 1;
Test testCase = new PageTest("testInsertPage");
Test loadTest = new LoadTest(testCase,user,interacoes);
return loadTest;
}
public static void main(String args[]) {
junit.textui.TestRunner.run(save());
}
}
[/code]
Page.hbm.xml
[code]<?xml version="1.0"?>
[/code]