spring - 贾西格 CAS。如何使用 JpaTicketRegistry 启用交易?

标签 spring transactions aop cas jasig

使用 Maven 覆盖。我只将 cas.properties (数据库连接部分)、ticketRegistry.xmlpom.xml 配置为 docs说。还稍微修改了class JpaTicketRegistry以获取更多调试信息。从日志中可以看出 - getTicket 方法没有事务(postgres @Lob (oid) 需要)。软件版本:tomcat 8.0.28、psql (PostgreSQL) 9.4.4、(Jasig) CAS 4.1.0

// @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>

卡特琳娜.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 [org.hibernate.jpa.internal.EntityManagerImpl@1c6f308] for JPA transaction>
2015-10-19 06:33:26,680 DEBUG [org.springframework.jdbc.datasource.DataSourceUtils] - <Setting JDBC Connection [com.mchange.v2.c3p0.impl.NewProxyConnection@30b2ed10 [wrapping: org.postgresql.jdbc4.Jdbc4Connection@5286a372]] read-only>
2015-10-19 06:33:26,680 DEBUG [org.springframework.orm.jpa.JpaTransactionManager] - <Exposing JPA transaction as JDBC transaction [org.springframework.orm.jpa.vendor.HibernateJpaDialect$HibernateConnectionHandle@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 [org.hibernate.jpa.internal.EntityManagerImpl@1c6f308]>
2015-10-19 06:33:26,829 DEBUG [org.springframework.jdbc.datasource.DataSourceUtils] - <Resetting read-only flag of JDBC Connection [com.mchange.v2.c3p0.impl.NewProxyConnection@30b2ed10 [wrapping: org.postgresql.jdbc4.Jdbc4Connection@5286a372]]>
2015-10-19 06:33:26,829 DEBUG [org.springframework.orm.jpa.JpaTransactionManager] - <Closing JPA EntityManager [org.hibernate.jpa.internal.EntityManagerImpl@1c6f308] 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 [[FlowHandlerMapping.DefaultFlowHandler@7f77437d]]: org.springframework.webflow.execution.ActionExecutionException: Exception thrown executing org.jasig.cas.web.flow.GenerateServiceTicketAction@7dd5c8c0 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 [[FlowHandlerMapping.DefaultFlowHandler@7f77437d]]: org.springframework.webflow.execution.ActionExecutionException: Exception thrown executing org.jasig.cas.web.flow.GenerateServiceTicketAction@7dd5c8c0 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 org.jasig.cas.web.flow.GenerateServiceTicketAction@7dd5c8c0 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)

最佳答案

日志中清楚地提到了错误,即无法使用自动提交保存大对象。我以这种方式在我的配置中禁用它们:

  <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>

查看我拥有的最后一个属性并将其禁用。享受吧。

关于spring - 贾西格 CAS。如何使用 JpaTicketRegistry 启用交易?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33217987/

相关文章:

java - 监控 Bean 的变化以构建增量?

c# - Dotnet 核心中的 AOP : Dynamic Proxy with Real Proxy in Dotnet core

spring - 在构建项目时,有没有办法摆脱这些 spring/aspectj 警告?

spring - 使用 gradle 依赖插件的快照版本(...为了测试 gradle-3.0Mx)

事务、锁、隔离级别

c# - TransactionScope 在某些机器上自动升级到 MSDTC?

transactions - 关于 STM 实现的问题

java - Spring根据属性创建bean列表

java - Spring自动从包中加载上下文文件

java - 在 Spring 中,我可以从 Autowiring 的 bean 中 Autowiring 新的 bean 吗?