标签:cse osgi mybatis eth ati 文件 引入 color 源码
mca是包含了后端的所有业务逻辑,因为网银这类外围项目需要大量的与银行核心系统、客户系统或是其它外围系统通信,mca负责整合这些需求,称为“整合平台”。
采用了OSGI模块化,MCA端的数据库配置在com.csii.mca.db
模块中。
该模块主要包括以下文件:
/META-INF/config/svc_db.xml //数据源相关bean /META-INF/config/dynamicservice.xml //数据源动态服务导出 /META-INF/peconfig/dmconfig.xml//配置信息
dynamicservice.xml以及dmconfig.xml都可以算作基于“约定不可配置”的思想,模块的重要文件几乎没有文档说明,无论是文件本身的命名和所在路径,还是里面配置信息的格式及内容。
<config> <bean id="eappdbDataSource" class="org.apache.tomcat.jdbc.pool.DataSource" init-method="createPool" destroy-method="close" > <param name="driverClassName">${eappdbDataSource.driverClassName}</param> <param name="url">${eappdbDataSource.url}</param> <param name="username">${eappdbDataSource.username}</param> <param name="password">${eappdbDataSource.password}</param> ... </bean> <sqlExecutor id="eappdbSqlExecutor"> <param name="showSql">false</param> <ref name="dataSource">eappdbDataSource</ref> </sqlExecutor> <transactionManager id="eappdbTxManager"> <ref name="dataSource">eappdbDataSource</ref> </transactionManager> <transactionTemplate id="eappdbTxTemplate"> <ref name="transactionManager">eappdbTxManager</ref> ... </transactionTemplate> </config>
配置了数据源,SQL执行器(与Mybatis的SqlSession类似,用于执行CURD),事务管理器,事务模板。数据源采用的是tomcat jdbc pool连接池。问题在于其采用的是pe-config.dtd
,因此后续三个“bean”根本不知道其实现类或接口,更何况其属性。虽然后续我们可猜测是ibatis的SqlExecutor,Spring的TransactionManager,TransactionTemplate。
pe-config.dtd是封装在OSGI基础平台的
spring-beans-fix.jar
。正如在mvc篇所讲,封装实现类型并自定义dtd来减少这些配置没有多个意义,反而让人困惑。
<osgi:service id="eappdbDataSourceService" ref="eappdbDataSource" >
<osgi:interfaces>
<value>javax.sql.DataSource</value>
</osgi:interfaces>
</osgi:service>
<osgi:service id="eappdbSqlExecutorService" ref="eappdbSqlExecutor" interface="com.csii.pe.service.jdbc.SqlExecutor" />
<osgi:service id="eappdbTxTemplateService" ref="eappdbTxTemplate" >
<osgi:interfaces>
<value>org.springframework.transaction.support.TransactionOperations</value>
</osgi:interfaces>
</osgi:service>
PE平台的OSGI动态服务引入和导出配置文件。这里对数据源,SQL执行器,事务模板都以OSGI服务的方式导出,以便其它模块使用。从这里我们才能得知这后面2个bean它们所代表的接口。
上述三个服务在特定服务实现模块中被引入和使用。
首先以OSGI服务的方式引入特定模块中:
<osgi:reference id="eappdbDataSource" bean-name="eappdbDataSource" interface="javax.sql.DataSource" /> <osgi:reference id="eappdbSqlExecutor" bean-name="eappdbSqlExecutor" interface="com.csii.pe.service.jdbc.SqlExecutor" /> <osgi:reference id="eappdbTransactionOperations" bean-name="eappdbTxTemplate" interface="org.springframework.transaction.support.TransactionOperations" />
数据源eappdbDataSource作为ibatis的Spring模板的数据源使用:
<bean id="eappdbSqlMapExecutor" class="org.springframework.orm.ibatis.SqlMapClientTemplate"> <property name="dataSource" ref="eappdbDataSource" /> <property name="sqlMapClient"> <bean class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"> <property name="configLocation" value="osgibundle:/META-INF/config/sql-mapping/eappdbSqlMapConfig.xml" /> </bean> </property> </bean>
事务模板eappdbTxTemplate作为Spring的委托事务模板的实际执行对象:
<bean id="eappdbTxTemplate" class="com.csii.pe.config.support.DelegateTrsTemplate">
<property name="transactionOperations" ref="eappdbTransactionOperations" />
</bean>
service.xml包含了模块的OSGI Service实现的声明,引入的服务将注入到这里的bean中使用。上述得到的SqlMapClientTemplate和DelegateTrsTemplate就可以注入到ServiceImpl中用于普通的SQL执行以及事务处理。
标签:cse osgi mybatis eth ati 文件 引入 color 源码
原文地址:https://www.cnblogs.com/liwanxing/p/9389838.html