[Building Sakai] Exception when using HibernateTransactionManager and ContentHostingService

John Bush john.bush at rsmart.com
Thu Feb 17 20:32:41 PST 2011


sounds like you aren't wrapping your service inside the global
transaction manager.  There is one transaction manager that all the
hibernate stuff uses.  OSP has lots of examples of this here's one:

<bean id="presentationManager"
      class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
      singleton="true">
      <property name="transactionManager">
        <ref bean="org.sakaiproject.springframework.orm.hibernate.GlobalTransactionManager"/>
      </property>
      <property name="target">
         <ref bean="presentationManagerTarget"/>
      </property>
      <property name="transactionAttributes">
         <props>
            <prop key="*">PROPAGATION_REQUIRED</prop>
         </props>
      </property>
   </bean>

<bean id="presentationManagerTarget"
      class="org.theospi.portfolio.presentation.model.impl.PresentationManagerImpl"
      singleton="true" init-method="init">
      <property name="importFolderName"><value>Imported Presentations'
Files</value></property>
      <property name="lockManager">
         <ref bean="org.sakaiproject.content.api.LockManager"/>
      </property>
      <property name="authnManager"><ref bean="authManager"/></property>
      <property name="sessionFactory">
         <ref bean="org.sakaiproject.springframework.orm.hibernate.GlobalSessionFactory"/>
      </property>
      <property name="agentManager">
         <ref bean="agentManager"/>
      </property>
      <property name="authzManager">
         <ref bean="authzManager"/>
      </property>
      <property name="idManager">
...

On Wed, Feb 16, 2011 at 2:38 AM, Paul Marais <paul at psybergate.co.za> wrote:
> Hi,
>
>
>
> I have a custom tool that I'm busy writing in Sakai 2.7.
>
> My service implementation extends HibernateDaoSupport so that I can make use
> of the Hibernate Template to save data.
>
>
>
> However, for one of my service calls I have to save a file to Sakai's
> Resources as well.
>
> This seems to work fine for ContentCollections (folders), but it I get an
> exception when writing a file.
>
>
>
> I used the following method call to try and create the file:
>
> contentHostingService.addResource("dir", "file", ".txt", 3);
>
>
>
> During this call, I get an exception. Seems like the ContentHostingService
> makes use of DataSourceTransactionManager instead of
> HibernateTransactionManager and that the 2 can't be mixed. Is there a way to
> configure the ContentHostingService to make use of the same transaction
> manager? Or is it another problem?
>
>
>
> Here follows the exception:
>
>
>
> org.springframework.transaction.IllegalTransactionStateException: Pre-bound
> JDBC Connection found! HibernateTransactionManager does not support running
> within DataSourceTransactionManager if told to manage the DataSource itself.
> It is recommended to use a single HibernateTransactionManager for all
> transactions on a single DataSource, no matter whether Hibernate or JDBC
> access.
>
>         at
> org.springframework.orm.hibernate3.HibernateTransactionManager.doBegin(HibernateTransactionManager.java:481)
>
>         at
> org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:374)
>
>         at
> org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:263)
>
>         at
> org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:101)
>
>         at
> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
>
>         at
> org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
>
>         at $Proxy3.isLocked(Unknown Source)
>
>         at
> org.sakaiproject.content.impl.DbContentService.isLocked(DbContentService.java:2964)
>
>         at
> org.sakaiproject.content.impl.BaseContentService.checkExplicitLock(BaseContentService.java:1719)
>
>         at
> org.sakaiproject.content.impl.BaseContentService.addResource(BaseContentService.java:3556)
>
>         at
> org.sakaiproject.content.impl.BaseContentService.addResource(BaseContentService.java:3421)
>
>         at
> org.sakaiproject.eguides.logic.EguideServiceImpl.writeFieldContentToResourceStructure(EguideServiceImpl.java:416)
>
>         at
> org.sakaiproject.eguides.logic.EguideServiceImpl.parseXMLStructureField(EguideServiceImpl.java:390)
>
>         at
> org.sakaiproject.eguides.logic.EguideServiceImpl.parseXMLStructureTemplate(EguideServiceImpl.java:305)
>
>         at
> org.sakaiproject.eguides.logic.EguideServiceImpl.createGuide(EguideServiceImpl.java:176)
>
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>
>         at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>
>         at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>
>         at java.lang.reflect.Method.invoke(Method.java:597)
>
>         at
> org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)
>
>         at
> org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
>
>         at
> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
>
>         at
> org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
>
>         at
> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
>
>         at
> org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
>
>         at $Proxy4.createGuide(Unknown Source)
>
>         at
> org.sakaiproject.eguides.tool.EguidesServiceBean.createGuide(EguidesServiceBean.java:28)
>
>         at
> org.sakaiproject.eguides.tool.gwt.server.EguideGwtServiceImpl.createGuide(EguideGwtServiceImpl.java:42)
>
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>
>         at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>
>         at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>
>         at java.lang.reflect.Method.invoke(Method.java:597)
>
>         at
> com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:562)
>
>         at
> com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:188)
>
>         at
> com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:224)
>
>         at
> com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62)
>
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
>
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
>
>         at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
>
>         at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
>
>         at
> org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:659)
>
>         at
> org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:457)
>
>         at
> org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:395)
>
>         at
> org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:311)
>
>         at
> uk.ac.cam.caret.sakai.WebappToolServlet.service(WebappToolServlet.java:56)
>
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
>
>         at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
>
>         at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
>
>         at
> org.sakaiproject.util.RequestFilter.doFilter(RequestFilter.java:585)
>
>         at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
>
>         at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
>
>         at
> org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:659)
>
>         at
> org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:457)
>
>         at
> org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:359)
>
>         at
> org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:311)
>
>         at
> org.sakaiproject.tool.impl.ActiveToolComponent$MyActiveTool.forward(ActiveToolComponent.java:500)
>
>         at
> org.sakaiproject.portal.charon.SkinnableCharonPortal.forwardTool(SkinnableCharonPortal.java:1221)
>
>         at
> org.sakaiproject.portal.charon.handlers.ToolHandler.doTool(ToolHandler.java:204)
>
>         at
> org.sakaiproject.portal.charon.handlers.ToolHandler.doGet(ToolHandler.java:96)
>
>         at
> org.sakaiproject.portal.charon.handlers.ToolHandler.doPost(ToolHandler.java:73)
>
>         at
> org.sakaiproject.portal.charon.SkinnableCharonPortal.doPost(SkinnableCharonPortal.java:1064)
>
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
>
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
>
>         at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
>
>         at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
>
>         at
> org.sakaiproject.util.RequestFilter.doFilter(RequestFilter.java:646)
>
>         at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
>
>         at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
>
>         at
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
>
>         at
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
>
>         at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
>
>         at
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
>
>         at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
>
>         at
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
>
>         at
> org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:843)
>
>         at
> org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:640)
>
>         at
> org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1293)
>
>         at java.lang.Thread.run(Thread.java:619)
>
>
>
> Can somebody please  point me in the right direction?
>
>
>
> Thanks
>
> Paul
>
> _______________________________________________
> sakai-dev mailing list
> sakai-dev at collab.sakaiproject.org
> http://collab.sakaiproject.org/mailman/listinfo/sakai-dev
>
> TO UNSUBSCRIBE: send email to sakai-dev-unsubscribe at collab.sakaiproject.org
> with a subject of "unsubscribe"
>



-- 
John Bush
602-490-0470


More information about the sakai-dev mailing list