JBoss数据库连接池

7

我刚接触jboss,并被要求将jboss连接池机制与现有的Web应用程序结合起来。考虑到Web应用程序数据库层已经正确编写,即在不需要时关闭所有结果集、语句和连接,那么在我正确配置了jboss数据源后,我需要对我的Web应用程序进行哪些代码更改。

请问有人可以指向一个使用jboss数据源的教程或代码示例吗?


配置JBoss是交易的一部分,网上有很多示例和教程。我关心的是代码库可能需要的更改。请问有人可以指向一个示例或教程,让我看看如何从JBoss数据源中检索连接以及稍后应该如何处理它,即关闭或释放连接。谢谢。 - Salman A. Kagzi
3个回答

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();

请确保所有的资源引用名称在各处都相同。


8
JBoss中的连接池都在DataSource配置中处理。这里是操作指南。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)一样可用。

1

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

如果您正在使用XA,则需要配置Tx-recovery。请参阅此帖子以获取如何操作: http://management-platform.blogspot.com/2008/11/transaction-recovery-in-jbossas.html(也许不是独立模式下的操作指南,但与Jopr源代码一起使用)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接