Wrong tx on thread, illegalStateException when accessing an
loucs Apr 30, 2008 8:39 AMi posted this problem in the jboss portal and the jndi forums but i figured its place was here.
first of all, i'm using JBoss 4.2.2.GA, portal 2.6.4.GA, Seam 2.0.0.GA and EJB3
my project is deployed in an ear which contains portlet controllers for portal portlets, and a lot of EJB Entity. it contains also a session bean which i'd like to access via jndi.
here's the code related to it :
the bean code : @Stateless @TransactionManagement(TransactionManagementType.BEAN) public class IdentityUserModule implements IdentityUserModuleRemote { //@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) public SiteAccountImpl findUserByUserName(String userName) { /*if (userName.indexOf('@') != -1) { String[] tab = userName.split("@"); SiteAccountManagerImpl manager = new SiteAccountManagerImpl(); return manager.getSiteAccountFromHostAndLogin(tab[0], tab[1]); }*/ return null; } @Remove public void destroy() {} } the remote interface : @Remote public interface IdentityUserModuleRemote { public SiteAccountImpl findUserByUserName(String userName); }
the class where i do the jndi lookup is in a separated jar that i export in server\default\deploy\jboss-portal.sar\lib
here is its code :
public class AgeoUserModuleImpl extends HibernateUserModuleImpl { public User findUserByUserName(String userName) throws IdentityException { System.out.println("on rentre dans user module!!!!!!!!!!!!!!"); IdentityUserModuleRemote userModule; Object tmp; try { tmp = new InitialContext().lookup("smalltox-ear/IdentityUserModule/remote"); System.out.println(tmp.getClass() + " bla"); userModule = (IdentityUserModuleRemote) tmp; } catch (RuntimeException re) { System.out.println("pas de jndi et runtime : " + re.getMessage()); //re.printStackTrace(); return super.findUserByUserName(userName); } catch (Exception e) { System.out.println("pas de jndi et : " + e.getMessage()); //e.printStackTrace(); return super.findUserByUserName(userName); } if (userModule == null) { System.out.println("pas de JNDI 2"); return super.findUserByUserName(userName); } else System.out.println("acces au JNDI!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); /*SiteAccountImpl account = userModule.findUserByUserName(userName); if (account == null) return null; HibernateUserImpl user = new HibernateUserImpl(userName); user.setEnabled(account.getActivated()); user.setPassword(account.getPassword()); new Set<Role>(); user.setRoles()*/ return super.findUserByUserName(userName); } }
- the line : System.out.println(tmp.getClass() + " bla"); print something like "class proxy$855 bla"
so the jndi lookup works fine.
but at the line where i cast object tmp into IdentityUserModuleRemote,
i got the wrong tx exception.
here's the stack trace :
java.lang.IllegalStateException: Wrong tx on thread: expected TransactionImple < ac, BasicAction: -3f57fe93:e6f9:481864a2:27f status: ActionStatus.ABORT_ONLY >, actual TransactionImple < ac, BasicAction: -3f57fe93:e6f9:481864a2:289 status: ActionStatus.RUNNING > at org.jboss.aspects.tx.TxPolicy.endTransaction(TxPolicy.java:162) at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:87) at org.jboss.aspects.tx.TxInterceptor$RequiresNew.invoke(TxInterceptor.java:262) at org.jboss.portal.core.aspects.server.TransactionInterceptor$invoke_N5143606530999904530.invokeNext(TransactionInterceptor$invoke_N5143606530999904530.java) at org.jboss.portal.core.aspects.server.TransactionInterceptor.invoke(TransactionInterceptor.java) at org.jboss.portal.server.ServerInterceptor.invoke(ServerInterceptor.java:38) at org.jboss.portal.common.invocation.Invocation.invokeNext(Invocation.java:115) at org.jboss.portal.server.aspects.LockInterceptor$InternalLock.invoke(LockInterceptor.java:69) at org.jboss.portal.server.aspects.LockInterceptor.invoke(LockInterceptor.java:130) at org.jboss.portal.common.invocation.Invocation.invokeNext(Invocation.java:115) at org.jboss.portal.common.invocation.Invocation.invoke(Invocation.java:157) at org.jboss.portal.server.servlet.PortalServlet.service(PortalServlet.java:250) at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:432) at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446) at java.lang.Thread.run(Thread.java:619) 14:34:39,648 ERROR [[PortalServletWithPathMapping]] "Servlet.service()" pour la servlet PortalServletWithPathMapping a généré une exception java.lang.IllegalStateException: Wrong tx on thread: expected TransactionImple < ac, BasicAction: -3f57fe93:e6f9:481864a2:27f status: ActionStatus.ABORT_ONLY >, actual TransactionImple < ac, BasicAction: -3f57fe93:e6f9:481864a2:289 status: ActionStatus.RUNNING > at org.jboss.aspects.tx.TxPolicy.endTransaction(TxPolicy.java:162) at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:87) at org.jboss.aspects.tx.TxInterceptor$RequiresNew.invoke(TxInterceptor.java:262) at org.jboss.portal.core.aspects.server.TransactionInterceptor$invoke_N5143606530999904530.invokeNext(TransactionInterceptor$invoke_N5143606530999904530.java) at org.jboss.portal.core.aspects.server.TransactionInterceptor.invoke(TransactionInterceptor.java) at org.jboss.portal.server.ServerInterceptor.invoke(ServerInterceptor.java:38) at org.jboss.portal.common.invocation.Invocation.invokeNext(Invocation.java:115) at org.jboss.portal.server.aspects.LockInterceptor$InternalLock.invoke(LockInterceptor.java:69) at org.jboss.portal.server.aspects.LockInterceptor.invoke(LockInterceptor.java:130) at org.jboss.portal.common.invocation.Invocation.invokeNext(Invocation.java:115) at org.jboss.portal.common.invocation.Invocation.invoke(Invocation.java:157) at org.jboss.portal.server.servlet.PortalServlet.service(PortalServlet.java:250) at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:432) at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446) at java.lang.Thread.run(Thread.java:619) 14:34:40,545 ERROR [CachedConnectionValve] Application error: PortalServletWithPathMapping did not complete its transaction
if you need other infos on the project, i'll give it out with pleasure.
any clues would help as i'm a total noob to transaction management (only know some of the bases concept).
Regards,
--
Lucas
Montes