以容器无关的方式在JBoss standalone.xml和web.xml中定义数据源

时间:2016-12-30 22:20:32

标签: java jboss datasource

我已经在JBoss standalone.xml中成功配置了JDBC数据源,但我也想弄清楚是否可以在标准的容器中定义web.xml本身的数据源 - this answer表示不可知的方式。

但是,我无法将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:连接被拒绝(连接被拒绝)       at java.net.PlainSocketImpl.socketConnect(Native Method)[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]       在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]       at net.sourceforge.jtds.jdbc.SharedSocket.createSocketForJDBC3(SharedSocket.java:288)[jtds-1.3.1.jar:1.3.1]       at 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]

2 个答案:

答案 0 :(得分:0)

当您尝试连接的端口上没有服务侦听时,通常会发生此异常。可能会发生一些事情:

  • 您尚未启动服务器。
  • 您的服务器没有等待接受连接。
  • 您正在尝试连接错误的端口号。

  • 客户端和服务器,其中一个或两个都不在网络中。

  • 服务器未运行

  • 服务器正在运行但没有侦听端口,客户端正在尝试连接。

  • 主机端口组合不允许使用防火墙

  • 连接字符串中的协议不正确

答案 1 :(得分: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);