匹配事务
使用匹配事务,可以将 JVM 中的任何方法调用转化为事务。匹配事务的功能与声明式 事务相对应,后者通过 jvmguard 注解直接在代码中指定。
如果无法向代码中添加注解,或者关注的类在外部库中,就需要匹配事务。否则,为了更容易维护,建议使用声明式 事务。
在事务定义列表中,过滤表达式显示为每个匹配事务定义的名称。如果这不够清晰,可以使用事务配置中的“自定义 描述”复选框输入一个有意义的名称。
jvmguard 遍历事务定义列表,并应用第一个匹配条目的命名和策略。请记住,匹配采用第一个匹配项,因此更通用的 过滤器应放在事务定义列表中较低的位置。
这样就可以定义一系列命名方案各不相同的事务定义,同时为一组定义保留共同的策略定义。
与映射事务类似,第一个问题是选择单个方法,还是选择特定类的所有 public 方法。

匹配事务在继承方面与映射事务有相同的配置选项。可以用“拦截子类”复选框开启来自派生类的事务。
对于单方法事务,这意味着重写的方法也会创建事务。如果这样的方法进行 super 调用,该 super 调用会创建一个 单独的事务。如果两个事务的名称相同,super 调用不会被单独记录。不过,使用“实例类名”命名元素很容易产生 两个不同的名称。在这种情况下,super 方法会显示为嵌套事务。如果这不是想要的结果,可以在向导的“命名” 步骤中将“抑制嵌套事务”选项设置为“匹配此条目”。
关注的方法可以用方法选择器方便地选择。它可以显示来自所有已连接 VM 的类,也可以显示即时上传的 JAR 或 WAR 文件中的类。也可以手动编辑方法,此时必须注意以字节码 格式输入方法签名。

对于类,所选类的所有 public 方法都会创建事务。开启继承选项后,可以在派生类方法选择的两种不同策略之间 进行选择。
- 实现或重写的 public 方法:如果选择的是一个已经用其方法定义了所有关注操作的接口,此选项是合理的。 实现类中额外的 public 方法会被忽略。
- 实现类或派生类的所有 public 方法:所选类可能是基类或标记接口,而关注的方法在派生类中。在这种情况 下,派生类中的所有 public 方法都会创建事务。
作为收集事务方法的另一种方式,还可以选择静态方法。如果选择了继承选项并使用所有 public 方法,派生类中的 public static 方法也会被收集。
除了映射事务可用的命名元素之外,匹配方法事务还有一个“方法参数”命名元素。方法参数拦截只有在选择了特定 方法时才有意义,因此它不适用于匹配类事务。

可以按从零开始的索引选择参数。此外,还可以对参数应用 getter 链,就像映射事务 中介绍的“实例名”元素一样。

