Spring Roo 2.0.0.RC2 WebFlow实体持久化问题求助
Spring Roo 2.0.0.RC2 WebFlow实体持久化问题排查与解决思路
最近我在Spring Roo 2.0.0.RC2版本里开发用户注册功能,用WebFlow管控注册流程,结果卡在了流程末尾的AppUser实体持久化环节。当时我用Roo生成相关代码的命令是这样的:
entity jpa --class ~.model.AppUser --serializable field string --fieldName username --notNull web flow --flowName registrationProcess --class ~.RegistrationProcessFormBean
对应的flow.xml开头内容如下:
结合我踩过的坑,给大家梳理几个排查方向:
- 先查WebFlow的事务配置:WebFlow默认不会自动开启事务,这是很多人踩坑的点。你需要在flow里的持久化action上显式配置事务,要么在flow.xml里给对应的
<action-state>加上<transactional>标签,要么给处理持久化的Spring Bean加上@Transactional注解。 - 确认实体持久化的逻辑是否正常:检查Roo生成的
AppUserRepository有没有正确注入到WebFlow的处理类里,调用save()方法时有没有异常被悄悄吞掉。建议在代码里加个日志,把持久化时的异常信息打出来,方便定位问题。 - 验证表单Bean到实体的映射:WebFlow里的
RegistrationProcessFormBean需要正确转成AppUser实体,尤其是username这个非空字段,要是没映射对,实体因为字段为空不符合约束,肯定持久化失败。 - 检查WebFlow的状态流转:确认flow的结束状态之前,是不是真的触发了持久化的action。比如有没有在
<end-state>前面配置对应的<action-state>,会不会因为跳转逻辑错了,导致持久化代码根本没执行。 - 留意Roo预发布版本的坑:毕竟用的是2.0.0.RC2这个候选版本,可能存在一些自动配置的bug。可以去看看生成的Spring配置文件,确认JPA的实体扫描、事务管理器这些核心配置有没有问题,是不是漏了必要的自动配置类。
内容的提问来源于stack exchange,提问作者Netboy
相关产品推荐
相关产品推荐

