2015-10-19 3 views
2

Использование наложения maven. Я только сконфигурировал cas.properties (db connection part), ticketRegistry.xml и pom.xml как docs. Также слегка изменен класс JpaTicketRegistry, чтобы получить дополнительную информацию об отладке. Как видно из метода log-getTicket, он идет без транзакции (необходим для postgres @Lob (oid)). Версии программного обеспечения: Tomcat 8.0.28 , PSQL (PostgreSQL) 9.4.4 (Jasig) CAS 4.1.0Jasig CAS. Как включить транзакции с помощью JpaTicketRegistry?

// @Transactional(readOnly=true) Spring AOP Declarative transaction is being used, so @Transactional(readOnly=true) it's just some old code. 
@Override 
public Ticket getTicket(final String ticketId) { 
    return getProxiedTicketInstance(getRawTicket(ticketId)); 
} 

/** 
* Gets the ticket from the database, as is. 
* 
* @param ticketId the ticket id 
* @return the raw ticket 
*/ 
private Ticket getRawTicket(final String ticketId) { 
    try { 

     if(TransactionSynchronizationManager.isActualTransactionActive()) { 
      logger.debug("Ticket getRawTicket - Active transaction found"); 
     } else { 
      logger.error("Ticket getRawTicket No active transaction found"); 
     } 

     if (ticketId.startsWith(this.ticketGrantingTicketPrefix)) { 
      return entityManager.find(TicketGrantingTicketImpl.class, ticketId); 
     } 

     return entityManager.find(ServiceTicketImpl.class, ticketId); 
    } catch (final Exception e) { 
     logger.error("Error2 getting ticket from registry.", e); 
     logger.error("Error getting ticket {} from registry.", ticketId, e); 
    } 
    return null; 
} 

pom.xml

 <dependency> 
    <groupId>org.jasig.cas</groupId> 
    <artifactId>cas-server-support-jdbc</artifactId> 
    <version>${cas.version}</version> 
    </dependency> 

    <dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-core</artifactId> 
    <version>${hibernate.core.version}</version> 
    <scope>runtime</scope> 
    </dependency> 

    <dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-entitymanager</artifactId> 
    <version>${hibernate.core.version}</version> 
    <scope>runtime</scope> 
    </dependency> 

    <dependency> 
    <groupId>com.mchange</groupId> 
    <artifactId>c3p0</artifactId> 
    <version>${c3p0.version}</version> 
    </dependency> 

    <dependency> 
    <groupId>org.postgresql</groupId> 
    <artifactId>postgresql</artifactId> 
    <version>9.4-1203-jdbc41</version> 
    </dependency> 

    <dependency> 
    <groupId>org.hibernate.javax.persistence</groupId> 
    <artifactId>hibernate-jpa-2.1-api</artifactId> 
    <version>1.0.0.Final</version> 
    </dependency> 
</dependencies> 
... 
<properties> 
<cas.version>4.1.0</cas.version> 
<pac4j.version>1.7.1</pac4j.version> 
<hibernate.core.version>4.3.10.Final</hibernate.core.version> 
<c3p0.version>0.9.5.1</c3p0.version> 
</properties> 

catalina.out

2015-10-19 06:33:26,677 DEBUG [org.jasig.cas.ticket.registry.support.DefaultTicketRegistryCleaner] - <Acquired lock. Proceeding with cleanup.> 
2015-10-19 06:33:26,678 DEBUG [org.springframework.orm.jpa.JpaTransactionManager] - <Creating new transaction with name [org.jasig.cas.ticket.registry.JpaTicketRegistry.getTickets]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT,readOnly> 
2015-10-19 06:33:26,678 DEBUG [org.springframework.orm.jpa.JpaTransactionManager] - <Opened new EntityManager [[email protected]] for JPA transaction> 
2015-10-19 06:33:26,680 DEBUG [org.springframework.jdbc.datasource.DataSourceUtils] - <Setting JDBC Connection [[email protected] [wrapping: [email protected]]] read-only> 
2015-10-19 06:33:26,680 DEBUG [org.springframework.orm.jpa.JpaTransactionManager] - <Exposing JPA transaction as JDBC transaction [org.springframewo[email protected]449e31c9]> 
Hibernate: select ticketgran0_.ID as ID1_2_, ticketgran0_.NUMBER_OF_TIMES_USED as NUMBER_O2_2_, ticketgran0_.CREATION_TIME as CREATION3_2_, ticketgran0_.EXPIRATION_POLICY as EXPIRATI4_2_, ticketgran0_.LAST_TIME_USED as LAST_TIM5_2_, ticketgran0_.PREVIOUS_LAST_TIME_USED as PREVIOUS6_2_, ticketgran0_.ticketGrantingTicket_ID as ticketG12_2_, ticketgran0_.AUTHENTICATION as AUTHENTI7_2_, ticketgran0_.EXPIRED as EXPIRED8_2_, ticketgran0_.PROXIED_BY as PROXIED_9_2_, ticketgran0_.SERVICES_GRANTED_ACCESS_TO as SERVICE10_2_, ticketgran0_.SUPPLEMENTAL_AUTHENTICATIONS as SUPPLEM11_2_ from TICKETGRANTINGTICKET ticketgran0_ 
Hibernate: select servicetic0_.ID as ID1_1_, servicetic0_.NUMBER_OF_TIMES_USED as NUMBER_O2_1_, servicetic0_.CREATION_TIME as CREATION3_1_, servicetic0_.EXPIRATION_POLICY as EXPIRATI4_1_, servicetic0_.LAST_TIME_USED as LAST_TIM5_1_, servicetic0_.PREVIOUS_LAST_TIME_USED as PREVIOUS6_1_, servicetic0_.ticketGrantingTicket_ID as ticketG10_1_, servicetic0_.FROM_NEW_LOGIN as FROM_NEW7_1_, servicetic0_.TICKET_ALREADY_GRANTED as TICKET_A8_1_, servicetic0_.SERVICE as SERVICE9_1_ from SERVICETICKET servicetic0_ 
2015-10-19 06:33:26,829 DEBUG [org.springframework.orm.jpa.JpaTransactionManager] - <Initiating transaction commit> 
2015-10-19 06:33:26,829 DEBUG [org.springframework.orm.jpa.JpaTransactionManager] - <Committing JPA transaction on EntityManager [[email protected]]> 
2015-10-19 06:33:26,829 DEBUG [org.springframework.jdbc.datasource.DataSourceUtils] - <Resetting read-only flag of JDBC Connection [[email protected] [wrapping: [email protected]]]> 
2015-10-19 06:33:26,829 DEBUG [org.springframework.orm.jpa.JpaTransactionManager] - <Closing JPA EntityManager [[email protected]] after transaction> 
2015-10-19 06:33:26,829 DEBUG [org.springframework.orm.jpa.EntityManagerFactoryUtils] - <Closing JPA EntityManager> 
2015-10-19 06:33:26,836 INFO [org.jasig.cas.ticket.registry.support.DefaultTicketRegistryCleaner] - <13 expired tickets found to be removed.> 
2015-10-19 06:33:26,836 INFO [org.jasig.cas.ticket.registry.support.DefaultTicketRegistryCleaner] - <13 expired tickets found to be removed.> 
2015-10-19 06:33:26,837 DEBUG [org.jasig.cas.ticket.registry.support.DefaultTicketRegistryCleaner] - <Cleaning up expired ticket-granting ticket [TGT-**********************************************O15x2xEhlF-myhost.com]> 
2015-10-19 06:33:26,837 DEBUG [org.jasig.cas.ticket.registry.support.DefaultTicketRegistryCleaner] - <Cleaning up expired ticket-granting ticket [TGT-**********************************************O15x2xEhlF-myhost.com]> 
2015-10-19 06:33:26,837 DEBUG [org.jasig.cas.CentralAuthenticationServiceImpl] - <Removing ticket [TGT-**********************************************O15x2xEhlF-myhost.com] from registry...> 
2015-10-19 06:33:26,837 DEBUG [org.jasig.cas.CentralAuthenticationServiceImpl] - <Removing ticket [TGT-**********************************************O15x2xEhlF-myhost.com] from registry...> 
2015-10-19 06:33:26,837 ERROR [org.jasig.cas.ticket.registry.JpaTicketRegistry] - <Ticket getRawTicket No active transaction found> 
2015-10-19 06:33:26,837 ERROR [org.jasig.cas.ticket.registry.JpaTicketRegistry] - <Ticket getRawTicket No active transaction found> 
2015-10-19 06:33:26,837 DEBUG [org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler] - <Creating new EntityManager for shared EntityManager invocation> 
Hibernate: select ticketgran0_.ID as ID1_2_0_, ticketgran0_.NUMBER_OF_TIMES_USED as NUMBER_O2_2_0_, ticketgran0_.CREATION_TIME as CREATION3_2_0_, ticketgran0_.EXPIRATION_POLICY as EXPIRATI4_2_0_, ticketgran0_.LAST_TIME_USED as LAST_TIM5_2_0_, ticketgran0_.PREVIOUS_LAST_TIME_USED as PREVIOUS6_2_0_, ticketgran0_.ticketGrantingTicket_ID as ticketG12_2_0_, ticketgran0_.AUTHENTICATION as AUTHENTI7_2_0_, ticketgran0_.EXPIRED as EXPIRED8_2_0_, ticketgran0_.PROXIED_BY as PROXIED_9_2_0_, ticketgran0_.SERVICES_GRANTED_ACCESS_TO as SERVICE10_2_0_, ticketgran0_.SUPPLEMENTAL_AUTHENTICATIONS as SUPPLEM11_2_0_, ticketgran1_.ID as ID1_2_1_, ticketgran1_.NUMBER_OF_TIMES_USED as NUMBER_O2_2_1_, ticketgran1_.CREATION_TIME as CREATION3_2_1_, ticketgran1_.EXPIRATION_POLICY as EXPIRATI4_2_1_, ticketgran1_.LAST_TIME_USED as LAST_TIM5_2_1_, ticketgran1_.PREVIOUS_LAST_TIME_USED as PREVIOUS6_2_1_, ticketgran1_.ticketGrantingTicket_ID as ticketG12_2_1_, ticketgran1_.AUTHENTICATION as AUTHENTI7_2_1_, ticketgran1_.EXPIRED as EXPIRED8_2_1_, ticketgran1_.PROXIED_BY as PROXIED_9_2_1_, ticketgran1_.SERVICES_GRANTED_ACCESS_TO as SERVICE10_2_1_, ticketgran1_.SUPPLEMENTAL_AUTHENTICATIONS as SUPPLEM11_2_1_ from TICKETGRANTINGTICKET ticketgran0_ left outer join TICKETGRANTINGTICKET ticketgran1_ on ticketgran0_.ticketGrantingTicket_ID=ticketgran1_.ID where ticketgran0_.ID=? 
19-Oct-2015 06:33:26.838 INFO [scheduler_Worker-1] org.hibernate.event.internal.DefaultLoadEventListener.onLoad HHH000327: Error performing load command : org.hibernate.HibernateException: org.postgresql.util.PSQLException: Large Objects may not be used in auto-commit mode. 
2015-10-19 06:33:26,838 DEBUG [org.springframework.orm.jpa.EntityManagerFactoryUtils] - <Closing JPA EntityManager> 
2015-10-19 06:33:26,839 ERROR [org.jasig.cas.ticket.registry.JpaTicketRegistry] - <Error2 getting ticket from registry. 
javax.persistence.PersistenceException: org.hibernate.HibernateException: org.postgresql.util.PSQLException: Large Objects may not be used in auto-commit mode. 

Исключительный стек:

javax.persistence.PersistenceException: org.hibernate.HibernateException: org.postgresql.util.PSQLException: Large Objects may not be used in auto-commit mode. 
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1763) 
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1694) 
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:1141) 
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:1068) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:497) 
at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:344) 
at com.sun.proxy.$Proxy52.find(Unknown Source) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:497) 
at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:291) 
at com.sun.proxy.$Proxy52.find(Unknown Source) 
at org.jasig.cas.ticket.registry.JpaTicketRegistry.getRawTicket(JpaTicketRegistry.java:161) 
at org.jasig.cas.ticket.registry.JpaTicketRegistry.getTicket(JpaTicketRegistry.java:141) 
at org.jasig.cas.ticket.registry.AbstractTicketRegistry.getTicket_aroundBody0(AbstractTicketRegistry.java:50) 
at org.jasig.cas.ticket.registry.AbstractTicketRegistry$AjcClosure1.run(AbstractTicketRegistry.java:1) 
at org.aspectj.runtime.reflect.JoinPointImpl.proceed(JoinPointImpl.java:149) 
at org.jasig.inspektr.aspect.TraceLogAspect.traceMethod(TraceLogAspect.java:44) 
at org.jasig.cas.ticket.registry.AbstractTicketRegistry.getTicket(AbstractTicketRegistry.java:48) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:497) 
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317) 
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190) 
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) 
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92) 
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207) 
at com.sun.proxy.$Proxy53.getTicket(Unknown Source) 
at org.jasig.cas.CentralAuthenticationServiceImpl.getTicket_aroundBody12(CentralAuthenticationServiceImpl.java:517) 
at org.jasig.cas.CentralAuthenticationServiceImpl$AjcClosure13.run_aroundBody0(CentralAuthenticationServiceImpl.java:1) 
at org.jasig.cas.CentralAuthenticationServiceImpl$AjcClosure13$AjcClosure1.run(CentralAuthenticationServiceImpl.java:1) 
at org.aspectj.runtime.reflect.JoinPointImpl.proceed(JoinPointImpl.java:149) 
at org.jasig.inspektr.aspect.TraceLogAspect.traceMethod(TraceLogAspect.java:44) 
at org.jasig.cas.CentralAuthenticationServiceImpl$AjcClosure13.run(CentralAuthenticationServiceImpl.java:1) 
at org.aspectj.runtime.reflect.JoinPointImpl.proceed(JoinPointImpl.java:149) 
at org.jasig.inspektr.aspect.TraceLogAspect.traceMethod(TraceLogAspect.java:44) 
at org.jasig.cas.CentralAuthenticationServiceImpl.getTicket(CentralAuthenticationServiceImpl.java:516) 
at org.jasig.cas.CentralAuthenticationServiceImpl.destroyTicketGrantingTicket_aroundBody0(CentralAuthenticationServiceImpl.java:229) 
at org.jasig.cas.CentralAuthenticationServiceImpl$AjcClosure1.run_aroundBody0(CentralAuthenticationServiceImpl.java:1) 
at org.jasig.cas.CentralAuthenticationServiceImpl$AjcClosure1$AjcClosure1.run_aroundBody0(CentralAuthenticationServiceImpl.java:1) 
at org.jasig.cas.CentralAuthenticationServiceImpl$AjcClosure1$AjcClosure1$AjcClosure1.run(CentralAuthenticationServiceImpl.java:1) 
at org.aspectj.runtime.reflect.JoinPointImpl.proceed(JoinPointImpl.java:149) 
at org.jasig.inspektr.aspect.TraceLogAspect.traceMethod(TraceLogAspect.java:44) 
at org.jasig.cas.CentralAuthenticationServiceImpl$AjcClosure1$AjcClosure1.run(CentralAuthenticationServiceImpl.java:1) 
at org.aspectj.runtime.reflect.JoinPointImpl.proceed(JoinPointImpl.java:149) 
at org.jasig.inspektr.aspect.TraceLogAspect.traceMethod(TraceLogAspect.java:44) 
at org.jasig.cas.CentralAuthenticationServiceImpl$AjcClosure1.run(CentralAuthenticationServiceImpl.java:1) 
at org.aspectj.runtime.reflect.JoinPointImpl.proceed(JoinPointImpl.java:149) 
at org.jasig.inspektr.aspect.TraceLogAspect.traceMethod(TraceLogAspect.java:44) 
at org.jasig.cas.CentralAuthenticationServiceImpl.destroyTicketGrantingTicket(CentralAuthenticationServiceImpl.java:228) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:497) 
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317) 
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190) 
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) 
at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:85) 
at org.jasig.inspektr.audit.AuditTrailManagementAspect.handleAuditTrail(AuditTrailManagementAspect.java:128) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:497) 
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:621) 
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:610) 
at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:68) 
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:168) 
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92) 
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 
at com.ryantenney.metrics.spring.MeteredMethodInterceptor.invoke(MeteredMethodInterceptor.java:45) 
at com.ryantenney.metrics.spring.MeteredMethodInterceptor.invoke(MeteredMethodInterceptor.java:32) 
at com.ryantenney.metrics.spring.AbstractMetricMethodInterceptor.invoke(AbstractMetricMethodInterceptor.java:59) 
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 
at com.ryantenney.metrics.spring.TimedMethodInterceptor.invoke(TimedMethodInterceptor.java:48) 
at com.ryantenney.metrics.spring.TimedMethodInterceptor.invoke(TimedMethodInterceptor.java:34) 
at com.ryantenney.metrics.spring.AbstractMetricMethodInterceptor.invoke(AbstractMetricMethodInterceptor.java:59) 
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207) 
at com.sun.proxy.$Proxy65.destroyTicketGrantingTicket(Unknown Source) 
at org.jasig.cas.ticket.registry.support.DefaultTicketRegistryCleaner.clean_aroundBody0(DefaultTicketRegistryCleaner.java:118) 
at org.jasig.cas.ticket.registry.support.DefaultTicketRegistryCleaner$AjcClosure1.run_aroundBody0(DefaultTicketRegistryCleaner.java:1) 
at org.jasig.cas.ticket.registry.support.DefaultTicketRegistryCleaner$AjcClosure1$AjcClosure1.run(DefaultTicketRegistryCleaner.java:1) 
at org.aspectj.runtime.reflect.JoinPointImpl.proceed(JoinPointImpl.java:149) 
at org.jasig.inspektr.aspect.TraceLogAspect.traceMethod(TraceLogAspect.java:44) 
at org.jasig.cas.ticket.registry.support.DefaultTicketRegistryCleaner$AjcClosure1.run(DefaultTicketRegistryCleaner.java:1) 
at org.aspectj.runtime.reflect.JoinPointImpl.proceed(JoinPointImpl.java:149) 
at org.jasig.inspektr.aspect.TraceLogAspect.traceMethod(TraceLogAspect.java:44) 
at org.jasig.cas.ticket.registry.support.DefaultTicketRegistryCleaner.clean(DefaultTicketRegistryCleaner.java:96) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:497) 
at org.springframework.util.MethodInvoker.invoke(MethodInvoker.java:269) 
at org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean$MethodInvokingJob.executeInternal(MethodInvokingJobDetailFactoryBean.java:257) 
at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:75) 
at org.quartz.core.JobRunShell.run(JobRunShell.java:202) 
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) 

UPD1 - пытался также же конфигурация, но на MySQL - не повезло - javax.persistence.TransactionRequiredException: Нет транзакционной EntityManager доступного

2015-10-20 00:13:31,408 DEBUG [org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver] - <Resolving exception from handler [[[email protected]]]: org.springframework.webflow.execution.ActionExecutionException: Exception thrown executing [email protected] in state 'generateServiceTicket' of flow 'login' -- action execution attributes were 'map[[empty]]'> 
2015-10-20 00:13:31,409 DEBUG [org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver] - <Resolving exception from handler [[[email protected]]]: org.springframework.webflow.execution.ActionExecutionException: Exception thrown executing [email protected] in state 'generateServiceTicket' of flow 'login' -- action execution attributes were 'map[[empty]]'> 
2015-10-20 00:13:31,410 DEBUG [org.jasig.cas.web.FlowExecutionExceptionResolver] - <Ignoring the received exception due to a type mismatch 
org.springframework.webflow.execution.ActionExecutionException: Exception thrown executing [email protected] in state 'generateServiceTicket' of flow 'login' -- action execution attributes were 'map[[empty]]' 
.... 
Caused by: javax.persistence.TransactionRequiredException: No transactional EntityManager available 
at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:275) 
at com.sun.proxy.$Proxy52.merge(Unknown Source) 
at org.jasig.cas.ticket.registry.JpaTicketRegistry.updateTicket(JpaTicketRegistry.java:61) 
at org.jasig.cas.ticket.registry.AbstractDistributedTicketRegistry$TicketDelegator.updateTicket(AbstractDistributedTicketRegistry.java:101) 
at org.jasig.cas.ticket.registry.AbstractDistributedTicketRegistry$TicketGrantingTicketDelegator.grantServiceTicket_aroundBody6(AbstractDistributedTicketRegistry.java:234) 
at org.jasig.cas.ticket.registry.AbstractDistributedTicketRegistry$TicketGrantingTicketDelegator$AjcClosure7.run_aroundBody0(AbstractDistributedTicketRegistry.java:1) 
at org.jasig.cas.ticket.registry.AbstractDistributedTicketRegistry$TicketGrantingTicketDelegator$AjcClosure7$AjcClosure1.run_aroundBody0(AbstractDistributedTicketRegistry.java:1) 
at org.jasig.cas.ticket.registry.AbstractDistributedTicketRegistry$TicketGrantingTicketDelegator$AjcClosure7$AjcClosure1$AjcClosure1.run(AbstractDistributedTicketRegistry.java:1) 
at org.aspectj.runtime.reflect.JoinPointImpl.proceed(JoinPointImpl.java:149) 
at org.jasig.inspektr.aspect.TraceLogAspect.traceMethod(TraceLogAspect.java:44) 

ответ

1

Ошибка упоминаются явно в журналах, что крупные объекты не могут быть сохранены с помощью автоматической фиксации. Я отключил их в своей конфигурации таким образом:

<beans:bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" 
       destroy-method="close"> 
     <beans:property name="driverClassName" value="org.postgresql.Driver"/> 
     <beans:property name="url" 
         value="jdbc:postgresql://domain:port/db"/> 
     <beans:property name="username" value="user"/> 
     <beans:property name="password" value="password"/> 
     <beans:property name="removeAbandoned" value="true"/> 
     <beans:property name="removeAbandonedTimeout" value="20"/> 
     <beans:property name="defaultAutoCommit" value="false"/> 
    </beans:bean> 

Проверьте последнее свойство, которое у меня есть, и отключите его. Наслаждаться.

+0

Спасибо за ответ, но это не помогло. Got ** javax.persistence.TransactionRequiredException: не существует транзакционного EntityManager **, то же самое с конфигурацией mysql, поэтому это не проблема postgres. – FoREacH

+0

Тогда это сработало, но ваша конфигурация Hibernate неверна. Я предполагаю, что ваш сервисный уровень не аннотируется аннотацией Transactional и вашим dao с репозиторием. –

+0

Показать конфигурацию –

0

Похоже CAS documentation имеет устаревшую/вводящие в заблуждение инструкции:

Adjust the src/main/webapp/WEB-INF/spring-configuration/ticketRegistry.xml with the following 

Решение: DATASOURCE и EntityManagerFactory конфиги должны быть в том же контексте/файла, где <context:component-scan> определяется (в моем случае ЦСИ /main/webapp/WEB-INF/cas-servlet.xml).

Благодаря Vítor Nóbrega comment/answer

1

декораторы транзакций были удалены в пользу АОП в 4.1.x срезов в @ фиксации https://github.com/Jasig/cas/commit/a75af8ea2d14c1cb717ad4d8ace601f8db29f076

Самая трудная часть при отладке этого вопроса было сообщение об ошибке Postgres' может быть легко неправильно (отправка одного вниз отверстие кролика). Он видит, что у вас нет активной транзакции и указано, что вы работаете в режиме автоматической фиксации, что приводит к отладке hibernate.connection.autocommit.

Добавьте несколько дополнительных точек point point и tx: записи в советах и ​​транзакции должны начинаться с применения, как ожидалось.

<tx:advice id="txAdviceTicketReg" transaction-manager="transactionManager"> 
    <tx:attributes> 
     <tx:method name="add*" read-only="false"/> 
     <tx:method name="delete*" read-only="false"/> 
     <tx:method name="save*" read-only="false"/> 
     <tx:method name="update*" read-only="false"/> 
     <tx:method name="get*" read-only="true"/> 
     <tx:method name="*" /> 
    </tx:attributes> 
</tx:advice> 

<aop:config> 
    <aop:pointcut id="ticketRegistryOperations" expression="execution(* org.jasig.cas.ticket.registry.JpaTicketRegistry.*(..))"/> 
    <aop:pointcut id="abstractTicketRegistryOperations" expression="execution(* org.jasig.cas.ticket.registry.AbstractTicketRegistry.*(..))"/> 
    <aop:pointcut id="ticketRegistryLockingOperations" expression="execution(* org.jasig.cas.ticket.registry.support.JpaLockingStrategy.*(..))"/> 

    <aop:advisor advice-ref="txAdviceTicketReg" pointcut-ref="ticketRegistryOperations"/> 
    <aop:advisor advice-ref="txAdviceTicketReg" pointcut-ref="abstractTicketRegistryOperations"/> 
    <aop:advisor advice-ref="txAdviceTicketReg" pointcut-ref="ticketRegistryLockingOperations"/> 
</aop:config> 

Для того чтобы добавить исключения, вам нужно найти дополнительные классы. Добавьте следующую запись в журнал, чтобы посмотреть, что делает АОП.

<Logger name="org.jasig.inspektr" level="trace" additivity="false"> 
    <AppenderRef ref="Console" /> 
</Logger> 
+0

Спасибо - это решило это для меня. – Steven