Wie lösen Sie den jboss + oracle-problem: "der Netzwerkadapter konnte nicht stärket die Verbindung"?
Ich bin mit Oracle 10.2.0.4 server und Test von Java-Anwendungs-Servern, um die Auswahl der geeignetsten für unsere Bedürfnisse. So weit wir es geschafft, OpenEJB und GlassFish arbeiten, aber nicht JBoss.
Haben wir eine einfache fat-Java-client eine Verbindung mit einem simple EJB 3.0 (stateless session bean), der wiederum versucht, führen Sie eine einfache SQL-Abfrage an eine oracle-Datenquelle. Das gleiche setup hat, arbeitete bereits mit Apache OpenEJB und Sonne Glashfish. Jedoch konnten wir es nicht machen entweder Jboss 5.1.0.GA oder Jboss-6.0.0.20100721-M4 (der jüngste Meilenstein).
Jboss implementiert die EJB-ohne Fehler und der EJB in der Tat können erreicht werden durch den client. Allerdings, wenn der EJB-versucht, eine Verbindung von der Oracle-Datenquelle schlägt es mit:
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) [:]
Sie die Datenquellen-Konfigurationsdatei oracle-ds.xml ist:
<?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>
Den einschlägigen teilen des EJB sind:
@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();
Habe ich bereits gespielt mit unterschiedlichen Werten für die @Resource-tag, verschiedene Oracle-JDBC-Treiber (derzeit sind wir mit ojdbc14.jar und orai18n.jar. Die Verbindung funktioniert entweder direkt oder durch OpenEJB.
Hat jemand einen Tipp was falsch sein könnte?
Dank
Ja. Das Netzwerk ist in Ordnung. Das problem war, dass die Kombinationen der verschiedenen Versionen der Oracle-JDBC-Treiber.
InformationsquelleAutor Luis Soeiro | 2010-08-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Liegt das problem an einer unsichtbaren versionning Konflikt der Treiber. Sie müssen absolut sicherstellen, dass sowohl oracle als Gläser kommen aus der gleichen version und auch, dass es keine andere Oracle-JARs im CLASSPATH.
InformationsquelleAutor Luis Soeiro