Patched. Much appreciated.
From: [email protected] [mailto:[email protected]] On Behalf Of Daniel Frett Sent: Saturday, December 26, 2015 4:22 PM To: CAS Community <[email protected]> Cc: [email protected]; [email protected] Subject: Re: [cas-user] 4.1.2: JpaTicketRegistry: No transactional EntityManager available The patch Misagh introduced in 4.1.3 caused a different issue once the backing database connection timed out. I have tracked down what the missing transactional config was for 4.1.x and added it to the documentation. The JpaTicketRegistry transactional config for 4.1.x should include all of the following pointcuts/advice: <tx:advice id="txCentralAuthenticationServiceAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="destroyTicketGrantingTicket" read-only="false" /> <tx:method name="grantServiceTicket" read-only="false" /> <tx:method name="delegateTicketGrantingTicket" read-only="false" /> <tx:method name="validateServiceTicket" read-only="false" /> <tx:method name="createTicketGrantingTicket" read-only="false" /> <tx:method name="getTicket" read-only="true" /> <tx:method name="getTickets" read-only="true" /> </tx:attributes> </tx:advice> <tx:advice id="txRegistryAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="deleteTicket" read-only="false" /> <tx:method name="addTicket" read-only="false" /> <tx:method name="updateTicket" read-only="false" /> <tx:method name="getTicket" read-only="true" /> <tx:method name="getTickets" read-only="true" /> <tx:method name="sessionCount" read-only="true" /> <tx:method name="serviceTicketCount" read-only="true" /> </tx:attributes> </tx:advice> <tx:advice id="txRegistryServiceTicketDelegatorAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="grantTicketGrantingTicket" read-only="false" /> </tx:attributes> </tx:advice> <tx:advice id="txRegistryTicketGrantingTicketDelegatorAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="markTicketExpired" read-only="false" /> <tx:method name="grantServiceTicket" read-only="false" /> </tx:attributes> </tx:advice> <tx:advice id="txRegistryLockingAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="getOwner" read-only="true" /> <tx:method name="acquire" read-only="false" /> <tx:method name="release" read-only="false" /> </tx:attributes> </tx:advice> <aop:config> <aop:pointcut id="ticketRegistryOperations" expression="execution(* org.jasig.cas.ticket.registry.JpaTicketRegistry.*(..))"/> <aop:pointcut id="ticketRegistryLockingOperations" expression="execution(* org.jasig.cas.ticket.registry.support.JpaLockingStrategy.*(..))"/> <aop:pointcut id="ticketRegistryServiceTicketDelegatorOperations" expression="execution(* org.jasig.cas.ticket.registry.AbstractDistributedTicketRegistry$ServiceTicketDelegator.*(..))"/> <aop:pointcut id="ticketRegistryTicketGrantingTicketDelegatorOperations" expression="execution(* org.jasig.cas.ticket.registry.AbstractDistributedTicketRegistry$TicketGrantingTicketDelegator.*(..))"/> <aop:pointcut id="casOperations" expression="execution(* org.jasig.cas.CentralAuthenticationServiceImpl.*(..))"/> <aop:advisor advice-ref="txRegistryAdvice" pointcut-ref="ticketRegistryOperations"/> <aop:advisor advice-ref="txRegistryLockingAdvice" pointcut-ref="ticketRegistryLockingOperations"/> <aop:advisor advice-ref="txRegistryTicketGrantingTicketDelegatorAdvice" pointcut-ref="ticketRegistryTicketGrantingTicketDelegatorOperations"/> <aop:advisor advice-ref="txRegistryServiceTicketDelegatorAdvice" pointcut-ref="ticketRegistryServiceTicketDelegatorOperations"/> <aop:advisor advice-ref="txCentralAuthenticationServiceAdvice" pointcut-ref="casOperations"/> </aop:config> This is only the configuration for the JpaTicketRegistry and does NOT include pointcuts/advice for the JpaServiceRegistryDaoImpl. Relevant github issue/PRs: https://github.com/Jasig/cas/issues/1378 https://github.com/Jasig/cas/pull/1386 I have tested out the updated config on the sample webapp Jean provided here: https://github.com/jlorieux/cas-jpaTicket and verified it works just putting the updated config in place. -Daniel On Wednesday, December 9, 2015 at 4:33:40 AM UTC-5, Jean Lorieux wrote: Thank you very much. I tried your patch and it is working fine on my side. On Monday, December 7, 2015 at 7:29:46 PM UTC+1, Misagh Moayyed wrote: This turned out to be a bug with the entity manager prematurely closing. This will be fixed in 4.1.3; You can try to test this with 4.1.3 SNAPSHOT for the time being until it’s released in a couple of weeks. From: [email protected] <mailto:[email protected]> [mailto:[email protected]] On Behalf Of Jean L. Sent: Sunday, December 6, 2015 3:18 PM To: jasig-cas-user <[email protected] <mailto:[email protected]> > Cc: [email protected] <mailto:[email protected]> Subject: Re: [cas-user] 4.1.2: JpaTicketRegistry: No transactional EntityManager available Hi, I have the same "No transactional EntityManager available" issue on my side, with a simple JPA Ticket registry (and JSON Service registry). I have also added a minimal GH project to help reproducing the issue: https://github.com/jlorieux/cas-jpaTicket In my case, the TGT ticket is successfully created in the database, but not the ST ticket ("No transactional EntityManager available" occurs before). I'm using a MySQL 5.5/Tomcat 8 backend. Regards, Jean L. On Sunday, December 6, 2015 at 1:49:17 PM UTC+1, Robert Oschwald wrote: Misagh, I added a sample overlay project on GH with JPA Ticket+Service registry config (using a shared TransactionManager in this case). I receive the same error as in my project: org.hibernate.hql.internal.ast.QuerySyntaxException: AbstractRegisteredService is not mapped Here it is: https://github.com/robertoschwald/jasig-cas-examples-robertoschwald/tree/4.1.2_jpa Note: The Master branch holds a default overlay config using in-memory (which works and was the base for the JPA config example in 4.1.2_jpa). Config was done as described in http://jasig.github.io/cas/4.1.x/installation/JPA-Ticket-Registry.html and http://jasig.github.io/cas/4.1.x/installation/Service-Management.html#registered-services See comment at line 153 in deployerConfigContext of cas-server-overlay. Please have a look. Thanks! Robert > Am 02.12.2015 um 19:12 schrieb Misagh Moayyed <[email protected] > <mailto:[email protected]> >: > > I ran a quick test, with both JPA service registry and JPA ticket registry > defined in an overlay using the same transaction manager. No issues. > > Post your overlay somewhere on github or pastebin and we might be able to > spot something. Otherwise so far, it’s more likely a config issue on your > end. > > - Misagh > >> On Dec 1, 2015, at 10:15 PM, Tai Hu <[email protected] >> <mailto:[email protected]> > wrote: >> >> Do you find the solution for this "No transactional EntityManager >> available" issue? I just ran into the exact same problem. For both >> PostgreSQL and MySQL, merge method is never under a transaction. Thanks. >> >> On Monday, November 30, 2015 at 7:48:05 AM UTC-5, robertoschwald wrote: >> Hi all, >> >> while configuring CAS 4.1.2 with JpaTicketRegistry, I cannot get it to >> work. >> I always receive the following Exception: >> Exception thrown executing >> org.jasig.cas.web.flow.GenerateServiceTicketAction@6e6a43a4 >> <mailto:org.jasig.cas.web.flow.GenerateServiceTicketAction@6e6a43a4> in >> state 'generateServiceTicket' of flow 'login' >> javax.persistence.TransactionRequiredException: No transactional >> EntityManager available >> at >> org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:275) >> at com.sun.proxy.$Proxy49.merge(Unknown Source) >> at >> org.jasig.cas.ticket.registry.JpaTicketRegistry.updateTicket(JpaTicketRegistry.java:57) >> >> >> I used the described config in >> http://jasig.github.io/cas/4.1.x/installation/JPA-Ticket-Registry.html >> and also added some pointcuts described in >> >> http://stackoverflow.com/a/33663812 >> >> But it still fails. >> >> My JPA config is in spring-configuration/ticketRegistry.xml. >> >> Anything else I’m missing? >> >> >> Robert >> >> >> >> >> -- >> You received this message because you are subscribed to the Google Groups >> "CAS Community" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected] <mailto:[email protected]> . >> Visit this group at >> http://groups.google.com/a/apereo.org/group/cas-user/. > > > -- > You received this message because you are subscribed to the Google Groups > "CAS Community" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected] <mailto:[email protected]> . > Visit this group at http://groups.google.com/a/apereo.org/group/cas-user/. -- You received this message because you are subscribed to the Google Groups "CAS Community" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected] <mailto:[email protected]> . Visit this group at http://groups.google.com/a/apereo.org/group/cas-user/. -- You received this message because you are subscribed to the Google Groups "CAS Community" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected] <mailto:[email protected]> . Visit this group at http://groups.google.com/a/apereo.org/group/cas-user/. -- You received this message because you are subscribed to the Google Groups "CAS Community" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected] <mailto:[email protected]> . Visit this group at http://groups.google.com/a/apereo.org/group/cas-user/. -- You received this message because you are subscribed to the Google Groups "CAS Community" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected] <mailto:[email protected]> . Visit this group at https://groups.google.com/a/apereo.org/group/cas-user/. -- You received this message because you are subscribed to the Google Groups "CAS Community" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. Visit this group at https://groups.google.com/a/apereo.org/group/cas-user/.
