2016-12-30 64 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);