2016-04-18 207 views
0

我是JSF/Facelets的新手,我正在創建一個應用程序,該應用程序對(無SQL)數據庫執行通常的CRUD操作。數據庫有一個API,允許創建一個連接池,然後從這個對象我的操作可以獲取和釋放連接。我想這個池必須在部署時爲整個應用程序創建一次,共享(如靜態?)並在應用程序銷燬後關閉。我的方法是否正確?最佳做法是什麼?我不知道應該在哪裏放置我的代碼,以及我應該如何調用它。我應該在JSF應用程序中創建我的ConnectionPool?

用我以前的SQL數據庫,我在context.xml資源中配置了「testOnBorrow」和「validationQuery」,所以我不必通過編程方式創建顯式池。

我發現了兩個很棒的教程(herehere),但我無法從他們那裏找出在哪裏放置創建池的代碼。

注:我知道這可能只有一個Servlet的問題,但我標記它作爲JSF,因爲我不知道是否有一種方法在JSF做到這一點(如應用程序作用域bean)。謝謝。


編輯

望着事實,我無法找到一個DataSource數據庫的一個JAR通過context.xml被加載,也許我的問題應該更具體:我在哪裏可以運行代碼一次,當部署JSF應用程序時,我在哪裏可以在JSF應用程序被銷燬時運行代碼?

+0

只要你的連接池是線程安全的,我會用'@ Singleton'豆去。 –

+0

您是使用標準Java EE堆棧還是基於定製Tomcat的堆棧?答案取決於此。 DAO文章假定基於定製Tomcat的堆棧。但是你給這個問題添加了標籤[java-ee],它增加了一些含糊性。無論如何,假設Tomcat,這有幫助嗎? http://stackoverflow.com/q/2299469 – BalusC

+0

我認爲這有助於,謝謝。我正在使用TomEE。所以我需要做的是創建一個創建ConnectionPool對象的類,使用@Resource(「jdbc/some_name」)對其進行標記,然後從context.xml「 user1156544

回答

0

您可以實現weblistner(即ServletContextListener)。並且可以使用contextInitialized,那contextDestroyed方法來創建和銷燬連接池

樣品:

@WebListener 
public class ContextWebListner implements ServletContextListener { 

    @Override 
    public void contextInitialized(ServletContextEvent event) { 
     // initialize connection pool. 
    } 

    @Override 
    public void contextDestroyed(ServletContextEvent event) { 
     // Destroy connection pool. 
    } 

} 
相關問題