Home
Eine Webbasierte Entwicklungsumgebung
Contents
1. Datei test2 java erstellen Datei ffnen und den folgenden Inhalt einf gen public class test2 public static void test int ail int b a 1 for int i 0 i lt 10 i b System out printin b In der vierten Zeile der Datei test2 java einen Debugger Haltepunkt erstellen Datei test1 java mit dem Debugger starten automatisches ffnen der Fehlersuche Registerkarte In der Registerkarte Fehlersuche sollte nach einiger Zeit die Position des Debuggers 4 Zeile in Datei test2 java angezeigt werden die Datei test2 java sollte ge ffnet werden und die vierte Zeile markiert werden eine neue Debugger Variable b erstellen der Wert 2 sollte angezeigt werden Step Over ausf hren die f nfte Zeile sollte markiert sein Step Out ausf hren Datei test1 java sollte mit Zeile 4 als aktiver Zeile ge ffnet werden Debugger Haltepunkt in Zeile 5 erstellen 10 Debugger fortsetzen Continue bzw Resume 11 Debugger fortsetzen Continue bzw Resume 12 Programm sollte in der f nften Zeile der Datei test1 java stehen bleiben Seite 116 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 6 2 2 7 Testfall 7 Testfall zum Testen der Online Compiler Dateiverwaltung und der Benutzer An und Abmeldung Dazu werden eine Reihe von Schritten in einem Web Browser in dem der Online Compiler aufgerufen wurde durchgef hrt Schritte im Testfall 7 1 Neues Verzeich
2. OCDocSearchDialog Dialog um Programmiersprachen Dokumentationen zu durchsuchen OCLosginDialog Dialog um Benutzer des Online Compilers anzumelden OCUploadDialog Dialog zum Ausw hlen einer Datei um diese zum Servlet hochzuladen OCFileArgsDialog Dialog zum ndern der Kommandozeilenargumente eines Programmes OCHileTargetsDialog Dialog zum ndern der Linker und Compiler Targets einer Datei OCSourceFileEditor OCGUITabElement OCProblems OCGUITabElement Top OCGUITabHeader Beispiele OCFileTree OCDebugger OCConsole OCGUITabElement OCGUITabElement Bottom OCGUITabHeader Dateien OCFileTree Abbildung 34 Objektdiagramm Benutzerschnittstelle Online Compiler Seite 88 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 5 1 2 2 6 Integration in Ilias Der Online Compiler muss in den Online Kurs Programmieren in Java und in den Online Kurs Datenstrukturen Algorithmen integriert werden Das bedeutet das bei jedem Programm Beispiel in den Online Kursen ein Link vorhanden sein soll mit dem das Programm Beispiel im Online Compiler ge ffnet werden kann Die einfachste und wohl auch sinnvollste Art der Integration ist wenn ber einen Link neben jedem Beispiel Programm das Webinterface ein ge ffnetes Online Compiler Fenster dazu veranlasst wird das Beispiel Programm zu ffnen Durch einen Klick auf Beispiel Link in einen der Ilias
3. includeos js Funktionen zur Integration des Online Compilers in andere Web Seiten z B in Ilias logindialog js Dialog zum Eingeben von Benutzername und Passwort maintab js Grafische Komponente zum Anzeigen von verschiedenen Tabs menu js Grafische Komponente zum Anzeigen eines Men s oc js Modellklassen die Daten des Online Compilers speichern MVC problems js Grafische Komponente zum Anzeigen von Fehlermeldungen und Warnungen sourcefileeditor js Grafische Komponente Editor f r Quelltextdateien splitter js Grafische Komponente zum ndern der Gr e von anderen Komponenten uploaddialog js Dialog zum Ausw hlen einer Datei zum Upload index html eigentliche Web Seite indexklein html Web Seite der Ilias Version des Online Compilers unsupportedbrowser html Fehlerseite falls Browser nicht unterst tzt wird upload html Formular zum Hochladen einer Datei zum Servlet wird f r den IE ben tigt Seite 78 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 5 1 2 2 Implementierung der Benutzerschnittstelle Die Benutzerschnittstelle soll als Ajax Anwendung implementiert werden Dies bedeutet dass der Client bzw die Benutzerschnittstelle vom Server Daten im XML Format bekommt und diese verarbeitet Der Client muss also eine eigene Funktionalit t besitzen beziehungsweise ein richtiges Programm sein Herk mmliche Webanwendungen sind als statische Webseiten implementiert Das hei t die kom
4. Programm beenden Abbildung 30 Zust nde des Java Debugger Jobs Nachdem das Programm gestartet wurde wechselt der Job Thread in den Zustand Programm l uft Tritt in diesem Zustand ein Ereignis ber JDI auf wird in den Zustand Debugger wartet gewechselt Wenn das Programm beendet wurde oder zu Ende ist wird in den Endzustand gewechselt Das Senden von Befehlen wie Step Out an die Java VM des zu debuggenden Programms wird ber JDI Befehle ausgef hrt public synchronized void stepInto throws OnlineCompilerException if isDebuggerReady throw new OnlineCompilerException Debugger not Running setDebuggerWaiting false try stepRequest vm eventRequestManager createStepRequest lastThread StepRequest STEP_LINE Stepkequest STEP_INTO stepRequests add stepRequest stepRequest enable Seite 58 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss catch Exception e restartWaitThread Um Ereignisse wie BreakpointEvent oder StepEvent von der Java VM die das zu debuggende Programm ausf hrt zu erhalten muss mit JDI ein so genanntes Request Objekt erstellt werden Um ein Step Over Befehl auszuf hren muss man ein StepRequest Objekt erstellen und die Java VM fortsetzen Wenn die Java VM dann den n chsten Java Befehl ausgef hrt hat Step Over wird ein StepEvent erzeugt und damit zum Zustand Debugger wartet gewechselt
5. Text Datei Quelltextdateien k nnen als normale Text Dateien gesichert werden Dabei gehen allerdings Informationen wie Debugger Haltepunkte und Kommandozeilenargumente verloren Dateien k nnen auch zum Server hochgeladen werden Dazu muss man im Men NEUE DATEI den Eintrag lokale Datei ffnen ausw hlen Alternativ kann man auch auf das Symbol klicken und dort ebenfalls die Eintrag lokale Datei ffnen ausw hlen Daraufhin ffnet sich ein Dialog mit dem man eine lokale Datei ausw hlen und zum Server hochladen kann Zum Server k nnen alle Dateitypen hochgeladen werden Wenn man eine XML Datei die man vorher vom Server heruntergeladen hat zum Server hochl dt werden die heruntergeladen Dateien komplett wiederhergestellt Seite 147 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 9 3 8 Compilieren von Dateien Dateien k nnen Compiliert werden Dazu muss man auf das Compilieren Symbol in dem Datei baum klicken Wenn man eine Datei ge ffnet hat kann diese durch eine Klick auf compiliert werden Wenn man im Dateibaum auf neben einem Verzeichnisnamen klickt wird nicht das Verzeichnis compiliert sondern alle Dateien in dem Verzeichnis und dessen Unterverzeichnissen Wenn eine Datei compiliert wird wird automatisch die Registerkarte Probleme angezeigt In dieser werden alle Fehlermeldungen und Warnungen aber auch Statusmeldungen angezeigt Tritt w hrend der Compilierung
6. Eine Webbasierte Entwicklungsumgebung Henning Voss 9 3 3 Men punkte und Funktionen Ein kurze Erl uterung zu den Men punkten im Hauptfenster des Online Compilers NEUE DATEI Mit diesem Men kann man eine neue Datei oder ein neues Verzeichnis erstellen Au erdem kann man eine lokale Datei ausw hlen und zum Server hochladen ABMELDEN Meldet den angemeldeten Online Compiler Nutzer ab Danach wird ein Dialog Fenster ge ffnet mit dem man sich erneut anmelden kann Achtung Wenn man sich als Gast abmeldet werden alle Dateien gel scht Sie sollten deshalb vorher lokal gesichert werden Wenn man sich als normaler Anwender abmeldet gehen die Dateien hingegen nicht verloren DOKUMENTATION Men ber das man Dokumentationen der verschiedenen Programmiersprachen ffnen und durchsuchen kann HILFE ffnet eine kurze Hilfe f r den Online Compiler Am unteren Fensterrand kann man die Sprache der Benutzerschnittstelle einstellen deutsch Deutsche Version des Online Compilers english Englische Version des Online Compilers HS Chinesische Version des Online Compilers Seite 140 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 9 3 4 Dateien und Verzeichnisse Wie im ersten Teil des Handbuches beschrieben wurde werden im linken Teil des Online Compiler Fensters die erstellten Dateien und Verzeichnisse angezeigt Datei Baum Neben jedem Verzeichnis und jeder Datei werden Symbole angezeigt mit
7. Neben den Quelltext Dateien des Online Compiler Servlets werden noch eine Reihe weitere Programm Bibliotheken verwendet Die meisten werden f r die XML Unterst tzung ben tigt Seite 43 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss Ben tigte Programm Bibliotheken des Online Compiler Servlets Name Beschreibung ben tigte Version Apache XML Resolver Bestandteil von Apache Xalan 1 2 oder h her Apache XML Serializer Bestandteil von Apache Xalan 2 7 oder h her Apache Xalan Bibliothek zum bersetzen von XML 2 7 oder h her Dateien in andere Formate Apache Xerces XML Parser 2 7 1 oder h her Apache Xerces Samples Bestandteil von Apache Xerces 2 7 1 oder h her Apache XML Apis Schnittstelle f r XML Standards 2006 oder j nger SUN Servlet Sun Java Servlet Package 2 5 oder h her Apache Commons Fileupload Erm glicht Dateiupload mit Servlets 1 1 1 oder h her Apache Commons IO Datei Bibliothek f r Servlets 1 3 1 oder h her Eclipse JDT Java Development Tools 3 2 2 oder h her Die Programmbibliotheken die vom Online Compiler Servlet ben tigt werden befinden sich im Verzeichnis source OnlineCompiler javalibs auf der CD 5 1 1 2 Compilierung des Servlets Das Servlet ist vollst ndig in Java Programmiert worden Um es zu Compilieren m ssen alle Quelltextdateien im Verzeichnis source OnlineCompiler WEB INF classes compiliert werden Damit das Servlet compiliert werden kann
8. job addListener this job start Element result createXMLCommandResult CMD_DEBUGFILE responseXML result setAttribute id ID commandsNode appendChild result Am Anfang der Methode wird zun chst das User Objekt f r andere Sessions und Client Anfragen gesperrt Zeile 5 Danach wird gepr ft ob bereits ein Job Thread aktiv ist Zeile 6 Falls ja wird eine Ausnahme geworfen und die Abarbeitung des Befehls abgebrochen In den Zeilen 7 bis 9 wird die Datei gesucht die debuggt werden soll In Zeile 10 wird der Job erstellt und in Zeile 12 der Thread gestartet In den Zeilen 13 bis 16 wird das Ergebnis des Befehls zur XML Antwort hinzugef gt Seite 70 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 5 1 1 3 8 2 Kommunikationsprotokoll Wie bereits im Entwurf festgelegt werden Nachrichten zwischen Client und Servlet im XML Format bertragen Eine Nachricht vom Client zum Servlet ist immer wie folgt aufgebaut lt oc request gt lt befehll parameter1 parameter2 gt lt befehl2 parameter 1 parameter2 gt lt befehl3 parameter 1 parameter2 gt lt oc request gt Eine Antwort des Servlets an den Client hat immer folgendes Format lt oc response gt lt befehll gt lt befehll gt lt befehl2 gt lt befehl2 gt lt befehl3 gt lt befehl3 gt lt oc response gt
9. Ein Problem von JDI ist das man mit JDI nicht auf Variablen der Java VM die das zu debuggende Programm ausf hrt zugreifen kann Mit dem GDB kann man Variablen mit dem print Befehl lesen Um Variablen mit JDI zu lesen muss man deshalb eine weitere Komponente das expr Paket des SUN Java Debuggers JDB verwenden Sun 3 private void updateVariable DebugableFile Variable variable try Value value ExpressionParser evaluate variable getName vm this var able setValue value toString catch Exception e var iable setValue Die Methode updateVariable liest den Wert einer Variablen und speichert ihn in einem Variablen Objekt Dazu wird die Klasse ExpressionParser des expr Paketes des JDB verwendet Ein weiteres Problem betrifft die Class Dateien von Java und die Debugger Haltepunkte Mit JDI k nnen nur Debugger Haltepunkte f r Java Klassen erstellt werden Dass hei t man kann Debugger Haltepunkte f r eine Klasse X oder eine Klasse Y erstellen nicht aber f r Java Dateien Der Benutzer gibt aber Haltepunkte f r einzelne Java Dateien im Editor der Benutzerschnittstelle an Wenn also ein Haltepunkt in einer Datei die zwei Klassen enth lt erstellt werden soll muss man erst herausfinden zu welcher Klasse der Haltepunkt geh rt Das hei t man muss den Java Quelltext analysieren Da dies zu aufwendig ist wird folgendes Verfahren verwendet Sobald eine Class Datei in der Jav
10. 5 1 1 4 AE ET 57 IL I Lisp Und CE reed eltern 60 Seite 2 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 5 1 1 3 6 AppArmor und Java Security Manager 222244s42000ssnnoennnnnnnnnnnnnnnnnnnnenn 61 5 1 1 3 7 User und Client Se8sion8 unuu nn a E E IR 64 INST EE EE 65 31 13 72 Dessen SE erinnere 66 5 1 1 3 8 Kommunikation Chent Servlet 69 5 1 1 3 8 1 XML Antworten des Servlets ies 70 LENK aueh 71 5 1 138 3 Be febls b tsiC ht unasienianie ina Eaa aaant 72 e A Re Doa Eor DE E 77 3 1 2 RE EA OC ELE 78 5 1 2 1 Datei Ubersicht 78 5 1 2 2 Implementierung der Eegenheeten 79 5 12 21 Dynamisches HTM Eee 79 5 1222 HTML Code Sen eege 81 e D WEE E ae 82 3 12 24 Quelle Eder EE 85 5 1 2 2 5 bersicht Grafische Leien te 88 3 12 26 Integration i Ten Aaen eg 89 5 1 2 2 7 Kommunikation mit dem Servlet MN 91 3 2 Multi TaskJaya EE 94 52 1 Dat bersicht nee eigene 94 EE der MINM ee ee es 94 5 2 3 Demo Programmi ausf hren ee ee einge 95 5 2 A Implementierung det A E 96 5 2 4 1 Kommunikation zwischen Client Anwendungen und einer MNNM 96 5 2 4 1 1 Verbindung zu einer MIVM kerstellen ans 97 5 2 4 2 Ausf hren von eege Geer Cedies ENNESCH 99 5 2 4 3 Die Klasse MINMNrralkMachne 103 32 33 1 SW Ki nee 104 5 2 4 4 MJVM Client EE 106 5 2 4 4 1 Eine MJVM starten resies insir aiaa a ata a e inida 107 eer EE 108 El EE 108 BIS ee rn 108 621 Euren anreisen 108 6 2 2 Kl EE 109 6221 VE 1 EE 109 62 2
11. Datei test java erneut ausf hren und auf Timeout warten 2 Minuten In der Registerkarte Probleme sollte eine entsprechende Fehlermeldung angezeigt werden Die Kommandozeilen Argumente der Datei test java ffnen In dem Eingabefeld den Text ab c eingeben und die Argumente speichern Datei im Editor ffnen Dateiinhalt ersetzen durch public class test public static void main String args for int i 0 i lt args length i System out printlin args i Das Programm test java erneut ausf hren das Programm sollte ab c ausgeben Targets der Datei test java ffnen im Dialogfenster sollte nur die Datei test java als Target eingetragen sein Bei dem Target test java auf linken klicken und Targets speichern Fehlermeldung erwartet Dialog schlie en abbrechen Inhalt der Datei test java ersetzen durch package test public class test public static void main String args for int i 0 i lt args length i System out printlin args i Datei erneut ausf hren kein Fehler erwartet In der ersten Zeile des Programms das Wort test durch test2 ersetzen und Programm test java erneut ausf hren Fehlermeldung Ausgabe des Programms erwartet Seite 110 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 6 2 2 2 Testfall 2 Test der Dokumentation und der Online Hilfe sowie der verschiedenen Sprachen Dazu werden wie beim erste
12. Der gesamte Test wurde nur mit diesem Browser durchgef hrt Andere Browser wurden sp ter in einem speziellen Browsertest validiert siehe n chsten Abschnitt Als Server wurden der Computer javock Linux und ein zweiter Rechner ebenfalls Linux verwendet Der Test wurde also zweimal durchgef hrt F r die Benutzer Authentifizierung wurde beim javock der Ilias Server der Fachhochschule Trier http ilias fh trier de verwendet F r den anderen Rechner wurde ein lokaler Ilias Server installiert Voraussetzung f r den gesamten Test ist dass alle Systeme Client und Server laufen und eine Verbindung zwischen beiden m glich ist Bei der Beschreibung der Testf lle wurde auf Details wie Vorbedingung Nachbedingung usw verzichtet da diese sich aus der Beschreibung der Testf lle ergeben Au erdem wurden mehrere zu testende Funktionen aus Gr nden der bersichtlichkeit zu einem Testfall zusammengefasst Seite 108 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 6 2 2 Testspezifikation 6 2 2 1 Testfall 1 Test einiger Funktionen des Online Compilers Insbesondere die Funktionen die f r Java Programme ben tigt werden Dazu werden eine Reihe von Schritten in einem Web Browser in dem der Online Compiler aufgerufen wurde durchgef hrt Schritte im Testfall 1 1 2 10 11 12 13 14 Neues Verzeichnis test erstellen Neue Java Datei test java im Verzeichnis test erstellen und Datei t
13. Ilias Version der Benutzerschnittstelle Um f r jede Datei eines Beispiels einen Editor zu erzeugen muss lediglich f r jede Datei eine neue Instanz der Klasse OCSourceFileEditor erzeugt werden und diese in eine neue Instanz der Klasse OCGUITabElement Registerkarte eingef gt werden OCGUI _newFileEditor function title file var fileEditor new Object fileEditor editor new OCSourceFileEditor main_file_view Seite 90 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss fileEditor title title fileEditor file file fileEditor name file_editor_ this fileEditorList length this fileEditorList push fileEditor new OCGUITabElement this mainTabPanel fileEditor name title top filekFditor editor Die kleine Version des Online Compilers kann genauso wie die normale Version ber die URL aufgerufen werden Der einzige Unterschied ist das man statt index html in der URL den Namen indexklein html verwenden muss 5 1 2 2 7 Kommunikation mit dem Servlet MVC Die folgende Grafik stellt die Ablauf der Kommunikation zwischen Webinterface Online Compiler Client und Servlet dar Inhalt abfragen Webinterface Aktualisieren Beispiele Action Aktualisieren Callback f XML Response AJAX Engine Request OC Servlel Abbildung 37 Ajax Kommunikation Client Server Wird im Webinterface vom
14. Li Shen 2006 Das AJAX Framework ist eine einfache JavaScript Erweiterung f r Browser mit der man relativ einfach XML Requests an XML Server senden kann Wenn ein XML Response eine Antwort des Servlets bei einem Client ankommt wird eine sogenannte Callback Funktion aufgerufen die den XML Inhalt des Servlet Response analysiert und entsprechende Aufgaben z B aktualisieren des Webinterface ausf hrt Um den XML Inhalt von einem Servlet Response zu analysieren wird ein XML Parser verwendet JSXML Beispiel f r eine f r eine Servlet Anfrage OCGUI actionLogout function if this loggedIn return var request new Ace Request this function response if this handleResponse return if response success true this _showServerErrorMessage response success logout response lastCommand name else this _logout Abmelden abschliessen I if this jobRequest amp amp this jobRunning this _ajaxRequestAddSaveFileCommandForAllEditors request request addCommand lt logout gt Seite 92 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss request finish this ajaxConnection invoke request Das obige Beispiel dient zum Abmelden eines Anwenders vom Online Compiler Das Objekt der Klasse Ace Request ist die eigentliche Anfrage die von der Ajax Engine in XML Code umgewandelt und zum Servlet gesendet wird Das Objekt hat im Konstruktor bereits die Callback Funktion also di
15. Testergebnis 50 Java Programme nacheinander in je weils einer eigenen j0 Java Programme tacheinander in einer AJVM ausf hren 50 Java Programme parallel in jeweils einer eigenen JVM 50 Java Programme parallel in einer eigenen MJVM aus Ergebnis I ben tigte Zeit in ms 2000 4000 6000 8000 Seite 123 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 6 4 3 Testbericht 6 4 3 1 gefundene Fehler W hrend des Tests ist kein Fehler aufgetreten 6 4 3 2 weitere Probleme Sonstige Probleme die w hrend des Testlaufs aufgetreten sind Probleme in allen Testf llen des Lasttestes Bei jedem Lasttestfall konnte die Randbedingung der Online Compiler muss ber einem Browser w hrend des Tests verwendet werden k nnen nie erf llt werden Das Servlet bzw der Computer javock auf dem das Servlet lief wurde durch die Tests so stark belastet dass ein normales Arbeiten mit dem Servlet w hrend der Tests vollkommen unm glich war Bei der Ausf hrung mit einem schnelleren Rechner als Ersatz f r den Server javock wurden bessere Resultate erzielt So war bei dem Test mit dem schnelleren Rechner ein Arbeiten mit dem Online Compiler w hrend des laufenden Tests m glich Seite 124 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 6 5 Test Ergebnis Das Ergebnis des Lasttestes hnelt stark dem Ergebnissen der Vorg ngerversion des Onli
16. Wenn ein Befehl aufgrund eines Fehlers nicht ausgef hrt werden konnte wird die Ausf hrung der anderen Befehle abgebrochen Der Befehl der nicht ausgef hrt werden konnte wird durch das Attribut success false gekennzeichnet Die Fehlerursache wird in dem XML Knoten der f r den Befehl verwendet wird eingef gt Eine Antwort bei einem Fehler im 2 Befehl ist folgenderma en aufgebaut lt oc response gt lt befehl1 gt lt befehl1 gt lt befehl2 success false gt Fehlermeldung lt befehl2 gt lt oc response gt Seite 71 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 5 1 1 3 8 3 Befehls bersicht Im Vergleich zum Java Online Compiler sind beim Online Compiler 17 Befehle mehr vorhanden Diese werden haupts chlich zur Steuerung des Debuggers ben tigt Bei vielen Befehlen m ssen Dateien oder Verzeichnisse als Parameter angegeben werden Daf r existieren 3 verschiedene M glichkeiten Angabe der ID der Datei oder des Verzeichnisses Jede Datei und jedes Verzeichnis hat eine eindeutige Nummer die sogenannte ID Angabe des Pfades der Datei oder des Verzeichnisses z B a b c d txt Angabe des Kurz Namens sname der Datei oder des Verzeichnisses Jede Datei kann einen sname haben So kann man zum Beispiel f r jedes Programm Beispiel einen eindeutigen Namen sname vergeben z B da_beispiel_1 da_beispiel_2 usw Zum Aufruf eines Programm Beispiels kann man dann einfach da_beispie
17. dateil html Document deutsch Language Damit das Servlet weiss welche Texte in den Dateien ersetzt werden muss eine spezielle Formatierung f r die Texte verwendet werden Dazu wurde die zu diesem Zweck h ufig verwendete Abk rzung il8n gew hlt il8n steht f r das englische Wort Internationalization die 18 steht f r die 18 Buchstaben zwischen i und n Befindet sich in einer Datei der Benutzerschnittstelle der Text l8n Anmeldung wird Anmeldung durch ein entsprechendes Wort der jeweiligen Sprache ersetzt Bei der deutschen Version w re das das Wort Anmeldung bei der englischen Version hingegen Login Seite 27 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 4 1 1 5 1 Kommunikationsprotokoll Der Online Compiler ist eine Client Server Anwendung Client und Server tauschen Nachrichten aus Das hei t der Client sendet Befehle zum Server der diese dann beantwortet Das hei t vor der Implementierung muss festgelegt werden wie diese Nachrichten formatiert werden Mit anderen Worten ein Protokoll muss festgelegt werden Da der Online Compiler eine Ajax Anwendung ist wird XML als Format f r die Protokoll Nachrichten verwendet Eine Client Nachricht an das Servlet Anfrage lt oc request gt lt befehll parameter1 parameter2 gt lt befehl2 parameter 1 parameter2 gt lt befehl3 parameter1 parameter2 gt lt o
18. 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 4 1 1 5 Servlet Infrastruktur Der letzte Teil des Entwurfs des Online Compiler Servlets besch ftigt sich mit dem Teil der die Servlet Funktionalit t bereitstellt Dessen Entwurf ist vorgegeben So muss jedes Servlet eine zentrale Klasse haben die zum Beantworten von Client Anfragen dient Die Klasse OCServler bernimmt diese Aufgabe Eine weitere vorgegebene Klasse ist GarbageCollector Diese Klasse dient zum L schen von Client Verbindungen die l ngere Zeit nicht verwendet wurden User lt lt interface gt gt from onlinecom piler usen Fik Object Listener from onlinecom piler source listener Session Garbage Coll dor from onlinecom piler servlet session from onlinecom piler servlet session sessions Server O CConfigurat ion from onlinecom piler servlet serverConfig from onlinecom piler servlet OCServiet from onlinecom piler servlet Abbildung 14 Klassenhierarchie Servlet und Sessions Zentrale Klasse des Servlets ist Server Diese Klasse dient als Container aller Client Verbindungen Klasse Session zum Speichern der Konfiguration Klasse OCConfiguration sowie zum Initialisieren aller Anwendungsteile Die Klasse Session dient zum Verwalten aller Client Verbindungen Dass hei t zu jeder Verbindung mit einem Client existiert eine Instanz der Klasse Session um den Zustand der Verbindung zu speichern D
19. 7 Die Benutzer Authentifizierung mit dem llias Server der Fachhochschule Trier Test mit javock ist fehlgeschlagen Bei dem zweiten Server lokaler Ilias Server dagegen trat der Fehler nicht auf Die Anmeldung an den FH Trier Ilias Server kann aufgrund eines Fehlers in Ilias nicht funktionieren Da der FH Trier Ilias Server auf einen weiteren Server LDAP zur Benutzer Authentifizierung zugreift ist eine Benutzer Authentifizierung ber die SOAP Schnittstelle des Ilias Servers zur Zeit nicht m glich Seite 118 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 6 3 Browsertest Ziel des Browsertests ist es den Online Compiler beziehungsweise die Benutzerschnittstelle mit verschiedenen Web Browsern zu testen Im Browsertest wurden nicht nur die beiden Web Browser die laut Anforderung unterst tzt werden m ssen getestet sondern auch alle anderen g ngigen Web Browser Im Browsertest werden beide Versionen der Benutzerschnittstelle die Ilias Version und die normale Version getestet 6 3 1 Firefox Im aktuellen Firefox Browser Version 2 0 Mozilla 2 k nnen alle Funktionen des Online Compilers ohne Probleme aufgerufen werden W hrend des Tests wurde kein Fehler gefunden 6 3 2 Internet Explorer Mit dem Internet Explorer gab es am meisten Probleme w hrend der Entwicklung des Online Compilers Mit der aktuellen Version 7 0 Microsoft 1 gab und gibt es eine Reihe von Fehler bei der Anzeige des Onli
20. Benutzer ein Befehl Action aufgerufen z B ein Klick auf einen Men punkt bewirkt dies in der Regel dass ein Request ber die sogenannte AJAX Engine zum Online Compiler Servlet gesendet wird Bei einer Antwort des Servlets wird eine Callback Methode angesto en welche die Antwort bearbeitet Zum Beispiel wird dann der Dateibaum die Dateien und Verzeichnisse die der Anwender erstellt hat aktualisiert Au erdem werden die Inhalte der Seite 91 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss HTML Seite aktualisiert Das Webinterface speichert Informationen ber Dateien Beispiele und den laufenden Job Falls sich eine nderung ergibt wird diese nderung vom Servlet zum Webinterface gesendet und dort an der entsprechenden Stelle eingetragen Client und Servlet arbeiten also nach dem MVC Muster nderungen am Modell z B Dateien werden vom Servlet an den Client bertragen die Modelldaten werden im View dem Client angezeigt eine Action Controller wird zum Servlet bertragen und bewirkt eine Modell nderung Damit nicht st ndig alle Modell Daten vom Servlet bertragen werden m ssen werden die wichtigsten Daten der Dateien Beispiel und des laufenden Jobs im Webinterface zwischengespeichert Das wichtigste Element im Webinterface ist die AJAX Engine die die Kommunikation mit dem OC Servlet erst m glich macht Dazu wurde ein AJAX Framework Datei ace js welches von Li Shen entwickelt wurde verwendet
21. Debugger wird beim n chsten Ausf hren der Datei in dieser Zeile stoppen Durch einen weiteren Klick auf den Debugger Haltepunkt wird dieser wieder gel scht Schalter des Editors Druckt den Dateiinhalt m wiederholt die letzte Aktion A macht die letzte Aktion r ckg ngig Seite 143 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss u Compiliert die Datei siehe Abschnitt Compilieren von Dateien debuggt die Datei siehe Abschnitt Programme debuggen f hrt ein Programm aus siehe Abschnitt Programme ausf hren AR ffnet ein Popup Men zum Konfigurieren der Datei siehe unten Q Speichert und Schlie t die Datei Durch einen Klick auf ffnet sich ein Popup Men zur Konfiguration der ge ffneten Datei Zur Konfiguration einer Datei z hlen die Kommandozeilenargumente und die sogenannten Compiler Targets Kommandozeilenargumente siehe unten sind die Argumente die dem Programm beim Start Ausf hren bergeben werden Compiler Targets siehe unten sind Dateien die beim Compilieren einer Datei mit compiliert und ggf gelinkt werden Seite 144 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss Zum Bearbeiten von Compiler Targets ffnet sich ein Dialog in dem die Targets eingegeben werden k nnen Um eine Datei als Compiler Target hinzuzuf gen muss einfach der Dateiname per Drag amp Drop mit der Maus in den Dialog gezogen werden Um ein Target w
22. Entwicklungsumgebung Henning Voss das Session Objekt welches der Verbindung zugewiesen wurde weitergeleitet 5 1 1 3 81 XML Antworten des Servlets XML Anfragen von Clients werden von der Methode answerSessionRequest der Klasse beantwortet Die Methode answerSessionRequest f hrt folgende Operationen aus Parsen der XML Anfrage bei einem Format Fehler in der XML Anfrage wird eine Fehlermeldung zum Client gesendet Erstellen eines neuen XML Dokumentes f r die Antwort und Durchlaufen der XML Anfrage mit einer Schleife Jeder Befehl siehe n chster Abschnitt Kommunikationsprotokoll wird in einer eigenen Methode abgearbeitet Das Ergebnis des Befehls wird mit einem neuen XML Knoten zur Antwort hinzugef gt Die Antwort XML Dokument wird zum Client gesendet Jeder Befehl des Kommunikationsprotokolls wird in einer eigenen Methode abgearbeitet Die Methode commandDebugFile dient zum Beispiel zur Bearbeitung des Befehls debug file mit dem der Debugger f r eine Programm Datei gestartet werden kann FA LA pa pa OO OO AJ On OD GA k H J On OD V GA N H O private void commandDebugFile Document responseXML Element commandsNode Element command throws OnlineCompilerException lockUser user checkUserJobRunning kein Job darf laufen String ID command getAttribute id FileObject fo getFileObjectByID ID if fo null throw new InvalidIDException user addJob job fo debug
23. Handler mit dem Ereignis Attribut hinzugef gt werden Im Firefox Browser hingegen muss man f r HTML IFrame Elemente die addEventListener Funktion verwenden Ein weiteres Problem ist dass man f r jedes Ereignis nur einen Ereignis Handler verwenden kann Dass hei t wenn man bei einem Ereignis eine weitere Funktion aufrufen m chte kann man diese nicht als Ereignis Handler an das HTML Element anmelden Ein weiteres Problem ist das man bei Ereignissen in JavaScript keine objektorientierte Programmierung verwenden kann Ereignis Handler sind in JavaScript immer einfache Funktionen also keine Objekt Methoden Um diese und weitere Probleme zu l sen wurde die JavaScript Klasse OCGUlEvent entwickelt welche die komplette Ereignis Behandlung der Online Compiler Benutzerschnittstelle durchf hrt Dadurch dass die Ereignis Behandlung von einer zentralen Klasse durchgef hrt wird erh lt man einen gro en Vorteil nderungen betreffen nur einen kleinen Teil des gesamten Programmes Man kann so leichter Probleme mit verschiedenen Browsern und sonstige Fehler beheben ohne gro e Teile des Programmes anpassen zu m ssen In dem folgenden UML Diagramm wird das Ereignis Behandlungs System der Online Compiler Benutzerschnittstelle dargestellt Seite 82 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss uw u OCGUlEventSource Connector type String handleEventO void addListener void removeLlistener O void OC
24. Position in der sich das Programm befindet sowie ggf die aktuellen Werte von Programm Variablen Seite 31 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss Das Webinterface bzw die Webseite wurde in 4 Bereiche aufgeteilt die in der folgenden Grafik dargestellt werden Dateien und Datei Editor Verzeichnisse Beispiele Fehlermeldungen und Warnungen und Ein und Ausgabe von Programmen bungen Debugger Abbildung 18 Struktur Benutzerschnittstelle F r die kleine Version des Online Compilers welche in das Ilias Projekt D A eingebunden werden soll muss die Benutzeroberfl che leicht angepasst werden unter Ber cksichtigung das der Platz f r die Benutzerschnittstelle stark begrenzt ist Die folgende Grafik zeigt die Aufteilung der Benutzerschnittstelle f r die kleine Version des Online Compilers Im Gegensatz zur normalen Version wurde lediglich die Verwaltung der Dateien sowie die Anzeige der Beispiele und bungen weggelassen da diese Funktionen in der Ilias Version nicht ben tigt werden Datei Editor Fehlermeldungen und Warnungen Ein und Ausgabe von Programmen Debugger Abbildung 19 Struktur Benutzerschnittstelle Ilias Version Ein Problem welches man bei dem Entwurf einer Benutzerschnittstelle ber cksichtigen muss ist der begrenzte Platz den einem zum Darstellen zur Verf gung steht Dieses Problem wird noch dadurch verst rkt dass die Benutzerschnittstelle in eine
25. Progammiersprachen ka BT Probleme A 2007 Fachhochschule Trier deutsch english PX Abbildung 22 aktivierte Tabs Konsole und Fehlersuche Wie bereits im ersten Abschnitt beschrieben sollen die Gr en der einzelnen Komponenten dynamisch mit der Maus durch die Anwender ver ndert werden k nnen Auf diese Weise kann zum Beispiel die Editor Komponente auf fast die gesamte Bildschirm Breite bzw Browser Fenster Breite vergr ert werden Seite 36 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss Online Compiler 2 0 Beta NEUE DATEI ABMELDEN Angemeldet als Gast DOKUMENTATION HILFE E ge ffnete Datei Se UE EE LEE EE GI 7 13 int anzahlElemente 14 15 public static Intset empty bei 16 4 17 Intset menge new Intset d Ei menge daten new int N 19 menge anzahlElemente 0 20 return menge 21 a 22 PR 23 public static Intset insert Intset menge int element u Zei 2 5 Da if isEmpty menge R br menge daten 0 element ei 28 menge anzahlElemente 29 30 else 31 32 int einfuegepos binsuch menge element 0 menge anzahlElemente 1 B gt gt 4E Imanmn ECHTEN EE Dei Fehler und Warnungen amp Probleme a Konsole a Feblersuche 5 2007 Fachhochschule Trier deutsch english PX Abbildung 23 Vergr erter Editor f r eine Quelltext Datei Wie bereits erw hnt muss die Ilias Version des Online Compilers verkleinert werden da weniger Platz zur Darst
26. Quelltext Editor wurde also in Form eines IFrames implementiert welches in die Benutzerschnittstelle das HTML Dokument des Online Compilers eingef gt werden kann Um aus einem IFrame bzw einem HTML Dokument einen MIDAS Editor zu machen gen gt ein einziger JavaScript Befehl doc designMode readOnly off on Seite 85 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss Die Variable doc ist das IFrame Element Wenn die Variable readOnly den Wert true hat wird das IFrame zu einem HTML Editor MIDAS Wenn die Variable den Wert false hat wird aus dem IFrame wieder ein normales HTML Dokument welches nicht bearbeitet werden kann In der folgenden Grafik wird ein Ausschnitt des Quelltext Editors der Online Compiler Benutzerschnittstelle gezeigt int main func m prin 10 retu 11 Auf der linken Seite befinden sich zwei Debugger Haltepunkte in Form von zwei roten Rechtecken Diese k nnen in den MIDAS Editor wie alle anderen HTML Elemente eingef gt werden Die Zeilennummern sind ebenfalls eine Grafik Auf der rechten Seite befindet sich der Quelltext der vom Anwender bearbeitet werden kann Die Zeilennummern k nnen nicht als Text in den MIDAS Editor eingef gt werden sondern m ssen als Grafik implementiert werden W rde man die Zeilennummern als Text in den Editor einf gen h tte der Anwender die M glichkeit diese zu ver ndern da alle Elemente im MIDAS Editor ver nderbar sind Zum H
27. Seite 104 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss Als Beispiel f r eine an MJVM angepasste Methode dient die Methode exit der Klasse Runtime die das Beenden von Java Anwendungen ausf hrt public void exit int status SecurityManager security System getSecurityManager if security null security checkExit status k Begin nderungen MJVM MJVMProcess process MJVMVirtualMachine getProcessByThread Thread currentThread if process null process setExitCode status process getThreadGroup killAll process getOut flush process getOut close process getErr flush process getErr close Thread currentThread stop return k r Ende nderungen MJIVM Shutdown exit status Die Methode getProcessByThread ermittelt die Java Anwendung Objekt der Klasse MJVMProcess zu der der Thread geh rt der die exir Methode aufgerufen hat Falls eine Java Anwendung gefunden wurde werden alle Threads der MJVMThreadGroup der Java Anwendung mit dem Befehl killAll beendet Falls keine Java Anwendung gefunden wurde wurde die exit Methode von einem anderen Thread aufgerufen und die gesamte MJVM wird beendet Bei jeder static Methode muss also zun chst die Java Anwendung ermittelt werden die die Methode aufgerufen hat Dazu wird die Methode getProcessByThread verwendet Die Kl
28. der Klasse User verwendet Diese Methode wird aufgerufen wenn eine Datei oder ein Verzeichnis erstellt wurde Seite 65 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss public void fireFileObjectCreated FileObject fo for int i 0 i lt listener size i if listener get i null listener get i fileObjectCreated fo Die Methode ruft in jeder angemeldeten Session die Methode fileObjectCreated auf Diese Methode speichert das Ereignis in einer Warteschlange Klasse EventQueue Bei Client Anfragen werden diese Ereignisse aus der Warteschlange zum Client bertragen Auf diese Weise erhalten alle Clients die bzw deren Sessions an ein bestimmtes User Objekt angemeldet sind alle Ereignisse des Users public void fileObjectCreated FileObject fo if fo instanceof RootFolder return fileEvents addEvent SessionEvent FILE_CREATE fo 5 1 1 3 7 2 Session Synchronisation Der Tomcat Webserver f hrt alle Client Anfragen in einem eigenen Thread aus Dass hei t dass mehrere Anfragen von mehreren Clients die auf das gleiche User Objekt zugreifen parallel ausgef hrt werden k nnen Mehrere Threads k nnen also gleichzeitig auf die gleichen Daten zugreifen wodurch die Gefahr von inkonsistenten Daten fehlerhafte Daten da mehrere Threads gleichzeitig die Daten bearbeitet haben besteht Es ist deshalb eine Synchronisation der Threads notwendig private Boolean sessionLock new Boolean fal
29. die im Web also in einem Webbrowser ausgef hrt werden Eine Webanwendung muss weder auf einem Computer installiert noch konfiguriert werden Alles was man f r eine Webanwendung braucht ist eine Internet Verbindung und ein Webbrowser Ein Beispiel f r eine Webanwendung ist Google Docs Google 1 Google Docs ist eine Textverarbeitung und eine Tabellenkalkulation die im Webbrowser ausgef hrt wird Im Bereich des E Learnings spielt das Internet eine besondere Rolle So werden zum Beispiel f r den Fernstudiengang Informatik der Fachhochschule Trier eine Reihe von Kursen angeboten die man ber das Internet abrufen kann Zum Studium geh rt aber nicht nur das Lesen von Vorlesungsunterlagen oder Skripten sondern zum Beispiel auch bungsaufgaben So m ssen im E Learning Kurs Einf hrung in die Programmierung Java Programme erstellt werden An dieser Stelle st t jedes E Learning System an seine Grenzen um Java Programme zu erstellen bleibt den Lernenden nichts anderes brig als das E Learning System zu verlassen und andere Programme zu verwenden Durch die modernen Techniken des Web 2 0 l sst sich dieses Problem beheben indem mit einer Webanwendung E Learning Systeme um solch komplexe Aufgaben wie das Erstellen von Java Programmen erweitert werden Seite 5 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 2 Ziele Ziel dieser Abschlussarbeit ist das Erstellen einer Entwicklungsumgebung IDE Eine Entwic
30. erstellen deren Name jeweils mit GNU bzw SUN endet Wenn man das obere UML Diagramm betrachtet f llt auf dass nur Klassen f r Java C und C und C existieren F r die Programmiersprache Lisp wird keine Implementierung der Klasse BuildJob ben tigt da Lisp eine Interpreter Sprache ist Im n chsten UML Diagramm werden die Klassen dargestellt welche die Klasse LaunchJob implementieren Diese Klassen bzw Jobs dienen zum Ausf hren von Programmen Seite 20 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss cd Launchjobs Launch Job from onlinecom piler languages jobs JavaFileLaunch JobS UN CFike Launch JobGNU from onlinecom piler languages java JavaLanguage from onlinecom piler languages c CLanguage LispFileLaunch Job GNU CSharplaunchJobMONO from onlinecom piler languages lisp LispLanguage from onlinecom piler languages csharp CSharpLanguage Abbildung 10 Klassen zum Ausf hren von Programmen Das folgende UML Diagramm zeigt die Klassen welche die Klasse DebugJob implementieren Wie bei den BuildJob Klassen gibt es auch bei den DebugJob Klassen keine Implementierung f r die Programmiersprache Lisp cd DebuglJobs DebugJob from onlinecom piler languages jobs JavaFileDebugJobSUN CFile Debug Job GNU from onlinecom piler languages java JavaLanguage from onlinecom piler languages c CLanguage CS5harpDebugJobMONO from onlinecom piler
31. isProcessTimeout true throw new TimeoutException return true LaunchFile startet das C oder C Programm und wartet bis das Programm beendet ist Eine Besonderheit von C und C Programmen ist der Exit Code also die Zahl die von dem Programm als Ergebnis Wert zur ckgegeben wird Falls das Programm mit einer AppArmor Sandbox ausgef hrt wird ist der Exit Code immer dann 255 wenn ein unerlaubter Befehl ausgef hrt wurde Dass hei t wird zum Beispiel versucht in eine Datei zu schreiben wird das Programm von AppArmor beendet und als Exit Code 255 zur ckgeliefert 5 1 1 3 3 3 Debuggen Der bei weitem komplexeste Teil der C und C Implementierung des Online Compilers ist der Debugger Das Debuggen von C und C Programmen wird mit Hilfe des Kommandozeilen Programms GDB GNU Debugger FSF 2 durchgef hrt Der GDB ist ein Programm welches ein C oder C Programm debuggen kann Gesteuert wird der GDB mit Hilfe von Befehlen die normalerweise ber die Kommandozeile eingegeben werden Die Klasse CFileDebugJobGNU f hrt das Debuggen von C und C Programmen aus Wie die beiden vorher genannten Klassen CFileLaunchJob und CFileBuildJob ist auch diese Klasse von der Klasse Job abgeleitet Dass hei t ein eigener Thread f hrt das Debuggen von C und C Seite 50 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss Programmen aus Online Job GDB ee Compiler Thread Prozess Programm Abbildung 27 Threads und
32. languages csharp CSharpLanguage Abbildung 11 Klassen zum Debuggen von Programmen Seite 21 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 4 1 1 3 1 Linker Der Online Compiler soll verschiedene Programmiersprachen unterst tzen Diese unterscheiden sich nicht nur in dem bereits mehrfach erw hnten Backend welches zum Compilieren und Ausf hren verwendet wird sondern auch in der Art wie Programme erzeugt werden m ssen Drei verschiedene M glichkeiten k nnen vorkommen Dateien m ssen nicht compiliert werden z B LISP Dateien m ssen nur compiliert werden z B Java und C Dateien m ssen compiliert werden mehrere compilierte Dateien werden mit einem sogenannten Linker zum einem Programm zusammengebunden C und C In solchen F llen muss gespeichert werden welche Dateien gelinkt werden sollen In dem folgenden UML Diagramm wird eine N N Beziehung der Klasse BuildableFile mit sich selbst dargestellt Jede Datei kann zu einer oder mehren Dateien gelinkt werden Jede Datei kann aber auch aus mehren anderen Dateien bestehen die zu ihr gelinkt werden m ssen Wie bereits im Kapitel Anforderungen und Konzept erw hnt wurde werden Dateien die zu anderen Dateien gelinkt werden als Targets Ziele bezeichnet BuiklableF ile from onlinecom piler languages files target Target from onlinecom piler languages files BuildableFile link boolea
33. mit den MJVM JRE Klassen starten Die MJVM Anwendung mit dem Kommandozeilenparameter Xbootclasspath p rt aufrufen rt ist das Verzeichnis welches die angepassten MJVM JRE Klassen enth lt Bis vor kurzem bevor Java als Open Source ver ffentlicht wurde hatte SUN der Entwickler von Java dieses Verfahren allerdings verboten Bei der dritten M glichkeit die ich auch verwendet habe werden die Klassen Definitionen Inhalt der Class Dateien der JRE Klassen zur Laufzeit durch die Klassen Definitionen der angepassten MJVM JRE Klassen ersetzt Um zur Laufzeit Klassen Definitionen zu ersetzten kann man das JDI das Java Debug Interface verwenden Nachdem eine MJVM gestartet wurde werden mit der Methode patchClass der Klasse MJVMConnector die System Klassen f r die es spezielle MJVM Versionen gibt durch diese mit Hilfe von JDI berschrieben private void patchClass File file String name throws MJVMException try byte classData MJVMClassLoader loadClassData file name List classList mjvm classesByName name if classList size 0 throw new RuntimeException Klasse nicht gefunden ReferenceType rt ReferenceType classList get 0 byte bytes MJVMClassLoader loadClassData file name Map map new HashMap map put rt bytes mjvm redefineClasses map catch Exception eil throw new MJVMException Error during VM Patch Seite 107 von 156 Eine Webbasie
34. r die englische bersetzung In der Konfigurationsdatei werden alle Einstellungen des Online Compilers gespeichert Die Datei Java Properties Datei im XML Format wird beim ersten Aufruf des Online Compilers angelegt Die Einstellungen werden dabei mit Standardwerten initialisiert Wenn man eine Einstellung ndert muss der Tomcat Server neu gestartet werden damit die nderung wirksam wird Die Einstellungen des Online Compiler in der Datei server cfg im einzelnen Globale Einstellungen des Servlets Name Beschreibung Standardwert m gliche Werte server log debug aktiviert oder deaktiviert false true oder false das Aufzeichnen von Fehlermeldung zwecks Debugging des Online Compilers sollte immer deaktiviert sein server log error aktiviert oder deaktiviert true true oder false das Aufzeichnen von Fehlermeldungen server log normal aktiviert oder deaktiviert false true oder false das Aufzeichnen von Statusmeldungen server users guests gibt an ob Gast false true oder false Anmeldungen erlaubt sind falls Wert true server users maxfiles gibt an wieviel Dateien 50 positive ganze Zahl Seite 133 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss Name Beschreibung Standardwert m gliche Werte und Verzeichnisse ein Nutzer erstellen darf SETVET USETS MAax gibt die maximale Anzahl an Nutzern an die gleichzeitig angemeldet sein d rfen 100 pos
35. sich als Gast anmeldet werden die Dateien die man erstellt hat nach dem Abmelden wieder gel scht Seite 138 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss Nachdem man sich angemeldet hat kann man auf die Webseite zugreifen Online Compiler Mozilla Firefox Datei Bearbeiten Ansicht Chronik Lesezeichen Extras Hilfe gt E O _httpocalnhost 8080 0c index htmi l le G Jsoog e Online Compiler 2 0 Beta NEUE ABMELDEN Angemeldet als Gast DOKUMENTATION HILFE neue Datei erstellen keine Datei ge ffnet iA ru S hN L x d E o Fehler und Warnungen 8 Beispiele bungen Datenstrukturen Algorithmen y Einf hrung in die Programmierung Java zs Progammiersprachen Probleme 5 a BCEG a Fehlersuchd a 2007 Fachhochschule Trier deutsch english RX javascript Abbildung 44 Online Compiler nach der Anmeldung Bestandteile der Webseite Men siehe n chsten Abschnitt Falls Dateien oder Verzeichnisse erstellt wurden werden sie hier angezeigt Datei Baum Liste aller Programm Beispiele Wenn eine Datei ge ffnet wird Kann man hier den Dateiinhalt ansehen und bearbeiten Editor 5 Ein Klick auf diesen Tab zeigt Fehlermeldungen und Warnungen zum Beispiel vom Compiler an 6 Ein Klick auf diesen Tab zeigt Ein und Ausgabe von laufenden Programmen an T Zeigt Informationen zu einem Debugger an Zum Beispiel Debugger Variablen TU PT Seite 139 von 156
36. sollte darauf geachtet werden dass alle ben tigten Programmbibliotheken zur Verf gung stehen siehe vorherigen Abschnitt Seite 44 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 5 1 1 3 Implementierung des Servlets 5 1 1 31 Dateien Die Quelltextdateien m ssen von den Backend Programmen Compiler und Linker aufgerufen werden k nnen Dazu m ssen die Dateien auf der Festplatte des Servers gespeichert werden Jeder angemeldete Anwender des Online Compiler bekommt daf r ein eigenes Verzeichnis in dem alle Dateien die er erstellt hat gespeichert werden Die Verzeichnisse der Anwender werden im Unterverzeichnis users des Online Compiler Verzeichnisses zum Beispiel srv oc erstellt das Unterverzeichnis users admin enth lt die Verzeichnisse der Administratoren das Unterverzeichnis users ilias enth lt die Verzeichnisse der Ilias User das Unterverzeichnis users tempusers enth lt die Verzeichnisse der G ste Das Speichern der Dateien erfolgt bei nderung des Dateiinhaltes Das hei t jedesmal wenn ein Anwender eine Datei bearbeitet hat und der Client den neuen Dateiinhalt zum Online Compiler Servlet sendet wird die Datei auf der Festplatte gespeichert Dazu dient die Methode setContent der Klasse TextFile public void setContent String content throws OnlineCompilerIOException try if content length gt Server getMaxFileSize content content substring 0 Server getMaxFileSize
37. sondern auch beides sein kann Die Server Anwendung ist der Besitzer eines Objektes dem sogenannten Remote Objekt Das Remote Objekt bzw deren Klasse muss eine Schnittstelle implementieren die Remote Schnittstelle Die Client Anwendung kann auf die Methoden des Remote Objektes zugreifen welche in der Remote Schnittstelle deklariert sind RMI bernimmt automatisch das bertragen der Daten Tritt bei der Kommunikation zwischen Client und Server ein Fehler auf wird eine RemoteException ausgel st Eine weitere Funktion von RMI ist der sogenannte Naming Service Ein RMI Server also eine Anwendung die ein Remote Objekt besitzt kann an einem bestimmten TCP Port auf Client Anfragen warten Client Anfragen werden durch das Senden der Remote Schnittstelle beantwortet Der RMI Client kann dann ber die Methoden der Remote Schnittstelle auf die RMI Server Funktionen zugreifen F r die MJVM bedeutet dies das die MJVM auf Clients wartet die Java Programme in der MJVM ausf hren m chten Remote Schnittstellen der MJVM Schnittstellen der Remote Objekte auf die ein Client zugreifen kann MJVMEnrollnterface dient zum Herstellen der Verbindung zwischen einer MJVM und den Clients das Remote Objekt welches ber den RMI Naming Service angesprochen werden kann um die Verbindung zur MJVM herzustellen MJVMServerlnterface die Methoden der MJVM z B Starten einer neuen Java Anwendung MJVMProcessServerInterface zur Kontrolle einer
38. unterst tzt Erstellen von Dateien ist nicht erlaubt Schreiben in Dateien ist nicht erlaubt Das Aufrufen von anderen Programmen ist verboten man darf nur in seinem eigenen Verzeichnis Dateien lesen Ansonsten kann man im Online Compiler alle Funktionen der jeweiligen Programmiersprachen nutzen Ausnahmen sind zur Zeit nur Lisp und C Diese beiden Programmiersprachen werden noch nicht vollst ndig vom Online Compiler unterst tzt Dass hei t Lisp und C Dateien k nnen nicht compiliert und ausgef hrt werden Seite 152 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 10 Referenzen HV 2006 SW 2005 Ilias Sun 1 Sun 2 Sun 3 Sun 4 Sun 5 FSF 1 FSF 2 Lars Herwartz Henning Vo Erstellen Test und Integration eines Java Online Compilers in einen Java Online Kurs Bachelor Projektarbeit 2006 Fachhochschule Trier Jochen Sonntag Markus Welter Erstellung des Online Kurses Einf hrung in die Programmierung mit Java mit Hilfe der Plattform WebCT Bachelor Projektarbeit 2005 Fachhochschule Trier Matthias Kunkel Ilias Open Source http www ilias de 2007 Download am 18 02 2007 Sun Microsystems Inc Java Technology http java sun com 2007 Download am 18 02 2007 Sun Microsystems Inc Java Debug Interface API Specification http java sun com j2se 1 5 0 docs guide jpda jdi 2007 Download am 18 02 2007 Sun Microsystems Inc Java Platform
39. verdeutlicht dieses Verhalten I D I 1 Online Com piler ffnen 1 1 Tr i I 1 open session 1 a I b ME l Online Com piler ffnen R open session U H H I Online Com piler schliessen 2 close session a Online Com piler ffnen Abbildung 17 Sequenzdiagramm Kommunikation Client Server Wenn ein Anwender zwei Online Compiler parallel ffnen m chte wird der zweite Verbindungsaufbau vom Servlet unterbunden Erst nachdem das Online Compiler Fenster geschlossen wird Kann eine neue Verbindung erstellt werden Durch diese L sung ergibt sich aber ein neues Problem eine Anforderung ist eine kleine Version des Online Compilers f r Ilias Wenn ein Anwender neben dieser kleinen Version auch die gr ere Version des Online Compilers im gleichen Browser ffnen m chte wird das vom Servlet unterbunden Dieses Problem kann ebenfalls einfach gel st werden indem man neben der Identifikation des Browsers Cookie noch den Namen der Benutzeroberfl che zum Beispiel klein und normal f r die kleine und normale Version des Online Compilers zur Identifikation des Clients verwendet Das Servlet identifiziert dann die Ilias Version und die normale Version als zwei verschiedene Clients Seite 30 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 4 1 2 Webinterface Client Das Webinterface ist die Benutzerschnittstelle des Online Com
40. werden Seite 131 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss Soll eine Benutzerauthentifizierung mit einem llias Server erfolgen m ssen die URL und der Name des Ilias Servers in der Konfigurationsdatei des Online Compilers angegeben werden siehe n chster Abschnitt Falls die Verbindung zum Ilias Server per HTTPS erfolgen soll muss das SSL Zertifikat des Ilias Servers heruntergeladen werden Damit der Online Compiler Zugriff auf das SSL Zertifikat des Ilias Server erh lt kann man das Java Programm InstallCert aus dem Verzeichnis t0o01s SSL auf der CD aufrufen Diese Programm l dt ein SSL Zertifikat von einem Server und speichert es damit alle Java Programme darauf zugreifen k nnen Seite 132 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 9 2 2 Konfiguration des Online Compilers Das Konfigurations und Datenverzeichnis des Online Compilers wird in der Datei web xml im Unterverzeichnis WEB INF angegeben Die Voreinstellung ist srv oc Im Konfigurations und Datenverzeichnis befinden sich alle Dateien die f r den Betrieb des Online Compilers ben tigt werden Dazu geh ren die Benutzerdaten das Verzeichnis users die Programmier Bibliotheken die die Nutzer des Online Compilers verwenden k nnen das Verzeichnis lib die Konfigurationsdatei server cfg Dateien in der die bersetzungen der Benutzeroberfl che enthalten sind cb lang f r die chinesische bersetzung und en lang f
41. werden sollen Anzeige aller vorhandenen Programmierbeispiele und ggf bungsaufgaben Editor f r Quelltext Dateien Anzeige der vorhandenen Haltepunkte der ge ffneten Datei Anzeige f r Fehlermeldungen und Warnungen Tabs zum Umschalten der Anzeigen Tabs sind ge ffnete Datei in dem die Editor Komponente enthalten ist Probleme in dem Fehlermeldungen und Warnungen angezeigt werden sollen Konsole f r Ein und Ausgabe laufender Programme sowie Fehlersuche zum Anzeigen von Debugger Informationen Durch einen Schalter neben den Tab Namen kann ein Tab in die obere oder untere Fensterh lfte verschoben werden Auf diese Weise kann der Anwender selbst bestimmen welche beiden Tabs gerade angezeigt werden sollen Schalter zum Ausw hlen der Sprache der Benutzeroberfl che Seite 35 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss Online Compiler 2 0 Beta NEUE DATEI ABMELDEN Angemeldet als Gast DOKUMENTATION HILFE D BNeu java poeoe ge ffnete Datei ad Konsole E Beispiele bungen 8808 RS EI BDatenstrukturen Algorithmen 2808 EI Blandausche Symbole 8808 3 g Abstrakte Datentypen Algebraische peoa Spezifikationen B Bintset 82008 O Blntset java 00808 noch 49 open brig Eingabe t O Debugger wartet Zeile 3 Neu java gt B Variablen TT Beispiele bungen EB Neujava Neu ua amp Dx 393 3 Datenstrukturen Algorithmen Einf hrung in die Programmierung Java Ka
42. 2 TEE 111 622 3 E EE 112 6022 4 Te UN E 114 6225 E 114 0226 E EE 116 622 TC ee ee ee 117 EE NET TI EE 118 Le EE E 118 6 3 e E EE 119 Seite 3 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss E ER ee ers ee Be Deere Sean rennen erste 6 3 2 nemet E EE EE e e e 6 3 6 E 6 4 Bist 0nd Serveres teos eses n ai Ea E ar EE E E LTE EEEE NE E Ea DAL Testli see ee 6 4 2 EB E e Eer VC BR 642 2 estille 2 Tute E EE 6 4 2 3 E EE Ee EE 6424 EE EE 6 4 3 We ei EE WE e NEE EE 643 2 Weitere ll 6 5 Test E BS Re E EG E 13 10 10 75 EE ER To te E 7 4 Zusammenfassung Sichsrheitsvorkehruneen us en EE le ee T A Ee eeedgetegch 9 2 1 Installation des ENEE een nenne 222 Konfis ratio d s Onhne Compil tfS ea 0223 Neustartdes O line CompiletS nee 9 3 RR E ele ME 9 3 1 EE 9 3 2 Das De ee 9323 Menu p nkte tnd Pi ne een 93 4 Dateien nd Te EE 2 2 5 Propsunm Beispil msni E R EEEE A A 93 0 Dateien DEA DONE nine E E EE ARE EN AEE TE EA 9 3 7 Dateien lokal EE 2 2 8 Compilieren von Dette hauen neue ine 9 3 9 Prosramime SR ee ie E UN u e I Ei ee ei TO LEI EE A EE Seite 4 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 1 Einleitung In den letzten Jahren haben eine Reihe von Projekten unter dem Begriff Web 2 0 f r Aufmerksamkeit gesorgt Dazu z hlen Web Gemeinschaften Weblogs aber auch eine Reihe von Webanwendungen und sogenannte Webservices Webanwendungen sind Programme
43. 80 0c index ntm Google Online Compiler 2 0 Beta NEUE DATEI ABMELDEN Angemeldet als Gast DOKUMENTATION E Beispiele bungen peog ge ffnete Datei H B Datenstrukturen Algorithmen 808 public class IntsetTest EI Blandausche Symbole 808 2 public static void main String a Abstrakte Datentypen Algebraische peog 3 Intset menge Spezifikationen 4 boolean leereMenge E Bintset 828098 5 menge Intset empty O Blntset java 00808 6 menge Intset insert menge 1 DO BintsetTest java 00808 7 menge Intset insert menge 3 8 menge Intset insert menge 5 menge Intset insert menge 4 menge Intset insert menge 4 menge Intset insert menge 2 menge Intset delete menge 4 menge Intset delete menge 6 Intset ausgabe menge menge Intset delete menge 1 leereMenge Intset isEmpty menge System out printlin leereMenge noch 50 Dafeien brig o Fehler und Warnungen Beispiele bungen gt E Datenstrukturen Algorithmen J Eint hrung Datenstrukturen und Algorithmen D Landausche Symbole B Abstrakte Datentypen Algebraische Spezifikationen O Intset Bo Grundlegende Datentypen i Darstellung von Mengen vw Probleme a Konsole a Fehlersuche H 2007 Fachhochschule Trier deutsch english Rx bertrage Daten von localhost Abbildung 46 ge ffnete Datei im Online Compiler Wenn man auf eine Zeilennummer klickt wird ein Debugger Haltepunkt in der Zeile hinzugef gt Dass hei t der
44. Ausnahme ist nur die Klasse HeaderFile in der C und C Headerdateien gespeichert werden Diese Dateien k nnen nicht ausgef hrt compiliert oder debuggt werden sondern enthalten nur Text Klassen f r Verzeichnisse sind Folder RootFolder und ExampleFolder Instanzen der Klasse Folder sind normale Verzeichnisse w hrend RootFolder und ExampleFolder spezielle Verzeichnisse darstellen Die Klasse RootFolder dient als Wurzel Verzeichnis in dem sich alle anderen Verzeichnisse und Dateien eines Anwenders befinden Im Gegensatz zu allen anderen Dateien und Verzeichnissen sollen RootFolder Instanzen kein bergeordnetes Verzeichnis haben Die Klasse ExampleFolder dient zum Speichern von Programm Beispielen Seite 16 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 4 1 1 2 Programmiersprachen Eine wichtige Anforderung an den Online Compiler ist die Unterst tzung mehrerer Programmiersprachen Die vorherige Version JOC Java Online Compiler erlaubt nur das Entwickeln von Java Programmen Der Online Compiler soll hingegen neben Java auch C C C und Lisp unterst tzen Zudem soll eine sp tere Integration anderer Programmiersprachen zum Beispiel Prolog so einfach wie m glich sein Dies kann durch den Einsatz objektorientierter Konzepte wie Vererbung realisiert werden Der entscheidende Unterschied zwischen allen Sprachen sind die Backends also die Programme die das eigentliche Compilieren Ausf hren und Debuggen von Programmen d
45. Befehl aus Mit der Methode restartWaitThread wird schlie lich der Job Thread wieder gestartet und damit in den Zustand Programm l uft gewechselt Das eigentliche Debuggen wird von der Methode debugFile der Klasse CFileDebugJobGNU durchgef hrt In der Methode debugFile wird zun chst der GDB mit dem C bzw C Programm gestartet setProcess new String gdb return child result fullname quiet nx cfile getAbsoluteBinaryName cfile getAbsoluteDirectory CLanguage processTimeout CLanguage ioCharset outputFile errorFile getWatchdog pauseWatchdog Seite 52 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss setDebuggerWaiting true getCommandResult Init Meldung lesen gdbCommand set confirm off getCommandResult pid getProcessID true for int i 0 i lt cfile getTargetCount i updateBreakpoints cfile getTarget i getTarget gdbCommand run cfile getArgs 1 gt outputFile KENE errorFile setDebuggerWaiting false Mit der Methode updateBreakpoints werden alle Debugger Haltepunkte zu dem GDB hinzugef gt Alle vorhandenen Debugger Haltepunkte m ssen vor dem Start des C oder C Programmes dem GDB mitgeteilt werden Der GDB Befehl run startet das zu debuggende C oder C Programm Mit setDebuggerWaiting wird nach dem Start des Programmes in den Zustand Programm l uft gewechse
46. Bundesamt f r Sicherheit in der Informationstechnik BSI Sicherheitsuntersuchung des Apache Jakarta Tomcat Servlet Containers http www bsi bund de literat studien tomcat feinkonzept pdf 2007 Download am 10 02 2007 Peter Paul Koch Benchmark W3C DOM vs innerHTML http www quirksmode org dom innerhtml html 2007 Download am 16 02 2007 Mozilla Foundation MIDAS Specification http www mozilla org editor midas spec html 2007 Download am 18 02 2007 Mozilla Foundation Home of the Firefox web browser http www mozilla com en US 2007 Download am 18 02 2007 Opera Software ASA Opera Web Browser http www opera com 2007 Download am 18 02 2007 The K Desktop Environment Project Konqueror Web Browser http www konqueror org 2007 Download am 18 02 2007 Seite 154 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss Apple 1 Microsoft 1 Li Shen 2006 JSXML Herold 1999 Liu 2004 Google 1 Apple Inc Mac OS X Web Browser Safari http www apple com de macosx features safari 2007 Download am 20 02 2007 Microsoft Corporation Internet Explorer 7 Web Browser http www microsoft com germany windows ie default mspx 2007 Download am 20 02 2007 Li Shen ACE JavaScript Component for Ajax LINK 2005 Download am 01 01 2007 Jon van Noort David Joham XML for JavaScript http xmljs sourceforge net 2006 Download am 01 01 2007 Helmut Herold C Kompaktre
47. Debugger Architecture JDB http java sun com j2se 1 4 2 docs guide jpda jdb html 2007 Download am 18 02 2007 Sun Microsystems Inc Java 2 Platform Standard Edition 5 0 API Specification http java sun com j2se 1 5 0 docs api 2007 Download am 18 02 2007 Sun Microsystems Inc Remote Method Invocation http java sun com javase technologies core basic rmi index jsp 2007 Download am 18 02 2007 Free Software Foundation FSF GCC The GNU Compiler Collection http gce gnu org 2007 Download am 18 02 2007 Free Software Foundation FSF GDB The GNU Project Debugger http sourceware org gdb 2007 Download am 18 02 2007 Seite 153 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss JDT Novell 1 Novell 2 Apache 1 Apache 2 BSI Tomcat 1 Koch 2006 Mozilla 1 Mozilla 2 Opera 1 KDE 1 Eclipse Foundation Inc Eclipse Java Development Tools http www eclipse org jdt 2007 Download am 18 02 2007 Novell Inc AppArmor Application Security for Linux http www novell com linux security apparmor 2007 Download am 20 02 2007 Novell Inc NET Mono Project http www mono project com Main Page 2007 Download am 20 02 2007 The Apache Software Foundation Apache Tomcat http tomcat apache org 2007 Download am 10 02 2007 The Apache Software Foundation Apache HTTP Server Project http httpd apache org 2007 Download am 22 02 2007
48. Eine Webbasierte Entwicklungsumgebung Henning Voss FACHHOCHSCHULE TRIER Hochschule f r Technik Wirtschaft und Gestaltung P University of Applied Sciences Informatik Eine Webbasierte Entwicklungsumgebung f r verschiedene Programmiersprachen A web based Development Environment Henning Vo Betreuer Prof Andreas K nkler Trier 22 2 2007 Seite 1 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss Inhaltsverzeichnis ea ae er 5 EE eege 6 EE E EE eege enee eege 7 3 1 Allgemeine e E 9 SE ET EE 9 3 3 Compilerund WE E 10 SE EE eben geess 10 33 Sieberhents konzept EE 10 SC E 11 ANNE Nds 12 4 Ki EE 13 e Onine EE 13 SR EE 14 GAN Re 15 4 1 12 Prostamimiersprachen einen a Et een 17 4 1 1 3 Jobs Compilieren Ausf hren und Debussen usssuseeneesennissssenunesanneensnn 18 u Rs Ah EE 22 4 1 14 TEE 23 D BW Een Ee a 25 4 1 1 5 1 Kommissar ae es 28 4 1 2 Webinterface EE EE 31 4 1 2 1 Bestandteile der Benutzerschnttstelle 31 4 1 2 2 Funktionen der Benutzerschntstelle 33 12 E 34 ER E 38 4 2 LEM EA ETO E E E EE E E 40 5 Implementierung ieaie niaaa a a a aa EE an ae 42 S Onlie Wat ee 43 5 11 Das Servlet EE 43 5 1 1 1 Datei bersicht nee 43 GE des Servlets ee 44 3 1 13 eebe des Servlets een 45 3 1 1 3 1 Dateien La RR Rai 45 1 1 32 Dias e uesnuiiksaleu 46 511 3 Cmd CH een een 48 3 1 1331 ee 48 3 1 1332 eet EE 50 IB As Be Ee 50 Eeer 55 SALLAT Compilere EE 55 EM RE 2 Ae E a a e a a EREE 56
49. Entwicklungsumgebung Henning Voss 4 2 Multi Task Java MJVM Multi Task Java soll eine Java Anwendung sein die es erlauben soll verschiedenen Java Programme parallel in einer Java VM Virtuall Machine auszuf hren um so die Ausf hrung von Java Programmen zu beschleunigen Die MJVM Multi Task Java VM soll sp ter zum Ausf hren von Anwender Programmen des Online Compilers verwendet werden Dazu muss es m glich sein Programme zum Ausf hren zu einer laufenden MJVM hinzuzuf gen Wenn man f r jedes Java Programm welches ausgef hrt werden soll das MJVM Programm neu starten m sste w re der Geschwindigkeitsgewinn wieder verloren Um das Hinzuf gen von Anwendungen zu einer laufenden MJVM zu erm glichen muss die MJVM eine Schnittstelle zur Verf gung stellen mit der man von au erhalb auf Funktionen der MJVM zugreifen kann Die MJVM muss also als Client Server Anwendung entwickelt werden Die MJVM selbst arbeitet dabei als Server Anwendung Client Anwendungen zum Beispiel der Online Compiler m ssen Java Anwendungen zur MJVM hinzuf gen und steuern k nnen So muss zum Beispiel auch die Ausgabe der einzelnen Programme vom Online Compiler abgerufen werden k nnen Die MJVM besteht im Wesentlichen aus zwei Paketen Server f r die Server Anwendung also die eigentliche MJVM mit der verschiedene Java Anwendungen parallel ausgef hrt werden k nnen Client f r die Client Anwendung beziehungsweise f r die Schnittstelle mit der A
50. FileTools createDirectories getAbsoluteDirectory FileTools saveTextFile this getAbsoluteFileName content contentcChanged content catch IOException eil throw new OnlineCompilerIOException Wenn der Inhalt einer Datei ge ffnet wird wird die Datei wieder von der Festplatte gelesen Das hei t der Dateiinhalt wird nicht permanent im Arbeitsspeicher zwischengespeichert Seite 45 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 5 1 1 3 2 Ilias Anbindung Eine wichtige Anforderung ist die Benutzer Authentifizierung ber den Ilias Server Das bedeutet dass sich Anwender mit ihrem Ilias Benutzernamen und ihrem Ilias Passwort an den Online Compiler anmelden k nnen Dazu muss der Online Compiler Zugriff auf einen Ilias Server haben Ilias besitzt eine sogenannte SOAP Schnittstelle SOAP ist ein Protokoll mit dem RPCs Remote Procedure Calls ausgef hrt werden k nnen Remote Procedure Call bedeutet dass eine Anwendung die Client Anwendung einen Methodenaufruf an eine andere Anwendung die Server Anwendung sendet Die Methode wird von der Server Anwendung ausgef hrt und das Ergebnis an die Client Anwendung zur ckgeschickt Client und Server Anwendung k nnen auf verschiedenen Rechnern laufen Die bertragung der SOAP Nachrichten erfolgt in der Regel ber HTTP Ilias hat eine Reihe von Funktionen die eine Client Anwendung mit SOAP aufrufen kann Die komplette Liste der Ilia
51. GUlEvent OCGUlEventJoin Point handleEventO void WW removeListener void addListener void Abbildung 32 Klassendiagramm Ereignisse Webinterface Die Klasse HTML Element steht f r alle HTML Elemente in denen Ereignisse auftreten k nnen zum Beispiel A Elemente Links in HTML Seiten oder IMG Elemente Bilder Die Klasse Listener steht f r alle Objekte die Ereignisse behandeln sollen Ereignis Handler Die Klasse OCGUlIEvent dient zum Erstellen L schen und Verwalten von Ereignissen OCGUIEventSourceConnector speichert die Ereignis Handler Listener die zu einem Ereignis eines HTML Elementes geh ren OCGUlIEventJoinPoint stellt schlie lich die Verbindung zwischen Ereignis OCGUIEventSourceConnector und Ereignis Handler Listener her und speichert einige Eigenschaften dieser Verbindung Seite 83 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss Wie oben bereits erw hnt k nnen keine Objekte bzw Objekt Methoden als Ereignis Handler verwendet werden Deshalb wird f r jedes Ereignis die Klassen Funktion handleEvent der Klasse OCGUlIEvent als Ereignis Handler angemeldet Tritt ein Ereignis auf sucht die Funktion handleEvent nach dem OCGUlEventSourceConnector Objekt welches f r das Ereignis zust ndig ist Dieses benachrichtigt dann alle vorhandenen Listener Objekte Auf diese Weise kann man im Gegensatz zur einfachen JavaScript Ereignis Behandlung auch Objekte als Ereignis Handler verwenden HTML Ele
52. Java Anwendung die in der MJVM ausgef hrt wird Seite 96 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss Remote Schnittstellen eines MJVM Clients Schnittstellen der Remote Objekte auf die die MJVM zugreifen kann um zum Beispiel Ereignisse dem Client zu melden MJVMllientInterface Methoden des Clients die die MJVM aufrufen kann MJVMProcessClientInterface Methoden des Clients die im Zusammenhang mit einer Java Anwendung die von der MJVM ausgef hrt wird aufgerufen werden k nnen Die folgende Abbildung verdeutlicht die Funktionsweise von RMI zum Austausch von Befehlen und Ereignissen von Java Programmen die in einer MJVM ausgef hrt werden Ereignisse Client Anwendung z B OC MJVMP rocessServerInterfce MJVMP rocessClientinterface Abbildung 38 Kommunikation MJVM und Client Anwendung Die Client Anwendung zum Beispiel der Online Compiler besitzt ein Remote Objekt der Schnittstelle MJVMProcessClientInterface auf das die MJVM zugreifen kann Tritt ein Ereignis auf zum Beispiel wenn das Java Programm beendet ist wird dieses Ereignis dem Remote Objekt der Client Anwendung mitgeteilt Die MJVM hat selbst auch ein Remote Objekt der Schnittstelle MJVMProcessServerInterface An dieses Objekt sendet der Client durch Methodenaufrufe Befehle f r die Java Anwendung zum Beispiel zum Stoppen der Java Anwendung Beide Programme sind also gleichzeitig RMI Client und RMI Server 5 2 4 1 1 Verbindung zu e
53. Kurse Online Kurs muss also das Webinterface mit dem entsprechenden Beispiel ge ffnet werden Die einzige M glichkeit dem Online Compiler das zu ffnende Beispiel mitzuteilen ist das Beispiel in die URL zu integrieren Ein Aufruf des Online Compilers mithilfe einer JavaScript Funktion w re zwar einfacher und komfortabler ist aber in der Regel nicht m glich da Ilias und Online Compiler Servlet auf verschiedenen Servern laufen werden Ein Aufruf von JavaScript Funktionen von verschiedenen Servern ist aber in den meisten Web Browsern aus Sicherheitsgr nden verboten E Learning Webseite Beispiel 1 Beispiel 2 OC Webinterface http oc index htfnl example beispiel1 http oc index html Beispiel n Abbildung 35 Aufruf Programm Beispiele Wenn ein Anwender auf den Link f r ein Beispiel Programm in einem Online Kurs klickt wird die entsprechende URL in einem neuen Fenster ge ffnet Das Webinterface des Online Compilers erkennt das angegebenen Beispiel in der URL und sendet eine Anfrage zum ffnen des Beispiels zum Servlet Um das Erstellen von Programm Beispiel Links zu vereinfachen wurden in der Datei include js einige JavaScript Funktionen zum Aufruf des Online Compilers erstellt Um ein Programm Beispiel im Online Compiler zu ffnen muss man lediglich die folgende Funktion in den entsprechenden Link integrieren function oc_open_example_file example file try var url root index html e
54. Parameter R ckgabewert create Erstellt eine neue name Name der neuen Datei ID der Erstellten Datei Datei oder ein neues Verzeichnis Parent ID des bergeordneten Verzeichnisses type Typ der Datei java c c header c lisp folder oder text exe true falls neue Datei ein ausf hrbares Programm enthalten soll optional delete file L scht eine Datei jd Datei ID kein oder ein Verzeichnis rename Benennt eine Datei newname neuer Name neuer Datei oder oder ein i Verzeichnisname Verzeichnis um id Datei ID request file Liefert alle Datei ack Nummer des Ereignisses welches Datei Ereignisse siehe changes Ereignisse zuletzt empfangen wurde Fenster unten all true falls alle vorhandenen Dateien bertragen werden sollen optional sinnvoll beim Start Seite 73 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss Befehle zum Bearbeiten von Dateiinhalten Befehl Beschreibung Parameter R ckgabewert open file ffnet eine Datei id Datei ID Dateiinhalt Dateitargets EN Haltepunkte und parent ID des Verzeichnisses in dem Kommandozeifen nach der Datei gesucht werden soll Argumente optional add variable Erstellt eine neue id Datei ID Wert der Variablen Debugger Variable name Variablen Name delete variable L scht eine id Datei ID kein Debugger Variable name Variablen Name save file targets Speichert die id Datei ID kein Targ
55. Programm ein H menge 1 sEmpty menge ereMenge Argumente speichern Abbrechen O Debugger nicht gestartet o B Variablen E Datenstrukturen Algorithmen DI Einf hrung Datenstrukturen und Algorithmen D Landausche Symbole DI Abstrakte Datentypen Algebraische Spezifikationen D Intset eo DI Grundlegende Datentypen Darstellung von Mengen Beispiele bungen javascript Abbildung 48 Dialog zum Bearbeiten der Kommandozeileargumente einer Datei Seite 146 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 9 3 7 Dateien lokal sichern Alle Dateien die man im Online Compiler erstellt hat k nnen auf dem eigenen Rechner gesichert werden Download Dazu muss man auf das Download Symbol klicken Daraufhin wird ein Popup Men angezeigt in dem man die Art der Datei die vom Server heruntergeladen werden soll angeben kann Man hat die Wahl zwischen XML Datei XOC Verzeichnisse und Dateien k nnen als XML Dateien heruntergeladen werden Der Vorteil dieses Formates ist dass alle Informationen der Dateien erhalten bleiben So werden in den XML Dateien Debugger Haltepunkte Debugger Variablen Kommandozeilenargumente usw gespeichert Wenn man also alle Daten sichern m chte sollte man das XML Format w hlen JAR Archiv Verzeichnisse k nnen als JAR Archive gesichert werden Dabei gehen allerdings Informationen wie Debugger Haltepunkte und Kommandozeilenargumente der Dateien verloren
56. Prozesse zum Debuggen von C und C Programmen Bei der Implementierung des Debuggers muss ber cksichtigt werden dass der GDB nicht immer Befehle entgegennehmen kann Der GDB verarbeitet nur dann Befehle wenn das Programm welches debuggt werden soll nicht aktiv ist Also genau dann wenn das Programm noch nicht gestartet wurde oder wenn das Programm gestoppt wurde zum Beispiel weil ein Debugger Haltepunkt erreicht wurde Der GDB hat also zwei verschiedene Zust nde Programm l uft wenn das Programm gerade aktiv ist und Debugger wartet wenn das Programm gestoppt wurde Diese Zust nde m ssen auch bei der Implementierung der Klasse CFileDebugJobGNU ber cksichtigt werden Das folgende Zustandsdiagramm zeigt die Zust nde der Klasse CFileDebugJobGNU Neben den beiden Zust nden Programm l uft und Debugger wartet werden noch ein Zustand zum Starten des GDB und des Programms sowie ein Zustand zum Beenden des GDB und des Programms ben tigt Initialisierung Programm gestaret Progam m l uft Programm beendet Debugger wartet Breakpoint oder Step Step Over Out Into oder Fortsetzen CDB Beenden Programm beenden Abbildung 28 Zust nde des C C Debugger Jobs Seite 51 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss Die Methode setDebuggerWaiting dient zum Wechseln zwischen den Zust nden Programm l uft und Debugger wartet Wenn das Programm g
57. S Editor ist ein so genannter WYSIWYG HTML Editor WYSIWYG steht f r What you see is what you get Was du siehst bekommst du auch und bedeutet im Fall des MIDAS Editors dass man das HTML Dokument welches man im MIDAS Editor bearbeitet w hrend der Bearbeitung schon so sieht wie es sp ter in einem Web Browser angezeigt wird Man Bearbeitet also nicht den HTML Code des Dokumentes Mit dem MIDAS Editor hat man also ein Werkzeug mit dem Dokumente bearbeitet werden k nnen die nicht nur Text sondern auch Bilder oder Formatierungen enthalten Diese Eigenschaft kann man f r die Editor Komponente der Benutzerschnittstelle ausnutzen Debugger Haltepunkte werden als Bilder in die ge ffnete Editor Komponente eingef gt Syntax Hervorhebungen werden durch spezielle Formatierung Farbwechsel durchgef hrt Zum Beispiel werden Schl sselw rter farblich hervorgehoben Der Benutzer kann den Inhalt des Editors bzw den Quelltext der ge ffneten Datei bearbeiten und ver ndern Mit dem Textarea Element w re nur der letzte Punkt realisierbar Wie bereits anfangs erw hnt dient der MIDAS Editor zum Bearbeiten eines HTML Dokumentes Der Quelltext Editor soll aber nur Teil eines HTML Dokumentes der Benutzerschnittstelle sein Diese Problem l sst sich auf einfache Weise durch Verwendung eines IFrame Elementes l sen Ein IFame Inline Frame ist ein HTML Dokument welches innerhalb eines anderen HTML Dokumentes integriert ist Der
58. Stream ByteArrayOutputStream errorBuffer new ByteArrayOutputStream boolean result org eclipse jdt internal compiler batch Main compile cmd new PrintWriter outputBuffer new PrintWriter errorBuffer parseJDTResult errorBuffer toString if result throw new OnlineCompilerException Compiler failed else javaFile setRecompile Seite 55 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss return result Wichtig beim Compilieren ist der Parameter g lines vars source Damit werden zu den compilierten Dateien Daten hinzugef gt die zum Debuggen des Programmes ben tigt werden 5 1 1 3 4 2 Ausf hren Das Ausf hren von Java Programmen wird von der Klasse JavaFileLaunchJobGNU durchgef hrt Wie die Klasse zum Erstellen von Java Programmen ist auch diese Klasse von der Klasse Job abgeleitet Dass hei t das Ausf hren von Java Programmen wird ebenfalls von einem eigenen Thread durchgef hrt Einzige Methode der Klasse ist aunchFile welche von dem Job Thread ausgef hrt wird protected boolean launchFile throws IOException InterruptedException OnlineCompilerException String classPath javaFile getClassPath String packagePath javaFile getPackagePath String cmd if javaSecurity cmd new String java Djava security manager Djava security policy JavaSecurityManager secureProcess javafile getUser Xbootclasspath a Serv
59. a VM die das zu debuggende Programm ausf hrt geladen wird tritt ber JDI ein ClassPrepareEvent auf Bei einem ClassPrepareEvent wird die Java Quelltext Datei ermittelt in der sich die Klasse befindet In einer Liste wird gespeichert welche Klassen zu welcher Java Quelltext Datei geh ren Wenn ein Debugger Haltepunkt erstellt werden soll wird f r jede Klasse die in der Java Datei enthalten ist ein BreakpointRequest angelegt Die Klasse in der die Zeile des Haltepunktes Seite 59 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss liegt erzeugt dann bei Erreichen des Haltepunkt ein BreakpointEvent 5 1 1 3 5 Lisp und C Die Unterst tzung f r Lisp und C wurde noch nicht implementiert Um eine sp tere Implementierung aber so einfach wie m glich zu gestalten wurden alle Klassen und Methoden die f r Lisp und C ben tigt werden bereits erstellt Seite 60 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 5 1 1 3 6 AppArmor und Java Security Manager Alle Programme die von Anwendern mit dem Online Compiler ausgef hrt werden sind potentielle Sicherheitsl cken Der Server muss deshalb vor den Anwender Programmen gesch tzt werden Das hei t um die Sicherheit des Servers zu erh hen m ssen einige Funktionen f r Anwender Programme gesperrt werden Dazu z hlen das Aufrufen von anderen Programmen das Schreiben in Dateien und das Lesen in bestimmten Verzeichnissen zum Beispiel sollte i
60. achen wie zum Beispiel Java mit Swing hneln Das obige innerHTML Beispiel mit Hilfe von DOM hl document createElement h1 hl appendData document createTextNode Hallo Welt document body appendChild hl hl ist das DOM Objekt des HTML Elementes Mit Methoden und Attributen kann man auf die Eigenschaften des hl Elementes zugreifen Um die Farbe zu ndern kann man einfach den folgenden JavaScript Befehl aufrufen hl style color red Um die Farbe mit der mmer TML Methode zu ndern bleibt einem nichts anderes brig als den kompletten HTML Code zu ersetzen document body innerHTML lt hl style color red gt Hallo Welt lt h1 gt Wie man leicht sehen kann ist das Ver ndern von Attributen mit innerHTML weit weniger komfortabel Bei der Implementierung habe ich mich f r die DOM Methode zur Manipulation der Benutzerschnittstelle entschieden Die Vorteile dieser Methode im einzelnen einfache Integration in JavaScript objektorientiert fehlerhafter HTML Code wird schneller erkannt da durch falschen HTML Code DOM auch immer ein JavaScript Syntax Fehler verursacht wird Seite 80 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 5 1 2 2 2 HTML Code einpflanzen Oben wurde bereits folgendes Beispiel zur nderung von HTML Dokumenten angegeben hl document createElement h1 hl appendData document createTextNode Hallo Welt document body appendChil
61. andelt werden public void doPost HttpServletRequest request HttpServletResponse response throws ServletException java 10 IOException HttpSession httpSession request getSession true Sprache pr fen String language ServletTools getStringCookie request OC_LANG FileTranslator DEFAULT_LANGUAGE language ServletTools getStringParameter setlang request language toLowerCase ServletTools setCookie response OC_LANG language true if isDocumentRequest request answerDocumentRequest request httpSession response language else try Session clientSession Session getSession request httpSession clientSession answerSessionRequest request response catch MaxSessionCountReachedException el try Session answerRequestWithError Max Session Count Reached response catch Exception e2 Server errorMessage e2 catch Exception eil Server errorMessage e Nachdem am Anfang der Methode die Sprache der Benutzerschnittstelle aus der Client Anfrage oder aus Cookies des Webbrowsers ausgelesen wurde wird mit der if Anweisung gepr ft ob eine XML Anfrage Ajax gestellt wurde oder ob der Client eine HTML oder JavaScript Datei angefordert hat Falls eine Datei angefordert wurde wird der Dateiinhalt in der gew nschten Sprache mit der Methode answerDocumentRequest zum Client gesendet XML Anfragen werden an Seite 69 von 156 Eine Webbasierte
62. as All diese Funktionen zusammen bilden eine vollst ndige Entwicklungsumgebung Das Programm wurde einem ausf hrlichen System und Lasttest unterzogen Zudem wurde mit der MJVM Programm zum Ausf hren mehrere Java Programme in einer Java VM eine Idee aus der oben erw hnten Projektarbeit aufgegriffen Durch Tests konnte bewiesen werden dass mit dem Konzept die Geschwindigkeit von Java Programmen deutlich erh ht werden kann 8 1 Ausblick Ob das Ziel eine einfach zu bedienende Entwicklungsumgebung zu entwickeln erreicht wurde wird sich letztendlich erst beim Einsatz des Online Compilers mit richtigen Anwendern zum Beispiel im Rahmen des Fernstudium Angebotes der Fachhochschule Trier zeigen W hrend der Entwicklung des Online Compilers bin ich auf einige w nschenswerte Erweiterungen aufmerksam geworden die umzusetzen das System verbessern w rden bessere Ilias Integration Dateien und Programm Beispiele sollten direkt in Ilias integriert werden Auf diese Weise spart man sich zum Beispiel das bernehmen der Programm Beispiele aus den Online Kursen in den Seite 128 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss Online Compiler bessere Integration in die Online Kurse Statt den Online Compiler in einem Frame in den Online Kursen darzustellen Iias Version sollte der Online Compiler direkt in die Kurs Seiten integriert werden So k nnte man zum Beispiel bei Quelltexten Programm Beispiel
63. assen MJVMMultiErrorStream MJVMMultiOutputStream und MJVMMultilnputStream dienen als Ersatz f r die static Attribute err out und in der System Klasse Diese Klassen sind einfache Ein und Ausgabe Streams mit dem Unterschied dass bei jedem Methodenaufruf die Java Anwendung welche die Methode aufgerufen hat ermittelt wird Methode getProcessByThread Wenn eine Java Anwendung gefunden wurde wird der Methodenaufruf an den Ein beziehungsweise Ausgabe Stream der Java Anwendung Klassen MJVMETrrorStream MJVMOutputStream und MJVMInputStream weitergeleitet Auf diese Weise greifen zwar alle Java Anwendungen auf die gleichen static Attribute zu System err System out und System in haben aber trotzdem unabh ngig voneinander eine eigene Ein und Ausgabe Seite 105 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 5 2 4 4 MJVM Client Klassen Die Klassen des Paketes mjvm connector haben die Aufgabe eine Client Anwendung zum Beispiel den Online Compiler um Funktionen zum Ausf hren und Steuern von Java Programmen in einer MJVM zu erweitern Im folgenden Klassendiagramm werden alle Klassen des Paketes mjvm connector dargestellt lt lt interface gt gt lt lt interface gt gt M JVM Proces s Ser ver Interface M JVM Proces s Client Interface from mjvm connector process from mjvm connector process lt lt interface gt gt M JVM Proces s Connedor M JVM Proces s Listener from mjvm connector process
64. at Webserver ausgef hrt wird Neben diesem Kapitel steht auch noch eine ausf hrliche Inline Dokumentation in den Java Quelldateien Javadoc zur Verf gung Diese befindet sich im Verzeichnis doc api OnlineCompiler auf der CD oder kann Online ber die URL http javock fh trier de 8080 oc api index html abgerufen werden 5 1 1 1 Datei bersicht Die Quelldateien des Servlets befinden sich im Verzeichnis source OnlineCompiler WEB INF classes Das Servlet besteht aus folgenden Java Paketen Paketname Inhalt onlinecompiler exceptions Dieses Paket enth lt Ausnahmeklassen des Online Compilers onlinecompiler ilias In diesem Paket befindet sich die Anbindung zum Ilias Server onlinecompiler languages Dieses Paket enth lt die Unterst tzung f r die verschiedenen Programmiersprachen onlinecompiler os security Klassen die zum Schutz des Servers vor den Benutzer Programmen dienen befinden sich in diesem Paket onlinecompiler servlet Dieses Paket enth lt das eigentliche Servlet onlinecompiler source In diesem Paket befinden sich alle Klassen zum Verwalten von Dateien der Benutzer onlinecompiler test Dieses Paket enth lt ein Programm zum durchf hren von Testf llen siehe Kapitel Test onlinecompiler tools Dieses Paket enth lt einige allgemeine Klassen mit Hilfsfunktionen onlinecompiler user In diesem Paket sind alle Klassen enthalten die f r die Benutzerverwaltung n tig sind
65. auszuf hren Bereitstellen einer Schnittstelle die es Clients erlaubt Anfragen zu stellen Abbildung 5 Module des Online Compiler Servlets Auf die einzelnen Bestandteile des Servlets wird in den folgenden Abschnitten detailliert eingegangen Seite 14 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 4 1 1 1 Dateiverwaltung Eine wichtige Aufgabe des Servlets ist die Speicherung und Verwaltung aller Quelltextdateien die von den Anwendern erstellt werden Das folgende UML Diagramm zeigt die Klassenhierarchie aller Klassen die zum Speichern von Dateien und Verzeichnissen dienen File Object from onlinecom piler source Folder File from onlinecom ler source Examp k Folder from onlinecom ler source from onlinecom piler source TextFile RootFolder from onlinecom ler source from onlinecom piler source Language File Header fe from onlinecom piler languages files from onlinecom piler languages c LaunchablerFile Debugab k File BuilkdableFile from onlinecom piler languages files 1 from onlinecom piler languages file s a from onlinecom piler languages files a AN ei CA LispFile CfFik Javafile from onlinecom piler languages lisp from onlinecom piler languages c from onlinecom piler languages java CPPFile CSharpfFile from onlinecom piler languages c from onlinecom piler languages csharp Abbildung 6 Klassenhierarchie Dateien und Ve
66. azu geh rt auch ein User Objekt sofern der Anwender des Client sich angemeldet hat Die Klasse Session implementiert die Schnittstelle FileObjectListener um Ereignisse des Users zum Beispiel nderungen von Dateien zu erfassen Seite 25 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss Diese Ereignisse m ssen an den Client bertragen werden um dort angezeigt zu werden Die letzte Anforderung die in der Entwurfsphase des Servlets ber cksichtigt werden muss ist die der Mehrsprachenunterst tzung f r die Benutzeroberfl che Es gibt grunds tzlich 3 M glichkeiten dies zu realisieren 1 F r jede Sprache eine eigene Benutzeroberfl che erstellen Das hei t zum Beispiel das f r jede Sprache eigene HTML Dateien erstellt werden Diese Methode hat den Nachteil dass bei nderungen die Dateien aller Sprachen ge ndert werden m ssen 2 Textinhalte der Benutzeroberfl che dynamisch zur Laufzeit auf der Client Seite anpassen Der Client ersetzt Texte in der Benutzeroberfl che durch entsprechende Texte der aktuellen Sprache Dieses Verfahren hat den Nachteil dass die Ausf hrungsgeschwindigkeit der Benutzeroberfl che verlangsamt wird da im Hintergrund Texte ersetzt werden m ssen Au erdem muss das bersetzen bei jedem Neuladen der Benutzeroberfl che wiederholt werden 3 Die dritte und beste Methode ist das dynamische ndern der Dateien zur Laufzeit auf Server Seite dass hei t durch das Servlet Diese Methode soll
67. beim Online Compiler verwendet werden cd Translation Language from onlinecom piler servlet translation FileTranslator Trans hated Content from onlinecom piler servlet translation FileTranslator translations Document from onlinecom piler servlet translation FileTranslator Abbildung 15 Klassen zum bersetzen der Benutzerschnittstelle Seite 26 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss Das obige UML Diagramm zeigt die Klassen die zum bersetzen der Benutzeroberfl che in verschiedene Sprache ben tigt werden Die Klasse Language enth lt die eigentliche bersetzung f r eine Sprache Dazu wird eine Liste von Texten und den dazugeh rigen bersetzungen in einem Objekt der Klasse gespeichert Die Klasse TranslatedContent enth lt den bersetzten Inhalt einer Datei Die Klasse Document stellt eine Datei der Benutzeroberfl che dar Die bersetzungen der Datei in verschiedene Sprachen sind die Instanzen der Klasse TranslatedContent auf die das Objekt der Klasse Document verweist Das folgende Objekt Diagramm zeigt ein m gliches Szenario drei Document Objekte stellen drei Dateien der Benutzerschnittstelle da Jede Datei hat jeweils 2 verschiedene Versionen eine deutsche und eine englische TranslatedContent datei2 html Document TranslatedContent Abbildung 16 Objektdiagramm bersetzung dateil js Document englisch Language
68. c request gt Das Online Compiler Servlet muss alle Befehle sequentiell abarbeiten Tritt ein Fehler auf oder kann ein Befehl nicht ausgef hrt werden muss die Abarbeitung der restlichen Befehle abgebrochen werden Der Java Online Compiler kann pro Anfrage nur ein Befehl ausf hren Es hat sich allerdings herausgestellt dass es in einigen F llen sinnvoll sein kann mehrere Befehle auf einmal auszuf hren Zum Beispiel wenn man vor dem Compilieren einer Datei den Dateiinhalt speichern m chte Im Java Online Compiler sind dazu zwei Befehle notwendig die nacheinander zum Servlet geschickt werden Der Online Compiler hingegen kann beide Befehle in einer Anfrage entgegennehmen Eine Servlet Nachricht an den Client Antwort lt oc response gt lt befehl1 gt lt befehl1l gt lt befehl2 gt lt befehl2 gt lt befehl3 gt lt befehl3 gt lt oc response gt Seite 28 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss Die Kommunikation zwischen Client und Server ist vergleichbar mit dem MVC Entwurfsmuster Modell View Controller Webbrowser Webinterface L XML Response Webserver iR Eileen d OC Servlet Controller abaruunernner nennen XML Request Ein Modell das Servlet dient zum Speichern aller Daten Dateien Nutzer Jobs usw Ein Controller die Benutzerschnittstelle dient zum Eingeben von Befehlen an das Modell Eine View das Webinterface dient zum Anzeigen der Modelldaten Im Java Online Com
69. chnitten wurde auf das Erstellen und Ver ndern der Benutzerschnittstelle eingegangen Ein weiterer wichtiger Aspekt von Benutzerschnittstellen ist das Behandeln von Benutzereingaben wie Mausklicks und Tastatureingaben sogenannte Ereignisse In eine Web Browser k nnen bei jedem HTML Element Ereignisse auftreten Wenn man zum Beispiel auf einen Link in einer HTML Seite klickt wird ein Ereignis ausgel st Das gleiche passiert zum Beispiel wenn man die Maus ber ein HTML Element bewegt Um ein Ereignis zu verarbeiten beziehungsweise um auf ein Ereignis zu reagieren muss man einen sogenannten Ereignis Handler an das HTML Element und das gew nschte Ereignis anmelden Ein Ereignis Handler ist eine JavaScript Funktion die aufgerufen wird sobald das Ereignis eintritt In JavaScript gibt es zwei M glichkeiten Ereignis Handler an HTML Elemente und Ereignisse anzumelden Die JavaScript Funktion artachEvent im Internet Explorer beziehungsweise addEventListener alle anderen Web Browser zum Hinzuf gen von Ereignis Handlern zu HTML Elementen Verwendung von Ereignis Attributen der HTML Elemente zum Setzten der Ereignis Handler Beide Methoden sind theoretisch identisch Leider verhalten sich die beiden Methoden nicht bei jedem HTML Element so wie man es erwartet so das man je nach HTML Element entweder die eine oder nur die andere Methode verwenden kann So muss zum Beispiel f r Ereignisse von HTML IFrame Elementen im Internet Explorer der Ereignis
70. cken Wenn der Debugger gestartet ist wird automatisch die Registerkarte Fehlersuche angezeigt ge ffnete Datei 1 public class IntsetTest eg 2 public static void main String args 3 Intset menge er 4 boolean leereMenge 5 menge Intset empty Wl d E menge Intset insert menge 1 E menge Intset insert menge 3 d DR menge Intset insert menge 5 9 menge Intset insert menge 4 A 10 menge Intset insert menge 4 11 menge Intset insert menge 2 fa 12 menge Intset delete menge 4 13 menge Intset delete menge 6 N 14 Intset ausgabe menge 15 menge Intset delete menge 1 R 16 leereMenge Intset isEmpty menge 17 System out println leereMenge 15 EIN Nu D Debugger wartet Zeile 7 IntsetTest java I p E 55 Variablen u EN EB IntsetTest java IntsetTest java St O menge instance of Intset id 56 gt 1 O args length 0 E a E H Probleme a Konsole A Fehlersuche a deutsch english PX Abbildung 51 Debugger Ansicht im Online Compiler Wenn das zu debuggende Programm an einen Debugger Haltepunkt angekommen ist wird das Programm gestoppt Man hat dann die M glichkeit Befehle auszuf hren in dem man auf eines der folgenden Symbole klickt D Setzt die Ausf hrung des Programmes fort Seite 150 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss vi Beendet das Programm und damit auch den Debugger Der Debugger springt in eine Funktion St
71. cklungsumgebung Henning Voss die Debugger Haltepunkte aktualisiert und danach mit der Methode fireJobWaiting eine Meldung zum Client gesendet Im vorherigen Abschnitt wurden bereits einige Befehle beschrieben die vom Online Compiler verwendet werden um den GDB und das zu debuggende Programm zu steuern In der folgenden Tabelle werden alle verwendeten GDB Befehle aufgelistet GDB Befehl Beschreibung wird verwendet in Methoden run Startet die Ausf hrung des C oder C Programms debugFile step F hrt ein Step Into aus springt in eine Methode stepInto next F hrt ein Step Out oder Step Over aus springt aus stepOut stepOver einer Methode oder f hrt einen Befehl aus continue Setzt die Ausf hrung eines Programms fort resume break erstellt einen Debugger Haltepunkt addBreakpoint delete breakpoints l scht einen Debugger Haltepunkt removeBreakpoint print liest den Wert einer Variablen updateVariable set confirm off deaktiviert die Eingabe von y f r yes und n f r no debugFile f r die Best tigung von Befehlen Seite 54 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 5 1 1 3 4 Java 5 1 1 3 4 1 Compilieren Das Compilieren bzw Erzeugen von Java Programmen hnelt stark dem Erzeugen von C und C Programmen Der gr te Unterschied ist das Java Programme im Gegensatz zu C und C Programmen nicht gelinkt werden m ssen Dass hei t um Java Prog
72. d hl In diesem Beispiel wird nur ein HTML Element ein h1 Element erstellt Die Benutzerschnittstelle ist aber eine gr ere Anwendung mit einem komplexen HTML Code So besteht zum Beispiel eine einzige Compiler Fehlermeldung aus bis zu 30 einzelnen HTML Elementen Der Umfang der JavaScript Befehle zum Erzeugen einer Compiler Fehlermeldung w re also ungef hr das 30 fache des obigen Beispiels Um das Erzeugen solch komplexer HTML Strukturen zu vereinfachen gibt es eine spezielle JavaScript Funktion graft engl einpflanzen Beispiel Funktion graft graft this editorTab null LIST center img border 0 src img load_ani gi f I Den gleichen HTML Code kann man nat rlich auch ohne die Funktion graft erstellen Der JavaScript Quelltext ist aber wesentlich un bersichtlicher als der obige Aufruf von graft b document createElement b this editorTab appendChild b center document createElement center b appendChild center img document createklement img center appendChild img img border 0 img sre img lo oad th RE Die Funktion graft erleichtert das Erstellen von HTML Code mehrere HTML Elemente k nnen mit einem Befehl erstellt werden HTML Elemente k nnen verschachtelt werden der JavaScript Quelltext wird bersichtlicher Seite 81 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 5 1 2 2 3 Ereignisbehandlung In den beiden vorherigen Abs
73. dem Vergleichsrechner ein deutlich besseres Ergebnis als auf dem javock Server erzielt Seite 125 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 7 Server Sicherheit In den vorherigen Kapiteln wurde bereits mehrfach auf Sicherheitsaspekte des Online Compilers eingegangen Die Sicherheit des Online Compilers und des Rechners auf dem der Online Compiler ausgef hrt wird zum Beispiel der Server javock h ngt nicht alleine von dem Online Compiler selbst ab Der Online Compiler wird immer im Zusammenhang mit anderen Programmen ausgef hrt Dazu z hlen AppArmor Tomcat und die Java VM von SUN Bei der Betrachtung der Sicherheit m ssen diese Programme deshalb mit einbezogen werden In diesem Kapitel wird auf die Sicherheitsprobleme und Anforderungen der einzelnen Programme die vom Online Compiler verwendet werden eingegangen 7 1 Tomcat Der Tomcat Webserver spielt eine wichtige Rolle im Zusammenhang mit der Sicherheit des Online Compilers So k nnen zum Beispiel Brute Force Angriffe dabei versucht ein Angreifer einen Server zum Stillstand zu bringen in dem in einem kleinen Zeitraum m glichst viele Client Anfragen gestellt werden nur von dem Tomcat Server abgefangen werden da der Tomcat Server das Programm ist welches die Client Anfragen entgegen nimmt und erst danach an das entsprechende Servlet weiterleitet Vom Bundesamt f r Sicherheit in der Informationstechnik BSD wurde eine ausf hrliche Untersuchung d
74. denen diese bearbeitet werden k nnen ein Klick auf dieses Symbol ffnet ein Popup Men mit dem eine neue Datei in einem Verzeichnis erstellt werden kann Wenn man neue Dateien oder Verzeichnisse im Wurzel Verzeichnis erstellen m chte muss man dazu das Men NEUE DATEI verwenden mit diesem Symbol wird eine Datei oder ein Verzeichnis gel scht mit diesem Symbol kann man eine oder mehrere Dateien compilieren Wird das Symbol bei einem Verzeichnis angeklickt werden alle Dateien innerhalb dieses Verzeichnisses compiliert siehe folgende Abschnitte ein Klick auf dieses Symbol startet ein Programm Dazu muss die Datei ein g ltiges Programm enthalten in der Regel eine main Funktion Wenn die Datei noch nicht compiliert wurde wird sie vor dem Start automatisch compiliert ein Klick auf dieses Symbol startet den Debugger mit einem Programm Dazu muss die Datei ein g ltiges Programm enthalten in der Regel eine main Funktion Wenn die Datei noch nicht compiliert wurde wird sie vor dem Start automatisch compiliert mit diesem Symbol kann man Dateien oder Verzeichnisse umbenennen dieses Symbol dient zum Herunterladen eines Verzeichnisses auf den eigenen Computer Damit kann man seine Dateien speichern und sp ter wieder auf den Server laden siehe Kapitel Dateien lokal speichern ffnet ein Programm Beispiel siehe folgendes Kapitel ffnet die Webseite eines Programm Beispiels im E Learning System Dateien die g
75. deren Gruppe bzw einer anderen Java Anwendung geh ren einen eigenen Security Manager Klasse MJVMSecurityManager Wenn der Online Compiler Java Programme ausf hrt m ssen diese mit dem Java Security Manager berwacht werden Weil jedes Java Programm andere Rechte hat jedes Programm kann zu einem anderen Benutzer geh ren kann man bei der MJVM nicht nur einen Java Security Manager verwenden sondern muss f r jede Java Anwendung einen eigenen erstellen einen Thread der die Laufzeit der Java Anwendung berwacht Klasse MJVMProcessWatchdog Anwender Programme die vom Online Compiler ausgef hrt werden haben eine maximale Laufzeit Wird diese Zeit von einem Programm berschritten wird es beendet Timeout Die MJVM muss also auch die Laufzeit der einzelnen Programme berwachen Dazu dient ein eigener Thread Der Watchdog Thread eine Remote Schnittstelle damit Client Programme der MJVM zum Beispiel der Online Compiler einzelne Java Programme steuern k nnen Klasse MJVMProcessClientInterface einen eigenen Class Loader Klasse MJVMClassLoader Ein Class Loader ist eine Klasse die andere Klassen aus den Class Dateien l dt wenn sie ben tigt werden Es gibt bei Java zwei Class Loader der System Class Loader der Klassen der Java Runtime Environment JRE l dt und der User Class Loader der die Klassen des Java Programmes l dt Ein eigener Class Loader User Class Loader ist f r jede Java Anwendung die in der MJVM au
76. e in den Seiten der Online Kurse direkt den Quelltexteditor des Online Compilers integrieren Die Anwender k nnten dann direkt ohne in ein anderes Fenster zu wechseln die Programm Beispiele ausf hren und bearbeiten Weitere Aufgaben die noch ausgef hrt werden sollten C und Lisp Die Unterst tzung f r die Programmiersprachen CH und Lisp muss noch zu dem Online Compiler hinzugef gt werden Programm Beispiele Die Programm Beispiele der verschiedenen Online Kurse m ssen in den Online Compiler bernommen werden Diese Aufgabe konnte im Rahmen dieser Abschlussarbeit nicht ausgef hrt werden da die Online Kurse zum Beispiel Datenstrukturen Algorithmen zum Zeitpunkt des Fertigstellens dieser Abschlussarbeit noch nicht vollst ndig fertiggestellt waren Integration der MJVM in den Online Compiler Die MJVM muss zum Ausf hren von Java Programmen in den Online Compiler integriert werden Benutzerauthentifizierung mit dem Ilias Server der Fachhochschule Trier Unterst tzung weiterer Webbrowser wie Safari Opera und Konqueror Seite 129 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 9 Anhang Dieser Anhang enth lt das Inhaltsverzeichnis der CD auf der sich die vollst ndige Abschlussarbeit befindet das Administratorhandbuch mit Informationen zur Installation und Administration des Online Compiler Servlets das Benutzerhandbuch f r die Anwender des Online Compilers 9 1 CD Inhalt Verz
77. e 77 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 5 1 2 Das Webinterface Ziel dieses Kapitels ist die Beschreibung von Implementierungsdetails der Benutzerschnittstelle Webinterface des Online Compilers Die Benutzerschnittstelle wurde komplett mit Hilfe von JavaScript und HTML implementiert Neben diesem Kapitel steht auch noch eine ausf hrliche Inline Dokumentation in den JavaScript Quelldateien zur Verf gung Verzeichnis source OnlineCompiler oc auf der CD 5 1 2 1 Datei bersicht Folgende Dateien aus dem Verzeichnis source OnlineCompiler oc geh ren zu der Benutzerschnittstelle Webinterface des Online Compilers Datei oder Beschreibung Verzeichnisname ace js Stellt die Verbindung zum Servlet her console js Grafische Komponente zum Anzeigen von Ein und Ausgabe von Programmen debugger js Grafische Komponente zum Anzeigen von Informationen des Debuggers docsearchdialog js Dialog zum Suchen in Dokumentationen von Programmiersprachen fileargsdialog js Dialog zum Bearbeiten von Kommandozeilenargumenten filetargetsdialog js Dialog zum Bearbeiten von Compiler und Linker Targets filetree js Grafische Komponente zum Anzeigen von Dateien und Verzeichnissen Dateibaum gui js Hauptdatei enth lt Funktionen zum Zugriff auf das Servlet und das eigentliche Programm guitools js Sammlung von Funktionen die zum Erstellen einer Grafischen Benutzeroberfl che dienen
78. e Funktion die bei einer Servlet Antwort ausgef hrt wird Mit dem Befehl addCommand wird ein Befehl des OC Kommunikationsprotokoll zur Anfrage hinzugef gt In diesem Fall der logout Befehl zum Abmelden des Anwenders Vorher wird mit der Funktion _ajaxRequestAddSaveFileCommandForAllEditors f r jede ge ffnete Datei ein Befehl zum Speichern der Datei zu der Anfrage hinzugef gt Auf diese Weise werden vor dem Abmelden eines Anwenders seine Dateien gesichert Wie man in dem obigen Beispiel sehen kann sind in der Callback Funktion keine Befehle zum analysieren des XML Codes der Servlet Antwort enthalten Da die Analyse des XML Codes bei jeder Antwort durchgef hrt werden muss wurden dazu einige JavaScript Funktionen erstellt die automatisch vor jeder Callback Funktion aufgerufen werden Auf diese Weise spart man Platz und man kann sich bei den Callback Funktionen auf das Wesentliche konzentrieren Die Funktionen die vor dem Aufruf einer Callback Funktion ausgef hrt werden sind preparateA jaxResponseCommands Analysiert den XML Code einer Servlet Antwort und wandelt ihn in JavaScript Objekte um Auf diese Weise muss man nicht jedesmal wenn man auf Informationen aus der Servlet Antwort zugreifen m chte den XML Code durchlaufen sondern kann einfach auf die Objekt Attribute zugreifen So ist zum Beispiel das Attribut response success genau dann true wenn kein Fehler in der Servlet Antwort enthalten ist _handleAjaxEvents Verarbeitet a
79. e begrenzen ulimit Zugang zum Online Compiler f r G ste sperren Seite 127 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 8 Zusammenfassung Ziel dieser Arbeit war das Erstellen einer Online verf gbaren Entwicklungsumgebung f r verschiedene Programmiersprachen Dazu wurde ein Java Servlet als moderne Webanwendung mit dem Ajax Konzept entwickelt Als Grundlage der Entwicklung diente das Programm Java Online Compiler welches ich im Rahmen einer Projektarbeit zusammen mit Lars Herwartz entwickelt habe HV 2006 Das entwickelte Programm der Online Compiler erf llt alle Anforderungen die im Kapitel Anforderungen und Ziele angegeben wurden Java C und C Programme k nnen entwickelt werden Dazu geh rt das Compilieren von Java und C bzw C Dateien das Linken von C und C Programmen sowie das Ausf hren von Java und C bzw C Programmen mit oder ohne einen Debugger Wie in anderen Entwicklungsumgebungen werden Ein und Ausgabe von ausgef hrten Programmen angezeigt Mit den Debugger Funktionen kann nach Fehlern in Programmen gesucht werden Der Online Compiler bietet dazu alle n tigen Funktionen Hinzuf gen von Haltepunkten Anzeigen von Variablen Werten Step Out Step Into und Step Over Benutzer des Ilias Servers k nnen sich mit ihrem Ilias Benutzernamen und dem dazugeh rigen Passwort anmelden Funktionen zur Integration des Online Compilers in ein E Learning System Ili
80. e debuggt werden anzeigen Debugger Variablen Dateiverwaltung erstellen l schen speichern umbenennen usw von Dateien und Verzeichnissen Benutzerverwaltung Authentifizierung ber Ilias Server Gast Benutzer Anmeldung ohne Name und Passwort Administrator Benutzer die Beispiele und ggf auch bungsaufgaben erstellen und verwalten k nnen Syntax Hervorhebung im Quelltexteditor Programmiersprachen Dokumentationen durchsuchen Integration in Ilias Aufruf von Programm Beispielen im Online Compiler Kleine Ilias Version des Online Compilers Entwurf Implementierung und Test der Java Anwendung MJVM zum Beschleunigten Ausf hren von Java Anwendungen Java Anwendungen sollen parallel in einer einzigen Java VM der MJVM ausgef hrt werden k nnen Seite 12 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 4 Entwurf 4 1 Online Compiler Der Online Compiler ist eine klassische Client Server Anwendung ein Client auf dem der Benutzer Programme erstellen kann Webinterface bzw Benutzerschnittstelle ein Server auf dem die Programme der Benutzer compiliert und ausgef hrt werden Java Servlet Das Design des Online Compilers ist deshalb mit dem des Java Online Compilers identisch HTTP XML HTML Js Webserver Webinterface be nn nn nn nun nn ernennen OC Servlet Abbildung 4 Aufbau Online Compiler der Server beantwortet Anfragen die er von den Clients erh lt Programme werden auf dem C
81. e vom aktuell laufendem Prozess ist vorhanden f r solche Ereignisse wird zum Client lt job output gt gesendet Beispiel f r den Befehl request job changes Wenn ein Job z B mit dem Befehl build job gestartet wurde und ohne Fehlermeldung abgeschlossen wird erh lt man durch den Aufruf von request job changes folgende Antwort vom Servlet lt oc response gt lt request job changes gt lt job started gt lt job finished gt lt request job changes gt lt oc response gt Seite 76 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 5 1 1 3 9 Log Datei Bei besonderen Ereignissen wie Ausnahmen Exceptions wird ein Meldung in der Log Datei des Tomcat Servers gespeichert Die Log Datei catalina out befindet sich im Unterverzeichnis logs des Tomcat Servers Es gibt drei Arten von Meldungen Fehlermeldungen bei einer Exception Statusmeldungen bei sonstigen wichtigen Ereignissen Debug Meldungen wird nur zur Fehlersuche verwendet Die verschiedenen Meldungen k nnen in der Konfigurationsdatei server cfg des Online Compiler Servlets aktiviert oder deaktiviert werden Zum Aufzeichnen von Meldungen dienen die Methoden logMessage errorMessage und debugMessage der Klasse Server Methode errorMessage der Klasse Server public static void errorMessage String message if logError System out printlin OC ERROR System out println message System out printlin Seit
82. ei t wenn ein Job zum Beispiel 10 Minuten dauern w rde m ssten alle Sessions und damit auch die Clients die auf das gleiche User Objekt zugreifen mindestens 10 Minuten warten Wenn ein Job f r einen User aktiv ist zum Beispiel ein CompileJob um eine Datei des Users zu compilieren wird der Job Thread in dem Attribut job des User Objektes gespeichert Wenn eine Session eine Client Anfrage bearbeiten soll wird zun chst die Methode checkUserJobRunning aufgerufen public void checkUserJobRunning throws UserJobIsRunningException if job null if job isStopped throw new UserJobIsRunningException else Seite 67 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss removeJob job Diese Methode erzeugt genau dann eine Ausnahme wenn ein Job Thread gerade aktiv ist Die Abarbeitung einer Client Anfrage durch ein Session Objekt wird also genau dann mit einer Fehlermeldung abgebrochen wenn ein Job gerade aktiv ist Wenn ein Job aktiv ist blockieren die Sessions dadurch aber nicht und beantworten Client Anfragen weiterhin allerdings mit einer Fehlermeldung bis der Job zu Ende ist Seite 68 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 5 1 1 3 8 Kommunikation Client Servlet Der Tomcat Webserver ruft bei Client Anfragen die Methode doPost der Klasse OC Servet auf Jede Client Anfrage wird in einem eigenen Thread ausgef hrt Es k nnen also mehrere Client Anfragen gleichzeitig beh
83. eichnis Inhalt bin MultiTaskJavaVM das Java Programm MJVM Multi Task Java VM OnlineCompiler config Konfigurationsdateien des Online Compilers oc der Online Compiler Servlet oclibs Java Bibliotheken des Online Compilers doc api API Dokumentation Javadoc Dokumentation Dokumentation dieses Dokument Bilder Bilder und Bildschirmfotos uml UML Diagramme source MultiTaskJavaVM MJVM Quelltextdateien OnlineCompiler Online Compiler Quelltextdateien tools SSL Programm zum Herunterladen eines SSL Server Zertifikates Seite 130 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 9 2 Administratorhandbuch Dieses Kapitel soll bei der Administration des vorhandenen Servers javock bzw eines anderen Servers auf dem der Online Compiler laufen soll helfen 9 2 1 Installation des Online Compilers Voraussetzungen f r eine Installation des Online Compilers sind Linux Betriebssystem http de opensuse org AppArmor Version gt 2 0 http de opensuse org Apparmor Tomcat Webserver Version 5 0 28 http tomcat apache org Die Installation des Online Compilers auf einem System mit bereits installiertem Tomcat Webserver ist relativ einfach und in wenigen Schritten durchgef hrt 1 Das Unterverzeichnis oc aus dem Verzeichnis bin OnlineCompiler muss in das Unterverzeichnis webapps des Tomcat Servers kopiert werden Das Verzeichnis webapps befindet sic
84. einer Datei zum Beispiel ein Fehler auf wird eine entsprechende Meldung in der Registerkarte dargestellt Man kann dann durch einen Klick auf den Dateinamen die Datei in der der Fehler aufgetreten ist ffnen sat sal E Fehler und Warnungen 8 Syntax error insert AssignmentOperator Expression to g o DS ER g pe HIT D Zeile 3 14 IntsetTest java complete Assignment GO o dek Syntax error insert to complete Statement Zeile 3 14 IntsetTest java o E Kompilierung fehlgeschlagen IntsetTest java vw Probleme A Konsole a Fehlersuche A deutsch english PX Abbildung 49 Registerkarte Probleme zum Anzeigen von Fehlermeldungen Wie bereits im Abschnitt Datei bearbeiten erw hnt hat jede Datei ein oder mehrere sogenannte Targets Targets sind Dateien die bei einem Klick auf oder compiliert werden Wenn man also mehrere Targets f r eine Datei hat werden all diese Dateien compiliert Wenn man hingegen gar kein Target hat wird auch keine Datei compiliert C und C Programme m ssen nicht nur compiliert sondern m ssen auch mit einem Linker verarbeitet werden Ein Linker Binder bindet mehrere compilierte Dateien zu einem ausf hrbaren Programm zusammen Dazu werden ebenfalls die Targets verwendet F r jedes Target kann man festlegen ob es zu dem Programm gelinkt werden soll oder nicht Wenn man also bei einer C oder C Datei keine Linker Datei angegeben hat wird auch kein ausf hrbares Prog
85. el Formatierungen HTML Font Elemente zu l schen brig bleibt dann der eigentliche Quelltext Die JavaScript Funktion getContent dient zum heraus filtern dieser HTML Elemente getContent function code this content innerHTML code code replace lt br gt gi n code code replace lt gt g code code replace amp lt g lt code code replace amp gt g gt code code replace amp amp gi amp return code Seite 87 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 5 1 2 2 5 bersicht Grafische Komponenten Neben dem Quelltext Editor gibt es eine Reihe weiterer grafischer Komponenten Jede Komponente wurde als JavaScript Klasse implementiert JavaScript Klasse Beschreibung OCConsole Komponente um Ein und Ausgabe von Programmen anzuzeigen OCDebugger Zeigt den Status des Debuggers sowie Debugger Variablen an OCFileTree Komponente um Dateien und Verzeichnisse anzuzeigen OCProblems Zeigt Fehlermeldungen Warnungen und Statusmeldungen von Compiler Linker und Programmen an OCMenu OCMenuPoint OCMenultem Klassen f r Men s Popup Men s und Men eintr ge OCSourceFHileEditor Der oben bereits vorgestellte Quelltext Editor OCGUISplitter Komponente zum Ver ndern der Gr en von anderen Komponenten durch Ziehen mit der Maus OCGUITabElement OCGUITabHeader Klassen zum Erstellen von Registerkarten
86. ele wurden die Funktionen des Online Compilers bereits kurz erl utert Die Benutzerschnittstelle muss diese Funktionen unterst tzen Die Funktionen im einzelnen Bearbeiten von Quelltext Dateien Dazu soll die oben bereits erw hnte Funktion zum Anzeigen von Dateien Editor Komponente dienen Neben dem Bearbeiten der Dateiinhalte m ssen noch Debugger Haltepunkte Breakpoints Kommandozeilen Argumente von Programmen sowie Dateien die zu einer Programmdatei gelinkt werden sollen sogenannte Targets angegeben werden k nnen L schen Umbenennen und Erstellen von Dateien und Verzeichnissen ffnen von Beispielprogrammen und ggf bungsaufgaben Up und Download von Dateien und Verzeichnissen M glichkeiten zum An und Abmelden von Benutzern M glichkeiten zum Compilieren Starten und Debuggen von Programmen M glichkeiten zum ffnen von Dokumentationen f r die unterst tzen Programmiersprachen und zum Durchsuchen dieser Dokumentationen Wie bei normalen Desktop Anwendungen sollen diese Funktionen durch bekannte Komponenten wie Men s Popup Men s Schalter und Dialogfenster realisiert werden Die Dialogfenster sollen dabei nicht als eigenst ndige Fenster realisiert werden sondern als so genannter Insite Dialog Dies bedeutet das ein Dialog nicht in einem neuen Browser Fenster ge ffnet wird Popup Fenster sondern innerhalb der Webseite des Online Compiler dargestellt wird Die folgende Grafik zeigt ei
87. ellung zur Verf gung steht Die Ilias Version soll in ein Frame welches Bestandteil eines Online Kurses ist eingef gt werden Seite 37 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss f NY ILIAS Inhaltsverzeichnis 7 f FACHHOCHSCHULE TRIER Pers nlicher Schreib 8 001 Datenstrukturen und Algorithmen 7 m 1 Einf hrung Datenstrukturen und Algorithmen C 2 O Q und Notation Landau sche Symbole 2 1 Definition F 2 2 Bezeichnung p 2 3 Abstrakte Datentypen Algebraische Spezifikationen B 921 Wacantlirha Markmala ainae ahetraktan Natantune Intsei java lt 2 3 4 Abstrakte Datentypen und Klassen 3 Grundleg 2 3 5 bergang zur Programmierung J ee ee ee a ee EE EE EE EE ee ee ee en Einige Programmiersprachen stellen Konstrukte zur Verf gur 11 y 2 Implementierungsdatei Intset java f r die Algebr Implementierung von Abstrakten Datentypen bzw von Algeb waere ee een A Beispiele von Programmiersprachen mit den entsprechende 4 H 5 public class Intset ea sind HI E static final int N 10 A e SIMULA SMALLTALK C JAVA Klassen m ADAPackages 9 Array f r die eigentlichen Daten Ki Eo int daten MODULA IIModules 11 5 mi aktuelle Anzahl g ltiger Daten im Array ei 9 1 O Fehler und Warnungen Wesentliches Kennzeichen das Prinzip des Information Hi Der Zugriff auf die Daten ist nur ber die definierten Schnittst m glic
88. emo Programm mit dem folgenden Befehl starten java mjvm connector demo DemoFrontend 50 rt HalloWelt Das Demo Programm hat 3 Kommandozeilen Parameter Die Anzahl der Instanzen die von dem Beispiel Programm ausgef hrt werden sollen Bei 50 wird 50 mal das Beispiel Programm in der MJVM ausgef hrt Der zweite Parameter gibt das Verzeichnis an in der sich das Beispiel Programm befindet Der dritte Parameter gibt den Klassen Namen des Beispiel Programms an Seite 95 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 5 2 4 Implementierung der MJVM 5 2 4 1 Kommunikation zwischen Client Anwendungen und einer MJVM Die MJVM Multi Task Java VM Anwendung soll mit anderen Java Anwendungen Clients wie dem Online Compiler gesteuert werden k nnen Das hei t Client und MJVM m ssen miteinander kommunizieren Dazu wird RMI Remote Method Invokation verwendet Sun 5 RMI ist ein Protokoll zum Aufruf von Methoden ber Java Anwendungs Grenzen hinaus Das hei t mit RMI kann man Methoden in einer anderen Java Anwendung aufrufen Beide Anwendungen k nnen dabei auch auf verschiedenen Computern laufen RMI hat den Vorteil dass es speziell f r Java entwickelt wurde Der Aufruf von Methoden in anderen Java Anwendungen unterscheidet sich mit RMI kaum von dem Aufruf lokaler Methoden Bei RMI gibt es immer eine Server Anwendung und eine Client Anwendung wobei eine Java Anwendung nicht nur Server oder nur Client sein muss
89. en Java Programme k nnen ohne externes Programm mit einer normalen Java VM debuggt werden Dass hei t das zu debuggende Java Programm wird nicht mit einem speziellem Debugger wie dem GDB ausgef hrt sondern l uft in einer normalen Java VM Debugger Befehle werden mit JDI Sun 2 dem Java Debug Interface zur Java VM gesendet JDI Online Job Programm Compiler Thread Java VM JDI Abbildung 29 Threads und Prozesse zum Debuggen von Java Programmen Das JDI arbeitet Ereignis Orientiert Dass hei t alle Ereignisse des zu debuggenden Java Programms werden mittels JDI an den Job Thread bermittelt welcher die Ereignisse dann verarbeiten kann Wichtige Ereignisse sind BreakpointEvent falls ein Debugger Haltepunkt erreicht wurde StepEvent falls ein Step Befehl Step Into Step Over oder Step Out ausgef hrt wurde oder ClassPrepareEvent wenn in die Java VM eine Klasse class Datei geladen wurde Tritt ein Ereignis auf wird das zu debuggende Java Programm gestoppt Mit dem JDI Befehl resume wird Seite 57 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss das Programm fortgesetzt Der Java Debugger Thread Klasse JavaFileDebugJobSUN hat die gleichen Zust nde wie der C oder C Debugger Thread Klasse CFileDebugJobGNU Initialisierung Debugger wartet Programm gestaret Progam m l uft Programm beendet Breakpoint oder Step Step Over Out Into oder Fortsetzen ava VM Beenden
90. enabled aktiviert oder deaktiviert C und C ue true oder false Einstellungen f r Lis werden zur Zeit noch nicht verwendet Name Beschreibung Standardwert m gliche Werte lisp runtime name Name des Backends f r Lisp Programme gnu gnu GNU Common Lisp lisp enabled aktiviert oder deaktiviert Lisp true true oder false Einstellungen f r C werden zur Zeit noch nicht verwendet Name Beschreibung Standardwert m gliche Werte csharp runtime name Name des Backends f r C Programme mono mono MONO C csharp enabled aktiviert oder deaktiviert C true true oder false Seite 135 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 9 2 3 Neustart des Online Compilers Jede nderung der Konfiguration erfordert ein Neustart des Tomcat Servers oder zumindest ein Neustart des Servlets Um den Tomcat Server neu zu starten muss dieser zun chst mit dem Befehl usr share tomcat5 bin shutdown sh gestoppt und danach mit dem Befehl usr share tomcat5 bin startup sh neu gestartet werden In der Regel gen gt es allerdings nur das Servlet neu zu laden Dies kann man am einfachsten ber die Manager Seite des Tomcat Servers durchf hren Diese Seite erreicht man ber den Link lomcat Manager der Hauptseite des Tomcat Servers http javock fh trier de 8080 Name des Administrators ist root mit dem Passwort apachetomcat
91. ep Into Der Debugger springt aus der aktuellen Funktion Step Out F hrt genau einen Befehl im Programm aus Step Over F gt eine Debugger Variable hinzu Eine Debugger Variable ist eine Variable in dem zu debuggenden Programm Der aktuelle Wert der Variablen wird in der Registerkarte Fehlersuche angezeigt Wenn an der aktuellen Position im Programm keine Variable mit dem Namen existiert wird als Wert 217 angezeigt Entfernt eine Debugger Variable In der Registerkarte Fehlersuche wird neben den Debugger Variablen auch die aktuelle Debugger Position angezeigt Also die Position in der sich das zu debuggende Programm gerade befindet Dazu wird neben dem Symbol die aktuelle Datei und die aktuelle Zeile des Debuggers angezeigt Au erdem wird jedesmal wenn das zu debuggende Programm stoppt zum Beispiel weil ein Haltepunkt erreicht wurde die Datei in der sich der Debugger gerade befindet im Editor ge ffnet und zur aktuellen Zeile gescrollt Man hat dann die M glichkeit Haltepunkte zu ndern bevor man den Debugger wieder startet Seite 151 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 9 3 11 Einschr nkungen Da mit dem Online Compiler Programme auf einem Server ausf hrt werden k nnen unterliegen diese Programme einigen Einschr nkungen sie d rfen nicht unbegrenzt lange laufen maximal 2 Minuten einige Funktionen wie Sockets sind gesperrt Swing AWT und andere Toolkits werden nicht
92. er errorMessage e Die zweite Methode checkLogin f hrt die eigentliche Benutzer Authentifizierung durch Dazu wird ber SOAP die Methode login aufgerufen Seite 46 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss public synchronized static boolean checkLogin String username String password try call setTargetEndpointAddress new java net URL server URL String res String call invoke login new Object celientName username password null password call invoke logout new Object res return res endsWith clientName catch Exception eil Server errorMessage e return false Seite 47 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 5 1 1 3 3 C und C Wichtigste Aufgabe des Servlets ist nat rlich das Erstellen Ausf hren und Debuggen von Programmen in den verschiedenen Programmiersprachen 5 1 1 3 3 1 Compilieren Um C und C Programme zu erzeugen wird GCC die GNU Compiler Collection verwendet Zum Erzeugen von C Programmen gibt es das Kommandozeilen Programm gcc Zum Erzeugen von C Programmen wird das Kommandozeilen Programm g verwendet Die Klasse CFileBuildJobGNU dient als Schnittstelle zu den Kommandozeilen Programmen gcc und g Wie bereits im Entwurf festgelegt wurde ist die Klasse CFileBuildJobGNU bzw deren Instanzen ein so genannter Job Also ein Thread der bestimmte Aufgaben in diesem Fall das Erzeugen von C
93. er getLibDirectory classpath classPath packagePath equals javaFile getClassName packagePath javaFile getClassName else cmd new String java Xbootclasspath a Server getLibDirectory classpath classPath packagePath equals javaFile getClassName packagePath javaFile getClassName setProcess javaFile getCommandLineArgs cmd classPath JavaLanguage processTimeout JavaLanguage ioCharset getProcess waitFor if isProcessTimeout true throw new TimeoutException return true LaunchFile startet das Java Programm und wartet bis das Programm beendet ist Wichtige Implementierungs Details sind die Kommandozeilen Parameter der Java VM die das Java Programm ausf hren soll Seite 56 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss Djava security manager Aktiviert den Security Manager Dadurch werden Befehle wie Datei schreiben gesperrt Djava security policy Die Policy File des Security Managers in der angegeben wird welche Befehle erlaubt sind Xbootclasspath a Verzeichnisangabe f r Java Bibliotheken classpath Classpath der Anwendung Um den korrekten Classpath zu ermitteln wird die Package Angabe aus der Java Datei ausgelesen 5 1 1 3 4 3 Debuggen Im Gegensatz zum Compilieren und Ausf hren von Programmen unterscheidet sich das Debuggen von Java Programmen stark von dem Debuggen von C und C Programm
94. erade ge ffnet sind werden fett dargestellt Seite 141 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 9 3 5 Programm Beispiele Im Online Compiler werden alle Programm Beispiele die es in den Ilias Kursen gibt angezeigt Beispiele bungen HI Datenstrukturen Algorithmen Einf hrung Datenstrukturen und Algorithmen EI Landausche Symbole DI Abstrakte Datentypen Algebraische Spezifikationen O Intset Grundlegende Datentypen Darstellung von Mengen Sortierverfahren J Graphen und Graphenalgorithmen Umgang mit gro en Datenmengen Externes Suchen und Sortieren Entwurf von Algorithmen GEELEN E an v Abbildung 45 Programm Beispiele im Online Compiler Die Programm Beispiele k nnen ber Ilias durch einen Klick auf den entsprechenden Link ge ffnet werden Im Online Compiler selbst k nnen Programm Beispiele durch einen Klick auf ge ffnet werden Wird ein Programm Beispiel ge ffnet werden alle Dateien welche Bestandteil des Programm Beispiels sind im Online Compiler geladen Wenn man die Seite eines Beispiels im Ilias System ffnen m chte muss man auf klicken Seite 142 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 9 3 6 Dateien bearbeiten Wenn man auf einen Dateinamen klickt wird der Dateiinhalt im Editor angezeigt und kann bearbeitet werden Online Compiler Mozilla Firefox Datei Bearbeiten Ansicht Chronik Lesezeichen Extras Hilfe gt E MR U ntpsnocamost 80
95. erden k nnen Dazu werden f r die verschiedenen Programmiersprachen sogenannte Backends ben tigt Ein Backend ist ein Programm welches im Hintergrund Aufgaben wie das Compilieren einer Datei vornimmt Zum Compilieren von Java Dateien soll wie schon beim Java Online Compiler der Eclipse Java Compiler JDT verwendet werden Zum Compilieren von C und C Dateien soll die GCC GNU Compiler Collection verwendet werden F r eine sp tere Implementierung einer C Unterst tzung soll Mono Novell 2 verwendet werden C und C Programme m ssen nicht nur compiliert sondern auch noch mit einem Linker verarbeitet werden Dazu m ssen die Dateien die mit einem Linker zu einem Programm zusammengebunden werden sollen angegeben werden Der Online Compiler muss es dem Benutzern also erlauben f r C und C Dateien festzulegen welche Dateien sogenannte Linker Targets oder einfach nur Targets mit einem Linker zu einem Programm hinzugef gt werden sollen 3 4 Debugger Der Online Compiler soll das Debuggen von Programmen erm glichen Dazu m ssen einige Funktionen vom Online Compiler unterst tzt werden Debugger Haltepunkte Breakpoints m ssen zu Dateien hinzugef gt werden k nnen Wenn ein Programm eine Zeile mit einem Haltepunkt erreicht soll das Programm in der Zeile anhalten Die Zeile und die Datei in der sich das Programm gerade befindet sollen dem Benutzer angezeigt werden Seite 10 von 156 Eine Webbasierte Entwickl
96. ermeldung angezeigt werden Datei erneut bearbeiten und Fehler entfernen Datei test cpp erneut ausf hren und auf Timeout warten 2 Minuten In der Registerkarte Probleme sollte eine entsprechende Fehlermeldung angezeigt werden Die Kommandozeilen Argumente der Datei test cpp ffnen Seite 112 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 18 19 20 21 22 23 24 25 26 27 28 29 30 In dem Eingabefeld den Text a b c eingeben und die Argumente speichern Datei im Editor ffnen Dateiinhalt ersetzen durch include lt iostream gt int main int argc char argv for int i 1 i lt argc i std cout lt lt argv i lt lt Das Programm test cpp erneut ausf hren das Programm sollte ab c ausgeben Targets der Datei test cpp ffnen im Dialogfenster sollte nur die Datei test cpp als Target eingetragen sein Bei dem Target test cpp auf linken klicken linken der Datei deaktivieren und Targets speichern Datei test cpp compilieren Starten des Programmes Schalter sollte deaktiviert sein da Linker nicht ausgef hrt wurde Header Datei func h erstellen und Datei ffnen Inhalt der Datei func h void test C Datei func cpp erstellen und Datei ffnen Inhalt der Datei func cpp include lt iostream gt void test std scout lt lt Tiest Inhalt der Datei test cpp ndern include
97. erstellen k nnen Ein RMI Service arbeitet immer als eigenst ndiger Thread Das MJVM Programm bzw der RMI Service wird also nicht nach Ausf hrung der main Methode beendet public static void main String args try String serviceName MJVMConnector DEFAULT_MJVM_SERVICE int port MJVMConnector DEFAULT_MJVM_PORT try serviceName args 0 port Integer parselnt args 1 catch Exception e initVM port serviceName Seite 103 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss catch Exception eil e printStackTrace Die Klasse MJVMVirtualMachine implementiert die beiden Remote Schnittstellen MJVMServerlInterface und MJVMServerEnrollnterface Die Schnittstelle MJVMServerEnrollnterface hat nur eine Methode die Methode login mit der Client Anwendungen eine Verbindung zur MJVM herstellen k nnen Die Schnittstelle MJVMServerInterface hat zwei Methoden public MJVMProcessServerInterface createProcess String mainClass String classPath String workingDir long waitTime String args throws RemoteException public void killAll throws RemoteException Die Methode createProcess erstellt eine neue Java Anwendung in der MJVM Als Parameter muss man den Namen der Klasse welche die main Methode des Programms enth lt angeben Weitere Parameter sind der Class Path das Arbeitsverzeichnis die maximale Laufzeit des Programms und die Kommandozeilenarg
98. ersuche m glich sein Au erdem sollen mehrere Programmiersprachen unterst tzt werden Der Name Online Compiler ist also eigentlich schlecht gew hlt Schlie lich sollen nicht nur Dateien compiliert werden Der Name stammt von dem Java Online Compile Service SW 2005 einem Webservice mit dem man Java Dateien compilieren konnte Diese Programm war Grundlage des Java Online Compilers welcher wiederum Grundlage des Online Compilers sein soll Seite 6 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 3 Anforderungen und Konzept Der Online Compiler soll als reine Webanwendung implementiert werden Das hei t der Online Compiler soll in jedem Webbrowser ausgef hrt werden k nnen ohne das zus tzliche Software notwendig ist Dies hat den Vorteil dass Anwender weder Software installieren noch konfigurieren m ssen Das Ausf hren Compilieren und Debuggen der Anwendungen soll auf einem Server erfolgen Konfiguration oder Installation der verschiedenen Programmiersprachen sind f r die Anwender also ebenfalls nicht n tig Wie der Java Online Compiler soll der Online Compiler als Ajax Webanwendung Ajax Asynchronous JavaScript and XML implementiert werden Eine klassische nicht Ajax Webanwendung funktioniert nach folgendem Prinzip Client Anfragen werden von einem Webserver bearbeitet und das Ergebnis in Form einer HTML Seite zum Client Webbrowser zur ckgeschickt Dieses Verfahren hat zwei Nachteile zum eine
99. ervorheben von Syntax Elemente wie Schl sselw rtern wird der vom Anwender eingegebene Quelltext durchsucht Wird ein Element gefunden welches hervorgehoben werden soll zum Beispiel ein Schl sselwort oder ein Kommentar wird f r dieses Element eine Formatierung hinzugef gt Dazu k nnen beliebige HTML Elemente wie zum Beispiel Farben Font Element verwendet werden da der MIDAS Editor ein HTML Editor ist und somit beliebigen HTML Code anzeigen kann Um die Quelltext Abschnitte zu finden die hervorgehoben werden sollen wird f r jeden Dateityp Java Lisp C C C und C C Header Dateien eine Liste mit den entsprechenden Syntax Elementen und den Format nderungen verwendet F r die Programmiersprache Java sieht diese Liste wie folgt aus Syntax f amp uuml r Java Dateien javaSyntax Zeichenketten N re lt zrent zolsr blu gt SI lt FonE gt Zeichen EIN I A Yg lt fent solsre magentai gt sIi lt Tont gt Schluesselwoerter w abstract continue for new switch assert default goto package synchronized boolean dolif private this break double Seite 86 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss implements protected throw byte else import public throws case enumlinstanceof return transient catch JextendsJint short try char finallinterface static void class finally long strictfp volatile cons
100. es HTTP Protokolls weil HTTP Verbindungslos ist nach jeder Verbindung wird die Verbindung zum Servlet wieder getrennt wei das Servlet nicht zu welchem Client welche Anfrage geh rt Diese Problem wird dadurch umgangen indem der Client Webbrowser bei jeder Anfrage eine eindeutige Nummer Cookie Seite 29 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss zum Servlet sendet Das Servlet kann den Client anhand dieser Nummer identifizieren Dieses reicht aber f r den Online Compiler nicht aus Wenn ein Anwender mehrere Online Compiler im gleichen Webbrowser ffnet werden alle vom Servlet als ein Client erfasst da alle zum Servlet die gleiche Nummer Cookie senden Wenn in einem Fenster Modellereignisse empfangen werden k nnen die anderen Fenster diese Ereignisse nicht mehr empfangen da in dem Moment wo ein Client Modellereignisse empfangen hat die Ereignisse vom Servlet gel scht werden damit ein Ereignis nicht zweimal gesendet wird siehe oben Um dieses Problem zu umgehen muss das mehrfache ffnen von Online Compilern in einem Webbrowser verhindert werden Dazu werden in dem Kommunikationsprotokoll zwei Befehle ben tigt open session und close session open session muss ein Client beim Start senden close session muss ein Client beim Beenden senden Wird ein open session gesendet nachdem ein anderer Client bereits open session gesendet hat wird die weitere Abarbeitung von Befehlen gestoppt Das untere Sequenzdiagramm
101. es Tomcat Server durchgef hrt BSI Tomcat 1 Dabei wurde eine Liste mit Empfehlungen f r einen sicheren Betrieb des Tomcat Servers zusammengestellt Zu den Empfehlungen des BSI z hlen Verwendung von SSL Installation des Tomcat Servers mit einem anderen Benutzerkonto nicht dem Root Benutzer des Betriebssystems Schutz des Tomcat Servers durch eine LSM Anwendung zum Beispiel AppArmor Einsatz einer Firewall 7 2 AppArmor AppArmor sch tzt ein System vor schadhaften Programmen So wird AppArmor sogar als Sicherheitsfunktion f r den Apache Webserver Apache 2 verwendet AppArmor setzt auf das sogenannte LSM Linux Security Modul auf Das LSM ist eine Schnittstelle des Betriebssystem Kerns Kernel von Linux mit der bestimmte Funktionen f r Programme explizit gesperrt werden k nnen So kann man zum Beispiel mit AppArmor ber LSM das Schreiben von Dateien verbieten AppArmor hat aber den Nachteil dass nicht alle Funktionen des LSM verwendet werden So ist es zum Beispiel mit AppArmor nicht m glich die Betriebssystem Funktion fork zu sperren Mit dem Befehl fork kann ein Programm eine Kopie von sich selbst erstellen Eine bestimmte Sorte von Programmen die sogenannten Fork Bombs nutzt diese Funktion aus um einen Rechner zum Stillstand zu bringen Dazu versucht die Fork Bomb unendlich viele Kopien von sich selbst zu erstellen Das folgende C Programm ist eine Fork Bomb Seite 126 von 156 Eine Webbasierte Ent
102. est java ffnen Inhalt der Datei import utilities public class test public static void main String args System out println Bitte Text eingeben TastaturEingabe readString Datei test java compilieren automatisches ffnen der Probleme Registerkarte kein Fehler vom Compiler erwartet Ausgabe der Statusmeldung Compilierung erfolgreich Datei test java schlie en In der Statusmeldung Compilierung erfolgreich auf test java klicken die Datei test java sollte ge ffnet werden Fehlermeldungen l schen Statusmeldung Compilierung erfolgreich sollte entfernt werden Datei test java ausf hren automatisch ffnen der Konsole Registerkarte Ausgabe vom Prozess Bitte Text eingeben Im Eingabefeld Test eingeben Ausgabe vom Prozess Test Prozess erneut starten und Ausf hrung abbrechen Prozess abbrechen klicken Ausgabe des Prozesses l schen Ausgabe l schen klicken Registerkarte Probleme ffnen eine Fehlermeldung Prozess durch Benutzer abgebrochen sollte angezeigt werden Datei bearbeiten und einen Fehler einf gen Datei compilieren in der Probleme Registerkarte sollte eine Compiler Fehlermeldung angezeigt werden Datei erneut bearbeiten und Fehler entfernen Seite 109 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 15 16 17 18 19 20 21 22 23 24 25 26
103. estoppt wurde zum Beispiel weil ein Debugger Haltepunkt erreicht wurde wird die Methode serDebuggerWaiting mit dem Parameter true aufgerufen Dadurch wird in den Zustand Debugger wartet gewechselt woraufhin Befehle zum Beispiel Step Into eingegeben werden k nnen private synchronized void setDebuggerWaiting boolean debuggerWaiting this debuggerWaiting debuggerWaiting Im Zustand Debugger wartet muss auf Befehle gewartet werden Dazu muss der Job Thread gestoppt werden wozu die wait Methode des Threads verwendet wird Nachdem ein Befehl eingegeben wurde wird der Job Thread mit der notify Methode wieder gestartet und danach in den Zustand Programm l uft oder GDB beenden gewechselt public synchronized void stepOver throws OnlineCompilerException if isDebuggerReady throw new OnlineCompilerException Debugger not Running setDebuggerWaiting false gdbCommand next restartWaitThread Die Implementierung der Methode stepOver der Klasse CFileDebugJobGNU f hrt den Befehl Step Over aus Mit diesem Befehl wird genau eine Programmzeile vom C oder C Programm ausgef hrt Am Methodenanfang wird zun chst gepr ft ob der Debugger sich im Zustand Debugger wartet befindet Wenn dies nicht der Fall ist wird eine Fehlermeldung erzeugt Ansonsten wird mit der Methode gdbCommand der GDB Befehl next zum GDB gesendet Daraufhin f hrt der GDB den Step Over
104. etes System Klassen 5 2 2 Compilierung der MJVM Die MJVM ist vollst ndig in Java Programmiert worden Um die MJVM zu Compilieren m ssen alle Quelltextdateien im Verzeichnis source MultiTaskJavaVM compiliert werden Seite 94 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 5 2 3 Demo Programm ausf hren Das Verzeichnis source MultiTaskJavaVM enth lt ein Beispiel Programm welches eine MJVM zum Ausf hren eines Java Programmes verwendet Das Programm befindet sich in der Klasse mjvm connector demo DemoFrontend Das Beispiel Programm stellt eine Verbindung zu einer laufenden MJVM her und f hrt auf der MJVM ein Java Programm aus Um die Geschwindigkeit mit einer herk mmlichen Java VM zu vergleichen wird das Java Programm auch mit einer normalen Java VM von SUN ausgef hrt Das Beispiel Programm ist die Klasse HelloWorld im Verzeichnis source MultiTaskJavaVM Bevor das Demo Programm ausgef hrt werden kann muss eine MJVM gestartet werden Dazu muss der folgende Befehl aufgerufen werden java cp Xbootclasspath p Xbootclasspath a usr lib java lib tools jar mjvm server MJVMVirtualMachine Mit dem Befehl wird eine MJVM gestartet Der Befehl muss in dem Verzeichnis ausgef hrt werden in dem sich die Klassen der MJVM befinden Der Pfad usr 1lib java lib tools jar gibt die JAR Datei an in der sich die JDI Klassen von SUN befinden Nachdem die MJVM gestartet wurde kann man das D
105. ets einer Datei j Targets siehe unten save file args Speichert die id Datei ID kein Kommandozeilenar gumente einer Kommandozeilenargumente Datei save file Speichert den id Beispiel ID kein Inhalt und die T Haltepunkte einer Dateiinhalt siehe unten Datei Haltepunkte siehe unten Befehle f r Beispiele Befehl Beschreibung Parameter R ckgabewert request examples Liefert alle Beispiele die es keine Liste aller Beispiele gibt zur ck open example L dt ein Beispiel id Beispiel D ID des geladenen Beispiels Seite 74 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss Befehle f r Jobs Befehl Beschreibung Parameter R ckgabewert build file Startet einen neuen Build id Datei ID kein Job launch file Startet einen neuen id Datei ID kein Launch Job debug file Startet einen neuen Debug id Datei ID kein Job stop job Stoppt den aktuellen Job keiner kein input Eingabe f r laufenden Eingabe kein Prozess bei Debug oder Launch Job debug step out Step Out Befehl bei Debug keiner kein Job debug step over Step Over Befehl bei keiner kein Debug Job debug step into Step Into Befehl bei keiner kein Debug Job debug resume Step Resume Befehl bei keiner kein Debug Job request job Liefert alle Job Ereignisse ack Nummer des Ereignisses welches Job Ereignisse siehe changes zuletzt empfangen wurde Fenster Unten Der Befehl request fi
106. ferenz Addison Wesley Longman Verlag 1999 M L Liu Distributed Computing Principles and Applications Addison Wesley Verlag 2004 Google Inc Google Docs http docs google com 2007 Download am 21 02 2007 Seite 155 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 11 Erkl rung Hiermit erkl re ich Henning Vo dass ich die vorliegende Arbeit unter Verwendung der angegebenen Quellen eigenh ndig erstellt habe Trier den 22 Februar 2007 Henning Vo Seite 156 von 156
107. fh Datei Bearbeiten Ansicht Chronik Lesezeichen Extras Hilfe 4 gt KE 7 O _httpjavockth trier de 8080 manager htmi B Pace Jakarta Project http jakarta apache org Tomcat Webanwendungs Manager Nachricht Server Status Anwendungen auflisten Hilfeseite HTML Manager englisch Hilfeseite Manager englisch J L Welcome to Tomcat Start Stop Neu laden Entfernen admin Tomcat Administration Application Stat Stop Neu laden Entfernen balancer D Start Stop Neu laden Entfernen sp examples JSP 2 0 Examples 0 Start Stop Neu laden Entfernen manager Tomcat Manager Application D Start Stop Neu laden Entfernen Pr o an Sin Neuladen mama servlets examples Servlet 2 4 Examples 0 Start Neufaden Entfernen Aomcat docs Tomcat Documentation 0 Start Stop Neu laden Entfernen Fertig ne o zz Abbildung 42 Tomcat Manager Seite Ein Klick auf Neu laden rote Markierung in der Zeile oc l dt das Online Compiler Servlet neu Seite 136 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 9 3 Benutzerhandbuch Dieses Kapitel befasst sich mit der Bedienung des Online Compilers aus Anwendersicht bzw mit der Bedienung des Client Programms Webinterface oder Benutzerschnittstelle des Online Compilers Im Online Compiler selbst befindet sich ein hnliches Dokument unter dem Men pun
108. from mjvm connector process connector lt lt interface gt gt M JVM Connector M JVM Connector Lis tener from mjvm connecton from mjvm connecton lt lt interface gt gt M JVM Clientinterface from mjvm connecton Abbildung 41 Klassenhierarchie MJVM Client Anwendung Die Klasse MJVMConnector dient zum Starten einer MJVM Au erdem kann man mit der Klasse MJVMConnector eine Verbindung zu einer laufenden MJVM herstellen und Java Anwendungen in der MJVM starten Die Klasse MJVMProcessConnector dient zum Steuern einer einzelnen Java Anwendung in einer MJVM An beide Klassen k nnen Listener Objekt angemeldet werden Die Listener Objekte werden bei Ereignissen wie Verbindung zur MJVM wurde getrennt Java Anwendung wurde gestartet Java Anwendung wurde beendet usw benachrichtigt Seite 106 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 5 2 4 4 1 Eine MJVM starten Wie bereits oben erw hnt wurden einige Klassen der Java Runtime Environment JRE speziell an die MJVM angepasst Das hei t eine MJVM Anwendung muss statt mit den JRE Klassen mit den angepassten Klassen gestartet werden Um eine Java Anwendung mit anderen Klassen statt den JRE Klassen zu starten gibt es drei M glichkeiten Die angepassten JRE Klassen in das Verzeichnis kopieren in dem sich die Originalen Class Dateien befinden Dieses Verfahren hat den gro en Nachteil dass dadurch alle Java Programme
109. g genutzt werden kann Dieses Kapitel ist aufgeteilt in Testplan Beschreibung der Voraussetzung und Umgebung des Last und Servertests Testspezifikation Beschreibung der einzelnen Testf lle Testbericht Ergebnis des Last und Servertests 6 4 1 Testplan Um den Server und Lasttest durchzuf hren wurde eine Testklasse erstellt Dies hat zum einen den Vorteil das der Test einfach und schnell wiederholt werden kann und zum anderen dass ein Testprotokoll leicht erstellt werden kann Au erdem erfordert der Test Funktionen die nur mit Hilfe eines Programmes realisiert werden k nnen So ist ein Lasttest bei dem sehr viele Anwender schnell hintereinander eine Reihe von Anfragen stellen nur rechnergest tzt m glich Das Paket onlinecompiler test enth lt die Klassen die f r den Test ben tigt werden Die Testklasse TestServer enth lt das Programm welches die verschiedenen Testf lle ausf hrt Jeder Testfall ist in einer eigenen Klasse implementiert Als Testumgebung wurde neben dem Server javock auf dem das OC Servlet ausgef hrt wird ein zweiter Rechner Mac OS X zum Ausf hren der Testklassen verwendet Voraussetzung f r den gesamten Test ist dass alle Systeme laufen und eine Verbindung zwischen Server und Client m glich ist Um zu berpr fen ob sich die Performance des Online Compilers auf einem schnelleren System signifikant verbessern l sst wurde der Test ebenfalls mit einem zweiten Server Computer du
110. h ZB bei objektorientierten Programmiersprachen Die ADTs eigene Datentypen Sie erhalten denselben Status wie ein D Programmiersprache Probleme S Konsole _ Fehlersuche e RE Du Abbildung 24 Ilias Version des Online Compilers integriert in Ilias 4 1 2 3 1 Dialoge Wie bereits erw hnt werden eine Reihe von Dialogen f r den Online Compiler ben tigt In diesem Abschnitt werden diese Dialoge kurz vorgestellt Dialog zum Suchen in Programmiersprachen Dokumentationen Java S QA Dialog zum Ausw hlen einer lokalen Datei zum Hochladen Bitte w hlen Sie eine Datei aus die zum Server hochgeladen werden soll Durchsuchen Datei hochladen Abbrechen Seite 38 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss Dialog zum Eingeben von Kommandozeilenargumenten von Programmen Kommandozeilenargumente von Neu java Geben Sie die Kommandozeilenargumente durch Leerzeichen getrennt f r das Programm ein 1 Argumente speichern Abbrechen Dialog zum Eingeben von Linker Targets von Programmen Linker und Compiler Targets von Neu java Linker und Compiler Targets f r das Programm ein indem Sie die Dateien per Drag amp Drop in das Dialogienster ziehen O Neu java 88 Targets speichern Abbrechen Dialog zum Eingeben von Benutzername und Passwort Online Compiler Login Name als Gast anmelden Passwort anmelden Seite 39 von 156 Eine Webbasierte
111. h in der Regel im gleichen Verzeichnis wie die Binaries des Tomcat Servers 2 Die Datei web xml im Unterverzeichnis webapps oc WEB INF in einem Editor ffnen 3 In der Datei web xml muss beim Eintrag lt param name gt root lt param name gt bei lt param value gt der Name des Verzeichnisses angegeben werden indem sich die Konfigurations und Beispieldateien des Online Compilers befinden sollen zum Beispiel das Verzeichnis srv oc 4 In dieses Verzeichnis sollte der komplette Inhalt des CD Verzeichnisses bin OnlineCompiler config kopiert werden 5 In der Datei web ml muss beim Eintrag lt param name gt wwwroot lt param name gt bei lt param value gt der Name des Verzeichnisses angegeben werden indem sich die HTML und JavaScript Dateien des Online Compilers befinden Dieses Verzeichnis ist normalerweise das Verzeichnis webapps des Tomcat Servers 6 Der Online Compiler ben tigt einige Java Bibliotheken unter anderem zum Parsen von XML Dateien Diese Bibliotheken m ssen in das Verzeichnis common endorsed des Tomcat Servers kopiert werden Die Java Bibliotheken befinden sich im Unterverzeichnis bin OnlineCompiler oclibs auf der CD 7 Zum Schluss muss noch der Tomcat Server neu gestartet werden Dazu kann man unter Linux die Befehle usr share tomcat5 bin shutdown shund usr share tomcat5 bin startup sh verwenden 8 Danach kann der Online Compiler ber die URL http localhost 8080 oc index html aufgerufen
112. hen werden Seite 114 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss include lt stdio h gt int main int i FILE d fd fopen test txt w if fd NULL fprintf stderr fopen failed for s n test txt return 1 fprintf fd scribbled on file s n test txt fclose fd Die Ausgabe des C Programmes sollte fopen failed for test txt sein include lt stdio h gt void exec_cmd char buf define MAX_ARGS 100 int main int argc char argv char buf 256 printf enter cmd if gets buf NULL exec_cmd buf void exec_cmd char buf char argv MAX_ARGS int j 0 argv j strtok buf while j lt MAX_ARGS amp amp argv j strtok NULL NULL execvp argv O argv _exit 1 Das Programm erwartet den Namen eines Befehls z B ps Die Ausgabe des Befehls z B die Ausgabe von ps sollte nicht in der Ausgabe des C Programms enthalten sein da AppArmor das Ausf hren des Befehls blockieren muss Seite 115 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 6 2 2 6 Testfall 6 Im sechsten Testfall sollen alle Funktionen des Debugger getestet werden Schritte im Testfall 6 1 6 7 8 2 Datei test1 java erstellen Datei ffnen und den folgenden Inhalt einf gen public class testl public static void main String args test2 test 1 test2 test 2 test2 test 3
113. ieder zu entfernen muss man einfach auf klicken Damit eine Datei au erdem gelinkt wird Linker muss man nur auf klicken Online Compiler Mozilla F refox Datei Bearbeiten Ansicht Chronik Lesezeichen Extras Hilfe O npsnocainost 8080 0c index htmi gt Cl Googie Online Compiler 2 0 Beta NEUE DATEI ABMELDEN Angemeldet als Gast DOKUMENTATION HILFE D BEeispiele bungen 2808 E BDatenstrukturen Algorithmen 8808 1 public class IntsetTest D BLandausche Symbole Abstrakte Datentypen Algebraische Linker und Compiler Targets von IntsetTest java EB Spezifikationen E Bintset Linker und Compiler Targets f r das Programm ein indem Sie D Bintset java die Dateien per Drag amp Drop in das Dialogienster ziehen TE H O BlntsetTest java x O IntsetTest java Datei linken G H A r 4 a 2 4 6 noch 50 Dosen brig 1 sEmptyimenge ereMenge A IntsetTest java Beispiele bungen E Datenstrukturen Algorithmen Einf hrung Datenstrukturen und Algorithme Targets speichern Abbrechen DI Landausche Symbole B Abstrakte Datentypen Algebraische Spezifikationen D Intset 80 d Grundlegende Datentypen Darstellung von Mengen P Probleme PN Konsole a Fehlersuche a 2007 Fachhochschule Trier deutsch english PX Fertig Abbildung 47 Dialog zum Bearbeiten der Targets einer Datei Seite 145 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss Zu
114. ient gesendet Der Hauptunterschied zwischen beiden Funktionen ist dass bei buildFile das Linker Programm gcc bzw g mit den Dateien die gelinkt werden sollen aufgerufen werden muss Die Dateien die der Linker zu einem Programm zusammenf gen soll sind die Target Dateien der Datei cfile Ein weiterer Unterschied ist dass nach dem Erzeugen des Programms mit der Funktion sandbox eine AppArmor Sandbox f r das erzeugt Programm erstellt Seite 49 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss wird N here Informationen zu AppArmor befinden sich im Abschnitt AppArmor 5 1 1 3 3 2 Ausf hren Das Ausf hren von C und C Programmen wird von der Klasse CFileLaunchJobGNU durchgef hrt Wie die Klasse zum Erstellen von C und C Programmen ist auch diese Klasse von der Klasse Job abgeleitet Dass hei t das Ausf hren von C und C Programmen wird ebenfalls von einem eigenen Thread durchgef hrt Einzige Methode der Klasse ist launchFile welche von dem Job Thread ausgef hrt wird protected boolean launchFile throws IOException InterruptedException OnlineCompilerException cfile sandbox Sandbox ggf erstellen String cmd cfile getCommandLineArgs cfile getAbsoluteBinaryName setProcess cmd cfile getAbsoluteDirectory CLanguage processTimeout CLanguage ioCharset getProcess waitFor if CLanguage appArmor amp amp getProcess exitValue 255 throw new SandboxException if
115. ilige Backend welches dazu verwendet wird So muss zum Beispiel in der Methode launch der Klasse JavaLanguage die JVM aufgerufen werden w hrend in der Methode launch der Klasse LispLanguage der Lisp Interpreter aufgerufen werden muss 4 1 1 3 Jobs Compilieren Ausf hren und Debuggen Das Ausf hren von Programmen das Compilieren von Quelltext Dateien oder das Debuggen von Programmen erfordert einigen Aufwand und vor allem Zeit Dies bedeutet zum Beispiel dass ein Anwender eine gewisse Zeit warten muss bis das Compilieren einer Datei abgeschlossen ist Normalerweise w rde der Server beziehungsweise das Servlet dann solange blockiert sein bzw keine weiteren Anfragen mehr beantworten bis das Compilieren abgeschlossen ist Da solch ein Verhalten nicht akzeptabel ist kann man schon beim Entwurf festlegen dass alle Aufgabe die l ngere Zeit in Anspruch nehmen in einem eigenen Thread ausgef hrt werden Diese Threads werden als Job bezeichnet In dem folgenden URL Diagramm wird die Klassenhierarchie f r solche Threads Jobs dargestellt Job EES listener from onlinecom piler languages jobs JobListener from onlinecom piler languages jobs Build Job Launch Job from onlinecom piler languages jobs from onlinecom piler languages jobs Buikl Folder Job from onlinecom piler languages jobs DebugJob from onlinecom piler languages jobs Build File job from onlinecom piler languages jobs Abbild
116. iner MJVM herstellen Wie bereits oben erw hnt wurde wartet die MJVM an einem speziellem Port auf Client Verbindungen Wenn ein Client eine Anfrage ber RMI stellt wird eine Instanz der Schnittstelle MJVMEnrollnterface zur ckgeliefert Die Methode startRMI der Klasse mjvm connector MJVMConnector stellt die Verbindung zu einer laufenden MJVM her private void startRMI throws MJVMException try System out printlin Start RMI MJVMServerEnrollnterface enrol MJVMServerEnrolIlnterface Naming lookup rmi mjvmHost mjvmPort mjvmServiceName Seite 97 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss server enrol login this System out printlin Start Finished MJVM Ready catch Exception eil throw new MJVMException Error while launch RMI e Die Methode naming lookup liefert das MJVMEnrollnterace Objekt der MJVM zur ck Die Methode login dieses Remote Objektes liefert schlie lich ein Remote Objekt der Schnittstelle MJVMServerlInterface zur ck mit dem auf Funktionen der MJVM wie Start einer Java Anwendung zugegriffen werden kann Der RMI Service der MJVM wird mit der Methode startRMISevicee der Klasse MJVMVirtualMachine gestartet private static void startRMIService int port String url throws RemoteException MalformedURLException try Registry registry LocateRegistry getRegistry port registry list catch RemoteExcept
117. inken aller Dateien in einem bestimmten Verzeichnis LaunchJob Ausf hren eines Programmes DebugJob Debuggen eines Programmes Wie bereits im vorherigen Kapitel beschrieben ist die Implementierung einzelner Funktionen abh ngig von der jeweiligen Programmiersprache Die Job Klassen m ssen deshalb mehrmals f r jede Programmiersprache implementiert werden Es muss also von jeder Job Klasse f r jede Programmiersprache eine Klasse abgeleitet werden Seite 19 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss cd Buildjobs Build File Job from onlinecom piler languages jobs JavaFile Build JobS UN CFik Build Job GN U from onlinecom piler languages java JavaLanguage from onlinecom piler languages c CLanguage CSharpFileBuikl job M ONO from onlinecom piler languages csharp CSharpLanguage Abbildung 9 Klassen zum Compilieren und Linken von Programmen F r die Namen der Klassen gilt folgende Konvention Der vordere Teil des Namens beschreibt den Dateiinhalt der mit dem Job compiliert debuggt oder ausgef hrt werden kann z B JavaFile f r Java oder CFile f r C Der mittlere Teil des Namens beschreibt die Art des Jobs z B BuildJob oder LaunchJob Der hintere Teil des Namens bezeichnet das verwendete Backend z B GNU oder SUN Wenn zum Beispiel mehrere verschiedene Backends f r Java verwendet werden sollen z B GNU und SUN k nnte man dazu verschiedene Klassen
118. inzelne Argumente erkannt Der Fehler lag in der Methode serArgs der Klasse onlinecompiler languages files LaunchableFile in der die Kommandozeilen Argumente analysiert werden Beim Wechseln von Registerkarten in der Benutzerschnittstelle wurde diese nicht immer richtig dargestellt Die Ursache von diesem Fehler ist ein Fehler im Firefox Browser bei der Darstellung von HTML IFrame Elementen Um diesen Problem zu umgehen werden im Firefox Browser Registerkarten komplett neu erzeugt sobald auf einen Tab geklickt wurde Im Internet Explorer bei dem es dieses Problem nicht gibt werden die Registerkarten hingegen versteckt falls sie nicht angezeigt werden sollen beziehungsweise angezeigt falls sie aktiv sind Fehler im Testfall 2 In der Benutzerschnittstelle wurden Sonderzeichen falsch dargestellt Ursache war die Angabe eines falschen Zeichensatzes beim Senden von HTML und JavaScript Dateien an Web Clients durch das Online Compiler Servlet Der Zeichensatz UTF 8 von HTML und JavaScript Dateien wird in der Methode answerDocumentRequest der Klasse onlinecompiler servlet OCServlet angegeben if isHtmlRequest request response setContentType text html charset utf 8 else if isJavaScriptRequest request response setContentType text javascript charset utf 8 Neben der Angabe des Zeichensatzes f r HTML und JavaScript Dateien m ssen diese au erdem als UTF 8 Dateien gespeichert werden Fehler im Testfall
119. ion eil Registry registry LocateRegistry createRegistry port Naming rebind url vm Seite 98 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 5 2 4 2 Ausf hren von Java Anwendungen In dem folgenden Klassendiagramm werden die Klassen die f r eine Java Anwendung die in einer MJVM ausgef hrt werden soll ben tigt werden dargestellt M JVMSecur ity Manager from mjvm server process M JVM InputStream from mjvm server io MJVMVirtualMachine from mjvm server process M JVM Proces s from mjvm server process MJVM ThreadGroup from mjvm server process M JVMErrorStream from mjvm server io process MJM OutputStream out MJM Thread from mjvm server io from mjvm server process watchdog M JVM Class Loader M JVM Proces s Wat ch dog from mjvm server process from mjvm server process lt lt interface gt gt M JVM Proces s Client Interface from mjvm connector process Abbildung 39 Klassenhierarchie MJVM Prozess Die Klasse MJVMProcess erweitert die Remote Schnittstelle MJVMProcessClientInterface Auf diese Weise kann das Client Programm welches die Java Anwendung gestartet hat die Java Anwendung ber RMI steuern Die Klassen MJVMInputStream MJVMETrrorStream und MJVMOutputStream dienen als Ein und Ausgabestr me der Java Anwendung Da mit einer MJVM mehrere Java Anwendungen parallel ausgef hrt werden kann man f
120. itive ganze Zahl server users maxinactivetime gibt an nach welcher Zeit Sekunden der Inaktivit t eine Client Verbindung getrennt wird 3600 positive ganze Zahl server users admin password das Passwort f r den Administrator admin Text server users admin name der Name des Administrators admin Text server examples importfoldername der Name des Verzeichnisses in das Beispiele und ggf bungsdateien kopiert werden Beispiele bungen g ltiger Verzeichnisname Unterverzeichnisse getrennt durch server directories users Unterverzeichnisname f r Nutzer Dateien users g ltiger Verzeichnisname server directories lib Unterverzeichnisname f r Programmierbibliotheken lib g ltiger Verzeichnisname server files maxsize maximale Gr e f r Dateien in Bytes 32000 positive ganze Zahl server files maxvariables maximale Anzahl an Debugger Variablen pro Datei 20 positive ganze Zahl server files maxtargets maximale Anzahl an Compiler und Linker Targets pro Datei 20 positive ganze Zahl server files maxbreakpoints maximale Anzahl an Haltepunkten pro Datei 20 positive ganze Zahl server session max maximale Anzahl an Client Verbindungen 5000 positive ganze Zahl Einstellungen f r die Benutzer Authentifizierung mit Ilias Authentifi
121. klungsumgebung ist eine Software mit der Programme erstellt werden k nnen Aufgabe einer Entwicklungsumgebung ist es Software Entwickler beim Programmieren von Software unterst tzen Die Entwicklungsumgebung die im Rahmen dieser Abschlussarbeit erstellt werden soll soll dabei f r den Einsatz im E Learning Bereich optimiert werden Dies bedeutet insbesondere dass die Entwicklungsumgebung einfach und intuitiv bedient werden kann Eine weitere wichtige Voraussetzung f r den Einsatz im E Learning Bereich ist die Online Verf gbarkeit des Programms Dies soll eine m glichst einfache Integration des Programms in bestehende ebenfalls online verf gbare E Learning Systeme erm glichen Als Grundlage der zu entwickelnden Software Online Compiler oder kurz OC soll dazu das Programm Java Online Compiler oder kurz JOC verwendet werden welches im Rahmen einer Projektarbeit HV 2006 entwickelt wurde Der Java Online Compiler ist eine Entwicklungsumgebung f r Java Programme welche als Web Service ber jeden Web Browser aufgerufen und ausgef hrt werden kann Im Gegensatz zum normalen Entwicklungsumgebungen unterst tzt der Java Online Compiler nur das Bearbeiten Compilieren und Ausf hren von Java Programmen Im Online Compiler soll der JOC so erweitert werden dass eine bessere Entwicklung von Programmen erm glicht wird Dazu muss neben den Bearbeiten Compilieren und Ausf hren auch das Ausf hren eines Programms mit einem Debugger zur Fehl
122. kt HILFE 9 3 1 Voraussetzungen Voraussetzung f r den Online Compiler ist ein aktueller Browser mit aktiviertem JavaScript und aktivierten Cookies Getestet wurde der Online Compiler mit folgenden Browsern Internet Explorer 7 0 Firefox 2 0 Andere Browser werden nicht unterst tzt Man kann den Online Compiler aber auch auf eigene Verantwortung mit anderen Web Browsern aufrufen In die URL des Online Compilers muss dann der Parameter browsercheck no hinzugef gt werden http javock fh trier de 8080 oc index html browsercheck no Seite 137 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 9 3 2 Das Hauptfenster Wenn man in der Adresszeile seines Browsers die URL des Online Compilers OC http javock fh trier de 8080 oc index html eingibt oder den Online Compiler ber einen entsprechenden Link in Ilias http ilias fh trier de ausw hlt erscheint das Hauptfenster des OC EG 1 Online Compiler Mozilla Firefox 3 BR en Datei Bearbeiten Ansicht Chronik Lesezeichen Extras Hilfe gu 1 1 http localhost 8080 0c index html Online Compiler Login als Gast anmelden anmelden Fertig Abbildung 43 Anmeldung Dialog beim ersten Aufruf des Online Compilers Wenn man zum ersten Mal den Online Compiler aufruft muss man sich anmelden Dazu kann man entweder seinen Ilias Benutzernamen mit dem dazugeh rigen Passwort eingeben oder sich als Gast als Gast anmelden anmelden Wenn man
123. l_1 statt Beispiele Datenstrukturen Algorithmen Beispiel 1 angeben In den folgenden Tabellen werden alle vorhandenen Befehle beschrieben Parameter die kursiv geschrieben werden m ssen innerhalb des Befehls Tags angegeben werden lt befehll gt Parameter lt befehll gt Befehle zum An und Abmelden und zur Verbindungs Verwaltung Befehl Beschreibung Parameter R ckgabewert destroy session Trennt eine keine kein Verbindung und gibt alle Ressourcen der Verbindung sofort frei wird nur zum Test ben tigt open session Beginnt eine Client keine kein Session close session at end Beendet eine Client keine kein Session auch wenn ein Fehler aufgetreten ist close session Beendet eine Client keine kein Session login Anmeldung als name Name des Benutzers optional Name des Benutzers Benutzer password Passwort des Benutzers optional guest true falls man sich als Gast anmelden m chte optional autologin true falls zum Login die zuletzt eingegebenen Werte verwendet werden sollen optional Seite 72 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss Befehl Beschreibung Parameter R ckgabewert logout Abmelden als keine kein Benutzer upload result Liefert das Ergebnis keine Fehlermeldung falls des letzten Datei Upload Uploads zur ck fehlgeschlagen Befehle zur Verwaltung von Dateien Befehl Beschreibung
124. le changes liefert alle nderungen die seit dem letzten Aufruf des Befehls an den Dateien vorgenommen wurden Im Entwurf wurde dazu bereits drei Ereignisse festgelegt eine Datei oder ein Verzeichnis wurde erstellt f r solche Ereignisse wird zum Client lt file create gt gesendet In diesem XML Knoten sind alle Eigenschaften der Datei bzw des Verzeichnisses enthalten eine Datei oder ein Verzeichnis wurde ver ndert f r solche Ereignisse wird zum Client lt file change gt gesendet In diesem XML Knoten sind alle Eigenschaften der Datei bzw des Verzeichnisses enthalten eine Datei oder ein Verzeichnis wurde gel scht f r solche Ereignisse wird zum Client lt file delete gt gesendet Seite 75 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss Der Befehl request job changes liefert alle nderungen die seit dem letzten Aufruf des Befehls an den laufenden Job vorgenommen wurden Im Entwurf wurden dazu bereits f nf Ereignisse festgelegt ein Job wurde gestartet f r solche Ereignisse wird zum Client lt job started gt gesendet ein Job wurde beendet f r solche Ereignisse wird zum Client lt job finished gt gesendet der Debugger wurde angehalten f r solche Ereignisse wird zum Client lt job debugger waiting gt gesendet eine Fehlermeldung oder eine Warnung des aktuellen Jobs f r solche Ereignisse wird zum Client lt job result gt gesendet Ausgab
125. lient bearbeitet und um sie zu compilieren auszuf hren und Fehler zu suchen Debugger auf dem Server gespeichert wie schon im Java Online Compiler soll auch der Online Compiler als AJAX Anwendung entwickelt werden Das hei t im Gegensatz zu anderen Web Anwendungen werden vom Server bzw vom Servlet keine HTML Seiten generiert und einfach auf dem Client dargestellt sondern XML Antworten zu einem AJAX Client gesendet der diese auf der Webseite der Benutzerschnittstelle anzeigt Seite 13 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 4 1 1 Servlet Wie bereits erw hnt besteht der Online Compiler aus zwei Anwendungen einer Benutzerschnittstelle und dem Servlet W hrend die Benutzerschnittstelle die Aufgabe hat dem Anwender den Zugriff auf die Funktionen des Online Compilers zu erm glichen ist es die Aufgabe des Servlets diese Funktionen auszuf hren Die einzelnen Anforderungen die an das Servlet gestellt werden wurden bereits am Anfang vorgestellt Aufgaben des Servlets Verwalten der Quelltextdateien die von Anwendern erstellt wurden Verwalten von Beispielen und gegebenenfalls sp ter auch die Verwaltung von bungsaufgaben Verwalten von Benutzern unter anderem mit Hilfe von anderen Systemen Ilias Server Ilias Bereitstellen einer Schnittstelle f r Programmiersprachen um Programme zu erstellen Compilieren und Linken auszuf hren und wenn m glich zu debuggen bzw sie mit einem Debugger
126. lle Modell nderungen von Dateien und Beispiel Programmen _handleJobEvents Verarbeitet alle Modell nderungen von dem laufenden Job Seite 93 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 5 2 Multi Task Java Ziel dieses Kapitels ist die Beschreibung von Implementierungsdetails der MJVM Multi Task Java VM Neben diesem Kapitel steht auch noch eine ausf hrliche Inline Dokumentation in den Java Quelldateien Javadoc zur Verf gung Diese befindet sich auf der CD im Verzeichnis doc api MultiTaskJavaVM oder kann Online ber die URL http javock fh trier de 83080 oc mjvm api index html abgerufen werden 5 2 1 Datei bersicht Die Quelldateien der MJVM befinden sich im Verzeichnis source MultiTastJavaVM Die MJVM besteht aus folgenden Java Paketen Paketname Inhalt mjvm server io Klassen f r Ein und Ausgabe von Java Anwendungen die in einer MJVM ausgef hrt werden mjvm server process Klassen f r Java Anwendungen die in einer MJVM ausgef hrt werden mjvm server Hauptklassen f r eine MJVM Java Anwendung mjvm exceptions Paket welches die Exceptions der MJVM enth lt mjvm connector Klassen f r MJVM Clients mjvm connector process Klassen f r MJVM Clients mjvm connector demo Ein Programm zum Testen der MJVM Beispiel eines MJVM Clients java lang An die MJVM angepasste Klassen des java lang Paketes System Klassen java io An die MJVM angepasste Klassen des java io Pak
127. lt iostream gt nelude func h int main int argc char argv test Die Datei test cpp compilieren eine Fehlermeldung Linken fehlgeschlagen sollte angezeigt werden Zu Datei test cpp das Target func cpp mit der Option linken hinzuf gen und die Seite 113 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss Datei test cpp neu Compilieren keine Fehlermeldung erwartet 31 Programm test cpp ausf hren Ausgabe des Programmes sollte Test sein 6 2 2 4 Testfall 4 Beim vierten Testfall werden alle Schritte des dritten Testfalls mit C statt C wiederholt 6 2 2 5 Testfall 5 Im f nften Testfall wird gepr ft ob die Sicherheitsvorkehrungen durch AppArmor und den Java Security Manager f r den geforderten Schutz sorgen Dazu werden einige Java und C Programme ausgef hrt Test Programme public class SecurityTestl public static void main String args try Runtime getRuntime exec ps catch Exception eil e printStackTrace Das Programm SecurityTestl sollte mit einer Security Exception abgebrochen werden public class SecurityTest2 public static void main String args try PrintWriter output new PrintWriter new FileWriter test txt true output print Inhalt output close catch Exception eil e printStackTrace Das Programm SecurityTest2 sollte mit einer Security Exception abgebroc
128. lt und die folgende While Schleife ausgef hrt while true boolean newPosition parseResultForSuspend if isProcessTimeout gdbKilled isStopped return false synchronized this setDebuggerWaiting true for int i 0 i lt updateBreakpoints size i updateBreakpoints updateBreakpoints get i updateBreakpoints clear fireJobWaiting new DebugJobWaitingResult lastFile lastLine waitForRunning Am Anfang der Schleife wird die Methode parseResultForSuspend aufgerufen Diese Methode liest solange den Ausgabe Strom des GDB Prozesses bis der GDB eine Ausgabe erzeugt hat Der GDB gibt falls ein Befehl ausgef hrt wurde oder falls das C oder C Programm gestoppt wurde eine entsprechende Status Meldung aus die mit einem GDB abgeschlossen wird Dass hei t solange kein GDB im Ausgabe Strom des GDB Prozesses enthalten ist ist das C oder C Programm nicht gestoppt oder der GDB f hrt gerade einen Befehl aus Die Methode parseResultForSuspend wartet also solange bis der GDB entweder im Zustand Debugger wartet ist oder das C oder C Programm beendet ist Zustand Programm beendet Mit der folgenden if Anweisung wird berpr ft ob der aktuelle Debugger Zustand Programm beendet ist Wenn dies der Fall ist wird die Schleife und das Debuggen beendet Falls der Zustand Debugger wartet ist werden zun chst Seite 53 von 156 Eine Webbasierte Entwi
129. m Bearbeiten von Programm Kommandozeilenargumenten ffnet sich ein Dialog in dem die Argumente eingegeben werden k nnen Die verschiedenen Kommandozeilenargumente m ssen durch Leerzeichen voneinander getrennt werden Einzelne Kommandozeilenargumente k nnen auch in Anf hrungsstrichen geschrieben werden Beispiele f r Kommandozeilenargumente Ein Argument mit Leerzeichen 1 Ein Argument mit Leerzeichen ArgumentOhneLeerzeichenl ArgumentOhneLeerzeichen2 ArgumentO hneLeerzeichen3 Online Compiler Mozilla Firefox Datei Bearbeiten Ansicht Chronik Lesezeichen Extras Hilfe rr E 7 7 nttpsnocathost 8080 0c index htmi r Googie Online Compiler 2 0 Beta NEUE DATEI ABMELDEN Angemeldet als Gast DOKUMENTATION HILFE E Beispiele bungen 8808 E BDatenstrukturen Algorithmen 8808 B Blandausche Symbole 8808 _ Abstrakte Datentypen Algebraische ere H Bspezifikationen D Blntset 83808 O Blintset java O BlntsetTest java noch 50 Dateien brig public class IntsetTest public static void main String args Intset menge boolean leereMenge menge Intset empty menge Intset insert menge 1 menge Intset insert menge 3 menge Intset insert menge 5 menge Intset insert menge 4 P wo won n B wne nen menge 4 Kommandozeilenargumente von IntsetTest java menge 2 menge 4 Geben Sie die Kommandozeilenargumente durch Leerzeichen menge 6 getrennt f r das
130. m Verzeichnis etc nicht gelesen werden k nnen Um diese Funktionen f r Anwender Programme zu sperren werden zwei verschiedene L sungen verwendet Der Java Security Manager f r Java Programme Sun 4 Klasse onlinecompiler os security JavaSecurityManager Das Linux Programm AppArmor f r C und C Programme Novell 1 Klasse onlinecompiler os security AppArmor Um den Java Security Manager verwenden zu k nnen muss eine sogenannte Policy Datei erstellt werden In dieser Datei wird angegeben welche Operationen f r Java Programme erlaubt sind Die Methode saveProfile der Klasse JavaSecurityManager erzeugt die Policy Datei f r einen Anwender private static String saveProfile User user throws IOException String policyFile user getUserDirectory FileTools sep POLICY_FILE FileTools saveTextFile policyFile grant n 8 permission java io FilePermission user getRoot getAbsoluteFileName FileTools getDirectorySeperator treadin permission java util PropertyPermission read n permission java net SocketPermission n Sa return policyFile Die Funktionsweise von AppArmor ist fast identisch zu der Funktionsweise des Java Security Managers Mit einer Policy Datei wird festgelegt welche Operationen f r ein Programm erlaubt sind Im Gegensatz zum Java Security Manager wird allerdings f r jedes Programm eine eigene Policy Datei ben
131. m Web Browser angezeigt wird Bei normalen Desktop Anwendungen hat der Benutzer oft verschiedene M glichkeiten die Benutzerschnittstelle an den vorhandenen Platz anzupassen Teile eines Fensters ausblenden oder als eigenst ndiges Fenster anzeigen Teile eines Fensters in verschiedenen Registerkarten anzeigen oder teilweise sogar die Gr e einzelner Elemente mit der Maus ver ndern In einem Web Browser Seite 32 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss stehen diese Funktionen normalerweise nicht zur Verf gung Um das Arbeiten mit dem Online Compiler trotzdem so einfach wie m glich zu machen sollten einige dieser Funktionen f r das Webinterface implementiert werden Dazu z hlen Das Ver ndern der Gr e von einzelnen Elementen der Benutzerschnittstelle Dies ist zum Beispiel sinnvoll wenn man eine gro e Quelltext Datei bearbeiten m chte In solch einem Fall kann der Benutzer einfach die Anzeige der Editor Komponente mit der Maus vergr ern Das Ein und Ausblenden einzelner Elemente durch Verwendung von Tabs Dadurch m ssen nicht alle Informationen gleichzeitig angezeigt werden und der Anwender kann selbst bestimmen was gerade angezeigt wird Zum Beispiel kann man beim Ausf hren eines Programms die Ein und Ausgabe einblenden und die Anzeige vom Debugger sowie die Anzeige der Fehlermeldungen und Warnungen ausblenden 4 1 2 2 Funktionen der Benutzerschnittstelle Im Kapitel Anforderungen und Zi
132. meldungen des Compilers analysiert und zum Client gesendet Um ein ausf hrbares Programm zu erzeugen muss nach dem Compilieren noch der sogenannte Linker aufgerufen werden Wie bereits oben erw hnt wird dazu die Methode buildFile verwendet protected boolean buildFile throws IOException InterruptedException OnlineCompilerException Vector lt CFile gt targets new Vector lt CFile gt for int i 0 i lt cfile getTargetCount i if cfile getTarget 1 getLink targets add CFile cfile getTarget 1 getTarget String cmd new String 3 targets size cmd 0 cfile instanceof CPPFile g qgcec for int i 0 i lt targets size i cmd i 1 targets get i getAbsoluteDirectory FileTools sep targets get i getTargetLinkFileName cmd cmd length 2 0 cmd cmd length 1 cfile getBinaryName setProcess cmd cfile getAbsoluteDirectory CLanguage processTimeout CLanguage ioCharset getProcess waitFor if isProcessTimeout true throw new TimeoutException parseGCCResult if getProcess exitValue 0 throw new OnlineCompilerException Linker failed else cfile setRebuild cfile sandbox return true Die Funktion buildFile hnelt der Funktion compileFile zuerst wird ein Prozess der Linker gestartet dann auf dessen Ende gewartet und zum Schluss Fehlermeldungen mit der Funktion parseGCCResult zum Cl
133. ment 4 1 handleEvent A 4 Ereignis Handler OCGUlEventloinPoint OCGUlEventloinPoint A 3 Ereignis Handler A 5 Ereignis Handler Object 1 OCGUlEvent OCGUIEventSourceConne ctor Abbildung 33 Kollaborationsdiagramm Ereignisbehandlung Webinterface A 6 Ereignis Handler 2 handleEvent Seite 84 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 5 1 2 2 4 Quelltext Editor Eine der wichtigsten Komponenten der grafischen Benutzeroberfl che ist der Quelltext Editor Eine Komponente zum Eingeben und Bearbeiten von Quelltextdateien Neben den Bearbeiten von Dateien m ssen aber noch mehr Funktionen unterst tzt werden Dazu z hlen das Hinzuf gen von Debugger Haltepunkten sowie das Hervorheben von Elementen der jeweiligen Programmiersprache wie zum Beispiel Schl sselw rter Syntax Highlighting Das einzige HTML Element welches das Bearbeiten von Texten unterst tzt ist das Textarea Element Dies hat aber den Nachteil das man es nicht um Funktionen wie Hinzuf gen von Debugger Haltepunkten erweitern kann Mit dem Textarea Element kann man nur Text bearbeiten Es ist daher ungeeignet f r die Editor Komponente der Online Compiler Benutzerschnittstelle Von einigen Web Browsern insbesondere neueren Versionen wird aber seit einigen Jahren eine weitere M glichkeit unterst tzt mit dem man Texte innerhalb eines HTML Dokumentes bearbeiten kann der sogenannte MIDAS Editor Mozilla 1 Der MIDA
134. n Abbildung 12 Targets und Dateien Um berall das selbe Konzept zu verwenden werden Targets auch bei Programmiersprachen verwendet die keinen Linker verwenden Dass hei t auch zu Java und C Dateien k nnen Targets angegeben werden Diese werden dann nicht zu einem Programm gelinkt sondern lediglich compiliert Seite 22 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 4 1 1 4 Nutzerverwaltung In den ersten Abschnitten wurden Dateien und Verzeichnisse und deren Verarbeitung durch den Online Compiler behandelt Neben der Dateiverwaltung ist eine weitere wichtige Funktion des Online Compilers die Verwaltung von Benutzern Unter Verwaltung von Benutzern versteht man das An und Abmelden von Benutzern ggf durch berpr fung von Passwort und Name sowie das Speichern der Quelltextdateien der einzelnen Nutzer Wie bereits im Kapitel Anforderungen und Konzept beschrieben gibt es drei verschiedene Arten von Benutzern Benutzer die ber einen Ilias Server authentifiziert werden Benutzer die administrative Aufgaben haben Dazu z hlt zum Beispiel das Verwalten der Programm Beispiele und ggf der bungsaufgaben Gast Benutzer die sich ohne Passwort anmelden Bei solchen Benutzern werden keine Quelltextdateien gespeichert Dass hei t nach dem Abmelden werden alle Daten des Benutzer gel scht lt lt interface gt gt File Object Listener from onlinecom piler source User fr
135. n einem Web Browser in dem der Online Compiler aufgerufen wurde durchgef hrt Schritte im Testfall 3 1 10 11 12 13 14 15 16 17 Neue C Datei test cpp erstellen und Datei test cpp ffnen Inhalt der Datei include lt iostream gt int main Ine i p std cout lt lt Eingabe lt lt std endl std cin gt gt 1 std cout lt lt Ausgabe lt lt i lt lt std endl Datei test cpp compilieren automatisches ffnen der Probleme Registerkarte kein Fehler vom Compiler erwartet Ausgabe der Statusmeldungen Compilierung erfolgreich und Programm wurde erstellt Datei test cpp schlie en In der Statusmeldung Compilierung erfolgreich auf test cpp klicken die Datei test cpp sollte ge ffnet werden Fehlermeldungen l schen Statusmeldungen sollten entfernt werden Datei test cpp ausf hren automatisches ffnen der Konsole Registerkarte Ausgabe vom Prozess Eingabe Im Eingabefeld 1 eingeben Ausgabe vom Prozess Ausgabe 1 Prozess erneut starten und Ausf hrung abbrechen Prozess abbrechen klicken Ausgabe des Prozesses l schen Ausgabe l schen klicken Registerkarte Probleme ffnen eine Fehlermeldung Prozess durch Benutzer abgebrochen sollte angezeigt werden Datei bearbeiten und einen Fehler einf gen Datei compilieren in der Probleme Registerkarte sollte eine Compiler Fehl
136. n Testfall eine Reihe von Schritten in einem Web Browser in dem der Online Compiler aufgerufen wurde durchgef hrt Schritte im Testfall 2 1 NED Im Men DOKUMENTATION auf Durchsuchen klicken Der Suchen Dialog sollte ge ffnet werden System in das Suchfeld eingeben und auf Suchen klicken Popup Fenster mit dem Suchergebnis Suche in Java Dokumentation sollte erscheinen Suche mit Lisp C C und C wiederholen Im Men HILFE auf Hilfe ffnen klicken ein Popup Fenster mit der Online Hilfe des Online Compilers sollte ge ffnet werden Im Men HILFE auf Informationen ber den Online Compiler klicken im selben Popup Fenster indem vorher die Online Hilfe ge ffnet wurde sollte eine Informations Seite ge ffnet werden Am unteren Fensterrand auf english klicken die Texte in der Benutzerschnittstelle sollten auf englisch angezeigt werden Am unteren Fensterrand auf AH klicken die Texte in der Benutzerschnittstelle sollten auf chinesisch angezeigt werden Am unteren Fensterrand auf deutsch klicken die Texte in der Benutzerschnittstelle sollten auf deutsch angezeigt werden Seite 111 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 6 2 2 3 Testfall 3 Der dritte Testfall ist nahezu identisch mit dem ersten Testfall der Test wird allerdings mit C statt Java durchgef hrt Dazu werden wie bei den vorherigen Testf llen eine Reihe von Schritten i
137. n ist die Entwicklung des Webanwendung aufwendig da sehr viele HTML Seiten erstellen werden m ssen wobei sich leicht Fehler einschleichen k nnen Zum anderen ist das Verhalten des Servers aus Sicht des Anwenders statisch Anfragen generieren HTML Seiten die dann komplett im Browser neu geladen werden siehe Abbildung 1 Benutzeraktivit t Benutzeraktivit t Benutzeraktivit t un ena unbemsqnusjeQ Daten bertragung Daten bertragung Verarbeitung durch das Verarbeitung durch das ystem Abbildung 1 klassisches Modell einer Webanwendung Benutzeraktivit t erzeugt Anfragen an einen Server W hrend der Server die Anfragen bearbeitet muss der Client Webbrowser warten bis er eine Antwort HTML Seite vom Server bekommt Dieses Verhalten ist f r Seiten mit statischen Inhalten zwar ausreichend f r eine komplexere Anwendung wie dem Online Compiler ist dieses klassische Modell hingegen weniger geeignet Seite 7 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss Schlie lich soll der Online Compiler eine vollst ndige Entwicklungsumgebung f r Programme sein Also eine komplexere Webanwendung mit vielen sich ndernden Inhalten und Funktionen sodass viele Anfragen auf dem Server n tig sind Mit dem klassischen Konzept w rde dies bedeuten dass bei jeder Anfrage bei jeder Aktion des Anwenders die gesamte Seite das Webinterface des OC neu geladen werden muss Im Unterschied z
138. ne Compilers dem Java Online Compiler So konnte der Rechner javock wie schon beim Java Online Compiler keinen der Lasttestf lle bestehen Allerdings entsprach die Auslastung des javock Rechners w hrend des Tests ungef hr der Auslastung beim Test des Java Online Compilers Dass hei t obwohl der Online Compiler eine bei weitem komplexere Anwendung als der Java Online Compiler ist ist die Auslastung ungef hr gleich geblieben Der Lasttest hat aber auch gezeigt das die Geschwindigkeit durch den Einsatz der MJVM Multi Task Java VM stark erh ht werden kann Die Ergebnisse der Lasttests der MJVM werden in der folgenden Tabelle aufgelistet Test ben tigte Zeit in ms 50 Java Programme nacheinander in jeweils einer eigenen JVM ausf hren 6520 50 Java Programme nacheinander in einer MJVM ausf hren 840 50 Java Programme parallel in jeweils einer eigenen JVM ausf hren 5034 50 Java Programme parallel in einer eigenen MJVM ausf hren 885 Die MJVM ist also eine M glichkeit die Ausf hrung von Java Programmen deutlich zu beschleunigen Der Nachteil dieser L sung ist aber dass sie nur f r Java Programme genutzt werden kann C und C Programme beziehungsweise deren Ausf hrung k nnen mit der MJVM nicht beschleunigt werden Eine weitere L sung des Geschwindigkeits und Lastproblems ist wie sich auch schon beim Java Online Compiler gezeigt hat der Einsatz einer besseren Hardware So wurde auf
139. ne Compilers Debugger Haltepunkte werden einige Pixel zu gro angezeigt Unter den Men punkten ist eine 2 Pixel gro e Linie sichtbar Nach dem ffnen einer Datei im Quelltext Editor wurde die dritte Textzeile in der Farbe Wei dargestellt Erst wenn man den Mauszeiger ber den Editor bewegt hat wurde die Zeile korrekt dargestellt Dieses Problem konnte behoben werden indem direkt nach dem ffnen einer Datei im Editor in der HTML Seite ein DIV Element erzeugt und sofort wieder gel scht wird Der Internet Explorer wird dadurch veranlasst die Elemente der HTML Seite noch einmal zu zeichnen wodurch der Darstellungsfehler in der dritten Zeile behoben wird Wenn man den MIDAS Editor mit dem JavaScript Befehl designMode aktiviert wird im Editor der Online Compiler selbst HTML Seite index html geladen Obwohl designMode der offizielle Weg zum aktivieren des MIDAS Editors im Internet Explorer ist beseitigt man den Fehler dadurch das man im Internet Explorer statt des designMode Befehles contentEditable verwendet Ein weiterer Fehler betrifft das Hochladen von Dateien zum Online Compiler Servlet Wenn man eine Datei hochl dt kommt im Servlet zwar eine Datei an aber leider wird kein Inhalt vom Internet Explorer mitgeschickt Dieses Problem tritt nur in der Version 7 0 des Internet Explorers auf sobald man ein Upload Formular mit JavaScript erzeugt Mit einer statischen HTML Datei in der man eine Datei zum Hochladen aus
140. nen Insite Dialog zum Ausw hlen einer Datei Seite 33 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss lokale Datei ffnen Bitte w hlen Sie eine Datei aus die zum Server hochgeladen werden soll Durchsuchen Datei hochladen Abbrechen O Fehler und Warnungen Abbildung 20 Dialog zum Ausw hlen einer Datei zum Hochladen Die gleichen Funktionen k nnte man auch mit normalen Popup Fenster erreichen Popup Fenster werden von Anwendern aber oft als st rend empfunden Werbung und werden aus diesem Grund oftmals auch von Browsern blockiert 4 1 2 3 Layout Nachdem in den ersten beiden Abschnitten auf die Inhalte und Funktionen eingegangen wurde und der Aufbau der Benutzerschnittstelle festgelegt wurde wird in diesem Kapitel das konkrete Layout vorgestellt bzw festgelegt Das Layout der Benutzerschnittstelle orientiert sich stark an dem der vorherigen Version Java Online Compiler Seite 34 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss Online Compiler 2 0 Beta NEUE DATEI ABMELDEN Angemeldet als Gast DOKUMENTATION HILFE D Beispiele bungen 2808 E SE E BDatenstrukturen Algorithmen 8098 ia EE ei D BlLandausche Symbole 2808 E ze BR p Abstrakte Datentypen Algebraische u pon ee SEREIETNESSENENBENG A 28098 16 H Spezifikationen 3 _ oz ERS l D Bintset 89808 17 Intset menge new Intset eg O Bintset java 20808 E 8 menge daten new int N 19 menge a
141. nis test erstellen 2 Neue Datei test java im Verzeichnis test erstellen 3 Datei test java ffnen 4 Verzeichnis test l schen die Datei test java sollte automatisch geschlossen werden 5 Datei test java erstellen 6 Datei test java erstellen Fehlermeldung erwartet 7 Datei test2 java erstellen 8 Datei test2 java in test java und test class umbenennen jeweils eine Fehlermeldung erwartet 9 ein Beispiel aus dem Beispiel Ordner ffnen Dateien des Beispiels sollten im Dateibaum angezeigt werden 10 Verzeichnis mit Dateien erstellen 11 Verzeichnis als JAR und als XML Datei herunterladen 12 Verzeichnis l schen 13 heruntergeladene Dateien hochladen alle Dateien sollten wiederhergestellt werden 14 Benutzer abmelden die Dateien im Dateibaum sollten daraufhin geschlossen werden und ein Dialog zum Eingeben von Benutzername und Passwort angezeigt werden 15 mit einem g ltigen Ilias Benutzernamen und falschem Passwort anmelden Fehlermeldung erwartet 16 mit einem g ltigen Ilias Benutzernamen mit Passwort anmelden Seite 117 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 6 2 3 Testbericht 6 2 3 1 gefundene Fehler W hrend des Tests wurden einige Fehler gefunden Nach Korrektur dieser wurde der Test wiederholt ohne dass ein weiterer Fehler aufgetreten ist Die gefundenen Fehler waren Fehler im Testfall 1 Bei Kommandozeilen Argumenten wurden die Leerzeichen zwischen den Argumenten auch als e
142. nistrator User dient zum Speichern der Beispiele Da alle Benutzer des Online Compilers auf die Beispiele zugreifen sollen d rfen AdminUser Objekte nicht gel scht werden Aus diesem Grund ist die Methode canDestroy in der Klasse AdminUser berschrieben protected synchronized boolean canDestroy return false Die Freigabe der Ressourcen eines User Objektes erfolgt durch die Methode delete der Klasse User public synchronized void delete if isDeleted return deleted true removeUser this if storeFiles saveFiles root delete FileTools deleteDirectory root getAbsoluteFileName Mit dem Befehl delete des Objektes root werden alle Quelltextdateien und Verzeichnisse die vom User erstellt wurden gel scht Vor dem L schen werden allerdings au er bei G sten bzw der Klasse TempUser die Dateien und deren Konfiguration in einer Datei gespeichert damit sie beim n chsten Anmelden des Users wieder verwendet werden k nnen Die Daten aller User werden in einer Datei mit dem Namen files xml gespeichert Zum Speichern dieser Dateien werden die gleichen Funktionen verwendet die auch zum Download von XML Dateien verwendet werden 5 1 1 3 71 Ereignisse Ereignisse sind zum Beispiel das Erstellen oder L schen einer Datei Tritt in einem User Objekt ein Ereignis auf m ssen alle Sessions die an das User Objekt angemeldet sind benachrichtigt werden Dazu wird zum Beispiel die Methode fireObjectCreated
143. nkt zu dem Online Compiler hinzuzuf gen Erstellen und Verwalten von Dateien Zum Entwickeln von Programmen geh rt nat rlich auch das Erstellen und Bearbeiten von Dateien und Verzeichnissen Alle Dateien und Verzeichnisse die von den Anwendern des Online Compilers erstellt werden sollen auf dem Server gespeichert werden Auf diese Weise kann jeder Anwender von jedem Rechner mit einem Webbrowser direkt auf alle seine Dateien zugreifen Um das Programmieren zu erleichtern soll au erdem im Quelltext Editor eine Syntax Hervorhebung Syntax Highlight erfolgen weiter Anforderungen Dokumentationen von Programmiersprachen sollen ber den Online Compiler ge ffnet und durchsucht werden k nnen Der Online Compiler soll verschiedene Sprachen unterst tzen deutsch englisch und teilweise chinesisch 3 2 Integration in Ilias Die Hauptaufgabe des Online Compilers soll der Einsatz im E Learning Bereich sein Deshalb m ssen M glichkeiten geschaffen werden den Online Compiler von dem E Learning System Ilias http Ailias fh trier de aufzurufen Insbesondere soll der Online Compiler in die Online Kurse Einf hrung in die Programmierung und Datenstrukturen Algorithmen integriert werden Dazu sind folgende Funktionen vorgesehen Integration aller Programm Beispiele Java Quelltext Dateien der Online Kurse im Online Compiler Um das Verwalten und Bearbeiten von Programm Beispielen so einfach wie m glich zu Seite 9
144. ntwurf erstellt wurde erfolgt die Implementierung der Anwendungen wie im folgenden Abschnitt beschrieben Da das komplette System Online Compiler aus zwei Anwendungen einer Client und einer Serveranwendung bzw einem Webinterface und einem Servlet besteht werden die Implementierungen dieser beiden Anwendungen jeweils in einem eigenen Abschnitt behandelt Der dritte Abschnitt befasst sich mit der Implementierung der Multi Task Java Anwendung MJVM Da die gesamte Anwendung mehr als 23000 Zeilen Quellcode ohne Kommentare und Leerzeilen enth lt werden aus Platzgr nden hier nur die wichtigsten und entscheidenden Elemente der Implementierung behandelt Eine ausf hrliche Dokumentation befindet sich ebenfalls in den Quelltexten im CD Verzeichnis source sowie im Verzeichnis doc api Javadoc Seite 42 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 5 1 Online Compiler Wie bereits oben erw hnt besteht der Online Compiler aus zwei separaten Anwendungen dem Client und dem Servlet Beide werden auch getrennt voneinander betrachtet Der erste Abschnitt besch ftigt sich mit der Implementierung des Servlets w hrend im zweiten Abschnitt auf die Implementierung der Benutzerschnittstelle dem Client eingegangen wird 5 1 1 Das Servlet Ziel dieses Kapitels ist die Beschreibung von Implementierungsdetails des Servlets Online Compiler Das Servlet ist eine Java Anwendung die von einem sogenannten Servlet Container dem Tomc
145. nwendungen zum Beispiel der Online Compiler auf eine laufende MJVM zugreifen k nnen Das folgende UML Diagramm zeigt die Klassen des Server Paketes ec M JVMVirtualMachine M JVM Proces s MJVM Thread from mvm server from mj vm server process from mj vm server process Abbildung 25 Klassendiagramm MJVM Server Die Klasse MJVMVirtualMachine enth lt das eigentliche Java Programm welches die MJVM darstellt Objekte der Klasse MJVMProcess sind die Java Programme die in der MJVM ausgef hrt werden Da die Java Programme parallel ausgef hrt werden sollen wird f r jedes Java Programm ein eigener Thread ben tigt die Klasse MJVMThread Seite 40 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss Das n chste Klassendiagramm zeigt die Klassen die von einer Client Anwendung zum Beispiel dem Online Compiler zum Zugriff auf eine MJVM ben tigt werden M JVM Proces s Connector connector M JVM Connector from mjvm connector process from mjvm connecton Abbildung 26 Klassendiagramm MJVM Client Die Klasse MJVMProcessConnector ist die Schnittstelle zu einer MJVM Anwendung Die Klasse MJVMConnector ist die Schnittstelle zu einer einzelnen Java Anwendung welche in einer MJVM Anwendung ausgef hrt wird Seite 41 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 5 Implementierung Nachdem wie im vorherigen Kapitel beschrieben das Design festgelegt und ein E
146. nzahlElemente 0 A noch 50 Doten brig 20 return menge 1 d EI A 23 public static Intset Mrt rntset menge int ele e 24 d 25 if isEmpty menge z x menge daten 0 element Pei menge anzahlElemente 29 30 else 2 g D SS Isi E Fehler und Warnungen E Landausche Symbole Syntax error on tokens they can be merge to form D Zeile 33 30 Intset java D Abstrakte Datentypen Algebraische Spezifikationen D Intset Bo o E The method binsuch Intset int int int is undefined Zeile 78 17 Intset java Grundlegende Dati n for the type Intset Darstellung von M The method shiftleft Intset int lefined for the Zeile 88 1 Intset java Sortierverfahren o amp type Intset jav Graphen und Graphenalgorithmen E The method binsuch Intset int int int is Zeile 108 16 Intset java Umgang mit gro en Datenmengen Externes Suchen und undefined for the type Intset Sortieren En nn Sn TEEN Entwurf von Algorithmen Probleme a Konsole Fehlersuche 2007 Fachhochschule Trier deutsch english 8 Abbildung 21 Bildschirmfoto Online Compiler Beschreibung der einzelnen Komponenten 1 SLO oM e E gt Men zum Erstellen von Dateien und Verzeichnissen Men NEUE DATEI An und Abmelden von Nutzern Men ABMELDEN ffnen der Programmierdokumentation Men DOKUMENTATION und zum ffnen der Hilfe Men HILFE Dateibaum indem alle Dateien und Verzeichnisse dargestellt
147. ode unsecureProcess der Klasse AppArmor Diese Methode muss beim L schen eines C oder C Programmes aufgerufen werden public synchronized static void unsecureProcess User user String filename Server debugMessage Delete AppArmor Sandbox for filename try Seite 62 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss Runtime getRuntime exec new Process p remove String apparmor_parser saveProfile user filename p waitFor catch Exception eil Server errorMessage e Die Methode erzeugt zun chst die Policy Datei des C oder C Programmes und ruft anschlie end den apparmor_parser Befehl mit der Policy Datei und dem Parameter remove zum entfernen des AppArmor Schutzes auf Seite 63 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 5 1 1 3 7 User und Client Sessions Die Klasse User und die von ihr abgeleiteten Klassen dienen zum Speichern aller Informationen eines Users des Online Compilers Im Gegensatz zum Java Online Compiler wo f r jeden Client ein eigener User angelegt wurde m ssen beim Online Compiler die User Objekte und die Client Verbindungen Sessions getrennt werden Eine Session kann nacheinander verschiedenen Usern zugeordnet werden da sich der Benutzer an und abmelden kann ohne die Verbindung zu trennen Schlie en des Webbrowsers Mehrere Client Verbindungen Sessions k nnen dem selben User zugewiesen
148. om onlinecom piler usen listener RootFolder from onlinecom piler source Ilias User AdminUser from onlinecom piler ilias from onlinecom piler usen TempUser from onlinecom piler usen Abbildung 13 Klassenhierarchie Online Compiler User Basis Klasse aller Benutzer Klassen ist User Die abgeleiteten Klassen JliasUser AdminUser und TempUser stellen die drei verschiedenen Benutzer Typen dar Die Unterschiede zwischen den einzelnen Benutzer Typen wurden bereits im Kapitel Anforderungen und Konzept vorgestellt Seite 23 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss JliasUser Passwort und Benutzername werden mit einem Ilias Server berpr ft Authentifizierung ber einen Ilias Server Admin ser Passwort und Benutzername des Administrators TempUser Anmeldung ohne Passwort und Benutzername G ste wurde bereits im Java Online Compiler verwendet Im obigen UML Diagramm ist die Schnittstelle FileObjectListener enthalten Diese Schnittstelle ist Basis Klasse f r Listener Objekte An User Objekten kann man also Listener Objekte Entwurfsmuster Observer anmelden Die Listener Objekte werden bei Ereignissen die Dateien des Nutzers betreffen informiert Das User Objekt ist also nicht das eigentliche Modell sondern dessen Dateien und Verzeichnisse Die Dateien und Verzeichnisse k nnen ber die Beziehung root erreicht werden siehe Kapitel Dateiverwaltung Seite 24 von
149. piler wurde das MVC Entwurfsmuster dadurch implementiert dass bei jedem Datenaustausch alle Daten des Modells z B vorhandene Dateien zum Client bertragen wurden Dies ist zwar einfach zu Implementieren hat aber den Nachteil das bei jedem Datenaustausch viele Daten bertragen werden Eine bessere L sung ist das bei jeder Modell nderung nur diese nderungen zum Client bertragen werden Modell nderungen des Servlets k nnen Dateien betreffen und laufende Jobs Modell nderungen oder Modellereignisse neue Datei oder neues Verzeichnis wurde erstellt Datei oder Verzeichnis wurde ge ndert Datei oder Verzeichnis wurde gel scht Job wurde gestartet Job wurde beendet Debugger wartet Programm welches debuggt wird ist an einem Haltepunkt stehen geblieben neue Fehlermeldungen oder Warnung eines Jobs Ausgabe eines laufenden Programmes Die Ereignisse einfach zu bertragen ist allerdings nicht ausreichend Zum einen d rfen keine Ereignisse verloren gehen zum anderen darf kein Ereignis mehr als einmal zum Client bertragen werden Dieses Problem kann durch ein so genanntes Fenster gel st werden Dazu muss sich das Servlet merken welche Modellereignisse bereits gesendet wurden Fenster Der Client muss bei jeder Anfrage senden welche Modellereignisse schon empfangen wurden Das Servlet darf dann nur Ereignisse senden die der Client nicht empfangen hat Ein weiteres Problem ergibt sich aus der Beschaffenheit d
150. pilers Die Benutzerschnittstelle eines Servlets wird normalerweise als Webseite also in Form von HTML Dokumenten realisiert ber diese Webseite sollen Anwender die M glichkeit haben Befehle zum Servlet zu senden und sich deren Ergebnisse anzuzeigen Dadurch dass die Benutzerschnittstelle als Webseite in einem Web Browser angezeigt werden soll m ssen einige Einschr nkungen ber cksichtigt werden die es bei normalen grafischen Benutzerschnittstellen nicht gibt Auf diese Einschr nkungen wird im Laufe dieses Kapitels n her eingegangen 4 1 2 1 Bestandteile der Benutzerschnittstelle Die Informationen und Daten die in der grafischen Benutzerschnittstelle des Online Compilers dargestellt werden wurden bereits im Kapitel Anforderungen und Konzept festgelegt Dazu z hlen Ein Editor mit dem Quelltextdateien von Programmen angezeigt und bearbeitet werden k nnen Eine Komponente in der Dateien und Verzeichnisse angezeigt und verwaltet L schen Umbenennen Erstellen usw werden k nnen Eine Komponente in der vorhandene Beispielprogramme und ggf bungsaufgaben angezeigt werden Eine Komponente in der Fehlermeldungen und Warnungen zum Beispiel von Compiler Programmen angezeigt werden Eine Komponente in der die Ein und Ausgabe von Programmen eingegeben beziehungsweise angezeigt wird Eine Komponente in der Informationen zu einem laufenden Debugger Programm angezeigt werden Dazu z hlen die aktuelle
151. plette Funktionalit t befindet sich auf einem Webserver der die Webseiten generiert die dann auf dem Client angezeigt werden Bei einer Ajax Anwendung wird ein Teil der Arbeit vom Client selbst ausgef hrt Mithilfe der Programmiersprache JavaScript kann man in Webseiten HTML Dokumente Programme integrieren die dann auf den Clients die die Webseiten anzeigen ausgef hrt werden 5 1 2 2 1 Dynamisches HTML Wie bereits mehrfach erw hnt wurde muss der Client XML Antworten des Servlets verarbeiten und ggf die Benutzerschnittstelle aktualisieren So muss zum Beispiel eine Compiler Fehlermeldung die der Client vom Servlet empfangen hat in die entsprechende Komponente der Benutzerschnittstelle angezeigt werden Da die Benutzerschnittstelle ein HTML Dokument ist muss dazu der Inhalt des Dokuments ver ndert werden Dazu wird JavaScript ben tigt JavaScript bietet grunds tzlich zwei M glichkeiten ein HTML Dokument zu ver ndern Ersetzen von HTML Code mit der JavaScript Funktion innerHTML Ver ndern von HTML Code durch Manipulation des sogenannten DOM Document Object Modell einer Programmierschnittstelle zum Zugriff auf ein HTML Dokument Bei der ersten Methode mit der JavaScript Funktion innerHTML kann man Teile eines HTML Dokumentes durch anderen HTML Code ersetzen Ein Vorteil dieser Methode liegt in dessen Einfachheit Um den Inhalt einer HTML Seite durch einen anderen Inhalt zu ersetzen muss man nur den folgenden JavaScri
152. pt Befehl ausf hren document body innerHTML lt hl gt Hallo Welt lt h1 gt Durch den Befehl wird im Web Browser der Text Hallo Welt angezeigt Ein weiterer Vorteil der Methode ist die Geschwindigkeit Vor allem der Internet Explorer hat mit der zweiten Methode Probleme so das teilweise zumindest bei lteren Versionen des Internet Explorers die erste Methode mit innerHTML um den Faktor 100 schneller ausgef hrt wird als die zweite Methode Koch 2006 innerHTML hat aber auch Nachteile so kann man zwar einfach HTML Code ersetzten ein Zugriff auf einzelne HTML Elemente und dessen Attribute ist aber nicht m glich So kann man zum Seite 79 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss Beispiel die Farbe eines HTML Elementes nur dadurch ndern dass man den kompletten HTML Code ersetzt DOM Document Object Modell ist eine Datenstruktur ein Baum in der alle Elemente eines HTML Dokumentes als JavaScript Objekte gespeichert sind Auf die Objekte und deren Attribute kann man mit JavaScript zugreifen Au erdem kann man die Datenstruktur ver ndern und auf diese Weise HTML Elemente hinzuf gen l schen oder verschieben Der gro e Vorteil dieser Methode liegt darin dass man direkten Zugriff auf alle Eigenschaften und Elemente eines HTML Dokumentes hat und das alle HTML Elemente auch JavaScript Objekte sind Man kann dadurch JavaScript Programme entwickeln die Programmen in objektorientierten Programmierspr
153. r die Ein und Ausgabe nicht die sonst blichen Datenstr me der System Klasse verwenden sondern muss f r jede Java Anwendung bzw jedes MJVMProcess Objekt eigene Ein und Ausgabestr me verwenden Das wichtigste einer Java Anwendung die in einer MJVM ausgef hrt werden ist ihr eigener Thread Klasse MJVMThread Damit in einer Java VM Virtuall Machine mehrere Java Anwendungen parallel ausgef hrt werden muss f r jede Anwendung ein eigener Thread verwendet werden Seite 99 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss Das gr te Problem welches bei der Implementierung der MJVM ber cksichtigt werden muss ist das die Java Programme unabh ngig voneinander laufen m ssen Dass hei t es darf zum Beispiel nicht m glich sein das ein Java Programm den Thread eines anderen Java Programms stoppt Aus diesem Grunde sind f r jedes Java Programm oder jedes MJVMProcess Objekt folgende Dinge notwendig wie oben bereits erw hnt eigene Ein und Ausgabe Str me eine eigene Thread Gruppe Klasse MJVMThreadGroup Threads werden in Java in Gruppen zusammengefasst Ein Thread darf nur auf Threads zugreifen die sich in der gleichen Gruppe befinden Normalerweise laufen alle Threads einer JVM in einer Gruppe da es ja auch nur ein Java Programm gibt welches ausgef hrt wird Bei der MJVM wird hingegen f r jedes Java Programm eine eigene Thread Gruppe ben tigt Auf diese Weise kann man nicht auf Threads zugreifen die zu einer an
154. ramm erzeugt Seite 148 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 9 3 9 Programme ausf hren Mit dem Online Compiler k nnen Java C und C Programme ausgef hrt werden Zum Starten eines Programmes reicht es aus auf das Symbol zu klicken Man kann aber auch eine Datei welches das auszuf hrende Programm enth lt ffnen und dann auf klicken Falls das Programm noch nicht compiliert wurde wird das vor dem Start des Programmes automatisch durchgef hrt gt Un Go P v Eingabe Konsole a Fehlersuche a deutsch english PX Abbildung 50 Registerkarte Konsole zum Anzeigen von Ein und Ausgabe von Programmen Wenn ein Programm gestartet wurde wird automatisch die Registerkarte Konsole ge ffnet in der die Ausgabe des Programmes angezeigt wird In dem Eingabefeld Eingabe kann man Text eingeben der nach einem Klick auf an das Programm gesendet wird Weitere Schalter beim Ausf hren eines Programmes amp L scht die Ausgabe des Programmes H Stoppt die Ausf hrung eines Programmes Seite 149 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 9 3 10 Programme debuggen Mit dem Online Compiler kann man Java C und C Programme debuggen beziehungsweise mit einem Debugger ausf hren Um den Debugger zu starten kann man entweder auf das Symbol klicken oder eine Datei welche das zu debuggende Programm enth lt ffnen und dann auf das Symbol kli
155. ramme zu Erstellen reicht es aus die Java Quelltext Dateien zu compilieren Java Programme werden im Gegensatz zu C und C Programmen nicht mit einem externen Programm wie gcc oder g compiliert Um Java Dateien zu compilieren wird der Eclipse Java Compiler JDT verwendet Dieser kann im Gegensatz zum SUN Java Compiler innerhalb einer laufenden VM Virtuall Machine ausgef hrt werden Dass hei t man muss nicht einen neuen Prozess zum Compilieren einer Datei starten Die Klasse JavaFileBuildJobGNU dient als Schnittstelle zu dem Eclipse Java Compiler Wie bereits im Entwurf festgelegt wurde ist die Klasse JavaFileBuildJobGNU bzw deren Instanzen ein so genannter Job Also ein Thread der bestimmte Aufgaben in diesem Fall das Erzeugen von Java Programmen durchf hrt Da Java Dateien nicht compiliert werden m ssen hat die Methode buildFile zum Linken einzelner Dateien keine Funktion Die Methode compileFile dient wie schon bei der Klasse CFileBuildJobGNU zum Compilieren protected boolean compileFile throws IOException InterruptedException OnlineCompilerException String cmd noExit Herz lines vars source T _1 5 m elasspach Yo rt jar java io File pathSeparator Server getLibDirectory java io File pathSeparator javaFile getClassPath javaFile getAbsoluteFileName ByteArrayOutputStream outputBuffer new ByteArrayOutput
156. rbedingung Das Servlet muss laufen Nachbedingung keine Randbedingung w hrend des Tests sollte der Online Compiler normal ber einem Browser verwendet werden k nnen Seite 122 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 6 4 2 4 Testfall 8 MJVM Ziel dieses Tests ist es zu berpr fen ob Java Programme von einer MJVM Multi Java VM ausgef hrt werden k nnen Die eigentliche Aufgabe des achten Testfalls ist es aber das Verhalten der MJVM bei vielen Java Anwendungen die ausgef hrt werden zu berpr fen Dadurch soll ermittelt werden ob durch das parallele Ausf hren von Java Anwendungen innerhalb einer Java VM der MJVM die Ausf hrungsgeschwindigkeit verbessert werden kann F r den Testfall wird das Programm DemoFrontend des Paketes mjvm connector demo verwendet Dieses Programm wurde bereits im Kapitel Implementierung vorgestellt Das Programm DemoFrontend f hrt 50 mal ein Java Programm nacheinander in jeweils einer eigenen Java VM nacheinander in einer MJVM parallel in jeweils einer eigenen Java VM parallel in einer einzigen MJVM aus Dabei wird jeweils die ben tigte Zeit gemessen Aufgerufen wird das Programm DemoFrontend mit den folgenden Befehlen java java mjvm connector demo DemoFrontend 50 Xbootc Xbootc lLasspath p Lasspath a usr lib java lib tools jar mjvm server MJVMVirtualMachine rt HalloWelt Laufzeit von 50 Java Programmen
157. rchgef hrt Linux Als Testprotokoll wurde das komplette Kommunikationsprotokoll zwischen Client und Server aufgezeichnet Zudem wurde w hrend des Lasttests die Auslastung des Server Systems beobachtet Seite 121 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 6 4 2 Testspezifikation 6 4 2 1 Testfall 1 Test ob das Servlet bei der maximalen Anzahl an Benutzern keine weiteren mehr zul sst Grenzfalltest Klasse TestfallMaxUser Vorbedingung Das Servlet muss laufen Kein Benutzer darf angemeldet sein Nachbedingung Das Servlet muss laufen und das Verzeichnis f r die Gast User tempusers muss leer sein 6 4 2 2 Testf lle 2 3 und 4 Testen wie sich das Servlet bei vielen Benutzern die gleichzeitig C C und Java Programme compilieren verh lt Dazu werden mit mehreren Threads Anfragen zum Compilieren von Programmen parallel ausgef hrt Klassen TestfallLastCBuild TestfallLastCPPBuild und TestfallLastJavaBuild Vorbedingung Das Servlet muss laufen Nachbedingung keine Randbedingung w hrend des Tests sollte der Online Compiler normal ber einem Browser verwendet werden k nnen 6 4 2 3 Testf lle 5 6 und 7 Testen wie sich das Servlet bei vielen Benutzern die gleichzeitig C C und Java Programme ausf hren verh lt Dazu werden mit mehreren Threads Anfragen zum Ausf hren von Programmen parallel ausgef hrt Klassen TestfallLastCLaunch TestfallLastCPPLaunch und TestfallLastJavaLaunch Vo
158. rowsers KDE 1 aufgerufen werden da dieser den MIDAS Editor also den Quelltexteditor nicht unterst tzt Die im Laufe des Jahres erscheinende Version 4 wird da sie auf Firefox und Safari basieren wird mit gro er Wahrscheinlichkeit den Online Compiler ausf hren k nnen 6 3 6 Fazit Bei beiden Browsern die vom Online Compiler unterst tzt werden sollen werden alle Funktionen der Benutzerschnittstelle korrekt ausgef hrt und angezeigt Die anderen Browser haben zwar alle Probleme mit einigen Funktionen des Online Compilers vor allem des Quelltext Editors aber grunds tzlich l sst sich sagen dass durch einige Anpassungen der Online Compiler f r jeden Browser kompatibel gemacht werden k nnte Seite 120 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 6 4 Last und Servertest Ziel des Last und Servertests ist es Funktionen zu testen die im Systemtest Aufgrund der Einschr nkungen des Webinterface des Online Compilers nicht getestet werden konnten Dazu z hlt unter anderem ein ausf hrlicher Lasttest des Systems Der Lasttest ist ein wichtiger Bestandteil des gesamten Tests Dabei soll gekl rt werden ob sich der Online Compiler eignet von mehreren Anwendern parallel verwendet zu werden Dies ist eine unverzichtbare Anforderung an eine Client Server Anwendung Schlie lich macht der Einsatz des Online Compilers im Rahmen von E Learning nur dann Sinn wenn der Online Compiler auch von mehreren Anwendern gleichzeiti
159. rte Entwicklungsumgebung Henning Voss 6 Test 6 1 Einleitung Der Test des entwickelten Programms ist ein wichtiger Bestandteil bei der Software Entwicklung Die folgenden Abschnitte beschreiben die durchgef hrten Tests und ihre Ergebnisse 6 2 Systemtest Ziel des Systemtests ist das Testen des Online Compilers unter realistischen Bedingungen aus Sicht des Anwenders Der Systemtest ist also der Test des Systems unter den gleichen Bedingungen die sp ter auch beim Einsatz des Online Compilers herrschen Im Systemtest wird validiert ob das Gesamtsystem den Anforderungen aus Anwendersicht gerecht wird Die Testf lle werden ausschlie lich ber die Anwenderschnittstelle also einem Web Browser durchgef hrt Das hei t es k nnen auch nur Komponenten getestet werden die ber das Webinterface des Online Compilers erreichbar sind Deshalb wurde noch ein weiterer Test der Server und Lasttest der zum Validieren der Funktionalit t des Servers das Online Compiler Servlet dient durchgef hrt Dieses Kapitel ist aufgeteilt in Testplan Beschreibung der Voraussetzung und Umgebung des Systemtests sowie allgemeine Angabe der Beschreibung der Testf lle Testspezifikation Beschreibung der einzelnen Testf lle Testbericht Ergebnis des Systemtests 6 2 1 Testplan Als Testumgebung wurde f r den Client mit dem das Webinterface des Online Compilers aufgerufen werden soll ein Linux Computer mit einem Firefox 2 0 Browser gew hlt
160. rzeichnisse Seite 15 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss Jedes Objekt einer Klasse stellt dabei eine Datei oder ein Verzeichnis dar Die Klassen selbst sind hingegen die Typen der Dateien bzw Verzeichnisse Die Klasse FileObject ist Super Klasse aller Datei und Verzeichnis Klassen In ihr sind Attribute und Methoden enthalten die f r alle anderen Datei und Verzeichnis Klassen wichtig sind Dazu z hlen zum Beispiel der Name der Datei bzw des Verzeichnisses oder das Verzeichnis in dem sich die Datei bzw das Verzeichnis befindet Von den Datei Klassen sind besonders die drei Klassen LaunchableFile DebugableFile und BuildableFile wichtig Diese drei Klassen bilden die Basis f r nahezu alle Quelltext Datei Typen LaunchableFile ist Basis Klasse f r alle Dateien die ausgef hrt werden k nnen bzw die ein Ausf hrbares Programm enthalten DebugableFile ist Basis Klasse f r alle Dateien die mit einem Debugger aufgerufen werden k nnen Dass hei t sie m ssen ebenfalls ein ausf hrbares Programm enthalten BuildableFile ist schlie lich Basis Klasse f r alle Dateien die compiliert und oder gelinkt werden k nnen Von diesen drei Super Klassen sind fast alle Quelltext Dateien abgeleitet LispFile f r Lisp Programme die weder compiliert noch debuggt werden k nnen JavaFile f r Java Klassen bzw Java Programme CSharpFile f r C Klassen bzw C Programme CFile f r C Quelltexte und CPPFile f r C Quelltexte
161. s SOAP Funktionen kann man ber https ilias fh trier de webservice soap server php abrufen Um eine Benutzerauthentifizierung ber Ilias durchzuf hren kann die SOAP Funktion login verwendet werden Diese Funktion hat drei Parameter den Namen des lias Service den Namen des Anwenders und das Passwort des Anwenders Wenn auf dem Ilias Server ein Nutzer mit dem Namen existiert wird als Ergebnis eine eindeutige Nutzerkennung zur ckgesendet Wenn kein Nutzer mit dem Namen und dem Passwort existiert wird eine Fehlermeldung generiert Auf diese Weise kann man mit Ilias eine Benutzer Authentifizierung durchf hren Die Ilias Anbindung wird von der Klasse liasServer durchgef hrt In dieser Klasse sind zwei Methoden vorhanden init und checkLogin Die Methode init initialisiert die Verbindung zu dem Ilias Server und liest Konfigurations Daten ein Dazu z hlen die URL der SOAP Schnittstelle und der Name des Ilias Service public static void init Konfiguration laden Server serverConfig createProperty ilias server url http localhost ilias3 webservice soap server php Server serverConfig createProperty ilias server client abschlussarbeit serverURL Server serverConfig getString ilias server url clientName Server serverConfig getString ilias server client try service new Service call Call service createCall catch Exception eil Serv
162. sDaemon onlyDaemons false break if onlyDaemons return true else for int i 0 i lt threads length i long restTime time System currentTimeMillis startTime if threads i null se threads i isDaemon amp amp threads i isAlive if time gt 0 amp amp restTime lt 0 return false if time gt 0 threads i join restTime else threads i join catch Exception eil e printStackTrace return false Seite 102 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 5 2 4 3 Die Klasse MJVMVirtualMachine In dem unteren Klassendiagramm werden die restlichen Klassen der MJVM dargestellt Diese Klassen dienen zum Steuern der MJVM selbst also des MJVM Programms und nicht der Java Programme die in der MJVM ausgef hrt werden M JVM Mut iErrorStream M JVM Mut Output Stream M JVM Mut ilnput Stream from mjvm server o from mjvm server io from mjvm server io lt lt interface gt gt lt lt interface gt gt M JVMServeriInterface M JVMServerEnrollnterface from mjvm serven Kl MJVMVirtualMachine from mjvm server from mjvm server MJVMProcess from mjvm server process Abbildung 40 Klassenhierarchie MJVM Java Anwendung Die Klasse MJVMVirtualMachine ist das eigentliche MJVM Programm Die main Methode der Klasse MJVMVirtualMachine startet den RMI Service damit Clients eine Verbindung zur MJVM h
163. sches Verhalten zu erm glichen Wie bei jeder Webanwendung wird f r den Online Compiler ein Server ben tigt der Anfragen von Clients Web Browsern verarbeitet und beantwortet Dazu soll wie schon beim Java Online Compiler ein so genanntes Java Servlet verwendet werden Ein Java Servlet ist eine Java Anwendung mit der HTTP Anfragen von Webbrowsern verarbeitet und beantwortet werden k nnen Ein Java Servlet wird von einem sogenannten Servlet Container einem speziellem Web Server ausgef hrt F r den Online Compiler soll der Tomcat Webserver als Servlet Container verwendet werden Die fertige Anwendung soll schlie lich auf dem Linux Server javock Seite 8 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss http javock fh trier de installiert werden Der Online Compiler soll zun chst nur f r die beiden Webbrowser Firefox und Internet Explorer entwickelt werden 3 1 Allgemeine Funktionen Nachdem im ersten Abschnitt die grunds tzlichen Anforderungen festgelegt wurden wird in diesem Abschnitt n her auf einzelne Funktionen des Online Compilers eingegangen Unterst tzung verschiedener Programmiersprachen Mit dem Online Compiler sollen Programme in verschiedenen Programmiersprachen entwickelt werden k nnen Die Programmiersprachen die unterst tzt werden sollen sind Java C und C Au erdem soll die Voraussetzung geschaffen werden weitere Programmiersprachen wie C oder Lisp zu einem sp teren Zeitpu
164. schleunigen ist deshalb die Zeit die zum Starten von Java VMs ben tigt wird zu verringern Dies kann zum Beispiel dadurch erreicht werden in dem mehrere Java Anwendung in einer einzigen Java VM ausgef hrt werden Die Zeit zum Starten der Java VMs f llt dadurch praktisch weg Im Rahmen dieser Abschlussarbeit soll gepr ft werden ob diese L sung MJVM Multi Task Java VM praktisch realisierbar ist und ob damit der erhoffte Geschwindigkeitsvorteil erreicht werden kann Java Anwendung Java Anwendung OnlineCompiler Java Anwendung Java Anwendung Abbildung 3 Konzept MJVM Seite 11 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 3 7 Zusammenfassung Ziele dieser Abschlussarbeit im berblick Entwurf Implementierung und Test einer Webbasierten Entwicklungsumgebung Web Anwendung Ajax mit einem Webinterface und einem Servlet Tomcat Server Unterst tzung verschiedener Sprachen f r die Benutzerschnittstelle Unterst tzung verschiedener Programmiersprachen Java C C Erweiterungsm glichkeit f r weitere Programmiersprachen insbesondere Lisp und C Compilieren von Java Dateien Eclipse Java Compiler Compilieren und Linken von C und C Dateien GNU Compiler Collection Ausf hren von Java Programmen SUN Java VM Ausf hren von C und C Programmen mit AppArmor Debuggen von Java Programmen Debuggen von C und C Programmen GNU Debugger Debugger Haltepunkte Variablen der Programme di
165. se True wenn Session das User Objekt f amp uuml r andere Sessions gesperrt hat private boolean sessionLocked false IA Sperrt den User f amp uuml r andere Sessions Wenn User bereits gesperrt ist wird gewartet bis der User wieder freigegeben wird Wi public void lockForSession synchronized sessionLock while sessionLocked try Seite 66 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss sessionLock wait catch Exception e sessionLocked true x Gibt den User f amp uuml r andere Sessions frei ki public void unlockForSession synchronized sessionLock sessionLocked false try sessionLock notify catch Exception e Vor jedem Zugriff einer Session auf User Daten muss die Methode lockForSession der Klasse User aufgerufen werden Dadurch wird der User f r andere Sessions gesperrt Dass hei t greift eine andere Session auf den User zu muss sie warten bis der User wieder freigegeben wurde Das Freigeben eines Users nachdem alle Operationen abgeschlossen sind erfolgt durch die Methode unlockForSession der Klasse User Neben den Sessions greifen aber auch noch die Jobs auf User Daten zu Das hei t die Job Threads m ssen ebenfalls mit den Sessions synchronisiert werden Dies kann aber nicht auf gleiche Weise mit den beiden obigen Methoden erfolgen Wenn ein Job Thread ein User Objekt sperrt m ssten alle Sessions warten bis der Job beendet ist Das h
166. sgef hrt wird notwendig weil jede Java Anwendung auch eigene Classpath Werte verwendet Eine weiterer Grund f r eigene Class Loader f r alle Java Anwendungen die in der MJVM ausgef hrt werden sind die static Methoden und static Attribute Wenn zwei Java Anwendungen die Klasse X verwenden und in dieser Klasse auf das static Attribut Y zugreifen m ssen f r beide Anwendungen unterschiedliche Werte des Attributs gespeichert werden Mit unterschiedlichen Class Loadern kann man auch unterschiedliche Instanzen Klassen Definitionen der selben Klasse in einer JVM gleichzeitig verwenden Jede Java Anwendung hat dadurch eigene static Attribute und static Methoden der selben Klasse bzw der selben Class Datei Seite 100 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss Der Konstruktor der Klasse MJVMThread public MJVMThread MJVMProcess process super process getThreadGroup process getName main thread this process process setDaemon false setContextClassLoader process getClassLoader try mainClass Class forName process getMainClass true process getClassLoader catch ClassNotFoundException eil Im Konstruktor wird die Thread Gruppe des MJVMThreads festgelegt Das gleiche gilt f r den Class Loader mit dem Befehl setContextClassLoader Alle Threads die von dem MJVMThread abgeleitet werden verwenden dann den gleichen Class Loader und die gleiche Thread Gruppe Run Me
167. t float native super while b g Sl lt font enl rst 4E01L8C8 gt 82 lt Lont gt s3 Datentypen W bool bytelchar const double final floatlint long short String short static void b g EE E AE ee e A Ke RE Kommentare FE INN CHI gt IF Ze pisfont color green gt 92 lt font gt 3 Kommentare IN C FP r g lt font colare greeni gt S1 lt Lont gt E Die folgende JavaScript Zeile sorgt daf r das Jr Kommentare gr n eingef rbt werden ININE CF2 NANa efont enlarilgresnks 517 lt Fonts Der erste Teil ist ein regul rer Ausdruck mit dem alle Kommentare in einem Quelltext gefunden werden Der zweite Teil ersetzt jedes gefundene Kommentar durch den HTML Code lt font color green gt lt font gt wodurch diese gr n eingef rbt werden Neben Kommentaren werden au erdem Zeichenketten einzelne Zeichen Char Schl sselw rter und Datentypen hervorgehoben Der MIDAS Editor ist ein HTML Editor Dass hei t mit ihm kann man HTML Dokumente bearbeiten Das bedeutet der mit dem MIDAS Editor erstellte Text ist HTML Code Mit dem Quelltext Editor soll aber kein HTML Code sondern Quelltexte der verschiedenen Programmiersprachen erzeugt werden Es ist also erforderlich aus dem HTML Dokument welches mit dem MIDAS Editor erstellt wurde den tats chlichen Quelltext herauszufiltern Dazu reicht es aus alle HTML Elemente wie zum Beispi
168. thode des MJVM Threads public void run try if mainClass null throw new ClassNotFoundException process getMainClass Class params new Class 1 params 0O process getArgs getClass Object mparams new Object 1 mparams 0 process getArgs mainClass getMethod main params invoke null mparanms catch Exception eil e printStackTrace System exit 1 Die einzige Methode die ein MJVMThread ausf hren muss ist die main Methode des Java Programmes Dazu wird mit dem Befehl gerMethod die main Methode in der Haupt Klasse die Klasse die die main Methode enth lt gesucht und mit invoke aufgerufen Das Ende des MJVMThreads bedeutet aber nicht unbedingt das Ende der Java Anwendung F r jede Java Anwendung gilt die Anwendung ist dann zu ende wenn alle nicht D mon Threads beendet sind Das hei t um auf das Ende der Java Anwendung zu warten muss gewartet werden bis alle Threads beendet sind Dazu dient die Methode waitForThreads der Klasse MJVMThreadGroup Seite 101 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss public boolean waitForThreads long time try long startTime System currentTimeMillis while true Thread threads boolean onlyDaemons true synchronized this threads new Threadl activeCount 10 numerate threads true for int i 0 i lt threads length i if threads i null amp amp threads i i
169. tigt Die Policy Datei eines C oder C Programmes wird mit der Methode saveProfile der Klasse AppArmor erstellt Seite 61 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss private static String saveProfile User user String filename throws IOException String profileFile user getUserDirectory FileTools sep PROFILE_FILE FileTools saveTextFile profileFile mn filename AT REN include lt abstractions base gt n d user getRoot getAbsoluteFileName FileTools gep Hit ropiz return profileFile Um AppArmor f r ein Programm zu aktivieren muss man den Befehl apparmor_parser replace Policy Datei aufrufen Dazu dient die Methode secureProcess der Klasse AppArmor Die Methode erzeugt zun chst die Policy Datei des C oder C Programmes und ruft anschlie end den apparmor_parser Befehl mit der Policy Datei auf public synchronized static void secureProcess User user String filename throws CreateSandboxException Server debugMessage Create AppArmor Sandbox for filename try Process p Runtime getRuntime exec new String apparmor_parser replace saveProfile user filename p waitFor p null catch Exception eil Server errorMessage e throw new CreateSandboxException Im Gegensatz zum Java Security Manager muss bei AppArmor der Schutz f r ein bestimmtes Programm explizit wieder deaktiviert werden Dazu dient die Meth
170. u Klassischen Webanwendungen werden bei Ajax Webanwendung keine HTML Dokumente bei jeder Client Anfrage vom Webserver geladen Bei Benutzeraktivit t sendet die Webanwendung eine Anfrage zum Server der diese meist mit einem XML Dokument beantwortet Kommt eine Antwort bei einem Client an werden die Inhalte der Webanwendung auf dem Client aktualisiert Der gro e Vorteil ist dabei dass w hrend einer laufenden Client Anfrage die Anwendung weiter vom Benutzer verwendet werden Kann siehe Abbildung 2 Man ist also nicht mehr darauf angewiesen dass der Server ein HTML Dokument erstellt und dieses beim Client ankommt Zusammengefasst l sst sich sagen Ajax Webanwendungen verhalten sich mehr wie eine normale Anwendung Dadurch wird die Benutzerfreundlichkeit erh ht und l stige Wartezeiten fallen zum gro en Teil weg Benutzer Aktivit t Client seitige Verarbeitung Bunde ysanuaed Daten bertragung Daten bertragung Daten bertragung GundensanuseQ Datenubertragung Bundensanuael Bunde meanusjeg Server seitige Server seitige Server seitige Server seitige Verarbeitung Verarbeitung Verarbeitung Verarbeitung Abbildung 2 Modell einer Ajax Webanwendung Kennzeichnend f r Ajax Webanwendungen ist der Server beantworten Anfragen nicht mehr mit HTML Dokumenten sondern in Form von XML Au erdem wird die Benutzeroberfl che das Webinterface wird mit dem Einsatz von JavaScript realisiert um ein dynami
171. umente Das Ergebnis der Methode ist eine Instanz der Remote Schnittstelle MJVMProcessServerInterface mit der ber RMI die Java Anwendung gesteuert werden kann Die Methode killAll beendet die MJVM und damit auch alle Java Anwendungen die in der MJVM ausgef hrt werden 5 2 4 3 1 System Klassen Die System Klassen Klassen der Java Runtime Environment werden vom sogenannten System Class Loader vor dem eigentlichen Ausf hren des MJVM Programms geladen Das hei t man kann von diesen Klassen nicht mit dem MJVMClassLoader eigene Klassen Definitionen f r die einzelnen Java Anwendungen laden Mit anderen Worten alle Java Anwendungen die in einer MJVM ausgef hrt werden greifen auf die gleichen static Attribute und static Methoden der System Klassen zu Die bedeutet zum Beispiel das alle in den gleichen Ausgabe Strom das Attribut out der Klasse System schreiben Damit alle Java Anwendungen dennoch auf eigene Attribute und Methoden zugreifen und sich die Java Anwendungen nicht gegenseitig st ren k nnen m ssen alle static Attribute und static Methoden der Java Runtime Environment durch Methoden und Attribute ersetzt werden die einen Zugriff durch mehrere Java Anwendungen erlauben ohne das sich die Java Anwendungen gegenseitig st ren Dazu m ssen einige Klassen der Java Runtime Environment berschrieben werden In den Paketen java io und java lang befinden sich einige dieser Klassen die als Ersatz f r die Standard Klassen der JRE dienen
172. und C Programmen durchf hrt Um C und C Programme zu erzeugen werden zwei Operationen ben tigt Erzeugen von sogenannten Objekt Dateien durch Compilieren der Quelltextdateien Erzeugen des ausf hrbaren Programmes durch das sogenannte Linken mehrere Objekt Dateien werden zu einem Programm Binary zusammengefasst F r diese beiden Operationen wurden zwei Methoden in der Klasse CFileBuildJobGNU erstellt compileFile zum Compilieren einzelner Dateien und buildFile zum Linken einzelner Dateien protected boolean compileFile throws IOException InterruptedException OnlineCompilerException setProcess new String cfile instanceof CPPFile g gcec q c cfile getAbsoluteFileName cfile getAbsoluteDirectory CLanguage processTimeout CLanguage ioCharset getProcess waitFor if isProcessTimeout true throw new TimeoutException parseGCCResult if getProcess exitValue 0 throw new OnlineCompilerException Compiler failed else cfile setRecompile return true Seite 48 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss Die Methode compileFile ruft zun chst dass Programm gcc f r C Dateien bzw g f r C Dateien auf Das Objekt cfile ist die Datei die compiliert werden soll Nach dem Starten des Prozesses wird mit der Methode waitFor gewartet bis die Compilierung der Datei beendet ist Mit der Methode parseGCCResult werden eventuelle Fehler
173. ung 8 Klassenhierarchie Jobs Seite 18 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss Alle Jobs sind von der Klasse Job abgeleitet Die Klasse Job hat eine Assoziation zur Schnittstelle JobListener Auch hier wurde wie im gesamten Projekt das Observer Entwurfsmuster verwendet Die Job Klasse bernimmt dabei die Funktion eines Modells Observer Objekte Listener die von der Klasse JobListener abgeleitet sind k nnen sich am Modell bzw am Job anmelden Bei bestimmten Ereignissen werden die angemeldeten Listener vom Modell bzw dem Job benachrichtigt Ereignisse sind zum Beispiel Starten eines Jobs Fehlermeldungen Abbruch eines Jobs oder Beenden eines Jobs Listener sind zum Beispiel die Benutzerschnittstellen Webinterface Eine weitere wichtige Eigenschaft der Klasse Job ist die Assoziation childJob childJob also Kind Job stellt einen weiteren Job dar der innerhalb eines anderen Jobs ausgef hrt wird Dies bedeutet dass ein Job aus mehreren anderen Jobs bestehen kann Zum Beispiel Kann man so vor dem Ausf hren einer Datei LaunchJob die Datei mit einem BuildJob Compilieren Der BuildJob w re dann der childJob wobei dieser nat rlich weitere Kind Jobs enthalten kann Von der Super Klasse Job sind verschiedene Klassen abgeleitet die die verschiedenen Job Typen repr sentieren BuildJob Compilieren und oder Linken eines Programmes Die davon abgeleitete Klasse BuildFolderJob dient zum Compilieren und ggf zum L
174. ungsumgebung Henning Voss Der Anwender soll die M glichkeit haben Werte von Variablen eines Programmes welches durch den Debugger ausgef hrt wird anzuzeigen Debugger Variablen 3 5 Sicherheitskonzept Mit dem Online Compiler sollen Anwender die M glichkeit haben Programme zu entwickeln und auf dem Server auszuf hren Damit die Sicherheit der Servers durch die Anwender Programme nicht gef hrdet wird m ssen einige Sicherheitsvorkehrungen getroffen werden So d rfen Anwender Programme zum Beispiel nicht Dateien l schen oder den Rechner herunterfahren Dass hei t einige Funktionen m ssen f r Anwender Programme blockiert werden Dazu soll f r Java Programme der sogenannte Java Security Manager verwendet werden Der Java Security Manager ist eine Erweiterung der Java VM Virtuall Machine mit dem man bestimmte Befehle wie das L schen von Dateien f r Java Programme sperren kann F r C und C Programme soll die Anwendung AppArmor Novell 1 verwendet werden Diese erlaubt es hnlich dem Java Security Manager bestimmte Befehle f r eine Anwendung zu sperren 3 6 MJVM W hrend der Entwicklung des Java Online Compilers wurde festgestellt dass das Ausf hren von Java Programmen relativ langsam ist Durch mehrere Tests wurde weiterhin festgestellt dass die meiste Zeit beim Starten der Java VMs Virtuall Machine die die Java Programme ausf hren sollen verloren geht Der beste Weg die Ausf hrung von Java Programmen zu be
175. urchf hren So wird f r Java Programme die Java VM von SUN Sun 1 verwendet w hrend C und C die Programme der GNU Compiler Collection GCC verwenden FSF 1 Das folgende UML Diagramm zeigt die Hierarchie der Klassen an die die Unterst tzung der einzelnen Programmiersprachen liefern cd Sprachen Language from onlinecom piler languages buildfile Langua ge File BuildJob launch file Language bier Launchjob debugffile Language File DebugJob isSupportedV boolean Clanguage Javalanguage from onlinecom piler languages c from onlinecom piler languages java CSharplanguage LispLanguage from onlinecom piler languages csharp from onlinecom piler languages lisp Abbildung 7 Klassenhierarchie Programmiersprachen Die wichtigste Klasse ist Language Diese abstrakte Klasse ist Basis aller anderen Klassen Von ihr sind 4 Klassen f r die 5 Programmiersprachen C C C Java und Lisp abgeleitet Da sich C und C kaum unterscheiden zumindest was das Compilieren und Linken betrifft reicht f r beide Sprachen eine Klasse aus Die Methoden der Klassen Language erlauben es Programme zu erzeugen Methode build Programme auszuf hren Methode launch und Programme mit einem Seite 17 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss Debugger auszuf hren Methode debug Die Implementierung dieser Methoden erfolgt in den abgeleiteten Klassen f r die jeweilige Programmiersprache und das jewe
176. von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss gestalten sollen die Programm Beispiele genauso wie alle anderen Dateien ber die Benutzerschnittstelle des Online Compilers bearbeitet werden k nnen Dazu soll ein spezieller Administrator Account verwendet werden Aufruf der Programm Beispiele im Online Compiler ber Links in den Online Kursen Entwicklung einer speziellen Version der Benutzerschnittstelle des Online Compilers f r den Kurs Datenstrukturen Algorithmen Bei diesem Online Kurse werden in einem kleinen Fenster Informationen zum Beispiel Java Applets zu den ge ffneten Kurs Seiten dargestellt Bei einigen Seiten soll der Online Compiler mit einem ge ffneten Programm Beispiel in diesem Fenster dargestellt werden Da der Platz dieses Fenster begrenzt ist soll eine kleinere Version der Benutzerschnittstelle des Online Compilers Ilias Version oder kleine Version erstellt werden Benutzer des Ilias Servers sollen sich mit ihrem Ilias Benutzernamen und dem dazugeh rigen Passwort an den Online Compiler anmelden k nnen Benutzerauthentifizierung ber Ilias Es soll allerdings auch noch die M glichkeit bestehen dass sich Nutzer als G ste anmelden G ste ben tigen kein Passwort und keinen Benutzernamen Die Dateien die G ste erstellt haben sollen nach deren Abmeldung wieder gel scht werden 3 3 Compiler und Linker Quelltext Dateien sollen mit dem Online Compiler compiliert w
177. w hlen kann tritt dieser Fehler nicht auf Um das Hochladen von Dateien auch im Internet Explorer zu erm glichen habe ich deshalb die HTML Datei upload html hinzugef gt welche auch schon im Java Online Compiler verwendet wurde um Dateien zum Hochladen auszuw hlen Seite 119 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss 6 3 3 Opera Mit dem Opera Browser gibt es einige Probleme bei Anzeigen der Benutzerschnittstelle In der Linux Version des Opera Browsers Version 9 0 Opera 1 wird zum Beispiel nur die Anzeige Lade Online Compiler angezeigt w hrend der Rest der Benutzerschnittstelle nicht gezeigt wird Auf anderen Betriebssystemen gibt es mit der aktuellen Version 9 0 ebenfalls Probleme Tabs berschriften der Registerkarten werden nicht korrekt angezeigt Gr en nderungen von Komponenten der Benutzerschnittstelle werden nicht korrekt ausgef hrt der MIDAS Editor wird nicht vollst ndig von Opera unterst tzt 6 3 4 Safari Im Safari Browser von Apple Apple 1 gibt es hnliche Probleme wie im Opera Browser Die meisten Probleme betreffen wie auch im Opera Browser die Unterst tzung des Quelltext Editors Der MIDAS Editor wird allerdings von Safari unterst tzt Dass hei t mit einigen speziellen nderungen sollte der Online Compiler auch f r den Safari Browser kompatibel gemacht werden k nnen 6 3 5 Konqueror Der Online Compiler kann nicht mit der aktuellen Version 3 x des Konqueror B
178. werden da sich ein Anwender an verschiedenen Webbrowsern mit dem gleichen Benutzernamen und Passwort anmelden kann HiasUser Session HiasUser Session Session TempUser Session Abbildung 31 Objektdiagramm Sessions und Users Mehrere Sessions k nnen als auf den gleichen User zugreifen Mit der Methode registerSession der Klasse User wird eine Session einem User zugeordnet Das Zuordnen von einer Session zu einem User Objekt erfolgt erst nach dem der Benutzer die Anmeldedaten in das entsprechende Formular der Benutzerschnittstelle eingegeben hat public synchronized void registerSession Session session if session null addFileObjectListener session Wenn Sessions sich an einen User anmelden k nnen muss es auch eine M glichkeit geben Sessions von einem User wieder abzumelden Dazu wird die Methode unregisterSession der Klasse User verwendet Seite 64 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss public synchronized void unregisterSession Session session removeFileObjectListener session if canDestroy delete Mit dem Befehl delete wird ein User Objekt gel scht Dass hei t die Ressourcen des Users zum Beispiel die Dateien werden gel scht Dies darf nat rlich nur dann passieren wenn keine Session mehr auf den User zugreift Dies wird mit der Methode canDestroy berpr ft Eine Ausnahme bildet der AdminUser Ein Admi
179. wicklungsumgebung Henning Voss include lt unistd h gt int main void while 1 fork return 0 Da man mit AppArmor den Befehl fork nicht sperren kann k nnen Benutzer des Online Compilers mit einer Fork Bomb den Rechner auf dem der Online Compiler ausgef hrt wird zum Stillstand bringen Die derzeit einzige Ma nahme um eine Fork Bomb dennoch zu verhindern ist der Befehl ulimit Mit diesem Befehl kann man die maximale Anzahl an Prozessen die ein Benutzer des Betriebssystems ausf hren darf begrenzen 7 3 Java Security Manager Mit dem Java Security Manager k nnen Java Programme gut vom Rest des Systems abgeschirmt werden Au erdem hat man von einem Java Programm nicht direkten Zugriff auf Betriebssystem Funktionen Fork Angriffe und sonstige Gefahren durch Betriebssystem Funktionen sind damit nahezu ausgeschlossen 7 4 Zusammenfassung Sicherheitsvorkehrungen F r einen m glichst sicheren Betrieb des Online Compilers sollten eine Reihe von Sicherheitsvorkehrungen getroffen werden Regelm iges Update aller verwendeten Software Komponenten Dazu z hlen auch die verwendeten Java Bibliotheken des Online Compilers Regelm iges Auswerten der Log Dateien des Tomcat Servers Installation und Betrieb des Tomcat Servers unter einem speziellem Benutzerkonto Der Tomcat Server sollte nicht vom Root Benutzer des Betriebssystems ausgef hrt und installiert werden Maximale Anzahl der Prozess
180. xample encodeURIComponent example amp file encodeURIComponent file ocwindow window open url ocwindow width width height height Seite 89 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss catch e ocwindow window open url ocwindow width width height height 1 ocwindow focus Neben den Aufruf von Beispielen soll der Online Compiler auch noch direkt in einem Frame Fenster in den Online Kurs integriert werden Dazu wurde eine spezielle kleine Version der Online Compiler Benutzerschnittstelle entwickelt Diese Version unterscheidet sich in drei Punkten von der normalen Version des Online Compilers die Komponenten zum Anzeigen von Dateien und Beispielen Datei Baum wurde entfernt da nur ein einziges Beispiel Programm angezeigt werden soll der Men punkt NEUE DATEI wurde entfernt da keine neuen Datei erzeugt werden sollen sondern nur ein einziges Beispiel angezeigt werden soll Statt einem Editor gibt es mehrere in denen alle Dateien des ge ffneten Programm Beispiels angezeigt werden ONLINE COMPILER DOKUMENTATION HILFE Iniset java 7 InteeiTesilava v 1 I ah A A Implementierungsdatei Intset java f r di EN DIE EE EE EE EE E EE EE E EE EE EE EE EE EE EE EE EE EE EE ei 7 public class Intset A 9 static final int N 10 10 11 Array f r die eigentlichen Daten CZ 12 int daten E lt gt Abbildung 36
181. zierung verwendet werden soll Name Beschreibung Standardwert m gliche Werte ilias server url URL der SOAP Schnittstelle des verwendeten Ilias https ilias fh g ltige URL Servers trier de webservice soap ser ver php ilias server client Name des Ilias Clients der zur Nutzer Charly Text Seite 134 von 156 Eine Webbasierte Entwicklungsumgebung Henning Voss Einstellungen f r Java Name Beschreibung Standardwert m gliche Werte java runtime name Name des Backends f r Java Programme sun sun Java von SUN java runtime processtimeout Maximale Anzahl Millisekunden die ein 120000 positive ganze Zahl Java Programm laufen darf java runtime security Name der Funktion die zum Schutz vor java java Java Security fehlerhaften oder schadhaften Nutzer Manager Programmen verwendet werden soll java enabled aktiviert oder deaktiviert Java true true oder false Einstellungen f r C und C Name Beschreibung Standardwert m gliche Werte ccpp runtime security Name der Funktion die zum Schutz apparmor apparmor Linux AppArmor vor fehlerhaften oder schadhaften Nutzer Programmen verwendet werden soll ccpp runtime processtimeout Maximale Anzahl Millisekunden die 12000 positive ganze Zahl ein C oder C Programm laufen darf ccpp runtime name Name des Backends f r C und C gnu gnu GNU Compiler Collection Programme ccpp
Download Pdf Manuals
Related Search
Related Contents
Samsung Samsung Champ 2 Kasutusjuhend TUNE Adapt Sitecom WLA-2101 MANUAL DE INSTALACIÓN Citizen CD-S503 USB White SLW1 Weather Station Installation and Operating Instructions Delta Electronics DVP01PU-H2 User's Manual Sunny Home Manager User Manual V3.0 Copyright © All rights reserved.
Failed to retrieve file