ICL Installationsanleitung

Aus Eclipse
Wechseln zu: Navigation, Suche

Klonen des Repositiories

Falls Sie noch keine Erfahrung mit der Versionsverwaltung von Dateien mittels git besitzen, empfehlen wir Ihnen zur Lektüre das Buch Pro Git.

  • Als Benutzername und Kennwort verwenden Sie die Zugangsdaten, mit denen Sie sich etwa auch an der LVU anmelden.
  • Klonen Sie das Repository cobalt in das aktuelle Verzeichnis: git clone https://<Benutzername>@alberti.fernuni-hagen.de/git/cobalt . (beachten Sie den Punkt und ersetzen Sie <Benutzername>!). Unter Windows erhalten Sie ggf. Fehlermeldungen bzgl. nicht erzeugbarer Dateien (Filename too long). Diese können Sie ignorieren.
  • Lassen Sie sich mit git branch -a eine Liste der vorhandenen Branches im Repository anzeigen und identifizieren Sie Ihren Remote-Branch anhand Ihres Nachnamens (also beispielsweise remotes/origin/<Nachname>).
  • Checken Sie mit git checkout -f <Nachname> den Branch aus, den wir für Sie vorbereitet haben.
  • Verifizieren Sie das Ergebnis der zuvor ausgeführten Aktionen mit git branch -vv. Es sollte eine vergleichbare Ausgabe erscheinen:
<Nachname>   51222b5 [origin/<Nachname>   ] Schedules for HEUR-circle eval only.
master       51222b5 [origin/master] Schedules for HEUR-circle eval only.

Installation der Umgebung

  1. Laden Sie sich die Eclipse Modeling Tools herunter.
  2. Starten Sie Eclipse, legen Sie einen neuen Eclipse-Workspace an (Empfehlung: jee-neon) und wählen Sie Help → Install Modeling Components, wo Sie die folgenden Komponenten auswählen:
    • XText
    • MoDisco
    • OCL Tools

Installation der Komponenten für die Constrainterzeugung

  1. Importieren Sie über File → Import → General → Existing Projects into Workspace die folgenden Projekte aus dem geklonten Repository:
    • development/ocl2csp/de.feu.ps.ocl2csp.v3
    • development/ocl2csp/de.feu.ps.ocl2csp.v3.dsl.baseIcl
    • development/ocl2csp/de.feu.ps.ocl2csp.v3.dsl.icl
    • development/ocl2csp/de.feu.ps.ocl2csp.v3.testing
    • development/jee/de.feu.ps.sse
    • development/ocl2csp/de.feu.ps.xtext
  2. Zu diesem Zeitpunkt gibt es noch etliche Compile-Fehler aufgrund noch fehlendem Code, der nachfolgend noch generiert werden muss. Gehen Sie dazu wie folgt vor:
    • Rechtsklick auf de.feu.ps.ocl2csp.v3.dsl.baseIcl/src/de.feu.ps.ocl2csp.v3.dsl/GenerateBaseIcl.mwe2 und Run As → MWE2 Workflow
    • Rechtsklick auf de.feu.ps.ocl2csp.v3.testing/src/de.feu.ps.ocl2csp.v3.testing/Ocl2CspTesting.mwe2 und Run As → MWE2 Workflow
    • Öffnen Sie die Datei de.feu.ps.ocl2csp.v3.dsl.icl/meta-model/Icl.genmodel, machen Sie einen Rechtsklick auf den Knoten Icl und wählen Generate Model Code

Wenn Sie sich ausschließlich mit der Constrainterzeugung beschäftigen, ist Ihre Installtion an dieser Stelle komplett. An dieser Stelle können Sie mit dem ICL-Beispielprogramm zur Constrainterzeugung fortfahren.

Installation der Jee/Jpa-Komponenten

Indem Sie den vorherigen Teil der Installation abgeschlossen haben, stehen Ihnen nun die Werkzeuge zur Constraintgenerierung zur Verfügung. Die folgenden Projekte setzen darauf auf und realisieren die Umsetzung der JPA (Java Persistence Api), der Spezifikation für Object to Relational Mapping unter Java.

  1. Importieren Sie über File → Import → General → Existing Projects into Workspace die folgenden Projekte aus dem geklonten Repository:
    • development/jee/de.feu.ps.jee
    • development/jee/de.feu.ps.jee.plugin
    • development/jee/de.feu.ps.jee.testing
    • development/jee/de.feu.ps.jee.ui
    • development/jee/de.feu.ps.modisco.lang.jee3
  2. Generieren der Modelle:
    • Rechtsklick auf de.feu.ps.jee.testing/src/de.feu.ps.jee.testing/GenerateJeeTesting.mwe2 und Run As → MWE2 Workflow
    • Öffnen Sie die Datei de.feu.ps.modisco.lang.jee3/meta-model/Jee.genmodel und wählen Sie hier ebenso Generate Model Code im Kontextmenü des Wurzelknotens.
  3. Wenn nunmehr keine weiteren Compile-Fehler auftreten, müsste beim Klick auf Run → Run Configurations unter Eclipse Application einen Eintrag JEE Runtime ... existieren. Beim Starten dieser Konfiguration öffnet sich ein neues Eclipse-Fenster, in dem die Projekte aus dem ersten Workspace als Plugins verfügbar sind.
  4. Beispiel:
    • Importieren Sie im Runtime-Eclipse folgende Projekte:
      • development/jee/_probands/ecoop/de.feu.ps.ecoop15.sc0nq + Ergänzen des Unterordners test auf der Ebene des vorhandenen Ordners src
      • development/jee/_probands/permutation/de.feu.ps.jee.jpa.eval.prereq
    • Danach sollte im Project Explorer in der Java-Perspektive nach einem Rechtsklick auf z.B. Department.java unter Dr. Deepfix der Punkt Find and Display Errors in Program... wählbar sein.

Orientierung in der Jee/Jpa-Infrastruktur

Wenn Sie Punkt 4 ausführen, geschieht im Detail das folgende:

  1. Das Eingabeprogramm wird eingelesen. Um es in einer für unsere Zwecke gut nutzbare Form verfügbar zu haben, wird es in ein "Ecore-Modell" übersetzt. Das Meta-Modell (also die Beschreibung der Typen des Modells) können Sie der Datei de.feu.ps.modisco.lang.jee3/meta-model/Jee.ecore entnehmen. Sie sehen darin z.B., dass jede TypeDeclaration ein boolesches Attribut jpaIsEntity hat, welches genau dann true ist, wenn eine @Entity Annotation vorhanden ist.
  2. Dieses Modell wird durch die Klasse de.feu.ps.modisco.lang.jee3.discoverer.SimpleJava aufgebaut. In der Zeile 121 sehen Sie den Aufruf, der in der Folge das gesamte Java-Programm durchläuft und für Klassen, Felder, Methoden etc. die entsprechenden Instanzen des Ecore Meta-Modells erzeugt.
  3. Nachdem dieses Modell aufgebaut wurde, wird es verwendet, um die Constraint-Regeln darauf anzuwenden, zu prüfen und ggf. Fixes zu suchen. Die Klassen, in denen diese Regeln implementiert sind, sind Subklasen von de.feu.ps.jee.rules.AbstractRule. Die Regeln können auf zwei Weisen erzeugt werden: Entweder imperativ (in den getConstraintExpressions()-Methoden) oder durch die OCL-Notation, die in den Strings im Kopf der Klasse deklariert sind. Umgeschaltet wird der Modus in der Klasse AbstractOclRule durch das statische Feld generationMode.
  4. Dreh- und Angelpunkt der Implementierung ist die Klasse de.feu.ps.jee.JpaProjectInspector. Wie sie verwendet wird, können Sie zum Beispiel dem Testfall aus der Methode de.feu.ps.jee.ecoop.Sc0NqWithParameters.performFix entnehmen.

Infrastruktur

  1. Im Jee.ecore-Metamodell ist ein Paket HQL enthalten. Die Analyse von Named Queries kann aktiviert werden, indem dem Wert includeNamedQueryAnalysis in der Klasse SimpleJava der Wert true zugewiesen wird. Hier müssten Sie den Control-Flow mal zurück verfolgen.
  2. Eine TestSuite können Sie starten, indem Sie die Run Configuration Run JEE CBT on XMI model (All Ecoop'15 Tests) ausführen. Hier werden Fixes für Programme durchgeführt, deren Modelle in de.feu.ps.modisco.lang.jee3\probands\openInitialized gespeichert sind.
  3. Durch die Run Configuration Run JEE CBT Modisco (Single Run) wird ein Modell für ein Programm erzeugt und auf der Platte gespeichert. Hierfür wird zunächst ein Runtime-Eclipse gestartet, in dem das Projekt anhand des Namens (vgl. Klasse TestScenariosModelConstruction) gesucht wird.
  4. (Ganz wichtig!) Der Support für OCL ist im Moment sehr rudimentär (die Algorithmen zur Erzeugung decken gerade das ab, was in den Regeln aktuell benötigt wird). Wenn Sie eigene Regeln ergänzen möchten, nutzen Sie besser das imperative Verfahren (aus den getConstraintExpressions()-Methoden).
  5. (Noch wichtiger!) Zur Zeit ist in dem Regelsatz noch "Work in Progress". Es macht bestimmt Sinn, hin und wieder einen aktuellen Stand zu mergen. (Ihr Branch ist aus dem Branch newrules entstanden. Wenn sich hierin Neuerungen ergeben, sollten Sie diese vielleicht in Ihren Branch mergen.)