用于 sqlserver 的 jboss 7 AS 数据源
Posted
技术标签:
【中文标题】用于 sqlserver 的 jboss 7 AS 数据源【英文标题】:jboss 7 AS datasource for sqlserver 【发布时间】:2012-01-14 01:55:01 【问题描述】:我以独立模式运行 jboss,并将standalone.xml
中的数据源设置为以下内容:
<datasource jndi-name="MyDenaliDS" pool-name="MyDenaliDs_Pool" enabled="true" jta="true"
use-java-context="true" use-ccm="true">
<connection-url>
jdbc:sqlserver://myip:1433;databaseName=mydb;integratedSecurity=true
</connection-url>
<driver>
sqljdbc
</driver>
<security>
<user-name>
username
</user-name>
<password>
password
</password>
</security>
</datasource>
<drivers>
<driver name="sqljdbc" module="com.microsoft.sqlserver.jdbc">
<driver-class>
com.microsoft.sqlserver.jdbc.SQLServerDataSource
</driver-class>
</driver>
</drivers>
在文件夹%jbosshome%\modules\com\microsoft\sqlserver\jdbc\
我有sqljdb4.jar
和以下module.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<module name="com.microsoft.sqlserver.jdbc" xmlns="urn:jboss:module:1.0">
<resources>
<resource-root path="sqljdbc4.jar"/>
</resources>
<dependencies>
<module name="javax.api"/>
<module name="javax.transaction.api"/>
</dependencies>
</module>
当我启动 jboss 时,它给了我以下错误:
> New missing/unsatisfied dependencies: service
> jboss.jdbc-driver.sqljdbc (missing)
有人知道我做错了什么或者我遗漏了什么吗?
【问题讨论】:
【参考方案1】:使用 Jboss AS 7.1.1,以及将模块放在 %jbosshome%\modules\com\microsoft\sqlserver\jdbc\main
中,我不得不对 xml 稍作更改——standalone.xml 中的驱动程序元素应该是:
<driver name="sqljdbc" module="com.microsoft.sqlserver.jdbc">
<driver-class>
com.microsoft.sqlserver.jdbc.SQLServerDriver
</driver-class>
</driver>
module.xml 应该是:
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.1" name="com.microsoft.sqlserver.jdbc">
<resources>
<resource-root path="sqljdbc4.jar"/>
</resources>
<dependencies>
<module name="javax.api"/>
<module name="javax.transaction.api"/>
<module name="javax.servlet.api" optional="true"/>
</dependencies>
</module>
【讨论】:
我仍然收到 14:55:59,408 INFO [org.jboss.as.controller](控制器引导线程)服务状态报告新的缺失/未满足的依赖项:服务 jboss.jdbc-driver.sqljdbc (缺失) 为此干杯——它有帮助!我唯一改变的是standalone.xml中的使用 Jboss 7.1.1,我设法让它在不指定模块的情况下工作。
只需将 sqljdbc4.jar 放入部署目录即可: %JBOSSHOME%\独立\部署
standalone.xml中datasource需要的配置如下:
<datasource jndi-name="java:jboss/datasources/myPool" pool-name="myPool" enabled="true" use-java-context="true">
<connection-url>jdbc:sqlserver://127.0.0.1:1433;databaseName=myName;</connection-url>
<driver>sqljdbc4.jar</driver>
<pool>
<min-pool-size>10</min-pool-size>
<max-pool-size>100</max-pool-size>
<prefill>true</prefill>
</pool>
<security>
<user-name>myUser</user-name>
<password>myPassword</password>
</security>
<statement>
<prepared-statement-cache-size>32</prepared-statement-cache-size>
<share-prepared-statements>true</share-prepared-statements>
</statement>
</datasource>
【讨论】:
使用 jar 文件名作为驱动程序名称并跳过遇到和你一样的错误
而不是 %jbosshome%\modules\com\microsoft\sqlserver\jdbc\
试试 %jbosshome%\modules\com\microsoft\sqlserver\jdbc\main
然后把jdbc驱动的.jar和module.xml放在上面。
【讨论】:
我这样做了,但在 JBoss 7.0.2.Final 中它仍然不适合我【参考方案4】:我使用了这个配置,它在 AS7 上运行良好
<datasource jndi-name="java:jboss/datasources/stagingDS" pool-name="stagingDS" enabled="true" use-java-context="true">
<connection-url>jdbc:sqlserver://linp-sqlrpt-01;databaseName=pmdm</connection-url>
<driver-class>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver-class>
<driver>sqlserver</driver>
<security>
<user-name>username</user-name>
<password>password</password>
</security>
</datasource>
<drivers>
<driver name="sqlserver" module="com.microsoft.jdbc">
<xa-datasource-class>com.microsoft.sqlserver.jdbc.SQLServerXADataSource</xa-datasource-class>
</driver>
</drivers>
当然,如果您不使用分布式数据源,您可以按照之前定义的方式配置常规驱动程序类。
模块文件如下所示。
<module xmlns="urn:jboss:module:1.1" name="com.microsoft.jdbc">
<properties>
<property name="jboss.api" value="private"/>
</properties>
<resources>
<resource-root path="sqljdbc4.jar"/>
</resources>
<dependencies>
<module name="javax.api"/>
<module name="javax.transaction.api"/>
<module name="javax.servlet.api" optional="true"/>
</dependencies>
</module>
【讨论】:
【参考方案5】:通过管理控制台部署 JDBC jar 文件(例如 sqljdbc41.jar)应该允许在定义新数据源时选择和使用它。
【讨论】:
【参考方案6】:这是适合我的工作。 在JBOSS 7,MSSQL JDBC驱动6,类型4,文件名:sqljdbc42.jar
在[JBoss HOME]\modules\com\microsoft\main 中安装驱动名称:sqljdbc42.jar在同目录下添加module.xml,内容如下
<module xmlns="urn:jboss:module:1.1" name="com.microsoft">
<resources>
<resource-root path="sqljdbc42.jar"/>
</resources>
<dependencies>
<module name="javax.api"/>
<module name="javax.xml.bind.api"/>
<module name="javax.transaction.api"/>
</dependencies>
</module>
将数据源定义插入到块<subsystem xmlns="urn:jboss:domain:datasources:4.0"> <datasources>
中的standalone.xml,如下所示
<datasource jta="true" jndi-name="java:jboss/datasources/iwebDS" pool-name="MSSQLDS" enabled="true" use-ccm="true">
<connection-url>jdbc:sqlserver://172.24.17.52:1803;DatabaseName=IWEB_IWEBSIT</connection-url>
<driver-class>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver-class>
<driver>sqlserver2008</driver>
<pool>
<min-pool-size>10</min-pool-size>
<initial-pool-size>10</initial-pool-size>
<max-pool-size>100</max-pool-size>
<flush-strategy>FailingConnectionOnly</flush-strategy>
</pool>
<security>
<user-name>[sqlserver user]</user-name>
<password>[sqlserver password]</password>
</security>
<validation>
<valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.mssql.MSSQLValidConnectionChecker"/>
<background-validation>true</background-validation>
</validation>
</datasource>
将驱动程序定义插入到块<subsystem xmlns="urn:jboss:domain:datasources:4.0"> <drivers>
中的standalone.xml,如下所示
<driver name="sqlserver2008" module="com.microsoft">
<driver-class>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver-class>
</driver>
ps:“sqlserver2008”是你想要的名字。
【讨论】:
以上是关于用于 sqlserver 的 jboss 7 AS 数据源的主要内容,如果未能解决你的问题,请参考以下文章
从 JBoss AS 7.1 迁移到 JBoss EAP 7.3.0
JBoss AS 7 上的 HttpTunnelingServlet