Unable to access UserTransaction in DataService

Flex, Java, tips 'n tricks Add comments

Note: Just a short post to save your hair from turning gray (I know mine just did)

If you ever run into a "Unable to access UserTransaction in DataService" error when working with LCDS on Tomcat 5.5.x+, make sure you configured the Java Open Transaction Manager (JOTM) correctly. You can do this by adding the following in a project config file (META_INF/context.xml or a file named [MY_PROJECT].xml in [TOMCAT_HOME]/conf/Catalina/localhost):

XML:
  1. <Context reloadable="true">
  2.   <Transaction factory="org.objectweb.jotm.UserTransactionFactory" jotm.timeout="60"/>
  3. </Context>

Now if only the Flex Project Wizard would do this for us...


Add to Bloglines - Digg This! - del.icio.us - Stumble It! - Twit This! - Technorati links - Share on Facebook - Feedburner
 

12 Responses to “Unable to access UserTransaction in DataService”

  1. sakri Says:

    I don’t believe it?!

    At the Aircamp last week, at about 5:30 am (3.5 hours before deadline), we ran into this problem! About an hour later we gave up and went to bed!!! This blog post, one week earlier might just have resulted in a trip to Milan ;)

  2. Laurent Bouquet Says:

    Thank you, Mr Herreman, for your solution.
    Now my Flex’s application runs good !

  3. Abdul Areef Says:

    Hi Friend,

    in my application, i have layers like EJB -> Struts -> JSP, but i am trying to change the layers like EJB -> Struts -> Flex, with WebORB. i dont like to change the Layers. i dont know how i am going to achieve the Goal. for that i need your suggestion to reach the target, i am expecting your support for this,

    thanks
    areef

  4. Michael Chaize Says:

    I think there’s a mistake in your post. You can place the context.xml in the META_INF/context.xml, and not in the WEB_INF/context.xml.

    Thanks for the post by the way.

  5. pleee Says:

    THANKS, lcds is a terror to me, this was so helpful and so quick to fix it :-)

  6. bloodlust Says:

    Thank you man!!! :’)

  7. Eric de Diesbach Says:

    Amazingly simple !
    Michael Chaize rocks (epita power ;)
    Thanks to both of you

  8. jitendra jain Says:

    Hi friends,

    I’m getting this Casting error. Any clues ??

    Exception: flex.data.DataServiceException: Unable to access UserTransaction in DataService.
    at flex.data.DataServiceTransaction.doBegin(DataServiceTransaction.java:1162)
    at flex.data.DataServiceTransaction.begin(DataServiceTransaction.java:1114)
    at flex.data.DataService.serviceTransactedMessage(DataService.java:747)
    at flex.data.DataService.serviceMessage(DataService.java:465)
    at flex.messaging.MessageBroker.routeMessageToService(MessageBroker.java:1503)
    at flex.messaging.endpoints.AbstractEndpoint.serviceMessage(AbstractEndpoint.java:884)
    at flex.messaging.endpoints.RTMPConnection.handleTCCommand(RTMPConnection.java:723)
    at flex.messaging.endpoints.RTMPConnection.serviceTCMessage(RTMPConnection.java:1033)
    at flex.messaging.endpoints.RTMPConnection.doRead(RTMPConnection.java:515)
    at flex.messaging.endpoints.RTMPProtocolHandler.doRead(RTMPProtocolHandler.java:123)
    at flex.messaging.socketserver.Connection$ConnectionReader.run(Connection.java:788)
    at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
    at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
    at java.lang.Thread.run(Unknown Source)
    Caused by: java.lang.ClassCastException: org.objectweb.jotm.Current cannot be cast to javax.transaction.UserTransaction
    at flex.data.DataServiceTransaction.doBegin(DataServiceTransaction.java:1143)
    … 13 more

  9. Jack Says:

    hi,friend?
    I encounter the same error when working with LCDS on Tomcat 6.0, how can I solve it ?

  10. Imraan Says:

    Hi friends,

    Im working with LCDS on Tomcat 6.0.

    I’m getting this Casting error

    Exception: flex.data.DataServiceException: Unable to access UserTransaction in DataService.
    at flex.data.DataServiceTransaction.doBegin(DataServiceTransaction.java:1214)
    at flex.data.DataServiceTransaction.begin(DataServiceTransaction.java:1166)
    at flex.data.DataService.serviceTransactedMessage(DataService.java:810)
    at flex.data.DataService.serviceMessage(DataService.java:475)
    at flex.messaging.MessageBroker.routeMessageToService(MessageBroker.java:1406)
    at flex.messaging.AsyncMessageBroker.routeMessageToService(AsyncMessageBroker.java:571)
    at flex.messaging.endpoints.AbstractEndpoint.serviceMessage(AbstractEndpoint.java:1005)
    at flex.messaging.endpoints.amf.MessageBrokerFilter.invoke(MessageBrokerFilter.java:103)
    at flex.messaging.endpoints.amf.LegacyFilter.invoke(LegacyFilter.java:158)
    at flex.messaging.endpoints.amf.SessionFilter.invoke(SessionFilter.java:44)
    at flex.messaging.endpoints.amf.BatchProcessFilter.invoke(BatchProcessFilter.java:67)
    at flex.messaging.endpoints.amf.SerializationFilter.invoke(SerializationFilter.java:165)
    at flex.messaging.endpoints.BaseHTTPEndpoint.service(BaseHTTPEndpoint.java:293)
    at flex.messaging.MessageBrokerServlet.service(MessageBrokerServlet.java:364)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:378)
    at org.springframework.security.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109)
    at org.springframework.security.intercept.web.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
    at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
    at org.springframework.security.ui.SessionFixationProtectionFilter.doFilterHttp(SessionFixationProtectionFilter.java:67)
    at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
    at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
    at org.springframework.security.ui.ExceptionTranslationFilter.doFilterHttp(ExceptionTranslationFilter.java:101)
    at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
    at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
    at org.springframework.security.providers.anonymous.AnonymousProcessingFilter.doFilterHttp(AnonymousProcessingFilter.java:105)
    at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
    at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
    at org.springframework.security.ui.rememberme.RememberMeProcessingFilter.doFilterHttp(RememberMeProcessingFilter.java:116)
    at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
    at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
    at org.springframework.security.wrapper.SecurityContextHolderAwareRequestFilter.doFilterHttp(SecurityContextHolderAwareRequestFilter.java:91)
    at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
    at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
    at org.springframework.security.ui.basicauth.BasicProcessingFilter.doFilterHttp(BasicProcessingFilter.java:174)
    at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
    at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
    at org.springframework.security.ui.webapp.DefaultLoginPageGeneratingFilter.doFilterHttp(DefaultLoginPageGeneratingFilter.java:86)
    at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
    at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
    at org.springframework.security.ui.AbstractProcessingFilter.doFilterHttp(AbstractProcessingFilter.java:277)
    at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
    at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
    at org.springframework.security.ui.logout.LogoutFilter.doFilterHttp(LogoutFilter.java:89)
    at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
    at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
    at org.springframework.security.context.HttpSessionContextIntegrationFilter.doFilterHttp(HttpSessionContextIntegrationFilter.java:235)
    at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
    at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
    at org.springframework.security.util.FilterChainProxy.doFilter(FilterChainProxy.java:175)
    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:236)
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
    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:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
    at java.lang.Thread.run(Unknown Source)
    Caused by: java.lang.ClassCastException: org.objectweb.jotm.Current cannot be cast to javax.transaction.UserTransaction
    at flex.data.DataServiceTransaction.doBegin(DataServiceTransaction.java:1195)
    … 65 more

    how could i solve this ?

    please help me :(

  11. Rafael Says:

    hi Imraan, in my application this worked.

    1) Download JOTM 2.1.9 from http://forge.objectweb.org/projects/jotm/
    if you don’t already have it.
    2) Unzip to c:\
    3) Link those jars to Tomcat
    a. Double-click Tomcat definition in the Servers tab of Eclipse.
    b. Click “Open launch configuration”.
    c. Select the Classpath tab.
    d. Select “User Entries”, and then “Add External JARs”.
    e. Navigate to C:\jotm-2.1.9\lib.
    f. Select all classes
    g. Apply the changes and exit Tomcat properties.
    h. (optional) test JOTM installation by starting the server and
    accessing the below JSP file*. Success will be obvious.
    4) Edit your META-INF\context.xml to include the following line:

    tks

  12. Gastón Says:

    Hi there,
    where would i have to place the jotm.jar if i’m using myeclipse’s tomcat? it’s already installed in a myeclipse folder and i really can’t find the common/lib folders.

    I’m new with LCDS and Tomcat actually.

Leave a Reply

WP Theme & Icons by N.Design Studio
Entries RSS Comments RSS Log in