簡體   English   中英

在JBOSS應用程序服務器下運行的Java應用程序中的數據庫連接池

[英]Database Connection pooling in a Java application running under JBOSS application server

我試圖了解在JBOSS下部署的Java應用程序中的數據庫連接池。 順便說一句,數據庫連接沒有問題。 在JBOSS應用程序服務器中設置數據庫連接池,如下所示:

<datasource jta="false" jndi-name="java:/testDS" pool-name="testDS" enabled="true" use-java-context="true">
       <connection-url>jdbc:oracle:thin:@xxx</connection-url>
       <driver>oracle</driver>
       <pool>
             <min-pool-size>2</min-pool-size>
             <max-pool-size>15</max-pool-size>
             <prefill>true</prefill>
       </pool>
       <security>
             <user-name>admin</user-name>
             <password>admin</password>
       </security>
</datasource>

然后,我的Java代碼即可獲得連接,如下所示:

String jndiName = "java:/testDS";
InitialContext jndiCntx = new InitialContext();
DataSource ds = (DataSource) jndiCntx.lookup(jndiName);
Connection connection = ds.getConnection();

上面的代碼是否使用connectionpool? 如果是,以下代碼的目的是什么? 我有點困惑。 這兩個代碼段之間有什么區別?

InitialContext jndiCntx = new InitialContext();
ConnectionPoolDataSource cpds = (ConnectionPoolDataSource) jndiCntx.lookup(jndiName);            
PooledConnection pc = cpds.getPooledConnection();
Connection connection = pc.getConnection();

如果您查看由ConnectionPoolDataSource返回的PooledConnection( http://docs.oracle.com/javase/7/docs/api/javax/sql/PooledConnection.html )上的JavaDoc,您可以閱讀:

應用程序程序員不直接使用PooledConnection接口;而是直接使用PooledConnection接口。 相反,它由管理連接池的中間層基礎結構使用。

當應用程序調用方法DataSource.getConnection時,它將獲取一個Connection對象。 如果完成連接池,則該Connection對象實際上是PooledConnection對象的句柄,該對象是物理連接。

數據源的典型用法如下所示:

@Stateless
public class MyBean {

    @Resource(lookup = "java:/testDS")
    private DataSource dataSource;

    public void testDatasource() {
        try (Connection connection = dataSource.getConnection()) {

            // use the connection 

        } catch (SQLException e) {
            throw new SomeRuntimeException(e);
        }
    }
}

重要的是使用后請關閉連接。 最好的方法是嘗試自動關閉。 否則,您的服務器將用盡連接。

使用“ @Statless”啟動事務。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM