[英]JSF + Stateless EJB performance
我有一個在GlassFish v3上運行的JSF 2.0應用程序。 它具有通過JPA為主應用程序會話提供數據庫數據的EJB。 即使在非IDE app-server上,EJB調用也非常慢。 在某些頁面之間,用戶必須等待10秒以上才能進入下一頁。
EJB在同一個應用程序服務器上運行,只使用Local
接口。 EJB通過@EJB
注釋注入。
有線索嗎?
謝謝,丹尼爾
編輯請參閱我的解決方案的答案。
如果沒有對代碼進行概要分析和/或對業務邏輯中的每個部分進行單元測試,就很難分辨出哪一步確實花了那么多時間。 我最初的懷疑是數據庫性能。 也許該表包含數百萬條記錄並且編制索引很差,導致簡單的SELECT
需要很長時間。 可能網絡帶寬很差,導致需要更多時間來傳輸數據。
在這一點上,盡管給出了很少的信息,但它可以是一切。 我只是簡介它。
在調試時,應用程序停留在EJB調用幾秒鍾,之后它跳入EJB方法並且運行正常。
您需要提供更多詳細信息:
Local
或Remote
接口嗎? 客戶端(webapp)是否在遠程計算機上? System.nanoTime()
) 回答這些問題應該有助於確定在哪里尋找和可能的原因。
之前的問題是, Local
和Remote
接口都已實現,並且只使用了Remote
接口,但是沒有必要這樣做。 兩個接口都有相同的方法,根據我得到的NetBeans警告消息,這是可以避免的:
當會話bean具有遠程以及本地業務接口時,兩個接口都不應該有任何共同的方法。
更詳細地說:
遠程業務方法的調用語義與本地業務方法的調用語義非常不同。 因此,當會話bean具有遠程和本地業務方法時,兩個接口都不應該有任何共同的方法。 以下示例是一個不正確的用例:
Remote public interface I1 { void foo();}
Local public interface I2 { void foo();}
Stateless public class Foo implements I1, I2 { ... }
因此解決方案是刪除Remote
接口,並將應用程序邏輯設置為使用Local
接口。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.