我正在使用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.jar和orai18n.jar。连接可以直接或通过OpenEJB进行。
有没有人有什么可能是错的暗示? 谢谢
这个问题似乎是一个网络连接问题。你可以从应用程序服务器ping数据库吗?如果可以,可以检查它是否是防火墙问题(特别是在Windows上)。如果你做了一个telnet <数据库服务器IP> 1521,它会给你一个拒绝的连接,还是它允许你通过? – VikrantY 2012-08-29 17:17:50
是的。网络很好。问题在于不同版本的Oracle JDBC驱动程序的组合。 – 2012-09-25 16:53:45