2010-09-14 60 views
4

當試圖從swing應用程序連接到glassfish v3時,它第一次非常慢。需要4-10秒。 在客戶端:
首先連接到Glassfish v3的速度很慢

public void myMethod(){ 
    NewSessionBeanRemote facade; 
    try { 
     InitialContext ic = new InitialContext(); 
     facade = (NewSessionBeanRemote) ic.lookup(NewSessionBeanRemote.class.getName()); 
     target.setText(facade.businessMethod()); 
    } catch (NamingException ex) { 
     ex.printStackTrace(); 
    } 
} 

在服務器端:

@Stateless 
public class NewSessionBean implements NewSessionBeanRemote { 

    @Override 
    public String businessMethod() { 
     return String.valueOf(Math.random() + 121 + 300); 
    } 
} 

@Remote 
public interface NewSessionBeanRemote { 

    String businessMethod(); 

} 

我需要什麼環境中的變化?

+1

我之前沒有帶使用Glassfish的,但可能這僅僅是標準的Java虛擬機器冷啓動? – Syntax 2010-09-14 08:57:47

+0

服務器正在運行。所有其他時間我都會立即獲得數據。 – Dmitry 2010-09-14 09:02:34

回答

0

當試圖從swing應用程序連接到glassfish v3時,它第一次非常慢。

可能是由於lazy initialization of Application Server services(EJB容器,連接池,...)。

需要4-10秒。

接下來的調用怎麼樣?

+0

後續調用是30毫秒 – Dmitry 2010-09-14 09:39:54

+0

如何關閉延遲初始化? – Stan 2012-01-24 08:33:29

0

這就是Java EE的工作原理。當頁面首次被調用時,所有的JSP都被編譯並且所有的bean都被實例化。即使您關閉延遲初始化,您也必須在啓動時等待相同的時間。

引文從wikipedia.org https://en.wikipedia.org/wiki/JavaServer_Pages#Compiler

甲JavaServer頁編譯器是一個分析的JSP的程序,並且 將它們轉換爲可執行的Java Servlet的。這種類型的程序 通常嵌入到應用程序服務器中,並在第一次訪問JSP時自動運行 ,但頁面也可能被預編譯爲 以獲得更好的性能,或者編譯爲構建過程的一部分,以 進行錯誤測試。

如果你願意,你可以嘗試預編譯的一切,看看它是否效果更好:

http://www.avajava.com/tutorials/lessons/how-do-i-precompile-my-jsps.html