2010-08-16 224 views
1

我正在使用Oracle 10.2.0.4服務器,我們正在測試Java應用服務器,以便選擇最適合我們需求的服務器。到目前爲止,我們設法讓OpenEJB和GlassFish工作,但不是JBoss。如何解決jboss + oracle問題:「網絡適配器無法建立連接」?

我們有一個簡單的胖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] [email protected]7bf 
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) [:] 

數據源配置文件甲骨文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驅動程序(目前我們是U唱歌ojdbc14.jarorai18n.jar。連接可以直接或通過OpenEJB進行。

有沒有人有什麼可能是錯的暗示? 謝謝

+0

這個問題似乎是一個網絡連接問題。你可以從應用程序服務器ping數據庫嗎?如果可以,可以檢查它是否是防火牆問題(特別是在Windows上)。如果你做了一個telnet <數據庫服務器IP> 1521,它會給你一個拒絕的連接,還是它允許你通過? – VikrantY 2012-08-29 17:17:50

+0

是的。網絡很好。問題在於不同版本的Oracle JDBC驅動程序的組合。 – 2012-09-25 16:53:45

回答

1

問題在於驅動程序的無形的版本衝突。您必須確保兩個Oracle JAR來自相同版本,並且CLASSPATH中沒有其他Oracle JAR。

相關問題