44 Application Module Pools及Connection Pools 调优

该章节将阐述ADF BC的AM池如何工作,如何调整AM池及数据库连接池来优化ADF应用。共包含三个部分:

1)介绍AM池。

2)如何设置AM池及数据库连接池的参数。

3)初始化数据库状态及针对池的考量。
4)基于发布环境的调整。


44.1

      所谓的AM池是指相同类型AM实例的集合。例如在Funsion Order应用的例子中,基于不同数量用户的访问会有一个或多个AM实例服务于这些用户。由于多个用户使用浏览器提交页面之前都会有思考时间,因此AM实例池可以优化实例的数量,使得共享在多个用户间的实例数量小于用户数以此提高使用效率。这意味着,同时有20个用户使用该系统时,不需要给每个用户都提供一个不同的实例,只需要5-10个AM实例就可以提供服务。因此AM池不仅可以用更少的AM实例服务更多的用户,而且可以根据硬件资源的限制来进行平衡,使得中间层可以使用较少的内存维护少量的AM实例。
      AM组件可以处理单个web请求,同时也可以用来处理跨多个页面的复杂交互。由于性能优化的需要,当一个AM实例以"manage state"模式返回AM池时,实例池会记录该实例的session引用。该实例在池里仍然标记为可用,但会优先分配给最后一次使用该实例的session,使用该种称之为“session affinity“的方式会提高系统性能。
     根据AM池里的实例状态,可以把它们归为以下三组:
     1.无条件可被使用
     2.优先被相同session使用
     3.无法使用(正被web容器内的其它线程使用)

44.1.1 Funsion Web应用创建的各种类型的池
     一个典型的Fusion Web应用通常包含两种类型的池,AM实例池和数据库连接池。理解应用创建多少个每种类型的池非常重要。

44.1.1.1 AM实例池
     有两种方式在运行期使用AM组件,
  •      客户端的直接访问
  •      作为重用组件嵌套到其他AM组件中
     当客户端直接访问AM组件时,该组件被称为根组件(root application module)。客户端也可以间接的通过根组件访问嵌套组件。同一AM组件可以同时使用这两种方式运行,但通常不这么做。记住,ADF仅为根组件创建AM实例池。
     基本的规则是,每个JVM上的每个Funsion Web应用会为每个根组件创建一个AM实例池。     

44.1.1.2 数据库连接池
     
     Fusion Web应用所使用的数据库连接池类型取决于你对AM连接类型的配置信息:
  •      JDBC URL
  •      JNDI name for a data source
     如果选择JDBC URL方式,那么将使用ADF data connection pool的方式来管理数据库连接。
      如果使用JNDI的方式,则不会使用ADF数据库连接池的配置,而将使用中间件应用服务器关于datasource的配置信息。

     使用ADF数据库连接池的基本规则是:每个 JVM的根组件的<JDBCURL,Username>将创建一个数据库连接池

44.1.2 理解AM池及数据库连接池

     目标平台的配置决定了应用如何分配利用池的种类及数量。例如,由基于多个虚拟机或者多个Weblogic域的应用提供服务给用户的情况下。为了更好的理解在单个及多个JVM运行环境下如何创建池,假设有如下场景:
     
     该Fusion Web应用使用两个APP Module:HRModule及PayablesModule。一个CommonLOVModule包含多个公共的LOV,HRModule及PayableModule为了访问这些LOV引用了该APP Module。配置HRModule及PayablesModule使用相同的数据库定义appuser。两者都是用参数 jbo.passivationstore=database的默认配置,并配置ADF“内部连接“(job.server.internal_connection)用来处理状态管理的持久化,使用和appuser不同的JDBC用户配置。


44.1.2.1 单个Oracle Weblogic域/Weblogic Server实例/JVM

     假设所有用户都能访问HRModule及PayablesModule,该应用发布到了单个Weblogic域中,且仅基于一个Weblogic Server实例及JVM,那么会有如下关于该应用的池创建及使用情况:
  •      共有两个AM池,一个为HRModule根组件使用,另一个为PayableModule根组件使用。
  •      共有两个数据库连接池,一个为appuser,另外一个用来支持state management。
  •      CommonLOVModule由于仅被其他AppModule所引用,因此没有单独的AM池。
44.1.2.2 多个Oracle Weblogic域/Weblogic Server实例/JVM

     假设有四部机器服务于两个Oracle Domain,前端使用负载均衡控制,每部机器包含一个weblogic server实例及一个JVM。用户的请求在两个domain之间共享,每个domain包含两个Weblogic Server实例,那么会有如下的情况:     
  •      每个JVM都会创建一个HRModule AM池及一个PayablesModule AM池。
  •      每个JVM都会创建一个appUser数据库连接池及state Management数据库连接池。
     当开始下面AM池参数配置的学习时,谨记这参数只针对单个JVM的AM。
     
     负载均衡会把ADF应用的请求分发到多个JVM去,每个JVM上的AM池需要支持1/n的用户请求(这里的n是指JVM的数量)。当设置这些池的参数时,需要和JVM的数量一并考量。基本的方法是,基于负载测试对AM的测试结果,所需要的AM实例总的数量除以该应用所使用的域及Weblogic Server实例的数量。例如,如果最少需要10个AM实例,且该AM发布在5个Weblogic Server实例上,那么该值应该设置为2而不是10,更多细节请参看下面的信息。

44.2.1 如何设置声明式的配置属性

     BC配置对话框里面的Pooling and Scalability页面用来设置AM池及数据库连接池的相关参数,如下图所示:

      Figure 44-1 Pooling and Scalability Tab of the Configuration Manager
     
     
      如何跳到该页面?
     在Application导航页面,双击选定的application module。在该application module的概要页面点击”配置“。在“配置”页面里面双击你想编辑的内容,然后在BC配置对话框内选择"Pooling and Scalability“页面。

44.2.2 设置声明式的配置属性会发生什么?
     配置信息将会保存到AM组件的定义文所属目录下的common子目录中名为bc4j.xcfg的XML文件,且在同一java包内的所有AM的相关配置信息都会保存到该文件下。
     例如,你在Fusion Order示例应用的StoreFront项目中,在目录 .src/oracle/fodemo/storefront/store/service/common中查看bc4j.xcfg文件会发现三个关于StoreServiceAM的配置信息。如下所示:

Example 44-1 Configuration Settings for the StoreService Application Module
<BC4JConfig version="11.1" xmlns="http://xmlns.oracle.com/bc4j/configuration">
   <AppModuleConfigBag ApplicationName="oracle.fodemo.storefront.store.service.StoreServiceAM">
      <AppModuleConfig 
             DeployPlatform="LOCAL" 
             JDBCName="FOD" 
             jbo.project="StoreFrontService"
             name="StoreServiceAMLocal"
             ApplicationName="oracle.fodemo.storefront.store.service.StoreServiceAM">
         <Database jbo.locking.mode="optimistic"/>
         <Security AppModuleJndiName="oracle.fodemo.storefront.store.service.StoreServiceAM"/>
      </AppModuleConfig>
      <AppModuleConfig 
               DeployPlatform="LOCAL" 
               JDBCName="FOD"
               jbo.project="StoreFrontService" 
               name="StoreServiceAMLocalWeb" 
               ApplicationName="oracle.fodemo.storefront.store.service.StoreServiceAM">
         <AM-Pooling jbo.ampool.initpoolsize="1"/>
         <Database jbo.locking.mode="optimistic"/>
         <Security AppModuleJndiName="oracle.fodemo.storefront.store.service.StoreServiceAM"/>
         <Custom fod.application.issoaenabled="true"/>
      </AppModuleConfig>
      <AppModuleConfig 
               name="StoreFrontService"
               ApplicationName="oracle.fodemo.storefront.store.service.StoreServiceAM"
               jbo.project="StoreFrontService"
               DeployPlatform="SI">
         <AM-Pooling jbo.ampool.resetnontransactionalstate="true"/>
         <Database jbo.SQLBuilder="ORACLE" jbo.locking.mode="optimistic"
                   jbo.TypeMapEntries="Java"/>
         <Security AppModuleJndiName="oracle.fodemo.storefront.store.service.StoreServiceAM"/>
         <Custom JDBCDataSource="java:comp/env/jdbc/FODDS"/>
      </AppModuleConfig>
   </AppModuleConfigBag>
</BC4JConfig>
在这个例子中,StoreServiceAMLocal和StoreServiceAMLocalWeb配置使用了为Oracle ADF Model Tester而配置的JDBC URL链接。数据库连接的具体信息保存在相关项目目录的./.adf/META-INF/connections.xml文件中,第三个配置使用了JDBC Data source。

     
     






















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值