Hallo, Wir bekommen beim Verbindungsaufbau zur MySql 8.0.19 Datenbank, diese Fehlermeldung. Verwendet wird der JDBC Connector 8.0.19. Er ist als Umgebungsvariable verlinkt. Der Code Snippet befindet sich im Controller File.
/* connect to database*/ url = "jdbc:mysql://localhost:3306/test" user = "newuser" pw = "wubp2"
mydriver=.bsf~new('com.mysql.jc.jdbc.Driver') man=bsf.loadClass("java.sql.DriverManager") man~registerDriver(mydriver)
conn = man~getConnection(url, user , pw) statement = conn~createStatement SAY "connected to database" /* */
Liebe Gruppe 2,
On 29.01.2020 18:36, Dabernig Thomas wrote:
Wir bekommen beim Verbindungsaufbau zur MySql 8.0.19 Datenbank, diese Fehlermeldung. Verwendet wird der JDBC Connector 8.0.19. Er ist als Umgebungsvariable verlinkt. Der Code Snippet befindet sich im Controller File.
/* connect to database*/ url = "jdbc:mysql://localhost:3306/test" user = "newuser" pw = "wubp2"
mydriver=.bsf~new('com.mysql.jc.jdbc.Driver')
Die Fehlermeldung weist darauf hin, dass die obige Klasse nicht gefunden werden kann. Entweder ist der Name der Klasse falsch geschrieben oder das jar-Archiv, in dem sich diese Klasse befindet, kann nicht gefunden werden.
Für letzteres ist es notwendig, dass Sie die exakte Definition von CLASSPATH angeben und sicherstellen, dass alle angegebenen Pfade darin tatsächlich zu existierenden jar-, zip-Dateien oder zu Verzeichnissen, in denen bzw. in deren Unterverzeichnissen die gesuchten Java-Klassen zu finden sind!
Damit Sie es etwas zum Debuggen haben, hier ein gerade geschriebenes, kurzes Rexx-Programm "listPaths.rex" dafür (für alle wahrscheinlich interessant):
-- rgf, 2020-01-29: alle für Java relevante Pfade in lesbarer Form auflisten -- name: "listPaths.rex"
do envVariable over "java.class.path", "java.library.path" call showPath envVariable end
::requires "BSF.CLS"
::routine showPath parse arg pathProperty
say pp(pathProperty)":" tab="09"x -- Tabulator-Zeichen value=.java.lang.System~getProperty(pathProperty) pathSep=.java.lang.System~getProperty("path.separator")
do while value<>"" parse var value path (pathSep) value say tab "exists?" SysFileExists(path) pp(path) end say
Ich gehe davon aus, dass Sie sich alle BSF4ooRexx-Samples angesehen haben (das ist ja einfach, weil man nur die "index.html"-Dateien laden und lesen muss, um einen Überblick zu gewinnen) und daher das mitgelieferte JDBC-Beispiel in "samples\ReneJansen\jdbc.jrexx" kennen.
Mit freundlichem Gruß
Rony G. Flatscher
Der Output des Debug Programs liefert dieses Ergebnis. Die Installation von OpenJDK8 liefert einen rexx lang error.
Lg G02 ________________________________ Von: Aj2019w aj2019w-bounces@alice.wu-wien.ac.at im Auftrag von Rony G. Flatscher Rony.Flatscher@wu.ac.at Gesendet: Mittwoch, 29. Januar 2020 18:55 An: aj2019w@alice.wu-wien.ac.at aj2019w@alice.wu-wien.ac.at Betreff: Re: [Aj2019w] G02 Fehlermeldung
Liebe Gruppe 2,
On 29.01.2020 18:36, Dabernig Thomas wrote: Wir bekommen beim Verbindungsaufbau zur MySql 8.0.19 Datenbank, diese Fehlermeldung. Verwendet wird der JDBC Connector 8.0.19. Er ist als Umgebungsvariable verlinkt. Der Code Snippet befindet sich im Controller File.
/* connect to database*/ url = "jdbc:mysql://localhost:3306/test" user = "newuser" pw = "wubp2"
mydriver=.bsf~new('com.mysql.jc.jdbc.Driver')
Die Fehlermeldung weist darauf hin, dass die obige Klasse nicht gefunden werden kann. Entweder ist der Name der Klasse falsch geschrieben oder das jar-Archiv, in dem sich diese Klasse befindet, kann nicht gefunden werden.
Für letzteres ist es notwendig, dass Sie die exakte Definition von CLASSPATH angeben und sicherstellen, dass alle angegebenen Pfade darin tatsächlich zu existierenden jar-, zip-Dateien oder zu Verzeichnissen, in denen bzw. in deren Unterverzeichnissen die gesuchten Java-Klassen zu finden sind!
Damit Sie es etwas zum Debuggen haben, hier ein gerade geschriebenes, kurzes Rexx-Programm "listPaths.rex" dafür (für alle wahrscheinlich interessant):
-- rgf, 2020-01-29: alle für Java relevante Pfade in lesbarer Form auflisten -- name: "listPaths.rex"
do envVariable over "java.class.path", "java.library.path" call showPath envVariable end
::requires "BSF.CLS"
::routine showPath parse arg pathProperty
say pp(pathProperty)":" tab="09"x -- Tabulator-Zeichen value=.java.lang.System~getProperty(pathProperty) pathSep=.java.lang.System~getProperty("path.separator")
do while value<>"" parse var value path (pathSep) value say tab "exists?" SysFileExists(path) pp(path) end say
Ich gehe davon aus, dass Sie sich alle BSF4ooRexx-Samples angesehen haben (das ist ja einfach, weil man nur die "index.html"-Dateien laden und lesen muss, um einen Überblick zu gewinnen) und daher das mitgelieferte JDBC-Beispiel in "samples\ReneJansen\jdbc.jrexx" kennen.
Mit freundlichem Gruß
Rony G. Flatscher
-- -- __________________________________________________________________________________
Prof. Dr. Rony G. Flatscher Department Informationsverarbeitung und Prozessmanagement Institut für Wirtschaftsinformatik und Gesellschaft D2c 2.086 WU Wien Welthandelsplatz 1 A-1020 Wien/Vienna, Austria/Europe
http://www.wu.ac.at __________________________________________________________________________________
Liebe Gruppe 2,
On 30.01.2020 00:26, Dabernig Thomas wrote:
Der Output des Debug Programs liefert dieses Ergebnis. Die Installation von OpenJDK8 liefert einen rexx lang error.
OpenJDK8 (zumindest von AdoptOpenJDK) beinhaltet JavaFX nicht! Bei der Bell-OpenJDK-Distribution weiß ich es nicht, vermute es aber, da zu dem Zeitpunkt Oracle JavaFX noch nicht zur Gänze ins Opensource übertragen hatte. Probieren Sie stattdessen OpenJDK 10 oder 9, da diese zwei Distributionen JavaFX beinhalten sollten.
Sie können jederzeit von den neuesten Versionen von OpenJDK und JavaFX selbst eine JRE bauen, die alles beinhaltet, vgl. Addendum auf https://www.rexxla.org/events/2019/schedule.html, klicken Sie auf die Präsentation von "The 2019 Edition of BSF4ooRexx".
---
Ad Ausgabe des Programms: diese zeigt, dass Sie BSF4ooRexx mindestens zwei Mal installiert haben.
* Deinstallieren Sie am besten BSF4ooRexx zur Gänze! * Anschließend stellen Sie bitte sicher, dass die CLASSPATH-Umgebungsvariable keine Verweise auf BSF4ooRexx mehr hat, gegebenenfalls löschen Sie die entsprechenden Einträge im System. * Installieren Sie BSF4ooRexx wieder.
Mit freundlichem Gruß
Rony G. Flatscher
*Von:* Aj2019w aj2019w-bounces@alice.wu-wien.ac.at im Auftrag von Rony G. Flatscher Rony.Flatscher@wu.ac.at *Gesendet:* Mittwoch, 29. Januar 2020 18:55 *An:* aj2019w@alice.wu-wien.ac.at aj2019w@alice.wu-wien.ac.at *Betreff:* Re: [Aj2019w] G02 Fehlermeldung
Liebe Gruppe 2,
On 29.01.2020 18:36, Dabernig Thomas wrote:
Wir bekommen beim Verbindungsaufbau zur MySql 8.0.19 Datenbank, diese Fehlermeldung. Verwendet wird der JDBC Connector 8.0.19. Er ist als Umgebungsvariable verlinkt. Der Code Snippet befindet sich im Controller File.
/* connect to database*/ url = "jdbc:mysql://localhost:3306/test" user = "newuser" pw = "wubp2"
mydriver=.bsf~new('com.mysql.jc.jdbc.Driver')
Die Fehlermeldung weist darauf hin, dass die obige Klasse nicht gefunden werden kann. Entweder ist der Name der Klasse falsch geschrieben oder das jar-Archiv, in dem sich diese Klasse befindet, kann nicht gefunden werden.
Für letzteres ist es notwendig, dass Sie die exakte Definition von CLASSPATH angeben und sicherstellen, dass alle angegebenen Pfade darin tatsächlich zu existierenden jar-, zip-Dateien oder zu Verzeichnissen, in denen bzw. in deren Unterverzeichnissen die gesuchten Java-Klassen zu finden sind!
Damit Sie es etwas zum Debuggen haben, hier ein gerade geschriebenes, kurzes Rexx-Programm "listPaths.rex" dafür (für alle wahrscheinlich interessant):
-- rgf, 2020-01-29: alle für Java relevante Pfade in lesbarer Form auflisten -- name: "listPaths.rex" do envVariable over "java.class.path", "java.library.path" call showPath envVariable end ::requires "BSF.CLS" ::routine showPath parse arg pathProperty say pp(pathProperty)":" tab="09"x -- Tabulator-Zeichen value=.java.lang.System~getProperty(pathProperty) pathSep=.java.lang.System~getProperty("path.separator") do while value<>"" parse var value path (pathSep) value say tab "exists?" SysFileExists(path) pp(path) end say
Ich gehe davon aus, dass Sie sich alle BSF4ooRexx-Samples angesehen haben (das ist ja einfach, weil man nur die "index.html"-Dateien laden und lesen muss, um einen Überblick zu gewinnen) und daher das mitgelieferte JDBC-Beispiel in "samples\ReneJansen\jdbc.jrexx" kennen.
Mit freundlichem Gruß
Rony G. Flatscher
-- __________________________________________________________________________________
Prof. Dr. Rony G. Flatscher Department Informationsverarbeitung und Prozessmanagement Institut für Wirtschaftsinformatik und Gesellschaft D2c 2.086 WU Wien Welthandelsplatz 1 A-1020 Wien/Vienna, Austria/Europe
http://www.wu.ac.at __________________________________________________________________________________
Liebe Gruppe 2,
so, jetzt konnte ich Ihr Problem nachvollziehen, das wahrscheinlich für alle interessant sein mag. Das Problem bei Ihnen liegt darin, dass Sie OpenOffice im "JavaFX Application Thread", also im JavaFX GUI-Thread laden, was nicht möglich ist. Der Grund ist, dass OO selbst eigene GUI-Verwaltungen anstößt, die sich aber mit dem JavaFX GUI-Thread nicht vertragen und zum "Aufhängen" (Deadlock) führen!
Die Lösung dafür ist, dass Sie in Ihrem Programm die Ansteuerung von OO in einem eigenen Thread vornehmen müssen, der sich vom JavaFX GUI-Thread unterscheidet. Dies ist relativ einfach dann möglich, wenn Sie in einer ooRexx-Klasse in einer Methode die reply-Anweisung ausführen, die dazu führt, dass die Kontrolle aus der Methode dem Aufrufer zurückgegeben wird und in einem eigenen (Rexx-) Thread der restliche Code in der Methode parallel ausgeführt wird. Die beigefügte Lösung macht das (lesen Sie die Anmerkungen weiter unten sorgfältig durch).
---
Anbei eine Version, die funktioniert, die Sie aber noch für Ihre Zwecke fertigstellen müssen!
Dazu einige Anmerkungen:
* fxml-Datei:
o in den Ereignisattributen ("onAction") ist es wichtig, dass beim Aufruf der Routinen das SlotDir-Argument (immer das letzte Argument) als letztes Argument (oder als einziges, was es ja das letzte Argument macht :) ) mitgegeben wird (nur dann funktionieren die RexxScript-Annotationen). In den Beispielen wird aus pädagogischen Gründen immer "slotDir=arg(arg());call xyz slotDir;" angeführt, damit ich die Rexx arg()-Funktion erklären kann und auch, was es mit dem SlotDir-Argument auf sich hat, das von BSF4ooRexx beim Aufruf von Java nach Rexx immer als letztes Argument mitgibt. Nun, in allen Ihren Ereignisattributen kann daher der Rexx-Code vereinfacht werden (auf: "call xyz arg(arg())"), was ich gemacht habe.
o habe mit einem Editor den Text ein bisschen reformatiert, um ihn lesbarer zu machen,
o die JavaFX-Controls mit der fx:id "startTime" und "clickerCount" habe ich weiter gemacht, damit die vollständige Datums- und Zeitinformation gezeigt werden kann; "clickerCount" wird in Ihrer Anwendung sowohl für das Anzeigen des Clicks als auch für die Gesamtdauer verwendet, sodass ich dieses Feld zusätzlich als zentriert definiert habe.
* click_counter_controller.rex
o es findet sich eine neue ooRexx-Klasse namens "logClicks", die ausschließlich Klassenattribute und Klassenmethoden definiert (die haben alle das Schlüsselwort "class" dabei. Dies hat in diesem Fall den Vorteil, dass Sie von überall aus in Ihrem Rexxprogramm die Methoden ausführen können, indem Sie einfach der Rexx-Klasse ".logClicks" die entsprechenden Nachrichten schicken! Diese Klasse hat folgende Attribute und Methoden:
+ Attribut "bWait": ein Kontrollattribut, das in der Methode "wait" zum Warten auf das Ende der Methode "processCalc" benutzt wird, in der der Zugriff zu OpenOffice in einem eigenen Thread erfolgt,
+ Attribut "logArray": ein Array, der dafür benutzt wird, die Zeit eines jeden Klicks zu speichern; dabei wird im Unterschied zu Ihrer Lösung die ooRexx-Klasse ".DateTime" benutzt, die von Haus aus interessante Fähigkeiten hat, unter anderem die, dass man einfach Differenzen zwischen zwei solchen Objekten berechnen lassen kann (liefert ein ooRexx-TimeSpan-Objekt). Macht das Leben am Ende einfacher! :)
+ Methode "log": speichert ein .DateTime-Objekt im "logArray",
+ Methode "wait": diese Methode wird den Aufruf dann blockieren ("den Thread des Aufrufers anhalten"), wenn die Kontrollvariable "bWait" den Wert ".true" hat. Diesen Wert erhält die Kontrollvariable ganz am Anfang in der Methode "processCalc", before mit "reply" die Kontrolle zum Aufrufer zurückgegeben wird. Der Aufrufer (die Routine "openCalc") nutzt diese Methode unmittelbar nach dem Abschicken der Nachricht "processCalc", sodass diese Routine blockiert wird, bis "bWait" am Ende der Methode "processCalc" wieder auf den Wert ".false" gesetzt wird. Somit wird die Routine "openCalc" mit der Methode "processCalc" synchronisiert und läuft erst dann weiter, wenn die "processCalc"-Methode OpenOffice Calc fertig verarbeitet hat,
+ Methode "clearLog": löscht den "logArray" indem ein neuer, leerer Array zugwiesen wird,
+ Methode "processCalc": diese Methode setzt "bWait" auf ".true" und verarbeitet dann den Rest des Codes in einem neuen, separaten Thread, der durch die "reply"-Anweisung von Rexx erzeugt wird. Gleichzeitig kehrt dadurch der Aufruf von "processCalc" gleichzeitig (parallel) zurück in die Routine "openCalc", in der anschließend sofort blockiert wird. Nachdem OO geladen, das Spreadsheet befüllt, gespeichert und beendet wurde, wird "bWait" auf ".false" gesetzt und damit die Blockade in der Methode "wait" gelöst.
o die Routine "addClick" wurde umgeschrieben: sie verwendet jetzt die Klasse "logClicks" und die ooRexx-Klasse ".DateTime" für das Speichern der Klickzeit; die Logik sollte an sich mit Ihrer ursprünglichen übereinstimmen, vielleicht etwas leichter lesbar.
So, wer auch immer hierzu Fragen hat, kann sie gerne stellen!
Mit freundlichem Gruß
Rony G. Flatscher
On 30.01.2020 12:59, Rony G. Flatscher wrote:
Liebe Gruppe 2,
On 30.01.2020 00:26, Dabernig Thomas wrote:
Der Output des Debug Programs liefert dieses Ergebnis. Die Installation von OpenJDK8 liefert einen rexx lang error.
OpenJDK8 (zumindest von AdoptOpenJDK) beinhaltet JavaFX nicht! Bei der Bell-OpenJDK-Distribution weiß ich es nicht, vermute es aber, da zu dem Zeitpunkt Oracle JavaFX noch nicht zur Gänze ins Opensource übertragen hatte. Probieren Sie stattdessen OpenJDK 10 oder 9, da diese zwei Distributionen JavaFX beinhalten sollten.
Sie können jederzeit von den neuesten Versionen von OpenJDK und JavaFX selbst eine JRE bauen, die alles beinhaltet, vgl. Addendum auf https://www.rexxla.org/events/2019/schedule.html, klicken Sie auf die Präsentation von "The 2019 Edition of BSF4ooRexx".
Ad Ausgabe des Programms: diese zeigt, dass Sie BSF4ooRexx mindestens zwei Mal installiert haben.
- Deinstallieren Sie am besten BSF4ooRexx zur Gänze!
- Anschließend stellen Sie bitte sicher, dass die CLASSPATH-Umgebungsvariable keine Verweise auf BSF4ooRexx mehr hat, gegebenenfalls löschen Sie die entsprechenden Einträge im System.
- Installieren Sie BSF4ooRexx wieder.
Mit freundlichem Gruß
Rony G. Flatscher
*Von:* Aj2019w aj2019w-bounces@alice.wu-wien.ac.at im Auftrag von Rony G. Flatscher Rony.Flatscher@wu.ac.at *Gesendet:* Mittwoch, 29. Januar 2020 18:55 *An:* aj2019w@alice.wu-wien.ac.at aj2019w@alice.wu-wien.ac.at *Betreff:* Re: [Aj2019w] G02 Fehlermeldung
Liebe Gruppe 2,
On 29.01.2020 18:36, Dabernig Thomas wrote:
Wir bekommen beim Verbindungsaufbau zur MySql 8.0.19 Datenbank, diese Fehlermeldung. Verwendet wird der JDBC Connector 8.0.19. Er ist als Umgebungsvariable verlinkt. Der Code Snippet befindet sich im Controller File.
/* connect to database*/ url = "jdbc:mysql://localhost:3306/test" user = "newuser" pw = "wubp2"
mydriver=.bsf~new('com.mysql.jc.jdbc.Driver')
Die Fehlermeldung weist darauf hin, dass die obige Klasse nicht gefunden werden kann. Entweder ist der Name der Klasse falsch geschrieben oder das jar-Archiv, in dem sich diese Klasse befindet, kann nicht gefunden werden.
Für letzteres ist es notwendig, dass Sie die exakte Definition von CLASSPATH angeben und sicherstellen, dass alle angegebenen Pfade darin tatsächlich zu existierenden jar-, zip-Dateien oder zu Verzeichnissen, in denen bzw. in deren Unterverzeichnissen die gesuchten Java-Klassen zu finden sind!
Damit Sie es etwas zum Debuggen haben, hier ein gerade geschriebenes, kurzes Rexx-Programm "listPaths.rex" dafür (für alle wahrscheinlich interessant):
-- rgf, 2020-01-29: alle für Java relevante Pfade in lesbarer Form auflisten -- name: "listPaths.rex" do envVariable over "java.class.path", "java.library.path" call showPath envVariable end ::requires "BSF.CLS" ::routine showPath parse arg pathProperty say pp(pathProperty)":" tab="09"x -- Tabulator-Zeichen value=.java.lang.System~getProperty(pathProperty) pathSep=.java.lang.System~getProperty("path.separator") do while value<>"" parse var value path (pathSep) value say tab "exists?" SysFileExists(path) pp(path) end say
Ich gehe davon aus, dass Sie sich alle BSF4ooRexx-Samples angesehen haben (das ist ja einfach, weil man nur die "index.html"-Dateien laden und lesen muss, um einen Überblick zu gewinnen) und daher das mitgelieferte JDBC-Beispiel in "samples\ReneJansen\jdbc.jrexx" kennen.
Mit freundlichem Gruß
Rony G. Flatscher
--
Prof. Dr. Rony G. Flatscher Department Informationsverarbeitung und Prozessmanagement Institut für Wirtschaftsinformatik und Gesellschaft D2c 2.086 WU Wien Welthandelsplatz 1 A-1020 Wien/Vienna, Austria/Europe
http://www.wu.ac.at __________________________________________________________________________________