【问题标题】:defining a datasource in JBoss standalone.xml vs. in the web.xml in a container-agnostic way以与容器无关的方式在 JBoss Standalone.xml 与 web.xml 中定义数据源
【发布时间】:2017-05-15 04:15:27
【问题描述】:

我已经在我的 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:连接被拒绝(连接被拒绝) 在 java.net.PlainSocketImpl.socketConnect(本机方法)[rt.jar:1.8.0_111] 在 java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) [rt.jar:1.8.0_111] 在 java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) [rt.jar:1.8.0_111] 在 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] 在 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] 在 net.sourceforge.jtds.jdbc.JtdsConnection.(JtdsConnection.java:331) [jtds-1.3.1.jar:1.3.1]

【问题讨论】:

    标签: java jboss datasource


    【解决方案1】:

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

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

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

    • 服务器未运行

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

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

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

    【讨论】:

    • 在服务器中定义数据源是可行的,因此除非我未能将字段/元素从一种格式转换为另一种格式,否则这些都不是。
    • @MarcusJuniusBrutus :不要忘记将答案标记为已接受,如果适合您的问题,请点赞!
    【解决方案2】:

    JDBC 数据源必须先映射到 jboss-web.xml 中的 a,然后才能在 web.xml 中使用。例如,这个数据源:

    src/main/webapp/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/main/webapp/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>
    

    你可以使用简单的代码sn-p来调用数据源:

    DataSource ds = null;
    
    Context ctx = null;
    
    
    String strDSName = "java:comp/env/jdbc/datasource";
    
    ctx = new InitialContext();
    
    ds = (javax.sql.DataSource) ctx.lookup(strDSName);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-30
      • 1970-01-01
      • 2013-04-08
      • 1970-01-01
      • 2019-08-18
      • 1970-01-01
      • 1970-01-01
      • 2012-04-23
      相关资源
      最近更新 更多