[Building Sakai] Exception when using HibernateTransactionManager and ContentHostingService

John Bush john.bush at rsmart.com
Fri Feb 18 09:25:19 PST 2011


You want to use sakai's specific way of doing this:

<bean id="ospPresentationHibernateMappings"
      class="org.sakaiproject.springframework.orm.hibernate.impl.AdditionalHibernateMappingsImpl">
      <property name="mappingResources">
         <list>
            <value>org/theospi/portfolio/presentation/model/impl/PresentationImpl.hbm.xml</value>
         </list>
		</property>
   </bean>

For a full example see

https://source.sakaiproject.org/svn/osp/trunk/presentation/component/src/webapp/WEB-INF/components.xml

On Fri, Feb 18, 2011 at 12:02 AM, Paul Marais <paul at psybergate.co.za> 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
>
>



-- 
John Bush
602-490-0470


More information about the sakai-dev mailing list