PE框架源码分析:mca数据源

Posted liwanxing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PE框架源码分析:mca数据源相关的知识,希望对你有一定的参考价值。

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都可以算作基于“约定不可配置”的思想,模块的重要文件几乎没有文档说明,无论是文件本身的命名和所在路径,还是里面配置信息的格式及内容。

 

svc_db.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来减少这些配置没有多个意义,反而让人困惑。

 

dynamicservice.xml

<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它们所代表的接口。

 

服务使用

上述三个服务在特定服务实现模块中被引入和使用。

 

dynamicservice.xml

首先以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

service.xml包含了模块的OSGI Service实现的声明,引入的服务将注入到这里的bean中使用。上述得到的SqlMapClientTemplate和DelegateTrsTemplate就可以注入到ServiceImpl中用于普通的SQL执行以及事务处理。


以上是关于PE框架源码分析:mca数据源的主要内容,如果未能解决你的问题,请参考以下文章

pe框架大观

Android 插件化VirtualApp 源码分析 ( 目前的 API 现状 | 安装应用源码分析 | 安装按钮执行的操作 | 返回到 HomeActivity 执行的操作 )(代码片段

Android 逆向整体加固脱壳 ( DEX 优化流程分析 | DexPrepare.cpp 中 dvmOptimizeDexFile() 方法分析 | /bin/dexopt 源码分析 )(代码片段

如何进行 Java 代码阅读分析?

Android 事件分发事件分发源码分析 ( Activity 中各层级的事件传递 | Activity -> PhoneWindow -> DecorView -> ViewGroup )(代码片段

OpenMPI源码剖析:网络通信原理