I use hibernate in JBoss with managed sessions and transactions. Up until recently the session factory was configured to use a local-tx datasource and everything worked fine. However, I needed to add more datasources to use in XA transactions, so I converted the old datasource to a xa-datasource. The xa stuff works fine and most other things too, but this particular thing stopped working. When I put the old local-tx datasource back in place, this works again.
Any ideas why this doesn't work with a xa-datasource?
Hibernate version:
3.0 (that comes with JBoss 4.0.3SP1)
Mapping documents:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping
>
<class
name="hr.chipoteka.erp.data.PosjetKupcu"
lazy="false"
>
<id
name="posjetID"
column="posjetID"
unsaved-value="null"
>
<!-- The generator-class attribute of @hibernate.id is deprecated, use the @hibernate.generator tag instead -->
<generator class="native">
</generator>
</id>
<version
name="ts"
column="ts"
type="timestamp"
/>
<many-to-one
name="djel"
column="djelID"
not-null="true"
outer-join="true"
>
</many-to-one>
<property
name="datum"
not-null="true"
>
<column
name="datum"
sql-type="timestamp(0)"
/>
</property>
<many-to-one
name="kupac"
column="kupacID"
not-null="true"
outer-join="true"
>
</many-to-one>
<many-to-one
name="vozilo"
column="voziloID"
not-null="true"
outer-join="true"
>
</many-to-one>
<property
name="pocetniKm"
not-null="true"
>
</property>
<property
name="udaljenost"
not-null="true"
>
</property>
<property
name="opis"
length="1024"
>
</property>
</class>
</hibernate-mapping>
Code between sessionFactory.openSession() and session.close():Code:
PosjetKupcu p;
// intitialize p...
session.saveOrUpdate(p)
Full stack trace of any exception that occurs:Code:
2006-04-25 16:31:26,415 ERROR [org.jboss.ejb.plugins.LogInterceptor] TransactionRolledbackException in method: public abstract hr.chipoteka.erp.data.DataObject hr.chipoteka.erp.server.interfaces.PosjetKupcuBn.spremi(hr.chipoteka.erp.data.DataObject)
throws hr.chipoteka.erp.SessionException,java.rmi.RemoteException, causedBy:
org.jboss.tm.JBossRollbackException: Unable to commit, tx=TransactionImpl:XidImpl[FormatId=257, GlobalId=kreso/201, BranchQual=, localId=201] status=STATUS_NO_TRANSACTION; - nested throwable: (java.lang.NullPointerException)
at org.jboss.tm.TransactionImpl.commit(TransactionImpl.java:354)
at org.jboss.ejb.plugins.TxInterceptorCMT.endTransaction(TxInterceptorCMT.java:486)
at org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:346)
at org.jboss.ejb.plugins.TxInterceptorCMT.invoke(TxInterceptorCMT.java:166)
at org.jboss.ejb.plugins.SecurityInterceptor.invoke(SecurityInterceptor.java:153)
at org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:192)
at org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor.invoke(ProxyFactoryFinderInterceptor.java:122)
at org.jboss.ejb.SessionContainer.internalInvoke(SessionContainer.java:624)
at org.jboss.ejb.Container.invoke(Container.java:873)
at sun.reflect.GeneratedMethodAccessor91.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:141)
at org.jboss.mx.server.Invocation.dispatch(Invocation.java:80)
at org.jboss.mx.server.Invocation.invoke(Invocation.java:72)
at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:245)
at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:644)
at org.jboss.invocation.jrmp.server.JRMPInvoker$MBeanServerAction.invoke(JRMPInvoker.java:805)
at org.jboss.invocation.jrmp.server.JRMPInvoker.invoke(JRMPInvoker.java:406)
at sun.reflect.GeneratedMethodAccessor90.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:294)
at sun.rmi.transport.Transport$1.run(Transport.java:153)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:149)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:460)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:701)
at java.lang.Thread.run(Thread.java:595)
Caused by: java.lang.NullPointerException
at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:439)
at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:93)
at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:86)
at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2165)
at org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:2117)
at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2373)
at org.hibernate.action.EntityUpdateAction.execute(EntityUpdateAction.java:84)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:243)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:227)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:141)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:296)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:905)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:345)
at org.hibernate.transaction.CacheSynchronization.beforeCompletion(CacheSynchronization.java:59)
at org.jboss.tm.TransactionImpl.doBeforeCompletion(TransactionImpl.java:1473)
at org.jboss.tm.TransactionImpl.beforePrepare(TransactionImpl.java:1092)
at org.jboss.tm.TransactionImpl.commit(TransactionImpl.java:306)
... 28 more
Name and version of the database you are using:Postgres 8.1 on Debian
The generated SQL (show_sql=true):Code:
update PosjetKupcu set ts=?, djelID=?, datum=?, kupacID=?, voziloID=?, pocetniKm=?, udaljenost=?, opis=? where posjetID=? and ts=?
Debug level Hibernate log excerpt:Code:
2006-04-25 16:31:26,414 DEBUG [org.hibernate.jdbc.AbstractBatcher] preparing statement
2006-04-25 16:31:26,414 DEBUG [org.hibernate.jdbc.JDBCContext] before transaction completion
2006-04-25 16:31:26,414 DEBUG [org.hibernate.impl.SessionImpl] before transaction completion
2006-04-25 16:31:26,415 DEBUG [org.hibernate.transaction.CacheSynchronization] transaction after completion callback, status: 4
2006-04-25 16:31:26,415 DEBUG [org.hibernate.jdbc.JDBCContext] after transaction completion
2006-04-25 16:31:26,415 DEBUG [org.hibernate.impl.SessionImpl] after transaction completion
--- here comes the above exception ---