2016-12-30 60 views
1

我已經在JBoss standalone.xml中成功配置了一個JDBC數據源,但我也想知道是否可以定義數據源在web.xml中,以this answer建議的標準容器不可知方式。在JBoss standalone.xml中定義數據源vs容器不可知的方式在web.xml中定義數據源

但是我無法將JBoss的standalone.xml中的元素翻譯成我需要放入我的應用程序的web.xml中的元素。

下面是摘自我的JBoss standalone.xml

<datasource jta="false" jndi-name="java:/comp/env/jdbc/sybase/axafusers" pool-name="axafusers" enabled="true" use-ccm="false"> 
    <connection-url>jdbc:jtds:sybase://localhost:12501/axafusers</connection-url> 
    <driver-class>net.sourceforge.jtds.jdbc.Driver</driver-class> 
    <driver>sybasejtds</driver> 
    <security> 
     <user-name>username</user-name> 
     <password>secret</password> 
    </security> 
    <validation> 
     <validate-on-match>false</validate-on-match> 
     <background-validation>false</background-validation> 
    </validation> 
    <statement> 
     <share-prepared-statements>false</share-prepared-statements> 
    </statement> 
</datasource> 

定義數據源在服務器上面的作品。但是,定義web.xml中的數據源的方法失敗,如下所示。

這裏是我已經把我的web.xml:

<data-source> 
    <name>java:/comp/env/jdbc/sybase/axafusers</name> 
    <class-name>net.sourceforge.jtds.jdbcx.JtdsDataSource</class-name> 
    <server-name>localhost</server-name> 
    <port-number>12501</port-number> 
    <database-name>axafusers</database-name> 
    <user>username</user> 
    <password>secret</password> 
    <transactional>false</transactional> 
</data-source> 

儘管我試圖在他們的相應元素的各種參數(最容易出錯的部分似乎被翻譯connection-url)我準確地複製我一直獲得最終由下列情況引起Could not create connection消息:

產生的原因:java.net.ConnectException:拒絕連接(連接被拒絕) 在java.net.PlainSocketImpl.socketConnect(母語方法)[rt.jar:1.8.0_111] at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)[rt.jar:1.8.0_111] at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java: 206)[rt.jar:1.8.0_111] at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)[rt.jar:1.8.0_111] at java.net.SocksSocketImpl.connect(SocksSocketImpl.java: 392)[rt.jar中:1.8.0_111] 在java.net.Socket.connect(Socket.java:589)[rt.jar中:1.8.0_111] 在net.sourceforge.jtds.jdbc.SharedSocket.createSocketForJDBC3( SharedSocket.java:288)[JTDS-1.3.1.jar:1.3.1]。 在net.sourceforge.jtds.jdbc.SharedSocket(SharedSocket.java:251)[JTDS-1.3.1.jar:1.3.1 ] at net.sourceforge.jtds.jdbc.JtdsConnection。(JtdsConnection.java :331)[jtds-1.3.1.jar:1.3.1]

回答

0

當您試圖連接的端口上沒有監聽服務時,通常會發生此異常。一對夫婦的事情可能會發生:

  • 你還沒有開始你的服務器。
  • 您的服務器並未等待接受連接。
  • 您正在試圖連接到錯誤的端口號。

  • 客戶端和服務器,一個或兩個人都沒有的網絡。

  • 服務器未運行

  • 服務器正在運行,但不會在端口上偵聽,客戶端試圖連接。

  • 防火牆不允許用於主機端口組合

  • 在連接字符串

    不正確的協議

+0

定義數據源服務器的工作原理,因此它可以是沒有這些東西,除非我未能將字段/元素從一種格式轉換爲另一種格式。 –

+0

@MarcusJuniusBrutus:不要忘記標記答案爲接受並upvote它,如果它適合您的問題! –

0

JDBC數據源必須被映射到一個在JBoss中-web.xml中,然後才能使用它在web.xml中。例如,該數據源:

的src /主/ web應用/ WEB-INF/JBoss的-web.xml中:

<jboss-web> 
     <resource-ref> 
     <res-ref-name>jdbc/datasource</res-ref-name> 
     <res-type>javax.sql.DataSource</res-type> 
     <jndi-name>java:jboss/datasources/ExampleDS</jndi-name> 
    </resource-ref> 
</jboss-web> 

的src /主/ web應用/ WEB-INF/web.xml中:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 
<display-name>JndiDsTest</display-name> 
<welcome-file-list> 
    <welcome-file>index.html</welcome-file> 
</welcome-file-list> 
<resource-ref> 
    <res-ref-name>jdbc/datasource</res-ref-name> 
    <res-type>javax.sql.DataSource</res-type> 
    <res-auth>Container</res-auth> 
</resource-ref> 
</web-app> 

您可以通過使用簡單的代碼片段調用數據源:

DataSource ds = null; 

Context ctx = null; 


String strDSName = "java:comp/env/jdbc/datasource"; 

ctx = new InitialContext(); 

ds = (javax.sql.DataSource) ctx.lookup(strDSName);