Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Fehlermeldung bei Verwendung von InterClient 7.5.1 mit Java 8 (https://www.delphipraxis.net/183652-fehlermeldung-bei-verwendung-von-interclient-7-5-1-mit-java-8-a.html)

mjustin 26. Jan 2015 13:32

Datenbank: InterBase • Version: 7.5.1 • Zugriff über: JDBC

Fehlermeldung bei Verwendung von InterClient 7.5.1 mit Java 8
 
Hallo,

setzt noch jemand InterBase 7.5.1 ein und greift darauf auch über den InterClient JDBC Treiber zu?

Mit Java 8 scheint der InterClient 7.5.1 Treiber nicht mehr kompatibel zu sein, beim Verbindungsversuch erfolgt eine Exception:

Code:
Exception in thread "main" java.lang.NoClassDefFoundError: sun/io/ByteToCharConverter
   at interbase.interclient.Connection.connect(Unknown Source)
   at interbase.interclient.Connection.<init>(Unknown Source)
   at interbase.interclient.Driver.connect(Unknown Source)
   at java.sql.DriverManager.getConnection(DriverManager.java:664)
   at java.sql.DriverManager.getConnection(DriverManager.java:247)
   at com.example.so25365952.Main.main(Main.java:14)
Caused by: java.lang.ClassNotFoundException: sun.io.ByteToCharConverter
   at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
   at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
   at java.security.AccessController.doPrivileged(Native Method)
   at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
   at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
   at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
   at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
   ... 6 more
Die vermisste Klasse sun/io/ByteToCharConverter gehört zu den "interne" Sun-Klassen. In Java 7 ar sie als deprecated gekennzeichnet, in Java 8 nun wurde sie entfernt. (Eine interne Klasse zu verwenden ist schlechter Stil, da sie nicht Teil der offiziellen Java API sind, und die Anwendung an eine spezifische JRE binden, in diesem Fall die von Sun).

Da Oracle den Java 7 Support im April einstellen wird, wird eine Entscheidung notwendig sein:
  • den InterBase 7.5.1 Server auf XE umstellen?
  • den Datenbankzugriff von JDBC auf etwas anderes umstellen?

Die erste Option würde sehr, sehr teuer werden. Die zweite würde den Einsatz einer anderen Zugriffsmethode (ODBC über Java?) erfordern und auch einigen Aufwand bedeuten. Daher wären praktikable Ideen willkommen :)

Bernhard Geyer 26. Jan 2015 13:44

AW: Fehlermeldung bei Verwendung von InterClient 7.5.1 mit Java 8
 
7.5.1 - Hier sollte Emba nachbessern. Es kann ja wohl nicht sein das hier ein vor 10 Jahren releaste Version nicht mehr mit der aktuellsten Java-Version kompatible ist. Es ist eine Schande das Borland das Sie (wie vermutlich 1000 andere Entwickler auch wegen fehlender Alternativen im SDK (?) ein eigentlich nicht für extern Verwendung vorhandene Klasse verwendet haben. Hier wird ein Hotfix erwartet!

Spaß beiseite.
Ich sehe Punkt 1 als anzustreben. Wenn du nicht kontrollieren kannst welche Java-Version auf den Kisten auf denen du per JDBC zugreifst solltest du dir überlegen nicht mehr diese Uralte Version einzusetzen. Die gefahr ist hier sehr groß das du zwar Punkt 2 realisierst aber in 2 Monaten ein anderes Update dein System explodieren lässt.
Ob nun es nach Interbase XE, Firebird oder "HyperSuperNeuesDB-System" geht sollte egal sein. FB dürfte noch am einfachsten sein.

mjustin 26. Jan 2015 14:18

AW: Fehlermeldung bei Verwendung von InterClient 7.5.1 mit Java 8
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1287794)
Wenn du nicht kontrollieren kannst welche Java-Version auf den Kisten auf denen du per JDBC zugreifst solltest du dir überlegen nicht mehr diese Uralte Version einzusetzen.

Es handelt sich nur um wenige interne Server, die daher unter totaler Kontrolle sind. Bei einer simplen Klasse wie ByteToCharConverter ist es kaum Aufwand, sie durch eine der neueren "offiziellen" Klassen in Java zu ersetzen, dazu benötigt man allerdings den InterClient Quellcode. Ob der noch auf irgendeinem Datenträger gespeichert ist, das ist eine andere Frage :)

Bernhard Geyer 26. Jan 2015 14:42

AW: Fehlermeldung bei Verwendung von InterClient 7.5.1 mit Java 8
 
Zitat:

Zitat von mjustin (Beitrag 1287808)
Bei einer simplen Klasse wie ByteToCharConverter ist es kaum Aufwand, sie durch eine der neueren "offiziellen" Klassen in Java zu ersetzen, dazu benötigt man allerdings den InterClient Quellcode.

Diesen "kaum Aufwand" höhre ich auch immer ...

Zitat:

Zitat von mjustin (Beitrag 1287808)
Ob der noch auf irgendeinem Datenträger gespeichert ist, das ist eine andere Frage :)

Die Datenträger wird es schon geben. Eher das Build-System bzw. eine umgebung um das per Knopfdruck zu übersetzen wird nicht mehr existieren.
Unsere Versionen vor 10 Jahren würden wir jetzt auch nicht in 2 Minuten wieder herstellen können.

mjustin 26. Jan 2015 15:02

AW: Fehlermeldung bei Verwendung von InterClient 7.5.1 mit Java 8
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1287816)
Eher das Build-System bzw. eine umgebung um das per Knopfdruck zu übersetzen wird nicht mehr existieren.

Da der InterClient JDBC Treiber nur eine JAR Datei ist, werden nur die Standard JDK Werkzeuge javac und jar benötigt, um die Handvoll Java Klassen zu kompilieren und die class Dateien als JAR zu verpacken, das ist ein zweizeiliges Skript.

mjustin 19. Mär 2015 14:06

AW: Fehlermeldung bei Verwendung von InterClient 7.5.1 mit Java 8
 
Neuere InterBase Treiber sind zwar mit Java 8 anscheinend einsetzbar, melden beim Versuch auf eine 7.5.1 Datenbank zuzugreifen eine interbase.interclient.UnlicensedComponentException , wie zum Beispiel hier berichtet wird: http://stackoverflow.com/questions/2...-interclient-j

Mit der aktuellen Developer Edition von InterBase XE7 konnte ich das auch reproduzieren. Die Developer Edition hat normalerweise ausser dem automatischen Neustart des Servers keine Einschränkungen, mit einer "Unlicensed Component Exception" hatte ich daher eigentlich nicht gerechnet. Ob diese Hürde genommen werden kann, und danach ein Einsatz des XE7 JDBC Treibers mit einem 7.5.1 Server möglich ist, werde ich bei Gelegenheit bei EMBA anfragen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:46 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz