带Spring声明性事务的Wicket
可以在Spring容器之外使用Spring框架的@Transactional支持。参考文档中有一章是关于AspectJ方面的。我试图在wicket应用程序中使用它,但没有任何积极的结果带Spring声明性事务的Wicket,spring,jpa,transactions,wicket,aspectj,Spring,Jpa,Transactions,Wicket,Aspectj,可以在Spring容器之外使用Spring框架的@Transactional支持。参考文档中有一章是关于AspectJ方面的。我试图在wicket应用程序中使用它,但没有任何积极的结果 <tx:annotation-driven transaction-manager="transactionManager" mode="aspectj" /> <context:annotation-config /> <context:component-scan base-pa
<tx:annotation-driven transaction-manager="transactionManager" mode="aspectj" />
<context:annotation-config />
<context:component-scan base-package="com.wicket.app"/>
<context:spring-configured />
<bean id="annotationTransactionAspect" factory-method="aspectOf"
class="org.springframework.transaction.aspectj.AnnotationTransactionAspect">
<property name="transactionManager" ref="transactionManager"></property>
</bean>
application-context.xml:
<tx:annotation-driven transaction-manager="transactionManager" mode="aspectj" />
<context:annotation-config />
<context:component-scan base-package="com.wicket.app"/>
<context:spring-configured />
<bean id="annotationTransactionAspect" factory-method="aspectOf"
class="org.springframework.transaction.aspectj.AnnotationTransactionAspect">
<property name="transactionManager" ref="transactionManager"></property>
</bean>
堆栈跟踪:
<tx:annotation-driven transaction-manager="transactionManager" mode="aspectj" />
<context:annotation-config />
<context:component-scan base-package="com.wicket.app"/>
<context:spring-configured />
<bean id="annotationTransactionAspect" factory-method="aspectOf"
class="org.springframework.transaction.aspectj.AnnotationTransactionAspect">
<property name="transactionManager" ref="transactionManager"></property>
</bean>
org.apache.openjpa.persistence.TransactionRequiredException: Can only perform operation while a transaction is active.
您可能可以使用AspectJ实现这一点,但对于一个简单的问题来说,这是一个非常复杂的解决方案
<tx:annotation-driven transaction-manager="transactionManager" mode="aspectj" />
<context:annotation-config />
<context:component-scan base-package="com.wicket.app"/>
<context:spring-configured />
<bean id="annotationTransactionAspect" factory-method="aspectOf"
class="org.springframework.transaction.aspectj.AnnotationTransactionAspect">
<property name="transactionManager" ref="transactionManager"></property>
</bean>
如果您需要声明性事务,那么我建议您将事务逻辑从wicket组件向下移动到Springbean中,并从wicket对象调用Springbean。Springbean将具有事务性注释,并将由Spring容器正确代理。您可能可以使用AspectJ实现这一点,但对于一个简单的问题来说,这是一个非常复杂的解决方案
<tx:annotation-driven transaction-manager="transactionManager" mode="aspectj" />
<context:annotation-config />
<context:component-scan base-package="com.wicket.app"/>
<context:spring-configured />
<bean id="annotationTransactionAspect" factory-method="aspectOf"
class="org.springframework.transaction.aspectj.AnnotationTransactionAspect">
<property name="transactionManager" ref="transactionManager"></property>
</bean>
如果您需要声明性事务,那么我建议您将事务逻辑从wicket组件向下移动到Springbean中,并从wicket对象调用Springbean。Springbean将具有事务性注释,并且将由Spring容器正确代理。我没有Wicket方面的经验。但是您的“表单类”(包含用
@Transactional
注释的方法)是Spring托管代码吗?i、 e.谁创建类的实例
<tx:annotation-driven transaction-manager="transactionManager" mode="aspectj" />
<context:annotation-config />
<context:component-scan base-package="com.wicket.app"/>
<context:spring-configured />
<bean id="annotationTransactionAspect" factory-method="aspectOf"
class="org.springframework.transaction.aspectj.AnnotationTransactionAspect">
<property name="transactionManager" ref="transactionManager"></property>
</bean>
如果不是,Spring将不会提供
@事务性支持(自动连线@也不会工作,等等)。我没有Wicket方面的经验。但是您的“表单类”(包含用@Transactional
注释的方法)是Spring托管代码吗?i、 e.谁创建类的实例
<tx:annotation-driven transaction-manager="transactionManager" mode="aspectj" />
<context:annotation-config />
<context:component-scan base-package="com.wicket.app"/>
<context:spring-configured />
<bean id="annotationTransactionAspect" factory-method="aspectOf"
class="org.springframework.transaction.aspectj.AnnotationTransactionAspect">
<property name="transactionManager" ref="transactionManager"></property>
</bean>
否则,Spring将不提供@事务性支持(自动连线@也不起作用,等等)。@事务性可在Spring容器外部使用,例如在实体类>。但我做错了什么事,而且不管用。你是指。那么是的-你是对的,它将为非Spring托管代码添加@Transactional
支持,但所有这些类仍然必须通过Spring进行某种处理(他们称之为Spring aspects.jar
)。我试图添加aspectj处理,但它不起作用。任何关于为什么?@Transactional的建议都可以在Spring容器外部使用,例如在entity class>上。但我做错了什么事,而且不管用。你是指。那么是的-你是对的,它将为非Spring托管代码添加@Transactional
支持,但所有这些类仍然必须通过Spring进行某种处理(他们称之为Spring aspects.jar
)。我试图添加aspectj处理,但它不起作用。有什么建议吗?是的,是我的错。这个简单的解决方案更好。没必要夸张。是的,我的错。这个简单的解决方案更好。没有必要夸大。
<tx:annotation-driven transaction-manager="transactionManager" mode="aspectj" />
<context:annotation-config />
<context:component-scan base-package="com.wicket.app"/>
<context:spring-configured />
<bean id="annotationTransactionAspect" factory-method="aspectOf"
class="org.springframework.transaction.aspectj.AnnotationTransactionAspect">
<property name="transactionManager" ref="transactionManager"></property>
</bean>