JBoss数据库连接池

时间:2009-05-04 13:33:29

标签: jboss datasource connection-pooling

我是jboss的新手,我被要求将jboss连接池机制与现有的Web应用程序结合在一起。考虑到正确编写了一个Web应用程序数据库层,即所有结果集,语句和连接在不需要时正确关闭,在我正确配置jboss数据源后,我必须在我的Web应用程序中进行所有代码更改。

有人可以指点我在网络应用程序中使用jboss数据源的教程或代码示例。

3 个答案:

答案 0 :(得分:10)

首先按名称 xxx-ds.xml 创建一个xml文件,然后将此文件放在server/default/deploy/xxx-ds.xml

<datasources>
<local-tx-datasource>
<jndi-name>/jdbc/Exp</jndi-name>
<type-mapping>SQL</type-mapping>
<connection-url>jdbc:microsoft:sqlserver://          </connection-url>
<driver-class>com.microsoft.jdbc.sqlserver.SQLServerDriver</driver-class>
<user-name></user-name>
<password></password>
<min-pool-size>5</min-pool-size>
<max-pool-size>1000</max-pool-size>
</local-tx-datasource>
</datasources>

<强> jboss-web.xml

<jboss-web>
<!--  <security-domain flushOnSessionInvalidation="false"/>-->
<!--  <context-root>/BSI</context-root>-->
  <resource-ref>
        <description>Database connection resource</description>
        <res-ref-name>jdbc/Exp</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <jndi-name>java:/jdbc/Exp</jndi-name>
        <res-auth>Container</res-auth>
    </resource-ref>
</jboss-web>

<强> web.xml

<resource-ref>
    <description>Database connection resource</description>   
    <res-ref-name>jdbc/Exp</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>

现在在.java文件中

javax.naming.Context ctx1 = new javax.naming.InitialContext();
javax.sql.DataSource ds = (javax.sql.DataSource) ctx1.lookup("java:comp/env/jdbc/Exp");
con = ds.getConnection();

*****确保资源引用名称在所有位置都应该相同

答案 1 :(得分:8)

JBoss中的池都在DataSource配置中处理。 Here是HowTo。 Web应用程序必须对数据源执行JNDI查找以获取数据库连接,而不是执行直接JDBC URL,然后您将进行池化。

交易是另一个故事。

编辑:在回复您关于这会如何影响代码的评论时,这就是它的样子:

String jndiPath = "java:DataSourceJNDIName"; //The exact prefix here has a lot to do with clustering, etc., but if you are using one JBoss instance standalone, this works.
Context ctx = new InitialContext();
DataSource ds = (DataSource) PortableRemoteObject.narrow(ctx.lookup(jndiPath), DataSource.class);
Connection c = ds.getConnection();

从技术上讲,在JBoss(4.2.2无论如何)单服务器配置中,PortableRemoteObject.narrow是不必要的,但它是更合适的J2EE标准代码,因为通用应用程序服务器不必返回正确的类型只是用于执行Context.lookup。

以上内容不包括资源利用率和错误处理问题。当你完成它时,你应该关闭那个Context对象,当然还有数据库连接,尽管如果你忘记关闭数据库连接并且事务结束,JBoss会对你大喊大叫,并为你关闭它。

无论如何,Connection对象的使用和DriverManager.getConnection(url)一样多;

答案 2 :(得分:1)

您无需更改任何内容。 当您选择正确类型的数据源(local-tx-datasource / xa-datasource)时,将为您完成连接处理和TX。在$ JBoss / docs / examples / jca中,您可以找到几乎每个数据库的模板,您可以重复使用。

如果您使用XA,则需要配置Tx恢复。在方法文章中查看此帖子: http://management-platform.blogspot.com/2008/11/transaction-recovery-in-jbossas.html(好吧,也许不是独立模式下的操作方法,而是与Jopr源代码一起使用)。