【问题标题】:How to solve the jboss + oracle problem: "the network adapter could not stablish the connection"?jboss + oracle问题如何解决:“网络适配器无法建立连接”?
【发布时间】:2011-03-30 11:29:33
【问题描述】:

我使用的是 Oracle 10.2.0.4 服务器,我们正在测试 Java 应用服务器,以便选择最适合我们需求的服务器。到目前为止,我们设法让 OpenEJB 和 GlassFish 正常工作,但 JBoss 不行。

我们有一个简单的胖 Java 客户端连接到一个简单的 EJB 3.0(无状态会话 bean),而后者又尝试使用 oracle 数据源执行一个简单的 SQL 查询。同样的设置已经在 Apache 的 OpenEJB 和 Sun 的 Glashfish 上运行。但是,我们无法使其与 Jboss 5.1.0.GA 或 Jboss-6.0.0.20100721-M4(最新的里程碑)一起工作。

Jboss 部署 EJB 没有错误,客户端确实可以访问 EJB。但是,当 EJB 尝试从 Oracle 数据源获取连接时,它会失败并显示:

11:04:34,837 INFO  [STDOUT] oracleDS=org.jboss.resource.adapter.jdbc.WrapperDataSource@63d587bf
11:04:45,110 WARN  [org.jboss.resource.connectionmanager.JBossManagedConnectionPool] Throwable while attempting to get a new connection: null: org.jboss.resource.JBossResourceException: Could not create connection; - nested throwable: (java.sql.SQLException: I/O Exception: The Network Adapter could not establish the connection)
            at org.jboss.resource.adapter.jdbc.local.LocalManagedConnectionFactory.getLocalManagedConnection(LocalManagedConnectionFactory.java:225) [:6.0.0.20100721-M4]
            at org.jboss.resource.adapter.jdbc.local.LocalManagedConnectionFactory.createManagedConnection(LocalManagedConnectionFactory.java:195) [:6.0.0.20100721-M4]
            at org.jboss.resource.connectionmanager.InternalManagedConnectionPool.createConnectionEventListener(InternalManagedConnectionPool.java:643) [:6.0.0.20100721-M4]
            at org.jboss.resource.connectionmanager.InternalManagedConnectionPool.getConnection(InternalManagedConnectionPool.java:267) [:6.0.0.20100721-M4]
            at org.jboss.resource.connectionmanager.JBossManagedConnectionPool$BasePool.getConnection(JBossManagedConnectionPool.java:747) [:6.0.0.20100721-M4]
            at org.jboss.resource.connectionmanager.BaseConnectionManager2.getManagedConnection(BaseConnectionManager2.java:403) [:6.0.0.20100721-M4]
            at org.jboss.resource.connectionmanager.TxConnectionManager.getManagedConnection(TxConnectionManager.java:413) [:6.0.0.20100721-M4]
            at org.jboss.resource.connectionmanager.BaseConnectionManager2.allocateConnection(BaseConnectionManager2.java:496) [:6.0.0.20100721-M4]
            at org.jboss.resource.connectionmanager.BaseConnectionManager2$ConnectionManagerProxy.allocateConnection(BaseConnectionManager2.java:941) [:6.0.0.20100721-M4]
            at org.jboss.resource.adapter.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:89) [:6.0.0.20100721-M4]
            at test.ejb.Business.getResults(Business.java:184) [:]

数据源配置文件oracle-ds.xml为:

<?xml version="1.0" encoding="UTF-8"?>
<datasources>
    <local-tx-datasource>
        <jndi-name>oracleDS</jndi-name>
        <connection-url>jdbc:oracle:thin:@192.168.10.20:1521:ODB</connection-url>
        <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
        <user-name>myusername</user-name>
        <password>mypassword</password>
        <valid-connection-checker-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleValidConnectionChecker</valid-connection-checker-class-name>
        <metadata>
            <type-mapping>Oracle9i</type-mapping>
        </metadata>
      <min-pool-size>0</min-pool-size>
      <max-pool-size>20</max-pool-size>
      <idle-timeout-minutes>0</idle-timeout-minutes>
      </local-tx-datasource>
</datasources>

EJB 的相关部分是:

@Stateless
public class Business implements BusinessRemote {

@Resource(name = "oracleDS",mappedName="java:oracleDS")
private DataSource oracleDS;

public String validateEJB(String value) {
    return value + "ok";
}

public String[] getResults() {

    String[] result = null;

    Connection con = null;
    Statement st = null;
    ResultSet rs = null;

    try {
                //Fails here
        con = oracleDS.getConnection();

我已经为@Resource 标记使用了不同的值,不同的 Oracle JDBC 驱动程序(目前我们使用的是 ojdbc14.jarorai18n.jar。连接有效直接或通过 OpenEJB。

有没有人暗示可能出了什么问题? 谢谢

【问题讨论】:

  • 问题似乎是网络连接问题。您可以从应用服务器 ping 数据库吗?如果可以,您能否检查它是否是防火墙问题(尤其是在 Windows 上)。如果您执行 telnet 1521,它会拒绝连接还是允许您通过。
  • 是的。网络很好。问题在于不同版本的 Oracle JDBC 驱动程序的组合。

标签: oracle jakarta-ee jboss datasource ioexception


【解决方案1】:

问题在于驱动程序的无形版本冲突。您必须绝对确保两个 Oracle JAR 来自同一版本,并且 CLASSPATH 中没有其他 Oracle JAR。

【讨论】:

    猜你喜欢
    • 2013-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多