我是 jboss 的新手,我被要求将 jboss 连接池机制与现有的 Web 应用程序结合起来。考虑到正确编写了 Web 应用程序数据库层,即在不需要时正确关闭所有结果集、语句和连接,在我正确配置 jboss 数据源后,我必须在我的 Web 应用程序中进行的所有代码更改。
任何人都可以向我指出在 Web 应用程序中使用 jboss 数据源的教程或代码示例。
我是 jboss 的新手,我被要求将 jboss 连接池机制与现有的 Web 应用程序结合起来。考虑到正确编写了 Web 应用程序数据库层,即在不需要时正确关闭所有结果集、语句和连接,在我正确配置 jboss 数据源后,我必须在我的 Web 应用程序中进行的所有代码更改。
任何人都可以向我指出在 Web 应用程序中使用 jboss 数据源的教程或代码示例。
首先按名称创建一个xml文件xxx-ds.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();
***** 确保资源引用名称在所有地方都应该相同
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();
从技术上讲,PortableRemoteObject.narrow 在 JBoss(无论如何是 4.2.2)单服务器配置中肯定不是必需的,但它是更合适的 J2EE 标准代码,因为一般应用程序服务器不必返回正确类型的对象只是为了做一个 Context.lookup。
以上不包括资源利用和错误处理问题。您应该在完成后关闭该 Context 对象,当然还有数据库连接,尽管如果您忘记关闭数据库连接并且事务结束,JBoss 会对您大喊大叫,并为您关闭它。
无论如何,该 Connection 对象与 DriverManager.getConnection(url); 一样可用。
你不必改变任何东西。当您选择正确类型的数据源(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 源代码)。