Application error: BMT stateless bean transport should compl
tomansley Mar 31, 2005 10:41 AMHi all,
I am using the hibernate that comes with JBoss 4.0sp1 and am having this issue which seems to be an EJB error rather than a hibernate error.
I am trying to update multiple entities of the same type in one transaction in one session. If the transaction only has one entity that needs updating then everything works fine. If I do the same process as with the one entity but do it multiple times it fails!!
What follows are the two mapping xml files, the stacktrace, some hibernate generated sql and the code between sessionFactory.openSession() and session.close():
Anybody got ideas?
Cheers
Tom
Hibernate version:
Its the version with JBoss 4.0sp1
2.1.8 I think
Mapping documents: There are two documents that need consideration. A TransportDestination has a TransportType and a TransportType has multiple TransportDestinations.
TransportType:
<column name="id_transport_type" sql-type="integer" not-null="true"/>
tbltransporttype_id_transport_type_seq
<column name="transport_type" sql-type="char(64)" not-null="true"/>
<column name="session_name" sql-type="char(64)" not-null="true"/>
<one-to-many class="com.camp.common.transport.TransportDestination"/>
AND TransportDestination
<column name="id_destination" sql-type="integer" not-null="true"/>
tbltransportdestination_id_destination_seq
<column name="code" sql-type="char(3)" not-null="true"/>
<column name="name" sql-type="char(128)"/>
<column name="city" sql-type="char(128)" not-null="true"/>
<column name="state" sql-type="char(128)" not-null="true"/>
<column name="country" sql-type="char(128)" not-null="true"/>
<column name="listed" sql-type="boolean" not-null="true"/>
<many-to-one name="transportType" class="com.camp.common.transport.TransportType" column="fk_id_transport_type" not-null="true"/>
Code between sessionFactory.openSession() and session.close():
Note: _transport_destinations = java.util.List
// Open Session
sess = sf.openSession();
// Create Transaction
Transaction t = sess.beginTransaction();
TransportDestination dest;
t = sess.beginTransaction();
//repeat as many times as there are destinations in the list
for (int i = 0; i < _transport_destinations.size(); i++) {
//get the destination
dest = (TransportDestination) _transport_destinations.get(i);
if (_operation.equals(Globals.ADD))
sess.save(dest);
else if (_operation.equals(Globals.UPDATE))
sess.update(dest);
else if (_operation.equals(Globals.DELETE))
sess.delete(dest);
}
t.commit();
sess.close();
Full stack trace of any exception that occurs:
11:58:38,480 INFO [STDOUT] Hibernate: update tblTransportDestination set code=?, name=?, city=?, state=?, country=?, listed=?, fk_id_transport_type=? where id_destination=?
11:58:38,480 INFO [STDOUT] Hibernate: update tblTransportDestination set code=?, name=?, city=?, state=?, country=?, listed=?, fk_id_transport_type=? where id_destination=?
11:58:38,480 INFO [STDOUT] Hibernate: update tblTransportDestination set code=?, name=?, city=?, state=?, country=?, listed=?, fk_id_transport_type=? where id_destination=?
11:58:38,488 INFO [transportEJB] Leaving modifyTransportDestinations
11:58:38,565 ERROR [TxInterceptorBMT] Application error: BMT stateless bean transport should complete transactions before returning (ejb1.1 spec, 11.6.1)
11:58:38,567 WARN [RequestProcessor] Unhandled Exception thrown: class java.rmi.RemoteException
11:58:38,568 ERROR [Engine] StandardWrapperValve[camp]: Servlet.service() for servlet camp threw exception
java.rmi.RemoteException: Application error: BMT stateless bean transport should complete transactions before returning (ejb1.1 spec, 11.6.1)
at org.jboss.ejb.plugins.AbstractTxInterceptorBMT.checkStatelessDone(AbstractTxInterceptorBMT.java:208)
at org.jboss.ejb.plugins.AbstractTxInterceptorBMT.invokeNext(AbstractTxInterceptorBMT.java:157)
at org.jboss.ejb.plugins.TxInterceptorBMT.invoke(TxInterceptorBMT.java:62)
at org.jboss.ejb.plugins.StatelessSessionInstanceInterceptor.invoke(StatelessSessionInstanceInterceptor.java:113)
at org.jboss.ejb.plugins.SecurityInterceptor.invoke(SecurityInterceptor.java:122)
at org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:191)
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:856)
at sun.reflect.GeneratedMethodAccessor102.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:144)
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:249)
at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:642)
at org.jboss.invocation.local.LocalInvoker$MBeanServerAction.invoke(LocalInvoker.java:155)
at org.jboss.invocation.local.LocalInvoker.invoke(LocalInvoker.java:104)
at org.jboss.invocation.InvokerInterceptor.invoke(InvokerInterceptor.java:90)
at org.jboss.proxy.TransactionInterceptor.invoke(TransactionInterceptor.java:46)
at org.jboss.proxy.SecurityInterceptor.invoke(SecurityInterceptor.java:55)
at org.jboss.proxy.ejb.StatelessSessionInterceptor.invoke(StatelessSessionInterceptor.java:97)
at org.jboss.proxy.ClientContainer.invoke(ClientContainer.java:86)
at $Proxy84.modifyTransportDestinations(Unknown Source)
at com.camp.helpers.config.transport.TransportConfigHelper.modifyTransportDestinations(Unknown Source)
at com.camp.actions.config.TransportConfigAction.execute(Unknown Source)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:75)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.jboss.web.tomcat.security.CustomPrincipalValve.invoke(CustomPrincipalValve.java:66)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:153)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:54)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
at java.lang.Thread.run(Thread.java:534)
Name and version of the database you are using:
The generated SQL (show_sql=true):
11:58:38,480 INFO [STDOUT] Hibernate: update tblTransportDestination set code=?, name=?, city=?, state=?, country=?, listed=?, fk_id_transport_type=? where id_destination=?