bboss persistent事务管理介绍 (十)

简介:   4.9.9.3 BaseSPIManager组件 l        包路径及接口说明 BaseSPIManager的完整包路径如下: com.chinacreator.spi.

 

4.9.9.3 BaseSPIManager组件

l        包路径及接口说明

BaseSPIManager的完整包路径如下:

com.chinacreator.spi.BaseSPIManager

BaseSPIManager提供了以下两个静态管理接口:

l         接口1  获取idmanagerid的管理服务接口实例

AI a = (AI)BaseSPIManager.getProvider("managerid");

 

l         接口2  获取idmanagerid的管理服务接口实例,参数二对应多个provider中相应的provider 类型标识

AI a = (AI)BaseSPIManager.getProvider("managerid","providertype");

方法1和方法2的区别是:方法1的返回值和抛出的异常以默认的provider的相应方法的返回值和异常为准,方法2返回值和抛出的异常以指定类型的provider的相应方法的返回值和异常为准。方法1和方法2的事务管理机制是一致和相同的。

这两个接口返回的对象类型为java.lang.Object,调用程序可以将该对象转型为相应的组件接口类型。

l        使用BaseSPIManager获取组件实例和直接创建组件实例的区别

只有通过BaseSPIManager提供的两个方法获取接口实例,然后在接口实例上调用事务方法,声明的事务管理才会生效,否则无效。举例说明如下:

假如接口AI和接口实现类A,接口中定义了方法handle,并且将该方法声明为事务方法,

 

在配置文件中做以下的配置:

<manager id="test.A" singlable="true" >

<provider type="DB" default="true"

           class="test.A" />

<transactions>

<method name="handle" txtype="REQUIRED_TRANSACTION"/>

</transactions>

</manager>

 

声明组件的管理idtest.A,我们通过以下两种方式获取接口实例:

方法1 直接创建对象实例a,在实例a上调用handle方法

AI a = new A();

a.handle();

采用这种方式时,为handle方法声明的事务不会生效。

方法2 通过BaseSPIManager提供的接口获取接口实例

AI a = (AI)BaseSPIManager.getProvider("test.A");

a.handle();

采用这种方式,为handle方法声明的事务才会生效。

业务组件必须由两部分组成:组件接口,组件接口的实现类;这是因为通过BaseSPIManager的两个方法所获取到的对象必需是一个接口对象,这里不能直接将返回值直接转换为具体的实现类型,以下的用法是正确的:

AI a = (AI)BaseSPIManager.getProvider("test.A");

以下的用法是不正确的,但是编译时不会报错,运行时会报类型转换错误,这是因为方法返回的是一个实现接口AI的代理对象,而不是一个A类型的对象了:

A a = (A)BaseSPIManager.getProvider("test.A");

目录
相关文章
|
7月前
|
XML Java 关系型数据库
注解驱动事务:Spring中基于注解的事务属性配置详解
注解驱动事务:Spring中基于注解的事务属性配置详解
113 0
注解驱动事务:Spring中基于注解的事务属性配置详解
|
Java 应用服务中间件
Spring JTA事务配置JOTM
JTA可以在多个数据库上使用一个事务,weblogic等应用服务器提供了jta数据源的支持,可以直接被使用。但是tomcat本身并不支持这种特性。如果想在tomcat上使用jta就必须使用其它的工具。jotm就是一个独立的可以提供JTA功能的组件。 &lt;?xml version="1.0" encoding="UTF-8"?&gt;      &lt;beans xmlns="http
1386 0
|
SQL Java API
bboss持久层ormaping机制详解
bboss持久层针对db操作即提供了原始sql语句的支持,又提供了简单而高效的ormapping机制,本文详细介绍之 1.可变参数的原生sql API 删除 SQLExecutor.delete("delete from LISTBEAN"); SQLExecutor.
827 0
|
SQL 缓存 自然语言处理
bboss 持久层重大改进
bboss 持久层重大改进。 bboss持久层最大特色就是其对动态sql语句的良好支持,这个机制是基于velocity模板引擎的来实现的: Velocity.evaluate(context, out, sqlName, sql); Velocity.evaluate这个方法存在一个非常严重的性能隐患,那就是这个方法没有对解析出来的sql模板语法结构树做任何的缓存机制,每次都会硬解析sql语句,并且在解析sql语句时会向velocity的模板解析器池中获取一个池化的解析器,这样在高并发情况下会频繁地获取解析其池的共享锁,导致系统性能下降。
903 0
bboss持久层事务管理组件TransactionManager增加两个release方法
bboss持久层事务管理组件TransactionManager增加release和releasenolog两个方法,可以在finally块中调用它们来释放事务资源,使得bboss持久层框架的编程事务管理变得更加优雅、更加轻松。
730 0
|
人工智能 测试技术 数据格式
bboss-persistent结合bboss-aop实现注解事务
bboss-persistent结合bboss-aop也可以实现注解事务哦. 先看一个业务组件: package org.frameworkset.spi.transaction.annotation; import java.
624 0
|
数据库 Go
bboss persistent事务管理介绍 (五)
l       带返回值的模板方法使用实例   Object ret = TemplateDBUtil.executeTemplate(               new JDBCValueTemplate(){                   /**        ...
640 0
|
数据库 容器
bboss persistent事务管理介绍 (一)
bboss项目下载列表 在sourceforge访问地址为:https://sourceforge.net/project/showfiles.php?group_id=238653 bboss persistent的事务管理框架实现数据库的增、删、改、查事务管理,整个事务管理框架在下面的各节中详细介绍。
741 0
|
数据库
bboss persistent事务管理介绍 (三)
2.事务挂起处理-【开始】>【挂起】>【恢复】>【提交】>【回滚】               TransactionManager tm = new TransactionManager();               try {            //开始事务,在...
653 0