我已经在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]
答案 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);