Batchdatei aus Javasoftware starten

Hardware, Software, Webdesign & Coding.

Moderator: Katana

Benutzeravatar
asi
Sergeant Hentai
Beiträge: 6004
Registriert: Mo Aug 06, 2001 12:01 am

Batchdatei aus Javasoftware starten

Beitrag von asi »

Ich stehe vor dem Problem eine batch Datei aus nem Java Programm heraus zu starten.
Im Internet schon einige "Lösungen" gefunden die aber nicht funktioniert haben.
Eine .exe starten läuft - .bat will nicht - mal wird der Befehl ignoriert, mal bleibt die Software anscheinend stecken und es passiert nichts mehr.
Kann es vielleicht an Windows 7 liegen, dass da Rechte eingeschränkt wurden?

Hintergrund ist, dass ich eine Oracle Datenbank Konfiguration in unzähligen batch Dateien vorliegen habe - ich muss die Software, die die Datenbank benutzt testen und möchte Unit und Gui Tests durchführen und dafür die Datenbank nach jedem Test wieder neu aufbauen.
Möchte die batch Dateien mit SQL anweisungen nicht direkt in Java über JDBC umsetzen müssen.

Hat jemand nen funktionierenden Weg die batch Dateien zu starten oder eine Idee wie ich das Problem sonst lösen kann?
Benutzeravatar
Aix jongliert mit Nudelhö
Beiträge: 4765
Registriert: Mo Dez 06, 1999 1:01 am

Beitrag von Aix jongliert mit Nudelhö »

öffne sie in cmd.exe, dann kannste immerhin die fehlermeldung lesen
Benutzeravatar
Enlil
Beiträge: 4279
Registriert: Sa Jan 20, 2001 1:01 am

Beitrag von Enlil »

Wenn ich dich richtig verstehe, dann moechtest du zwischen deinen Tests alle Eintraege in der Datenbank loswerden und sogra das Schema loeschen. Die Batchfiles sind da nur Mittel zum Zweck. Richtig?

Ich habe leider sehr wenig Erfahrung mit Unit Tests unter Java, aber unter Ruby gibt es dafuer Datenbankreiniger, die man in der Testkonfiguration einstellt und dann wird zwischen allen Tests die Datanbank gereinigt. Ich bin mir sehr sicher, dass es sowas auch fuer Java gibt, da die Sprache wesentlich weiter verbreitet ist und viele Testkonzepte aus der Javawelt kommen (noch mehr kommen aus Smalltalk, wie fast alles...).
Normalerweise wirft man aber nicht das gesamte Datenbankschema zwischen Tests weg. In Unit Tests will man normalerweise nur testen, dass das Schema richtig ist und nicht die Migrationen. Dafuer wuerde ich spezielle Migrationstests schreiben. Aber die sollten nur in Einzelfaellen notwendig sein. Etwa bei Migrationen die existierende Daten umstrukturieren.
Benutzeravatar
asi
Sergeant Hentai
Beiträge: 6004
Registriert: Mo Aug 06, 2001 12:01 am

Beitrag von asi »

die .bat selbst läuft sowohl aus explorer heraus auch über cmd ohne probleme.
Nur aus dem Java programm heraus krieg ichs nicht zum laufen - hab da auch verschiedene wege ausprobiert - unter anderem aus java cmd.exe aufgerufen mit dem pfad zur .bat datei
Benutzeravatar
retroK
Co-Admin
Beiträge: 5592
Registriert: Di Nov 30, 1999 1:01 am

Beitrag von retroK »

Kannst Du vielleicht den Umweg über ein Ant-Skript machen? Also die Bat aus dem Ant Skript aufrufen?
Bild
retrozone member #9

_________________
Ich weiss warum da Stroh liegt!
Benutzeravatar
asi
Sergeant Hentai
Beiträge: 6004
Registriert: Mo Aug 06, 2001 12:01 am

Beitrag von asi »

Enlil hat geschrieben:Wenn ich dich richtig verstehe, dann moechtest du zwischen deinen Tests alle Eintraege in der Datenbank loswerden und sogra das Schema loeschen. Die Batchfiles sind da nur Mittel zum Zweck. Richtig?

Ich habe leider sehr wenig Erfahrung mit Unit Tests unter Java, aber unter Ruby gibt es dafuer Datenbankreiniger, die man in der Testkonfiguration einstellt und dann wird zwischen allen Tests die Datanbank gereinigt. Ich bin mir sehr sicher, dass es sowas auch fuer Java gibt, da die Sprache wesentlich weiter verbreitet ist und viele Testkonzepte aus der Javawelt kommen (noch mehr kommen aus Smalltalk, wie fast alles...).
Normalerweise wirft man aber nicht das gesamte Datenbankschema zwischen Tests weg. In Unit Tests will man normalerweise nur testen, dass das Schema richtig ist und nicht die Migrationen. Dafuer wuerde ich spezielle Migrationstests schreiben. Aber die sollten nur in Einzelfaellen notwendig sein. Etwa bei Migrationen die existierende Daten umstrukturieren.
Die batch Dateien führen der Reihe nach SQL Befehle aus die folgendes machen:
Datensatz unloaden in Textdateien, alle Tabellen löschen, alle Tabellen anlegen, Datensatz wieder einlesen und einen Haufen von triggern setzen.

Im Grunde also ja - Schema löschen und wieder herstellen.
Ich weiß nicht ob das so heutzutage noch so üblich ist (ich zweifle etwas) aber der Professor ist schon im Rentenalter.
Getestet werden soll hier aber nicht die Datenbank sondern eine Software die aus einigen controller und entity paaren und ner GUI besteht - da die Software aber fast nichts macht ausser durch die Tabellen zu browsen und Datenbankeinträge zu ändern oder hinzuzufügen, komme ich nicht drumrum die Datenbank anzubinden für sinnvolle GUI Tests (bei den controllern wollte ich mocks benutzen für Überdeckungstests).
Ich wollte zunächst die Datenbank gegen ne freundlichere JavaDB im embedded modus austauschen - die gleichen Tabellen anlegen wäre kein Problem gewesen aber ich hab keine Ahnung wie es mit den Triggern aussieht und ob die genauso umsetzbar sind wie auf der oracle DB - wär blöd wenn sich das Verhalten der Datenbank auf einmal ändern würde.
Deshalb war halt die zweite Idee die bereits vorhandenen Batch Dateien zu benutzen - bisher halt ohne Erfolg.




Datenbankreiniger, die man in der Testkonfiguration einstellt und dann wird zwischen allen Tests die Datanbank gereinigt.
Das klingt sehr gut - gibts da vielleicht n Stichwort nach dem man googlen könnte um sowas zu finden?
Könnte genau das sein was ich brauche.
Benutzeravatar
asi
Sergeant Hentai
Beiträge: 6004
Registriert: Mo Aug 06, 2001 12:01 am

Beitrag von asi »

retroK hat geschrieben:Kannst Du vielleicht den Umweg über ein Ant-Skript machen? Also die Bat aus dem Ant Skript aufrufen?
wir arbeiten meist mit IDEs - deshalb muss ich zu meiner Schande gestehen, dass ich bisher nie mit ant Skripts zu tun gehabt habe und deshalb nicht weiß was damit alles machbar ist. ;)
Wenn alles andere Scheitert, les ich mich da mal schlau.
Danke für den Tip.
Benutzeravatar
retroK
Co-Admin
Beiträge: 5592
Registriert: Di Nov 30, 1999 1:01 am

Beitrag von retroK »

Hier ein Beispiel wie man ein Bat Skript aus Ant heraus aufruft:
http://ant.apache.org/faq.html#batch-shell-execute
Bild
retrozone member #9

_________________
Ich weiss warum da Stroh liegt!
Benutzeravatar
Enlil
Beiträge: 4279
Registriert: Sa Jan 20, 2001 1:01 am

Beitrag von Enlil »

asi hat geschrieben:Das klingt sehr gut - gibts da vielleicht n Stichwort nach dem man googlen könnte um sowas zu finden?
Könnte genau das sein was ich brauche.
Hab mal das Folgende ergooglet:
http://dbunit.sourceforge.net/

Ob dbUnit gut ist kann ich dir natuerlich nicht sagen. Ich wuere evtl. auch mal ueber die Liste von Java Testframeworks auf Wikipedia gehen:
http://en.wikipedia.org/wiki/List_of_un ... works#Java

Jede Minute die du darauf verbringst dich an ein gutes Testframework zu gewoehnen ist absolut wertvoll verbrachte Zeit. Ich kann mir nicht mehr vorstellen mehr als eine Zeile Code zu schreiben ohne vorher einen passenden Test geschrieben zu haben. Wenn man sich einmal an Test Driven Development gewoehnt hat, gibt es keinen Weg mehr zurueck zur chaotischen Testfreien Welt. Es erfordert allerdings sehr viel Disziplien das am Anfang durchzuziehen und zu lernen, wie man vernuenftige Tests schreibt. Am Anfang wird jeder nicht triviale Test wesentlich laenger dauern, als das Schreiben des eigentlichen Codes.
Allerdings arbeite mitlwerweile als Berater/Trainer fuer XP und bin daher etwas voreingenommen.
Benutzeravatar
asi
Sergeant Hentai
Beiträge: 6004
Registriert: Mo Aug 06, 2001 12:01 am

Beitrag von asi »

Danke, dbunit hab ich gestern auch gefunden - bin mir noch nicht sicher ob ich die Zeit finde mich rein zu arbeiten für diese Hausarbeit, wäre natürlich ein Sahnehäubchen auf der Arbeit - mal schauen wie ich vorankomme, Zeit ist etwas knapp.
Ich hab die Sache mit batch Dateien verworfen - werd die sql statements aus den konfigurationsdateien rauskopieren und als Strings in arrays packen und dann über die Datenbankschnittstelle ausführen lassen.
Allerdings danke nochmal auch an retroKs Tip mit Ant - der hat mich dazu gebracht nochmal ins Skript der Vorlesung rein zu gucken und da das Kapitel über Testautomatisierung genauer unter die Lupe zu nehmen wo unter anderem auch Ant angerissen wird - ich denke wenn die einzelnen Tests - die unter anderem in unterschiedlichen Tools durchgeführt werden - alle fertig sind, werd ich da noch n Ant skript schreiben um diese alle automatisch ausführen zu können.

edit: bin mir nicht 100% sicher da ich keine Zeit verschwenden will das auszutesten aber ich vermute das Ausführen der Batch Dateien wollte nicht klappen, da ich Leerzeichen im Pfad hatte womit cmd.exe Probleme zu haben schien.
Benutzeravatar
asi
Sergeant Hentai
Beiträge: 6004
Registriert: Mo Aug 06, 2001 12:01 am

Beitrag von asi »

Hab ganz vergessen das Ergebnis mitzuteilen:


Habs am Ende doch mit DBUnit gemacht - nach etwas lesen und ausprobieren hab ich erst mal ne Weile gebraucht um Fehler und fehlende Bibliotheken zu finden usw aber am Ende hats recht gut geklappt.
Die Hausarbeit wurde aus Zeitmangel meiner Meinung nach ein totales Debakel ;)
der Prof hat es trotzdem gelungen gefunden und entsprechend gut bewertet.
Benutzeravatar
Enlil
Beiträge: 4279
Registriert: Sa Jan 20, 2001 1:01 am

Beitrag von Enlil »

Danke, dass du uns wissen laesst, wie es ausgegangen ist.
Fan beim naechsten mal frueher mit den Testen an (am besten bevor du den zu testenden Code schreibst). Es ist immer schwerer Code zu testen, der nicht mit Tests im Kopf geschrieben wurde, es sei denn du bist ohnehin ein unglaublich guter und sauberer Programmierer.
Benutzeravatar
asi
Sergeant Hentai
Beiträge: 6004
Registriert: Mo Aug 06, 2001 12:01 am

Beitrag von asi »

In diesem Fall (Wahlfach Softwarequalität) war das Testen, Dokumentation der Tests, Wahl einer Teststrategie usw die Aufgabe - die Software selbst stammt von einem anderen Studenten - nicht von mir.
Wegen anderen Prüfungen sind wir spät angefangen und was als 3 Person Arbeit geplant war blieb zum großen Teil an mir hängen da einer garnicht mehr aufgetaucht ist und der andere leider weder selbstständig, noch sonderlich brauchbar gearbeitet hat.
Das sowas keinen Spaß macht, kannst du dir sicher vorstellen.
Ich hab die Dokumentation der Tests und deren Auswertung so gut wie vollständig auslassen müssen wegen Zeitmangel.
Benutzeravatar
Enlil
Beiträge: 4279
Registriert: Sa Jan 20, 2001 1:01 am

Beitrag von Enlil »

Gegen Ende meines Studiums in Deutschland hatte ich endlich genug Disziplin um alle Aufgaben sehr fruehzeitig abzuschliessen, da ich einfach genug hatte von durcharbeiteten Naechten mit einer Frist am naechsten Morgen. Hier in den USA gab's dann andauernd Gruppenaufgaben und jedesmal waren alle anderen Teammitglieder entweder unfaehig oder schlimmer, haben bis zum letzten Moment gewartet, ob nicht ein anderer die Arbeit macht. Ich kam mir da oft vor wie bei diesen Wettbewerben die Gangs in Filmen veranstalten, wo man mit Autos aufeinander zufaehrt und wer zuerst ausweicht verliert. Wer am meisten um die Note/das Projekt besorgt ist, darf all die Arbeit machen. Zum kotzen sowas.
Benutzeravatar
Katana
Beiträge: 5337
Registriert: So Jan 02, 2000 1:01 am

Beitrag von Katana »

Ich wünschte bei uns in der Berufsschule wäre JUnit (oder DBUnit) ein größeres Thema gewesen, so wurde das Thema Softwarequalität allerdings völlig ignoriert.

Mittlerweile programmiere ich nur noch privat mit Java und bin beruflich auf Delphi zurückgefallen. Wenn man von Java verwöhnt ist, ist das echt ein herber Rückschritt!
Es gibt zwar auch Projekte wie DUnit, mit denen man unter Delphi Unit-Tests implementieren kann, allerdings macht das in einem bestehenden, großen Projekt tatsächlich keinen Spaß. Vor allem wenn die Akzeptanz bei anderen Entwicklern gegen 0 tendiert . . .
Antworten