Autor Thema: java.lang.NoSuchMethodError: java.util.Vector: method clear()V not found  (Gelesen 4699 mal)

Offline vietzer

  • Frischling
  • *
  • Beiträge: 33
  • Geschlecht: Männlich
Hallo,

ich beobachte diese Forum schon seit längerem mit großer Begeisterung und werd jetzt auch mal ne Frage stellen.
Also ich importiere mit nem Java Agenten Daten aus einer SQLBase Datenbank über JDBC in Notes (R5).
Dies klappt soweit auch alles hervorragend, aber wenn ich versuche
die Datenbankverbindung zu beenden erscheint mir folgender Fehler:

java.lang.NoSuchMethodError: java.util.Vector: method clear()V not found

   at java.net.Socket.close(Socket.java:383)

   at jdbc.gupta.sqlbase.SqlbaseSession.disconnectSession(SqlbaseSession.java:949)

   at jdbc.gupta.sqlbase.SqlbaseSession.endSession(SqlbaseSession.java:731)

   at jdbc.gupta.sqlbase.SqlbaseConnection.close(SqlbaseConnection.java:464)

   at JavaAgent.NotesMain(JavaAgent.java:60)

   at lotus.domino.AgentBase.runNotes(AgentBase.java:160)

   at lotus.domino.NotesThread.run(NotesThread.java:203)


Wenn der Fehler vom JDBC Treiber ausgelöst werden würde, wär mir ja alles klar, er will halt was haben was es in dieser Java Version noch nicht gibt.
Da es aber vom net Package kommt, versteh ich das nicht ganz.
Der müsste doch wissen was er aufrufen kann und was nicht oder hab ich da was falsch verstanden?

Gruss

vietzer
Gruß, Steffen

Offline animate

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.540
  • Uh, I'm just gonna go find a cash machine.
    • LA2
ich hab grade mal nachgeschaut:
http://java.sun.com/j2se/1.3/docs/api/java/util/Vector.html#clear()

die Methode clear gibts erst seit JDK 1.2

Notes R5 arbeitet aber leider nur mit 1.1.8

vermutlich liegts daran.
Thomas

Fortunately, I'm adhering to a pretty strict, uh, drug, uh, regimen to keep my mind, you know, uh, limber.

Offline vietzer

  • Frischling
  • *
  • Beiträge: 33
  • Geschlecht: Männlich
Ja das dacht ich mir schon.

Was ich aber noch nicht versteh ist, dass der Fehler von java.net.Socket.close ausgelöst wird, also einer Methode aus dem selben JDK.
Gruß, Steffen

Offline animate

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.540
  • Uh, I'm just gonna go find a cash machine.
    • LA2
da hast du allerdings recht. Das verstehe ich auch nicht.
Warte mal aufs Wochenende, da schaut Java-Blicker Axel Janssen bestimmt dein Posting an udn weiß mehr dazu.
Thomas

Fortunately, I'm adhering to a pretty strict, uh, drug, uh, regimen to keep my mind, you know, uh, limber.

Offline Axel_Janssen

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 769
... das ist ein JDBC-Treiber, der offensichtlich Java2 erwartet.
Ein JDBC-Treiber ist ja u.a. auch nur einen Paket von Klassen und die haben das eben für Java2 programmiert.
Du benötigst einen anderen JDBC Treiber.
Ich kenne mich bei Gupta nicht so aus.
Außerdem bin ich entschiedener Gegner von Java1.1.
Bei DB2 kann man zwischen Java1.1 und Java2 JDBC-Treiber switchen (zumindest bei DB2 7).
Am besten du guckst noch mal in die Informationen des Treiber oder des Datenbankherstellers. Vielleicht bieten die auch eine Java1.1 Lösung an.

Dies ist so ein typischer Fall, wo es extrem verwirrend ist, dass Lotus5 nur Java1.1 unterstützt.

Gruß Axel
... design patterns are abstract designs that help identify the structure and elements involved in a specific design solution. From this, a concrete implementation can be produced.
Kyle Brown

Offline vietzer

  • Frischling
  • *
  • Beiträge: 33
  • Geschlecht: Männlich
Also laut Gupta unterstützt der Treiber JDK 1.1.x.
Der Fehler wird ja auch nicht direkt durch ihn, sondern durch
java.net.Socket.close() hervorgerufen.
Irgendwie verwirrend das Ganze.
Gruß, Steffen

Axel Janssen temp

  • Gast
Das ist in der Tat sehr sehr merkwürdig.
Weil eigentlich sollte beim Classloading die Klasse java.net.Socket aus dem in Domino integrierten JDK1.1.8 geladen werden. Da dürfte wohl kaum eine Methode aus Java2 angesprochen werden.  ;D
Ich betrachte mich im Classloading Thema auch nicht als der mega-Experte, aber eigentlich soll normalerweise immer die Klasse genommen werden, die auf der untersten Stufe steht (also hier das jdk in Domino).
Auch stacktrace googeln -> "java.lang.NoSuchMethodError: java.util.Vector: method clear()V not found" brachte hier nix. Wie schon oben gesagt ist das ein typischer "Java2 von code erwartet, ist aber nur Java1.1 da" Fehler.

Welche Datenbank wird da angesprochen?

Gruß Axel


Offline vietzer

  • Frischling
  • *
  • Beiträge: 33
  • Geschlecht: Männlich
Also da wird ne Centura SQLBase Datenbank Version 8.5 angesprochen.
Hab jetzt mal bei notes.net gestöbert und hab nen Eintrag von vor über drei Jahren gefunden der genau das selbe Problem beschreibt, aber leider unbeantwortet blieb.

Problemschilderung bei notes.net

Also ich kann den Fehler ja abfangen und die Datenbankverbindung wird dann auch getrennt, aber dass ist ja nun nicht gerade im Sinne des Erfinders, d.h. nicht ganz sauber.
Bis jetzt ist mir bei dieser Vorgehensweise aber auch noch nichts negatives aufgefallen, also werd ich es wohl weiterhin mit Abfangen des Fehlers machen.

Gruss vietzer
Gruß, Steffen

Axel Janssen temp

  • Gast
NEUE IDEE: Vielleicht musst du das in der Datenbank explizit einstellen, dass du JDBC1.1 benutzt.Zumindest bei DB2 muß man das nämlich.

Der Gupta Treiber ist laut Sun Seite Typ 4:
Zitat
A native-protocol fully Java technology-enabled driver converts JDBC technology calls into the network protocol used by DBMSs directly. This allows a direct call from the client machine to the DBMS server and is a practical solution for Intranet access. Since many of these protocols are proprietary the database vendors themselves will be the primary source for this style of driver. Several database vendors have these in progress.

Das sind also remote calls, die gegen die Datenbank gehen. Über welches Protokoll auch immer. Wenn der Datenbank-Server jetzt Remote etwas zurückliefert, das Java1.2 erwartet. Kommt mir auch ein bischen komisch vor. Aber check mal deine Datenbank-Doku nach JDBC1.1. Wie gesagt bei DB2 reicht es nicht, dass man einfach so JDBC1.1 benutzt. Nein. Man muß es für die gesamte RDBMS explizit einstellen.

Gruß Axel

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz