[Building Sakai] Exception when using HibernateTransactionManager and ContentHostingService

Paul Marais paul at psybergate.co.za
Thu Feb 17 23:02:08 PST 2011


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



More information about the sakai-dev mailing list