2009-12-15 124 views
1

我們正在運行無狀態會話Bean以從各個位置檢索一些數據。無狀態會話bean結果緩存?

實現此SLSB緩存的最佳方式是什麼?

使用攔截器?使用JBossCache?

我們使用的是JBoss 5.0.1。

回答

1

從技術上講,您可以在無狀態會話bean中保留狀態,只是狀態可以在調用之間由容器清除。因此,您不應該將緩存本身保留在bean中,因爲它可能會消失。

由於您已經使用了JBoss Appserver,因此JBossCache在這裏看起來像是個明顯的贏家。您可以使用jboss服務描述符配置JBossCache實例,然後您的EJB可以從JMX/JNDI中查找緩存實例。它全部包含在JBossAS中,所以不需要額外的依賴關係。

如果您感興趣的話,使用JBossCache還可以爲您提供跨羣集分佈的緩存額外獎勵。

+1

是否有任何現有的攔截器來實現這一點? (例如,將使用方法參數作爲緩存鍵的攔截器......) 我不希望將業務代碼與緩存代碼混合在一起。 – jruillier 2009-12-16 09:51:50

+0

我不知道這種現成的東西,但JBoss EJB攔截器很容易編寫,所以你可以推出自己的。 – skaffman 2009-12-16 09:55:56

0

無用會話bean本身無法在調用之間保存數據,因爲名稱說它是無狀態的。然而。你可以創建一個有狀態的會話bean來保存你的緩存,並將這個bean傳遞給你的無狀態bean方法。

void someMethod(StateFulBean sfb){ 
    Cache cahce = sfb.getCache(); 
    ... 

} 

當使用EBJ 3.1,您還可以使用Singleton註解並注入高速緩存作爲一個單身到您的無狀態會話bean。

+0

EJB中引用的「狀態」是對話狀態,而不是對象狀態。 SLSB可以擁有儘可能多的狀態,只是在同一個bean的兩個不同調用之間無法存活的狀態。 – skaffman 2009-12-15 17:23:13

+0

我指的是談話狀態。也許我沒有表達清楚,但因爲我不是母語英語的人,所以我請求你原諒。 – Sylar 2009-12-16 07:53:10