·软件知识库 ·模板素材库
注册 | 登录

您所在的位置: INDEX > eos > 构件包EOS配置管理

构件包EOS配置管理

许杰 Sun Jul 05 12:01:51 CST 2015 字号:

EOS配置管理主要管理当前构件包使用的数据源,EOS6支持为不同的构件包配置不同的数据源功能。

EOS6提供不同数据源间的关系
EOS6支持三种层次的数据源:系统级别数据源,应用级别数据源,构件包级别数据源。
三者关系参考下图:

 

系统级别数据源:
是在不同的应用服务器上创建的,与具体的应用无关的数据源。

应用级别数据源:
EOS6允许用户为一个应用配置多个数据源,同时为不同的数据源指定不同的引用名称,底层应用服务器负责管理数据源到引用名称的映射;用户在使用数据源的时候可以通过引用名称直接获取应用级别的数据源。
目前应用级别的数据源支持两种不同的数据源配置:C3P0数据源和JNDI数据源(Tomcat使用前者,其它应用服务器使用后者);当底层数据源的具体配置改变的时候(例如不同类型数据源的变更、数据库类型变更等),只要引用名称没有改变就不会影响客户端的代码。
应用级别数据源的配置请参考《EOS管理员手册》中的"Governor配置功能数据源配置应用数据源配置"说明。

构件包级别数据源:
为了能在构件包开发和运行时能灵活切换不同的应用数据源,EOS6提供了管理当前构件包数据源的配置:为应用中配置的数据源名称重新定义了一个别名。
在构件包中使用数据源的时候,就可以直接使用构件包中配置的别名,从而在Governor管理控制台应用切换不同的数据源后不用修改构件包的代码。
构件包级别数据源的配置请参考《EOS管理员手册》中的"Governor配置功能数据源配置构件包数据源配置"说明。

数据源获取接口
EOS6在发布应用时缺省配置一个默认数据源"default"(该数据源是应用级别数据源),支持C3P0、JNDI两种类型的数据源(Tomcat使用前者,其它应用服务器使用后者)。
在EOS6.0中可以通过com.eos.common.connection.ConnectionHelper帮助类的接口获取数据库连接,提供方法包括:
getContributionConnection(String contributionName,String dataSourceAlias):
根据构件包名字和构件包级别数据源别名获取构件包级别数据源的数据库连接;该方法会返回名字为contributionName的构件包数据源的一个连接;
getCurrentContributionConnection(String dataSourceAlias):
根据构件包级别数据源的名称获取当前构件包的数据源的数据库连接;是根据当前运行线程所在最底层的构件包来获取数据库连接。
通过该方法获取数据库连接,会在运行时根据调用该方法的运算逻辑所在的Contribution去获得构件包数据源的连接。
举例如下:构件包A和构件包B,构件包A中有运算逻辑A_BL(通过该方法获取数据库连接);在运算逻辑A_BL调用getCurrentContributionConnection来获取数据库连接,然后在构件包B中调用构件包A中的运算逻辑A_BL;此时获取的数据库连接是构件包A中数据源的连接。也就是说,通过该方法获取的连接,是当前调用方法getCurrentContributionConnection所在的构件包的数据源。

注意

在使用getCurrentContributionConnection时必须注意,如果您提供的java方法访问的数据库是固定的业务数据,则这个方法会有问题。
例如:在构件包A中提供java方法f1,如果f1中通过getCurrentContributionConnection方法获得数据库操作,只有f1在构件包A中调用的时候,f1访问的数据库才是构件包A指定的数据库连接。如果构件包B通过运算逻辑方式调用f1,则此时使用的数据库连接实际上是构件包B配置的数据库连接!
所以在java方法中获取数据源的场景是:使用getCurrentContributionConnection的java方法是提供一个可以复用的数据库基础操作。例如com.eos.foundation提供的数据库访问的操作都是使用这个方法获得数据库连接,使用getContributionConnection时的java方法提供的不是一个可以复用的操作,而是提供了一个可以访问的业务功能,这个业务功能需要和指定的业务场景相关,例如我们用java方法提供组织机构的服务的场景中,就必须用getContributionConnection指定当前组织机构的构件包来获得数据库连接!

说明

注意EOS的应用级别数据源、构件包级别数据源与应用服务器提供的数据源的区别;
取得的数据库连接使用完后,务必记得将Connection关闭;
如果通过给定的数据源的名字没有找到对应的数据源,EOS将会返回默认的数据源default。

获取主键的数据源配置
EOS6提供了获取主键的功能,默认情况下获取主键是通过名字为"default"的应用级别数据源获取的,同时EOS提供了可以从一个独立的数据源获取主键的功能,用户只需要创建一个名字为"EOS-Unique"的应用级别数据源,EOS即通过该数据源获取主键。
场景描述
场景一
系统上线运行后,提供了两个不同的应用级数据源defaultA和defaultB,在不同的contribution中需要使用不同的数据源来获取数据库连接,同时需要保证开发的构件包的代码随着不同数据源的切换而不受到影响。需要EOS6能够灵活的提供扩展机制,来在构件包之间切换数据源。避免因为应用数据源名称的修改导致构件包代码的修改。

场景二
在构件包开发期,当前构件包需要两个不同的构件包数据源(DataSrouceA,DataSourceB),不同的业务场景使用不同的构件包数据源来完成业务开发。可以为当前的构件包配置两个构件包数据源,根据业务的需要使用不同的构件包数据源。

实现
在studio中查看构件包的属性,在"EOS配置"中,EOS6提供了可配置构件包级别数据源的引用。参见下面代码:

<!-- datasource config -->
<module name="DataSource">
	<group name="Reference">
		<configValue key=" DataSrouceA">defaultA</configValue>
	</group>
	<group name="Reference">
		<configValue key=" DataSrouceB">defaultB</configValue>
	</group>
</module>

DataSrouceA是构件包级别数据源名称,实际上只是一个别名,它引用了名称为defaultA的应用级别数据源;
上面的配置表示为当前的构件包创建了两个构件包级别的数据源:一个名字为" DataSourceA",另一个名字为"DataSourceB"。"DataSourceA"的构件包数据源引用的是名字为"defaultA"的应用级别数据源;"DataSourceB"的构件包数据源引用的是名字为"defaultB"的应用级别数据源。当在构件包中使用构件包级别数据源的时候,其实是使用对应的应用级别数据源。
举例:当在当前构件包中使用"DataSourceA"的构件包数据源,其实是获取应用级别数据源"defaultA"的数据源。

说明

构件包数据源其实就是对应用级别数据源的一个应用,或者称之为应用级别数据源的别名。



『相关搜索』
版本信息:kms v1.3 鄂ICP备2023004815号-1 51LA统计