[Building Sakai] Exception when using HibernateTransactionManager and ContentHostingService

Steve Swinsburg steve.swinsburg at gmail.com
Fri Feb 18 04:32:16 PST 2011


Hi Paul,

There are a couple of ways to do this:
https://confluence.sakaiproject.org/display/BOOT/Hibernate+in+Sakai

and the preferred way to do this is described here:
https://confluence.sakaiproject.org/display/BOOT/Using+the+Sakai+global+sessionFactory

cheers,
Steve


On 18/02/2011, at 6:02 PM, Paul Marais wrote:

> Hi,
> 
> thank you very much for your reply.
> My transactionManager bean was of type
> 'org.springframework.orm.hibernate.HibernateTransactionManager' instead of
> 'org.sakaiproject.springframework.orm.hibernate.GlobalTransactionManager'. 
> With this change, it is working.
> 
> Just a question about SessionFactory...
> I couldn't figure out a way to make use of the 'GlobalSessionFactory'.
> My session factory is declared like this:
> 
> <bean id="customSessionFactory"
> 	
> parent="org.sakaiproject.springframework.orm.hibernate.SessionFactoryBase"
> 	
> class="org.sakaiproject.springframework.orm.hibernate.AddableSessionFactoryB
> ean">
> 		<property name="mappingResources">
> 			<list>
> 	
> <value>org/sakaiproject/customTool/dao/Entity1.hbm.xml</value>
> 	
> <value>org/sakaiproject/customTool/dao/Entity2.hbm.xml</value>
> 			</list>
> 		</property>
> </bean>
> 
> Is this a problem? Or can I leave it as is?
> 
> Thank you very much
> Paul
> 
> -----Original Message-----
> From: John Bush [mailto:john.bush at rsmart.com] 
> Sent: 18 February 2011 06:33 AM
> To: Paul Marais
> Cc: sakai-dev at collab.sakaiproject.org; Jaques Smith
> Subject: Re: [Building Sakai] Exception when using
> HibernateTransactionManager and ContentHostingService
> 
> 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.TransactionProxyFactoryBe
> an"
>      singleton="true">
>      <property name="transactionManager">
>        <ref
> bean="org.sakaiproject.springframework.orm.hibernate.GlobalTransactionManage
> r"/>
>      </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(Hiber
> nateTransactionManager.java:481)
>> 
>>         at
>> 
> org.springframework.transaction.support.AbstractPlatformTransactionManager.g
> etTransaction(AbstractPlatformTransactionManager.java:374)
>> 
>>         at
>> 
> org.springframework.transaction.interceptor.TransactionAspectSupport.createT
> ransactionIfNecessary(TransactionAspectSupport.java:263)
>> 
>>         at
>> 
> org.springframework.transaction.interceptor.TransactionInterceptor.invoke(Tr
> ansactionInterceptor.java:101)
>> 
>>         at
>> 
> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(Reflect
> iveMethodInvocation.java:171)
>> 
>>         at
>> 
> org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopPro
> xy.java:204)
>> 
>>         at $Proxy3.isLocked(Unknown Source)
>> 
>>         at
>> 
> org.sakaiproject.content.impl.DbContentService.isLocked(DbContentService.jav
> a:2964)
>> 
>>         at
>> 
> org.sakaiproject.content.impl.BaseContentService.checkExplicitLock(BaseConte
> ntService.java:1719)
>> 
>>         at
>> 
> org.sakaiproject.content.impl.BaseContentService.addResource(BaseContentServ
> ice.java:3556)
>> 
>>         at
>> 
> org.sakaiproject.content.impl.BaseContentService.addResource(BaseContentServ
> ice.java:3421)
>> 
>>         at
>> 
> org.sakaiproject.eguides.logic.EguideServiceImpl.writeFieldContentToResource
> Structure(EguideServiceImpl.java:416)
>> 
>>         at
>> 
> org.sakaiproject.eguides.logic.EguideServiceImpl.parseXMLStructureField(Egui
> deServiceImpl.java:390)
>> 
>>         at
>> 
> org.sakaiproject.eguides.logic.EguideServiceImpl.parseXMLStructureTemplate(E
> guideServiceImpl.java:305)
>> 
>>         at
>> 
> org.sakaiproject.eguides.logic.EguideServiceImpl.createGuide(EguideServiceIm
> pl.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(AopU
> tils.java:307)
>> 
>>         at
>> 
> org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint
> (ReflectiveMethodInvocation.java:182)
>> 
>>         at
>> 
> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(Reflect
> iveMethodInvocation.java:149)
>> 
>>         at
>> 
> org.springframework.transaction.interceptor.TransactionInterceptor.invoke(Tr
> ansactionInterceptor.java:106)
>> 
>>         at
>> 
> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(Reflect
> iveMethodInvocation.java:171)
>> 
>>         at
>> 
> org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopPro
> xy.java:204)
>> 
>>         at $Proxy4.createGuide(Unknown Source)
>> 
>>         at
>> 
> org.sakaiproject.eguides.tool.EguidesServiceBean.createGuide(EguidesServiceB
> ean.java:28)
>> 
>>         at
>> 
> org.sakaiproject.eguides.tool.gwt.server.EguideGwtServiceImpl.createGuide(Eg
> uideGwtServiceImpl.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(RemoteServic
> eServlet.java:188)
>> 
>>         at
>> 
> com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServic
> eServlet.java:224)
>> 
>>         at
>> 
> com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractR
> emoteServiceServlet.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(Application
> FilterChain.java:269)
>> 
>>         at
>> 
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh
> ain.java:188)
>> 
>>         at
>> 
> org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.
> java:659)
>> 
>>         at
>> 
> org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDis
> patcher.java:457)
>> 
>>         at
>> 
> org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatch
> er.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(Application
> FilterChain.java:269)
>> 
>>         at
>> 
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh
> ain.java:188)
>> 
>>         at
>> org.sakaiproject.util.RequestFilter.doFilter(RequestFilter.java:585)
>> 
>>         at
>> 
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Application
> FilterChain.java:215)
>> 
>>         at
>> 
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh
> ain.java:188)
>> 
>>         at
>> 
> org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.
> java:659)
>> 
>>         at
>> 
> org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDis
> patcher.java:457)
>> 
>>         at
>> 
> org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatch
> er.java:359)
>> 
>>         at
>> 
> org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher
> .java:311)
>> 
>>         at
>> 
> org.sakaiproject.tool.impl.ActiveToolComponent$MyActiveTool.forward(ActiveTo
> olComponent.java:500)
>> 
>>         at
>> 
> org.sakaiproject.portal.charon.SkinnableCharonPortal.forwardTool(SkinnableCh
> aronPortal.java:1221)
>> 
>>         at
>> 
> org.sakaiproject.portal.charon.handlers.ToolHandler.doTool(ToolHandler.java:
> 204)
>> 
>>         at
>> 
> org.sakaiproject.portal.charon.handlers.ToolHandler.doGet(ToolHandler.java:9
> 6)
>> 
>>         at
>> 
> org.sakaiproject.portal.charon.handlers.ToolHandler.doPost(ToolHandler.java:
> 73)
>> 
>>         at
>> 
> org.sakaiproject.portal.charon.SkinnableCharonPortal.doPost(SkinnableCharonP
> ortal.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(Application
> FilterChain.java:269)
>> 
>>         at
>> 
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh
> ain.java:188)
>> 
>>         at
>> org.sakaiproject.util.RequestFilter.doFilter(RequestFilter.java:646)
>> 
>>         at
>> 
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Application
> FilterChain.java:215)
>> 
>>         at
>> 
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh
> ain.java:188)
>> 
>>         at
>> 
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.ja
> va:213)
>> 
>>         at
>> 
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.ja
> va: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(H
> ttp11AprProtocol.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
> 
> _______________________________________________
> 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"



More information about the sakai-dev mailing list