在 Oracle Weblogic Server 10.3.6 中创建数据源问题-错误

Creating data source issue-error in Oracle Weblogic Server 10.3.6

我已经在我的本地机器上安装了 Oracle Weblogic Server Windows 7. 现在我正在尝试创建一个新的数据源。

我有一个托管在不同位置的数据库。我有连接属性,可以使用它从我机器上的 SQL_Developer 客户端成功进行测试连接。

数据库连接详细信息:

> URL : jdbc:oracle:thin:@hostname:port:DB_Name
> 
> Driver Class : oracle.jdbc.xa.client.OracleXADataSource

然而,当我在 weblogic 服务器中使用相同的连接属性连接到同一个数据库时,它会抛出以下错误:

> Connection test failed.
IO Error: The Network Adapter could not establish the connection
<br/>oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:458)
<br/>oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:546)
<br/>oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:236)
<br/>oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
<br/>oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:521)
<br/>oracle.jdbc.pool.OracleDataSource.getPhysicalConnection(OracleDataSource.java:280)
<br/>oracle.jdbc.xa.client.OracleXADataSource.getPooledConnection(OracleXADataSource.java:469)
<br/>oracle.jdbc.xa.client.OracleXADataSource.getXAConnection(OracleXADataSource.java:156)
<br/>oracle.jdbc.xa.client.OracleXADataSource.getXAConnection(OracleXADataSource.java:101)
<br/>weblogic.jdbc.common.internal.DataSourceUtil.testConnection(DataSourceUtil.java:314)
<br/>com.bea.console.utils.jdbc.JDBCUtils.testConnection(JDBCUtils.java:734)
<br/>com.bea.console.actions.jdbc.datasources.createjdbcdatasource.CreateJDBCDataSource.testConnectionConfiguration(CreateJDBCDataSource.java:474)
<br/>sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
<br/>sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
<br/>sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
<br/>java.lang.reflect.Method.invoke(Method.java:606)
<br/>org.apache.beehive.netui.pageflow.FlowController.invokeActionMethod(FlowController.java:870)
<br/>org.apache.beehive.netui.pageflow.FlowController.getActionMethodForward(FlowController.java:809)
<br/>org.apache.beehive.netui.pageflow.FlowController.internalExecute(FlowController.java:478)
<br/>org.apache.beehive.netui.pageflow.PageFlowController.internalExecute(PageFlowController.java:306)

下面是我通过控制台获得的堆栈跟踪:

> Caused by: oracle.net.ns.NetException: The Network Adapter could not establish the connection
    at oracle.net.nt.ConnStrategy.execute(ConnStrategy.java:392)
    at oracle.net.resolver.AddrResolution.resolveAndExecute(AddrResolution.java:434)
    at oracle.net.ns.NSProtocol.establishConnection(NSProtocol.java:687)
    at oracle.net.ns.NSProtocol.connect(NSProtocol.java:247)
    at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1102)
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:320)

接下:

> Caused by: java.net.ConnectException: Connection refused: connect
    at java.net.DualStackPlainSocketImpl.connect0(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:579)
    at oracle.net.nt.TcpNTAdapter.connect(TcpNTAdapter.java:150)
    at oracle.net.nt.ConnOption.connect(ConnOption.java:133)
    at oracle.net.nt.ConnStrategy.execute(ConnStrategy.java:370)

我的机器中有以下版本:

>    JDK : 1.7
>    Weblogic : 10.3.6
>    ojdbc6.jar (part of weblogic installation, no extra 3rd party driver being used)

请让我知道我在 weblogic 服务器的数据源配置过程中遗漏了什么。请帮我解决这个问题。

查找错误后,终于明白问题所在了。

Java 7默认使用IPv6协议。所以我强制 java 使用 IPv4 而不是 IPv6。

解决方案:

打开安装了weblogic的域文件夹。默认情况下,如果您在安装期间不更改名称,则名称为 "base_domain"。所以进入 "base_domain/bin" 并打开文件 "setDomainEnv.cmd" 进行编辑(对于 Linux 机器使用文件 setDomainEnv.sh),然后查找以下行:

set JAVA_OPTIONS=%JAVA_OPTIONS%

Just add a space after that and add the following : 
-Djava.net.preferIPv4Stack=true

So your final line should look like : set JAVA_OPTIONS=%JAVA_OPTIONS% -Djava.net.preferIPv4Stack=true

然后保存文件出来。重新启动您的 weblogic 服务器并测试数据源。

Main thing is the parameter : -Djava.net.preferIPv4Stack=true

您可以将它添加到您的环境变量中,应该可以。但是,如果这不起作用,那么您可以按照我上面所做的进行操作。希望这有帮助!