2014-03-27 25 views
0

我們有一個應用程序使用數據庫的身份驗證,然後將其用於連接。這意味着,當他們登錄到應用程序時,應用程序會嘗試與該數據庫的用戶名/密碼建立連接,並將該連接用於會話。因此,如果Fred使用用戶名「fred」登錄應用程序,那麼數據庫中應該有一個名爲「fred」的用戶,並且Fred在他使用該應用程序時將使用該連接。如何在Wildfly/JBoss中禁用連接池?

我們已經有一個數據源來處理這個數據源,如果我們關閉數據庫連接池,它可以在Glassfish中找到。現在我們想遷移到蜻蜓,但似乎無法得到這個工作。

當應用程序啓動時,它會在Wildfly的數據庫描述符中使用用戶名/密碼運行「初始化」查詢。這正確運行。當我們嘗試登錄時,連接屬於初始化查詢中的用戶。

我試着將min-pool-size和max-pool-size設置爲1,這導致我們的JPA實現拋出「無法獲得託管連接」異常。

以下配置獲取應用程序啓動,但無法登錄,因爲登錄用戶沒有連接上的用戶名匹配:

<pool> 
    <min-pool-size>1</min-pool-size> 
    <max-pool-size>2</max-pool-size> 
    <use-strict-min>true</use-strict-min> 
    <allow-multiple-users>true</allow-multiple-users> 
    <prefill>false</prefill> 
    </pool> 

看來,連接池是搞亂我們。有沒有人有任何想法如何關閉池?或者有沒有人有任何想法來解決這個問題?

回答

0

我想通了我做錯了什麼。 。原始數據源代碼從未稱爲getConnection(username,password)。一旦我改變了這一點,事情似乎運作良好。

2

我永遠不會有一個應用程序設計來訪問數據庫與他們登錄到應用程序用戶相同的用戶。由於諸多原因和數據庫管理噩夢,這似乎是一個糟糕的主意。

合併存在的原因是,連接可以被應用程序重複使用,並且您沒有爲每個用戶或會話打開和關閉連接的開銷。如果您有500個用戶,那麼您將擁有500個連接,這些連接大部分時間都處於空閒狀態,或者可能過時等。如果您需要記錄訪問數據庫的人員,則可以簡單地記錄它或將表格應用程序將該信息寫入。

+0

我不是說這是一個好主意 - 但這是在我的時間早已確定的設計。而且,說實話,這個應用程序上的500個用戶會是很多用戶。 – MikeHoss