2013-01-24 170 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