JFinal2.1中全局拦截器中配置多个事务规则时报错

hypocrite11 发布于 2016/01/06 09:50
阅读 911
收藏 1

@JFinal 你好,想跟你请教个问题:

JFinal2.1中在Config中加入事务拦截时,从第三个事务规则开始报错,不能定义多个规则吗?

2.0好像没有报错。@JFinalUIB中就是这样配置的。

/**
* 配置全局拦截器
*/
public void configInterceptor(Interceptors me) {

me.add(new GlobalInterceptor());

//配置开启事务规则
me.add(new TxByMethods("save", "update", "delete"));
me.add(new TxByMethodRegex(".*save.*"));
me.add(new TxByMethodRegex(".*update.*"));
me.add(new TxByMethodRegex(".*delete.*"));

}

报错信息:

java.lang.IllegalArgumentException: interceptor already exists, interceptor must be singlton, do not create more then one instance of the same Interceptor Class.
at com.jfinal.aop.InterceptorManager.addGlobalInterceptor(InterceptorManager.java:192)
at com.jfinal.aop.InterceptorManager.addGlobalActionInterceptor(InterceptorManager.java:175)
at com.jfinal.config.Interceptors.add(Interceptors.java:34)
at com.platform.config.run.BackConfig.configInterceptor(BackConfig.java:104)
at com.jfinal.core.Config.configJFinal(Config.java:50)
at com.jfinal.core.JFinal.init(JFinal.java:62)
at com.jfinal.core.JFinalFilter.init(JFinalFilter.java:49)
at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:279)
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:260)
at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:105)
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4574)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5193)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

加载中
1
JFinal
JFinal

拦截器是单例的,所以会有这个异常抛出,正则可以合并,很容易,这样:

new TxByMethodRegex("(.*save.*|.*update.*|.*delete.*)");



JFinal
JFinal
回复 @Jimmy哥 : 眼尖啊,一时手误造成的
Jimmy哥
Jimmy哥
波总,正则表达式 new TxByMethodRegex("(*.save.*|*.update.*|*.delete.*)") 和 new TxByMethodRegex("(.*save.*|.*update.*|.*delete.*)") 不一样的吧... (.和*的位置)
h
hypocrite11
明白了,谢谢。
0
FT
FT
把重复的规则去掉试试 
0
h
hypocrite11

引用来自“我是FT”的评论

把重复的规则去掉试试 
//配置开启事务规则
me.add(new TxByMethods("save", "update", "delete"));
me.add(new TxByMethodRegex(".*save.*"));


改成这样是好了,但是没有达到我的目的。我想要对方法做以下方式多个规则。TxByMethodRegex不让我多次加入定义。

".*save.*"  

".*update.*"

".*delete.*"


0
littleant
littleant

me.add(new TxByMethodRegex("(.*save.*|.*update.*|.*delete.*)")); 

// 多方法名匹配使用一个正则匹配,2.1只支持单实例注册

h
hypocrite11
明白了,谢谢
0
JFinal
JFinal

前面手误,正则写得不对,再更正一下:

拦截器是单例的,所以会有这个异常抛出,正则可以合并,很容易,这样:

new TxByMethodRegex("(.*save.*|.*update.*|.*delete.*)");



返回顶部
顶部