13
回答
Jfinal 如何在service层做aop事务。
【腾讯云】学生服务器套餐10元/月 >>>   

首先多谢波总的惦记,说我最近没有啥话说 

今天下午和同事讨论新项目的技术选项问题。有个东西我暂时不知道在jfinal中怎么解决。

我们的业务逻辑的调用不只是web页面触发,可能是一个定时任务或者其他。所以必须把事务放在service。然后jfinal的aop机制是做在controller的。现在要怎么才能做到同一管理事务对开发者不可见呢

举报
共有13个答案 最后回答: 3年前
可以考虑做个插件 render,隐藏调用 controller  ,定时任务隐藏 触发 web页面或者 controller
--- 共有 1 条评论 ---
绝望的八皮没有controller也没有render的情况。比如一个设备有一堆任务。每个任务在一个事务里面。 6年前 回复

JFinal 的service层加事物貌似不起作用?如果把事物层加到Controller 层里,这里的数据校验拦截器又该怎么配置呢?

@Before(Tx.class)
@Before(BlogValidator.class)
public void save() {
	Blog blog2 = Blog.dao.findById(new Integer(1));
	blog2.set("content", "5555-2").update();

	Blog blog3 = Blog.dao.findById(new Integer(30));
	blog3.set("content", "5555-3").update();

	redirect("/blog");
}



上面的代码是错误的,请问在 Controller里面一个action既要加上“数据校验”,又要加上“事物控制”,拦截器的注解该怎么个写法?

引用来自“类子”的答案

上面的代码是错误的,请问在 Controller里面一个action既要加上“数据校验”,又要加上“事物控制”,拦截器的注解该怎么个写法?

    Validator 自身也是Interceptor,所以配置方式与Interceptor 完全一样,多个Interceptor与Validator 配置方式如下:

@Before({MyInterceptor.class, MyValidator.class})

JFinal 波总,您提供的第二种解决方案还是建议将事务写在controller中,我觉得某种程度上是不可取的,控制器顾名思义就是来控制转发请求的,若事务加载控制器上,一定程度上延长了事务执行时间,降低了系统的性能。另外具体的业务逻辑还是要靠service完成,model的定位我认为还只是数据模型,并不包含业务处理,有可能一些复杂的业务逻辑需要不同的实现方式存在,那如果只有model的话还是没办法很好的解决问题!总之mvc不仅仅是J2ee上的架构模式,它是整个Web开发过程中的模式,它的存在是有意义的。谢谢!请多多指教!
JFinal  虽然我认为jfinal中的声明式事务是不可取的,我也通过写动态代理去将service加入事务控制,但是我认为jfinal的编程式事务很方便,若对声明式没有情节的话我建议还是直接写编程时事务。谢谢!
顶部