Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[JDBC] Oracle8 Verbindung aus JBoss

1 view
Skip to first unread message

Alexander Kipp

unread,
Feb 14, 2004, 8:34:51 AM2/14/04
to
Hi NG,

wir haben hier ein (ich denke mal) eher kleines Problem, kommen aber
leider auch nicht auf die Lösung.

Unsere Situation:
Wir wollen per Entity-Bean aus einem JBOSS 3.2.1-Server auf eine
Oracle8i-DB zugreifen.
Unsere Einstellungen sind:
- classes12.zip (mit JDBC-Treiber von Oracle) liegt in
JBOSS_HOME\server\default\lib (Fehler tritt auch auf, wenn JDBC-Treiber
in Classpath aufgeführt ist)
- unsere verwendete oracle-ds.xml: (liegt in
JBOSS_HOME\server\default\deploy)

<datasources>
<local-tx-datasource>
<jndi-name>OracleDS</jndi-name>
<connection-url>jdbc:oracle:thin:@db-server:1521:sid</connection-url>
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
<user-name>username</user-name>
<password>password</password>
<!--
<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter</exception-sorter-class-name>-->
</local-tx-datasource>

</datasources>

- unsere verwendete jbosscmp-jdbc.xml (Auszug)

<jbosscmp-jdbc>
<defaults>
<datasource>java:/OracleDS</datasource>
<datasource-mapping>Oracle8</datasource-mapping>
<create-table>true</create-table>
<remove-table>true</remove-table>
</defaults>
....
<jbosscmp-jdbc>

Wenn wir nun unsere EJB-Anwendung deployen, wird kein Fehler generiert,
erst wenn unser Client versucht, auf die Entitiy-Beans zuzugreifen.
Der Fehler sieht wie folgt aus (Ausgabe aus der JBoss-Kommandozeile,
Auszug, ab der Fehlermeldung):

14:26:40,834 INFO [URLDeploymentScanner] Started
14:26:40,934 INFO [MainDeployer] Deployed package:
file:/C:/jboss-3.2.1/server/
default/conf/jboss-service.xml
14:26:40,944 INFO [Server] JBoss (MX MicroKernel) [3.2.1 (build:
CVSTag=JBoss_3
_2_1 date=200305041533)] Started in 2m:12s:638ms
14:29:03,597 INFO [STDOUT] FlugBean:ejbCreate()...
14:29:03,607 INFO [STDOUT] ---> id: 1076765343597
14:29:03,627 ERROR [Flug] Error checking if entity exists
java.sql.SQLException: ORA-00942: Tabelle oder View nicht vorhanden

at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:289)
at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:579)
at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1894)
at
oracle.jdbc.ttc7.TTC7Protocol.parseExecuteDescribe(TTC7Protocol.java:

Ich weiß, das die Frage ziemlich global klingt, aber hat irgendjemand
eine Idee, was wir noch einstellen können, bzw. wo unser Fehler liegt.
Am Code der Beans kann es so nicht liegen, die Beans laufen auf einer
SAP-DB einwandfrei, nur die Migration zur Oracle-DB macht uns halt
derzeitig die Probleme.

Vielen Dank und schönend Gruß

Alex

Marek Lange

unread,
Feb 16, 2004, 6:20:25 AM2/16/04
to
Alexander Kipp wrote:
> <datasources>
> <local-tx-datasource>
> <jndi-name>OracleDS</jndi-name>
> <connection-url>jdbc:oracle:thin:@db-server:1521:sid</connection-url>
> <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
> <user-name>username</user-name>
> <password>password</password>

> - unsere verwendete jbosscmp-jdbc.xml (Auszug)

Sieht alles ok aus.

> 14:29:03,597 INFO [STDOUT] FlugBean:ejbCreate()...
> 14:29:03,607 INFO [STDOUT] ---> id: 1076765343597
> 14:29:03,627 ERROR [Flug] Error checking if entity exists
> java.sql.SQLException: ORA-00942: Tabelle oder View nicht vorhanden
>
> at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
> at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:289)
> at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:579)
> at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1894)
> at
> oracle.jdbc.ttc7.TTC7Protocol.parseExecuteDescribe(TTC7Protocol.java:

Die Meldung kommt von der Oracle - eine Tabelle wird nicht gefunden.
Hängt das evtl. damit zusammen, wie du die Primary Keys verwaltest? Weil
der Fehler beim ejbCreate() auftritt. Oder sind die Tabellen beim
Deployment erst gar nicht erstellt worden (weil der User keine Rechte
dazu hatte...)?

-marek

Frank Langelage

unread,
Feb 16, 2004, 3:29:01 PM2/16/04
to
Alexander Kipp wrote:
> Wenn wir nun unsere EJB-Anwendung deployen, wird kein Fehler generiert,
> erst wenn unser Client versucht, auf die Entitiy-Beans zuzugreifen.
> Der Fehler sieht wie folgt aus (Ausgabe aus der JBoss-Kommandozeile,
> Auszug, ab der Fehlermeldung):
>
> 14:26:40,834 INFO [URLDeploymentScanner] Started
> 14:26:40,934 INFO [MainDeployer] Deployed package:
> file:/C:/jboss-3.2.1/server/
> default/conf/jboss-service.xml
> 14:26:40,944 INFO [Server] JBoss (MX MicroKernel) [3.2.1 (build:
> CVSTag=JBoss_3
> _2_1 date=200305041533)] Started in 2m:12s:638ms
> 14:29:03,597 INFO [STDOUT] FlugBean:ejbCreate()...
> 14:29:03,607 INFO [STDOUT] ---> id: 1076765343597
> 14:29:03,627 ERROR [Flug] Error checking if entity exists
> java.sql.SQLException: ORA-00942: Tabelle oder View nicht vorhanden
>
> at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
> at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:289)
> at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:579)
> at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1894)
> at
> oracle.jdbc.ttc7.TTC7Protocol.parseExecuteDescribe(TTC7Protocol.java:
>

Gibt es in dem Oracle-System in einem anderen Schema (User) eine Tabelle
mit gleichem Namen ?

Dieses Problem trat bei mir auf. Beim deployen glaubt jboss dann das die
Tabelle bereits existiert und erzegt sie nicht. Beim Zugriff über die
Bean tritt dann der Fehler wie oben auf.
Ursache dafür ist der Zugriff ohne username auf die Oracle
Systemtabellen bei der Existenzprüfung für die Tabellen.

Siehe dazu auch meine Fehlermeldung unter
http://sourceforge.net/tracker/?func=detail&aid=840536&group_id=22866&atid=376685

Falls du JBoss selbst aus den Quellen erzeugst ein workaround:
in der Datei server/src/main/org/jboss/ejb/plugins/cmp/jdbc/SQLUtil.java
in der Methode tableExists() ist die dort vorhandene Variable schema mit
dem usernamen aus oracle-ds.xml und nicht mit null zu belegen.

Gruß
Frank

0 new messages