Wildfly中的SQL Server连接使用JTDS驱动程序

时间:2015-06-29 10:09:33

标签: sql-server java-ee jboss wildfly jtds

在Widlfly上设置SQL Server数据源的正确方法是什么?

我需要从我在Wildfly上运行的Web应用程序访问SQL Server数据库。

我已按如下方式设置数据源:

<datasource jta="false" jndi-name="java:jboss/db" pool-name="db" enabled="true" use-ccm="false">
    <connection-url>jdbc:jtds:sqlserver://IP_ADDRESS;instance=SQLEXPRESS;DatabaseName=DB</connection-url>
    <driver-class>net.sourceforge.jtds.jdbc.Driver</driver-class>
    <driver>jtds-1.3.1.jar</driver>
</datasource>

这很好用,除了重新启动SQL Server时,连接丢失,数据源无法重新创建。所以我得到的错误如下:

  

状态无效,Connection对象已关闭。

This post建议添加一些验证,所以我这样做了:

<validation>
    <check-valid-connection-sql>SELECT 1</check-valid-connection-sql>
    <validate-on-match>false</validate-on-match>
    <background-validation>false</background-validation>
</validation>

但这并没有解决问题,我仍然不时得到相同的“连接关闭”错误。

This other post建议使用DataSource而不是Driver,所以我已将其添加到我的配置中:

    <datasource-class>net.sourceforge.jtds.jdbcx.JtdsDataSource</datasource-class>

但是当我测试连接时,我得到一个例外:

  

java.sql.SQLException:尚未设置serverName属性           at net.sourceforge.jtds.jdbcx.JtdsDataSource.getConnection(JtdsDataSource.java:150)

1 个答案:

答案 0 :(得分:3)

迁移到WFLY后我遇到了同样的问题,并通过添加属性解决了这个问题。

这就是我的完整* -ds.xml的样子:

 <?xml version="1.0" encoding="UTF-8"?>
 <datasources xmlns="http://www.jboss.org/ironjacamar/schema">
  <datasource jndi-name="java:/xxxDS" pool-name="MSSQL">
     <connection-url>
     jdbc:sqlserver://localhost:1433;database=dbname;charset=UTF-8
     </connection-url>
     <driver>sqljdbc</driver>
     <security>
        <user-name>xxx</user-name>
        <password>xxx</password>
     </security>
     <pool>
        <!-- default is 0 -->
        <min-pool-size>10</min-pool-size>
        <!-- default is 20 -->
        <max-pool-size>50</max-pool-size>
     </pool>
     <validation>
        <valid-connection-checker 
        class-name="org.jboss.jca.adapters.jdbc.extensions.mssql.MSSQLValidConnectionChecker" />
        <validate-on-match>false</validate-on-match>
        <background-validation>true</background-validation>
        <check-valid-connection-sql>select 1</check-valid-connection-sql>
        <background-validation-millis>10000</background-validation-millis>
     </validation>
  </datasource>

对我来说,有效连接检查是不够的,但通过在选择1中添加后台验证,它正在工作。

我们已经转移到直接从MSFT使用jdbc驱动程序:

<driver name="sqljdbc" module="mc.jdbc.sqljdbc">
  <driver-class>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver-class>
</driver>

这也可能有所不同,但我们已经用JBoss AS7和jdts驱动程序设置了很长时间。