标签: apache-commons-dbcp

使用Oracle DB在Java Web应用程序中超过最大空闲时间

我有一个Java Web应用程序连接到另一台机器上运行的Oracle数据库(不确定这是否相关).我正在使用DBCP进行连接池.Web应用程序在JBoss 4.2.2中运行,我们将数据源定义为Spring中的bean.

我们正在使用Hibernate进行ORM.

我们偶尔会遇到错误:"ORA-02396:超过最大空闲时间,请再次连接".

我尝试将名为"removeAbandoned"(true)和"removeAbandondedTimeout"(120)的DBCP BasicDataSource添加属性无效.

任何帮助,将不胜感激.如果我需要提供更多信息,请告诉我 - 我不是那么了解连接池的内部工作等等...

java oracle apache-commons-dbcp

3
推荐指数
1
解决办法
7695
查看次数

如何配置DBCP PoolableConnectionFactory?

这是我使用DBCP 1.4连接工厂创建DataSource的方法:

PoolableConnectionFactory factory = new PoolableConnectionFactory(
  new DriverManagerConnectionFactory("jdbc:h2:mem:db", "", ""),
  new GenericObjectPool(null),
  null,
  "SELECT 1",
  false,
  true
);
DataSource src = new PoolingDataSource(factory.getPool());
Run Code Online (Sandbox Code Playgroud)

工作正常,但我不知道如何配置它,参数列在这里:http://commons.apache.org/dbcp/configuration.html.例如,我需要设置testWhileIdletrue.

java jdbc apache-commons-dbcp

3
推荐指数
1
解决办法
8590
查看次数

JTDS驱动程序 - 连接池与连接池

我有一段时间远离Java EE,但我对所有这些东西都有一个基本的想法.

我在这里阅读JTDS文档:

http://jtds.sourceforge.net/features.html

它说它提供了语句池和连接池,但没有提供连接池实现.

  1. 如果JTDS驱动程序本身提供连接池,那为什么我需要一个连接池(如DBCP)呢?
  2. 换句话说,JTDS提供的连接池与完整的连接池实现(在此JTDS文档页面意义上)之间有什么区别?
  3. 另外,语句和连接池之间的区别是什么(如此JTDS文档页面中所述)?

随意添加更多细节到您的答案
(无论您发现什么重要;我没有明确询问的事情),
因为我对此非常困惑.

java jtds jdbc java-ee apache-commons-dbcp

3
推荐指数
1
解决办法
2311
查看次数

使用jTDS驱动程序的Kerberos和集成安全性

到目前为止,我们使用MS JDBC Driver 4.0使用集成安全性和Java Kerberos连接到SQL Server 2008,一切正常.

这是代码:

春天背景:

<!-- ***** Data Source Configuration ***** -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
    destroy-method="close">
    <property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver" />
    <property name="url"
        value="jdbc:jtds:sqlserver://<serverName>:<port>;databaseName=<DBName>;integratedSecurity=true;authenticationScheme=JavaKerberos; />
    <property name="initialSize" value="5" />
    <property name="maxActive" value="2" />
    <property name="defaultAutoCommit" value="false" />
</bean>

<!-- ***** Transaction Manager ***** -->
<bean id="txManager"
    class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource" />
</bean>
<tx:annotation-driven transaction-manager="txManager" />

<!-- ***** JDBC Configuration ***** -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    <constructor-arg type="javax.sql.DataSource" ref="dataSource" />
</bean>
Run Code Online (Sandbox Code Playgroud)

login.conf文件:

com.sun.security.jgss.krb5.initiate {
   com.sun.security.auth.module.Krb5LoginModule required
   useTicketCache=false
   doNotPrompt=true
   useKeyTab=true …
Run Code Online (Sandbox Code Playgroud)

java kerberos jtds integrated-security apache-commons-dbcp

3
推荐指数
1
解决办法
6415
查看次数

JPA/EclipseLink:了解ClassLoader问题

编辑:虽然给出并给出了一个(好的)答案,但这只涉及我的问题中一个相当不重要的部分.这个问题的主要部分仍然是开放的.

我在云项目中使用EclipseLink(2.6.2).该项目是一个打包为WAR文件并部署在Apache Tomcat 8上的Web应用程序.持久化上下文是使用Java代码设置的,我在其中指定要使用的实体entityManagerFactoryBean.setPackagesToScan(packagesToScan).此配置通常按预期工作,其中确切地找到指定包中的实体类.

我现在无法理解何时使用哪个类加载器,尤其是在考虑Tomcat,运行测试和使用不同的连接池实现时.

在包含Tomcat连接池的Apache Tomcat上运行时,DataSource使用spring-cloud-connectorplugin(spring-cloud-spring-service-connector)创建实例.在这个设置中,一切都按预期工作,只要我不改变下面描述的类加载器(否则我面对ClassNotFoundException实体类).

当的帮助下运行单元测试JUnitspring-testDataSource实例使用的内存数据库H2(使用创建EmbeddedDatabaseBuilderspring-jdbc).在此设置中,我必须指定JPA以使用用于DataSource实例的类加载器(eclipselink.classloaderJPA属性映射中的键),否则我得到"对象...不是已知的实体类型".

在嵌入式Apache Tomcat 8中运行测试时,我看不到任何指示正在使用的连接池的消息.在这个设置中,我还必须为单元测试设置类加载器.

如果我将commons-dbcp(2.1.1)添加到我的项目并显式配置spring-cloud-connector插件以使用它而不是Tomcat的连接池,我可以在Tomcat上运行应用程序而无需配置类加载器,但它也适用于上述类加载器规范.

对于测试,commons-dbcp与上面概述的情况相比,没有任何改变(因为没有使用相应的配置).

摘要:

  • Tomcat(Tomcat CP):仅对JPA使用未修改的类加载器
  • Tomcat(DBCP):两种变体
  • 测试:仅使用DataSourceJPA的类加载器

你能帮我理解这里的不同之处,并建议一个适合所有情况的简单解决方案吗?我假设DBCP和Spring使用与Tomcat(和Tomcat的连接池)不同的类加载器.

如果您需要更多信息,我很乐意添加它.

编辑:我添加了一个示例项目,其中包含有关如何重现的大型自述文件.

https://github.com/C-Otto/classloaderexample

java jpa classloader eclipselink apache-commons-dbcp

3
推荐指数
1
解决办法
799
查看次数

获取连接池中的空闲连接数

在我的项目中,Spring使用org.apache.commons.dbcp.BasicDataSource类管理连接池.是否可以获取当前时间内有多少个免费或使用的连接?

谢谢.

java spring connection-pooling apache-commons-dbcp

2
推荐指数
1
解决办法
7990
查看次数

将公共DBCP从1.2升级到1.4,我应该害怕吗?

我想知道那里是否有任何重大问题.在我的项目中升级jar后,编译完所有内容.我没有在发行说明中看到任何让我不寒而栗的东西,但我想仔细检查一下.

java upgrade backwards-compatibility apache-commons apache-commons-dbcp

2
推荐指数
1
解决办法
1699
查看次数

使用Spring + dbcp刷新DataSource

我正在使用Spring和DBCP,并且当操作环境上的某些配置发生更改时需要刷新我的数据源,而无需重新启动所有应用程序.

如果我在不使用DBCP的情况下执行此操作,则强制此刷新关闭当前正在打开的数据源并启动DataSource的新实例.

使用DBCP + Spring,我不能这样做.

有人知道是否有可能吗?

java spring datasource apache-commons-dbcp

2
推荐指数
1
解决办法
5134
查看次数

javax.servlet.ServletException:java.lang.NoClassDefFoundError:org/apache/commons/pool/KeyedObjectPoolFactory

我正在尝试BasicDataSource使用DBCP建立与Oracle数据库的连接.

commons-dbcp-1.4-bin.zip这里下载.

类路径上有三个jar文件.

  1. 公地DBCP-1.4
  2. 公地DBCP-1.4-源
  3. 公地DBCP-1.4-的javadoc

我正在使用以下代码建立连接.

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.apache.commons.dbcp.BasicDataSource;

public class DatabaseConnection {

    private final static BasicDataSource BASIC_DATA_SOURCE = new BasicDataSource();
    private final static String SQL = "SELECT * FROM admin WHERE login_id=? AND admin_pwd=?";

    static {
        BASIC_DATA_SOURCE.setDriverClassName("oracle.jdbc.OracleDriver");
        BASIC_DATA_SOURCE.setUrl("jdbc:oracle:thin:@localhost:1521:xe");
        BASIC_DATA_SOURCE.setUsername("wagafashiondb");
        BASIC_DATA_SOURCE.setPassword("root");
    }

    private static Connection getConnection() throws SQLException {
        return BASIC_DATA_SOURCE.getConnection();
    }

    public boolean exists(String userName, String password) throws SQLException {
        Connection …
Run Code Online (Sandbox Code Playgroud)

java database-connection oracle10g apache-commons-dbcp

2
推荐指数
1
解决办法
6097
查看次数

Apache DBCP中的maxWait是什么?

我试图了解org.apache.commons.dbcp.BasicDataSource中的maxWait是什么.文档说它是:

池将在抛出异常之前返回的连接等待(当没有可用连接时)的最大毫秒数,或<= 0无限期等待.

但我还是无法理解.我试着去谷歌,但我的怀疑只是增加了.

我看到两种解释这个定义的方法:

  1. maxWait是使用此池的应用程序将等到它获得异常(如果池没有可用于返回应用程序的空闲连接)的最大毫秒数.即如果池没有空闲连接,应用程序将等待新连接的这段时间,直到它获得异常.
  2. maxWait是可以打开连接的最大毫秒数.如果此类连接未在此时间内关闭,则池将引发异常.

请帮助我理解哪个陈述是真的.或者可能还有其他一些定义:)

java apache-commons-dbcp

2
推荐指数
1
解决办法
7355
查看次数