我正在使用JavaFX的Spring 3.2.4并希望实现一种方法,其中操作将在事务中执行。我在控制器代码如下所示:春季交易注释不起作用
@Transactional(rollbackFor = { ServiceException.class,
ValidationException.class })
public void registerVolunteer(User user, Volunteer volunteer)
throws ServiceException, ValidationException {
User ret = userService.create(user);
volunteer.setUser(ret);
volunteerService.untransactedCreate(volunteer);
}
我的应用上下文:
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>
<!-- Transaction Manager -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
试图运行它,我得到这个错误信息:
Controller method "onBackClicked" not found.
/home/workspace/project/NewProject/target/classes/fxml/RegisterVolunteer.fxml:69
at javafx.fxml.FXMLLoader$Element.processEventHandlerAttributes(FXMLLoader.java:497)
at javafx.fxml.FXMLLoader$ValueElement.processEndElement(FXMLLoader.java:594)
at javafx.fxml.FXMLLoader.processEndElement(FXMLLoader.java:2472)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2177)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2069)
at org.impactvolunteers.management.FXMLSpringLoader.load(FXMLSpringLoader.java:97)
at org.impactvolunteers.management.FXMLSpringLoader.load(FXMLSpringLoader.java:81)
at org.impactvolunteers.management.gui.Screen.init(Screen.java:50)
at org.impactvolunteers.management.gui.ScreensController.init(ScreensController.java:43)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
...
的方法存在。通过删除注释或将方法从public
更改为private
或从配置中删除bean,程序将运行,但@Transactional
-annotation根本不起作用。删除proxy-target-class="true"
导致我另一个错误。
您的错误消息与交易注释无关。你可能会注意到你的栈跟踪中根本没有引用Spring应用程序上下文。只有当您的服务没有实现接口时,才需要使用CGLIB代理目标类。您的例外是说JavaFX找不到控制器方法。那个控制器用'@ Controller'注释,并且你的Spring XML中是否有'? –
JamesENL
我将该方法移至单独的服务类,并解决了此问题。我没有这两个,因为我正在开发一个使用JavaFX的本机应用程序,而我没有使用MVC。错误消息与注释无关,但将方法从公共更改为私有删除了错误消息,这对我来说显得很奇怪,但我并不十分了解Spring的具体情况,所以... –