2014-01-17 84 views
0

蔭無法理解如何(使用使用DBCP連接池IAM)如何獲得靜態連接對象的情況下彙集?

MyServlet //不是一個完整的代碼

class MyServlet extends HttpServlet { 

    public Datasource getDatasource(){ 

    Class.forName(driver).newInstance(); 

       ConnectionFactory connectionFactory = new DriverManagerConnectionFactory(connectUri, username, password); 

       PoolableConnectionFactory poolableConnectionFactory = new PoolableConnectionFactory(connectionFactory, new GenericObjectPool(null), null, "SELECT null", false, true); 

       connectionPool = new GenericObjectPool(poolableConnectionFactory); 
       connectionPool.setMaxActive(10); 
       connectionPool.setMaxIdle(4); 

return new PoolingDataSource(connectionPool); 

    } 

現在我有這樣的事情裏面getConnection方法來獲得其他類連接MyServlet

public static Connection getConnection() { 


    } 

A)我如何使用getConnection()中的datasource靜態方法?我不想做了getDataSource()的靜態方法,然後使用,因爲我覺得當我們使用池機制使用靜態危險

B)請告訴我一個辦法讓最終靜態的getConnection(),並滿足集中merchanism完美..

回答

0

我建議去爲Singleton模式來獲得連接服務的目的。

1) Make a private static final PoolingDataSource reference in your 
Servlet class 

2) Make your getDataSource() method static. Construct the 
PoolingDataSource instance when the PoolingDataSource reference in 
the Servlet class is null and return it to the calling method. 
Otherwise, just return the already initialized instance of 
PoolingDataSource 

3) Get the DataSource in the calling method and create new 
connections from it 

4) Close the Connection objects after use, in finally block 
+0

是不是可以在getConnection()靜態方法裏面獲取連接對象? – user3128668

+0

是的,這是可能的。這就是我在我的答案中提到的。即調用方法是getConnection()在這裏 – Keerthivasan

+0

我沒有得到你..我的主要問題是:我可以通過在getCOnnection()的靜態方法內執行datasource.getConnection()來獲取連接對象,但這樣做,使我使'數據源'靜態.. 請嘗試瞭解我的問題.. – user3128668

相關問題