WebLogic Server中CMP实体bean的性能调优[4]

发表于:2010-03-10来源:作者:点击数: 标签:CMPBeanWeblogic实体SERVER
WebLogic Server中CMP实体bean的性能调优[4] 软件测试 只读并发 最后一个并发策略是read-only并发。如果 数据库 中的某些表包含很少或从未被更改过的数据,那么就很有必要将CMP bean声明为只读。 服务器 仍然为每个事务激活一个新的bean实例,所以请求是并行

  WebLogic Server中CMP实体bean的性能调优[4]   软件测试

  只读并发

  最后一个并发策略是read-only并发。如果数据库中的某些表包含很少或从未被更改过的数据,那么就很有必要将CMP bean声明为只读。服务器仍然为每个事务激活一个新的bean实例,所以请求是并行处理的;它不会每次都调用ejbLoad(),但是根据read-timeout-seconds参数的值周期性地调用。这为您的应用程序带来了显著的性能提升,因为SQL选择只进行一次(第一次访问实体bean时),然后就被缓存起来,在后面的事务中重用。

  WebLogic Server 8.1 SP2之前版本中的一个特殊功能是,即使bean被部署为只读,开发人员仍然可以对该bean的实例进行create和remove操作。从8.1 SP2开始,这个功能在默认情况下已被禁用,但是如果您需要,可以通过在weblogic-cmp.jsr.xml中将allow-readonly-create-and-remove元素设置为true来打开它。

  也有一种明确禁用只读实体bean的方法。该禁用操作强制在下一次事务开始时从数据库中刷新bean实例,即使读取时限还没过去。您可以将其看作冲洗实例缓存。可以使特定bean的一个特定实例,任何实例子集,或者给定bean的所有实例无效。要想调用invalidate()方法,您可能需要将bean的home或local home分别转换为CachingHome或CachingLocalHome。下面的代码说明了如何实现这一点:

  Object o = context.lookup("MyBeanCMP");

  // cast to CachinHome for remote interface or CachingLocalHome

  // for local

  CachingHome cachingHome = (CachingHome)o;

  // invalidate particular instance by passing primary key value

  cachingHome.invalidate(pk);

  // invalidate any subset of bean instances by passing collections

  // of primary keys

  Collection pks = Array.asList(new Object[]{pk1, pk2, ...., pkN});

  cachingHome.invalidate(pks);

  // or invalidate all instances currently cached

  cachingHome.invalidateAll();

  当表中的数据准静态时(比如,如果它按照批处理过程每天更改一次)进行显式的无效操作很有用。这种情况下,您可以将相应的bean部署为只读,并且设置一个较大的读取超时值,然后,当批处理过程结束时,为这些实体bean调用invalidateAll()。

  您可以通过在weblogic-ejb-jar.xml部署描述符中entity-cache一节中设置concurrency-strategy元素,为每个CMP bean指定一种并发策略。如果没有指定并发策略,WebLogic Server默认使用数据库并发。

  性能改善策略

原文转自:http://www.ltesting.net