【问题标题】:Database Connection pooling in a Java application running under JBOSS application server在 JBOSS 应用服务器下运行的 Java 应用程序中的数据库连接池
【发布时间】:2015-10-14 15:40:41
【问题描述】:

我试图了解部署在 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();

上面的代码是否使用了连接池?如果是,以下代码的目的是什么?我有点困惑。这2个代码sn-ps有什么区别?

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

【问题讨论】:

    标签: java jakarta-ee jboss database-connection connection-pooling


    【解决方案1】:

    如果您查看 PooledConnection 上的 JavaDoc ( http://docs.oracle.com/javase/7/docs/api/javax/sql/PooledConnection.html) 这是 ConnectionPoolDataSource 返回的,你可以阅读:

    应用程序员不直接使用 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”启动事务。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-02
      • 1970-01-01
      • 1970-01-01
      • 2018-10-18
      • 2014-02-03
      • 2012-06-27
      • 2019-02-10
      相关资源
      最近更新 更多