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實例,即使讀取時限還沒過去。您可以將其看作沖洗實例緩存?梢允固囟╞ean的一個特定實例,任何實例子集,或者給定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.kjueaiud.com/