Olá,
Estou utilizando JBoss 3.2.3, Oracle 8.1.7, Hibernate 2.0.2.
Criei um serviço no JBoss para o hibernate onde o arquivo está igual
ao encontrado no site do Hibernate (jboss-service.xml e crio o sar):
<server>
<mbean code="net.sf.hibernate.jmx.HibernateService" name="jboss.jca:service=HibernateFactory, name=HibernateFactory">
<depends>jboss.jca:service=RARDeployer</depends>
<depends>jboss.jca:service=LocalTxCM,name=projds</depends>
<attribute name="MapResources">
//os hbm.xml aki
</attribute>
<attribute name="JndiName">java:/hibernate/HibernateFactory</attribute>
<attribute name="Datasource">java:/projds</attribute>
<attribute name="Dialect">net.sf.hibernate.dialect.OracleDialect</attribute>
<attribute name="UseOuterJoin">true</attribute>
<attribute name="ShowSql">false</attribute>
<attribute name="UserTransactionName">UserTransaction</attribute>
<attribute name="TransactionStrategy">net.sf.hibernate.transaction.JTATransactionFactory</attribute>
<attribute name="TransactionManagerLookupStrategy">net.sf.hibernate.transaction.JBossTransactionManagerLookup</attribute>
</mbean>
</server>
// Obs.: Somente o atributo dsTest de test é alterado na chamada do método updateTest(..)
public void updateTest(Test test)
{
Session session = null;
Transaction tx = null;
try
{
session = dataSource.openSession();
tx = session.beginTransaction();
session.update(test, session);
// gets from database
Test aux = session.load(Test.class, test.getIdTest());
// if the object from database (aux) is different than test
if (!test.getDsTest().equals(aux.getDsTest()))
{
session.update(teste.getOtherObject(), session);
}
tx.commit();
.
.
.
}
Acontece o seguinte: quando uso no JBoss, o Transaction no código acima
é o JTATransaction. Altero o dsTest e tendo buscar da base
( o objeto aux vem da base de dados, portando os dados deveriam ser os antigos, antes de executar o commit ).
O motivo pra eu pegar da base de dados e comparar com o que foi
persistido é que preciso fazer algumas verificações, como faço acima,
verificando se o atributo dsTest eu alterei ou está igual a base de dados.
Mas quando eu faço este teste no Jboss e tento buscar da base (aux)
o objeto aux é igual ao que eu alterei, ou seja, parece que ele já deu
o commit antes mesmo de eu executar o tx.commit().
Parece que ele já persistiu o objeto e já alterou na base mesmo
que não tenha dado commit.
O que pode estar acontencendo? o que posso fazer pra resolver isto?
Obrigado,
Tadeu[/code]
