2013-01-24 110 views
3

我与这个问题斗争了好几天,我一直无法解决它。我有一台服务器,安装了SQL Server 2008 R2实例和一个JBoss 7.1安装(我正在使用独立配置)。我试图使用JTDS驱动程序在应用程序服务器中配置数据源以连接到数据库。应用服务器可以正常启动,但是当我试图通过管理控制台来测试数据源是假脱机了以下错误:JBoss 7.1 - SQL Server - 数据源配置(JTDS)

17:49:42,117 WARN [org.jboss.jca.core.connectionmanager.pool.strategy.OnePool] (HttpManagementService-threads - 1) IJ000604: Throwable while attempting to get a new connection: null: javax.resource.ResourceException: Co 
uld not create connection 
     at org.jboss.jca.adapters.jdbc.local.LocalManagedConnectionFactory.getLocalManagedConnection(LocalManagedConnectionFactory.java:277) [ironjacamar-jdbc-1.0.9.Final.jar:1.0.9.Final] 
     at org.jboss.jca.adapters.jdbc.local.LocalManagedConnectionFactory.createManagedConnection(LocalManagedConnectionFactory.java:235) [ironjacamar-jdbc-1.0.9.Final.jar:1.0.9.Final] 
     at org.jboss.jca.core.connectionmanager.pool.mcp.SemaphoreArrayListManagedConnectionPool.createConnectionEventListener(SemaphoreArrayListManagedConnectionPool.java:761) [ironjacamar-core-impl-1.0.9.Final.jar:1.0. 
9.Final] 
     at org.jboss.jca.core.connectionmanager.pool.mcp.SemaphoreArrayListManagedConnectionPool.getConnection(SemaphoreArrayListManagedConnectionPool.java:343) [ironjacamar-core-impl-1.0.9.Final.jar:1.0.9.Final] 
     at org.jboss.jca.core.connectionmanager.pool.AbstractPool.getSimpleConnection(AbstractPool.java:397) [ironjacamar-core-impl-1.0.9.Final.jar:1.0.9.Final] 
     at org.jboss.jca.core.connectionmanager.pool.AbstractPool.getConnection(AbstractPool.java:365) [ironjacamar-core-impl-1.0.9.Final.jar:1.0.9.Final] 
     at org.jboss.jca.core.connectionmanager.pool.AbstractPool.internalTestConnection(AbstractPool.java:627) [ironjacamar-core-impl-1.0.9.Final.jar:1.0.9.Final] 
     at org.jboss.jca.core.connectionmanager.pool.strategy.OnePool.testConnection(OnePool.java:88) [ironjacamar-core-impl-1.0.9.Final.jar:1.0.9.Final] 
     at org.jboss.as.connector.pool.PoolOperations$TestConnectionInPool.invokeCommandOn(PoolOperations.java:121) [jboss-as-connector-7.1.1.Final.jar:7.1.1.Final] 
     at org.jboss.as.connector.pool.PoolOperations$1.execute(PoolOperations.java:60) [jboss-as-connector-7.1.1.Final.jar:7.1.1.Final] 
     at org.jboss.as.controller.AbstractOperationContext.executeStep(AbstractOperationContext.java:385) [jboss-as-controller-7.1.1.Final.jar:7.1.1.Final] 
     at org.jboss.as.controller.AbstractOperationContext.doCompleteStep(AbstractOperationContext.java:272) [jboss-as-controller-7.1.1.Final.jar:7.1.1.Final] 
     at org.jboss.as.controller.AbstractOperationContext.completeStep(AbstractOperationContext.java:200) [jboss-as-controller-7.1.1.Final.jar:7.1.1.Final] 
     at org.jboss.as.connector.pool.PoolOperations.execute(PoolOperations.java:74) [jboss-as-connector-7.1.1.Final.jar:7.1.1.Final] 
     at org.jboss.as.controller.AbstractOperationContext.executeStep(AbstractOperationContext.java:385) [jboss-as-controller-7.1.1.Final.jar:7.1.1.Final] 
     at org.jboss.as.controller.AbstractOperationContext.doCompleteStep(AbstractOperationContext.java:272) [jboss-as-controller-7.1.1.Final.jar:7.1.1.Final] 
     at org.jboss.as.controller.AbstractOperationContext.completeStep(AbstractOperationContext.java:200) [jboss-as-controller-7.1.1.Final.jar:7.1.1.Final] 
     at org.jboss.as.controller.ModelControllerImpl$DefaultPrepareStepHandler.execute(ModelControllerImpl.java:466) [jboss-as-controller-7.1.1.Final.jar:7.1.1.Final] 
     at org.jboss.as.controller.AbstractOperationContext.executeStep(AbstractOperationContext.java:385) [jboss-as-controller-7.1.1.Final.jar:7.1.1.Final] 
     at org.jboss.as.controller.AbstractOperationContext.doCompleteStep(AbstractOperationContext.java:272) [jboss-as-controller-7.1.1.Final.jar:7.1.1.Final] 
     at org.jboss.as.controller.AbstractOperationContext.completeStep(AbstractOperationContext.java:200) [jboss-as-controller-7.1.1.Final.jar:7.1.1.Final] 
     at org.jboss.as.controller.ModelControllerImpl.execute(ModelControllerImpl.java:121) [jboss-as-controller-7.1.1.Final.jar:7.1.1.Final] 
     at org.jboss.as.controller.ModelControllerImpl$1.execute(ModelControllerImpl.java:309) [jboss-as-controller-7.1.1.Final.jar:7.1.1.Final] 
     at org.jboss.as.controller.ModelControllerImpl$1.execute(ModelControllerImpl.java:299) [jboss-as-controller-7.1.1.Final.jar:7.1.1.Final] 
     at org.jboss.as.domain.http.server.DomainApiHandler.processRequest(DomainApiHandler.java:294) 
     at org.jboss.as.domain.http.server.DomainApiHandler.doHandle(DomainApiHandler.java:201) 
     at org.jboss.as.domain.http.server.DomainApiHandler.handle(DomainApiHandler.java:208) 
     at org.jboss.as.domain.http.server.security.SubjectAssociationHandler.handle(SubjectAssociationHandler.java:51) 
     at org.jboss.com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:78) 
     at org.jboss.sun.net.httpserver.AuthFilter.doFilter(AuthFilter.java:69) 
     at org.jboss.com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:81) 
     at org.jboss.sun.net.httpserver.ServerImpl$Exchange$LinkHandler.handle(ServerImpl.java:710) 
     at org.jboss.com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:78) 
     at org.jboss.as.domain.http.server.RealmReadinessFilter.doFilter(RealmReadinessFilter.java:54) 
     at org.jboss.com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:81) 
     at org.jboss.sun.net.httpserver.ServerImpl$Exchange.run(ServerImpl.java:682) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) [rt.jar:1.7.0_11] 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) [rt.jar:1.7.0_11] 
     at java.lang.Thread.run(Thread.java:722) [rt.jar:1.7.0_11] 
     at org.jboss.threads.JBossThread.run(JBossThread.java:122) [jboss-threads-2.0.0.GA.jar:2.0.0.GA] 
Caused by: java.sql.SQLException: Cannot open database "SQLEXPRESS" requested by the login. The login failed. 
     at net.sourceforge.jtds.jdbc.SQLDiagnostic.addDiagnostic(SQLDiagnostic.java:368) 
     at net.sourceforge.jtds.jdbc.TdsCore.tdsErrorToken(TdsCore.java:2820) 
     at net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2258) 
     at net.sourceforge.jtds.jdbc.TdsCore.login(TdsCore.java:603) 
     at net.sourceforge.jtds.jdbc.ConnectionJDBC2.<init>(ConnectionJDBC2.java:345) 
     at net.sourceforge.jtds.jdbc.ConnectionJDBC3.<init>(ConnectionJDBC3.java:50) 
     at net.sourceforge.jtds.jdbc.Driver.connect(Driver.java:184) 
     at org.jboss.jca.adapters.jdbc.local.LocalManagedConnectionFactory.getLocalManagedConnection(LocalManagedConnectionFactory.java:249) [ironjacamar-jdbc-1.0.9.Final.jar:1.0.9.Final] 
     ... 39 more 

这似乎是一个简单的身份验证问题,但用户名/密码是绝对正确的!通过SQL Server Management Studio中我能够使用以下正确连接到数据库:

  • 服务器名称:DAN-Aladino-vs.usersad.everis.int \ SQLEXPRESS
  • 身份验证:SQL Server身份验证
  • 登录:aladinoDs
  • 密码:aladinoDs

配置我做了如下步骤的数据源:

1)在JBoss中,我创建了目录“modules \ net \ sourceforge \ jtds \ main”。

它里面我已经把JTDS-1.2.5.jar并用以下内容的新module.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<module xmlns="urn:jboss:module:1.0" name="net.sourceforge.jtds"> 
    <resources> 
    <resource-root path="jtds-1.2.5.jar"/> 
     <!-- Insert resources here --> 
    </resources> 
    <dependencies> 
    <module name="javax.api"/> 
    <module name="javax.transaction.api"/> 
    </dependencies> 
</module> 

2)我已经修改了standalone.xml配置文件加入下列:

<datasource jndi-name="java:jboss/datasources/AladinoDS" pool-name="AladinoDS" enabled="true" use-java-context="true"> 
    <connection-url>jdbc:jtds:sqlserver://DAN-Aladino-vs.usersad.everis.int:1433/SQLEXPRESS</connection-url> 
    <driver>JTDS</driver> 
    <new-connection-sql>select 1</new-connection-sql> 
    <transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation> 
    <pool> 
     <min-pool-size>5</min-pool-size> 
     <max-pool-size>50</max-pool-size> 
    </pool> 
    <security> 
     <user-name>aladinoDs</user-name> 
     <password>aladinoDs</password> 
    </security> 
    <validation> 
     <check-valid-connection-sql>select 1</check-valid-connection-sql> 
    </validation> 
    <timeout> 
     <set-tx-query-timeout>true</set-tx-query-timeout> 
     <blocking-timeout-millis>5000</blocking-timeout-millis> 
     <idle-timeout-minutes>15</idle-timeout-minutes> 
    </timeout> 
    <statement> 
     <track-statements>false</track-statements> 
    </statement> 
</datasource> 

,并且在<drivers>部分:

<driver name="JTDS" module="net.sourceforge.jtds"> 
    <driver-class>net.sourceforge.jtds.jdbc.Driver</driver-class> 
</driver> 

根据我在网上找到的,它应该是正确的,但它仍然不起作用。顺便说一句,我不想​​为数据源使用Windows身份验证,但我也尝试过这种方式,但未成功。

我希望有人可以在我的caonfiguration中发现错误。如果这是正确的,可能是数据库服务器/实例配置的问题?我感到困惑...通过SQL Server Mgmt Studio似乎都工作。

谢谢大家, 卢卡

+1

执行SQL Server日志显示什么? –

+1

您的连接设置快速浏览即可。数据库名称肯定是“SQLEXPRESS”?您可以使用相同的JDBC驱动程序,并使用相同的身份验证配置和URL在JBoss之外创建一个独立的应用程序,以查看它是否在此工作。这将有助于隔离问题。 – CoolBeans

回答

0

(回答评论和编辑见Question with no answers, but issue solved in the comments (or extended in chat)

的OP写道:

@Jon Skeet: The SQL Server error log shows the following:

01/25/2013 09:47:02,Logon,Unknown,Login failed for user 'aladinoDs'. Reason: Failed to open the explicitly specified database. 

So, the problem should be that I'm not using the proper database name.

@CoolBeans: I'm not used to SQL Server (usually I work with Oracle DB), and I'm not familiar with its distinction between databases/instances/logins, but if I'm using the credentials above to successfully logon into db through SQL Server Mgmt Studio, why am I not able to use them for datasource? When I connect to db server, I can see in SQL Server Mgmt Studio, into "databases" folder, two objects: System Databases and AladinoSFA2. Should I use the latest one as server name in the connection string? This will be my next try. I'll post an update.

SOLVED:

I corrected the connection string: <connection-url>jdbc:jtds:sqlserver://DAN-Aladino-vs.usersad.everis.int:1433/AladinoSFA2</connection-url>

It seems that i would have to use the single database name and not the database server name into the connection string. I don't really understand why using SQL Server Mgmt Studio I do not need to specify db instance name, but only db server name, and in the datasource, on the contrary, the database instance name is the only one needed.

However now it all works.

+1

SQLEXPRESS是实例名称。您可以使用jtds驱动程序将其指定为属性“instanceName = SQLEXPRESS”,但如果连接到正确的端口,则不需要(每个实例都有自己的TCP端口号,只有当您想让jtds驱动程序找出(动态)端口通过SQL浏览器服务,你可以使用instanceName。 – eckes