Campusmanagement

Campusmanagement an der FAU

Inhalt

Zusammenspiel von VV und UnivIS

Wie können Dozenten eigentlich eine Veranstaltung in die Veranstaltungsverwaltung einpflegen?
Die gute Nachricht dazu: es ändert sich nichts (oder zumindest nicht viel)! Wie gewohnt werden die Lehrveranstaltungen im UnivIS angelegt, und die VV importiert sie von dort.
Will man Lehrangebote anmeldbar machen, sind bei der Eingabe im UnivIS die folgenden Schritte durchzuführen:

  • Unter „Zusatzangaben“ das Häkchen bei „für diese Veranstaltung ist eine Anmeldung erforderlich“ setzen (siehe Screenshot).
  • In der Auswahlliste „Die Anmeldung erfolgt über…“ den Eintrag „mein campus“ auswählen.
  • Sind die Kapazitäten beschränkt, kann man die maximale Teilnehmerzahl einstellen und ebenso, ob es eine Warteliste gibt oder nicht.
  • Dann muss noch ein Anmeldungszeitraum ausgewählt werden.
  • Schließlich kann noch die Anmeldeheuristik spezifiziert werden. Momentan werden folgende Heuristiken unterstützt:
    • First Come First Serve: Das bekannte „wer zuerst kommt, mahlt zuerst“-Prinzip. Solange es freie Plätze gibt, ist eine Anmeldung möglich. Danach resultiert der Anmeldungsvorgang entweder in einem Wartelistenplatz, oder (wenn es keine Warteliste gibt) in einer Ablehnung.
    • Random: Alle Anmeldungen werden zunächst auf die Warteliste platziert. Nach Ablauf des Anmeldezeitraus erfolgt eine zufällige Auswahl aus der Warteliste. Diese Option ist natürlich nur sinnvoll, wenn eine maximale Teilnehmerzahl spezifiziert wurde.
    • Round Robin (oder „Gleichverteilung“). Hat eine Veranstaltung Kurse, werden Anmeldungen der Reihe nach auf diese verteilt.

Es ist übrigens möglich, für einzelne Kurse unterschiedliche Anmeldungszeiträume festzulegen. Und auch die maximale Teilnehmerzahl kann für jeden Kurs einzeln eingestellt werden.
Ein wichtiger Hinweis noch: Änderungen an anmeldbaren Veranstaltungen im UnivIS können nach Beginn des Anmeldezeitraums nur noch schwer in die Veranstaltungsverwaltung integriert werden. Daher erfolgt nach diesem Zeitpunkt kein Import der Daten mehr, bis dahin wird das UnivIS zyklisch ausgelesen und die VV aktualisiert. Es ist also wichtig, den UnivIS-Eintrag einer Veranstaltung zu finalisieren, bevor der für diese Veranstaltung spezifizierte Anmeldezeitraum beginnt.

Sneak Preview: Veranstaltungsverwaltung-Frontend

Der Starttermin der Veranstaltungsverwaltung (VV) rückt näher und daher wird es Zeit für einen ersten Einblick. Die VV wird als Modul in mein campus integriert und soll somit das gleiche „Look and Feel“ haben. Da mein campus für die Präsentationsschicht Velocity verwendet und wir für die VV das Framework Tapestry nutzen, wurde als erstes das mein campus Layout in einem eigenen Modul für die VV nachgebaut. Dieses wird dann auf jeder VV-Seite eingebunden und sorgt für das bekannte Aussehen.
Danach wurden die Funktionen für Dozenten-Sicht implementiert. Die Auswahl einer Veranstaltung erfolgt, wie z.B. bei der Notenverbuchung, aus einer nach Semestern sortierten Liste. Die folgenden Funktionen werden Dozenten beim Start der VV zur Verfügung stehen:

  • Teilnehmer für eine Veranstaltung anmelden
  • Teilnehmer aus einer Veranstaltung löschen
  • Teilnehmer benachrichtigen
  • Teilnehmer zwischen Warteliste und Teilnehmerliste verschieben
  • Teilnehmer von einem Termin einer Veranstaltung in einen anderen Termin verschieben

Der Eingangsbereich der Studenten-Sicht ist in zwei Bereiche gegliedert. Im oberen Bereich sind alle Veranstaltungen aufgelistet, für die der Student bereits angemeldet ist. Direkt in dieser Übersicht hat er die Möglichkeit sich von einer Veranstaltung wieder abzumelden. Weiterhin sieht er seinen Anmeldestatus, „Bestätigt“ oder „auf Warteliste“ (incl. Wartelistenplatz). Sollte es für diese Veranstaltung eine StudOn-Resource geben, so wird ein Link auf diese angezeigt. Zusätzlich zu diesem Link ist geplant, bestätigte Studenten per Webservice auch bei StudOn anzumelden.
Unter seinen angemeldeten Veranstaltungen findet er alle anmeldbaren Veranstaltungen seines Studienganges. Hier finden sich zusätzlich noch Informationen über den Status der Veranstaltung: „anmeldbar“, „noch nicht anmeldbar“ oder „Anmeldezeitraum vorüber“ sowie die bisherige Auslastung des Kurses. Weiterhin können sich Studenten noch alle anmeldbaren Veranstaltungen der Universität anzeigen lassen, hier gezielt Veranstaltungen suchen und sich dann für diese anmelden.

Video UnivIS-mein campus Schulung

Dank der tatkräftigen Unterstützung der RRZE Multimedia-Kollegen, ist das Video der Schulung zur UnivIS-mein campus Schnittstelle für Studiengangsverantwortliche online unter der URL
<http://giga.rrze.uni-erlangen.de/movies/IFB/20090527-Turowski-H.264-1280×480-AAC-64k-Mono-Combined.mov>
abrufbar. (Technische Information: MOV-Container mit H.264 Video-Codec/-Komprimierung.)
Das Video dauert knapp eine Stunde, in der Dr. Stefan Turowski (in dualer Funktion als Mitglied der Geschäftsführung der config eG und als stellvertretender technischer Direktor des RRZE) das Konzept der Zusammenschaltung von UnivIS-mein campus erklärt sowie den vollen Funktionsumfang der Schnittstelle beschreibt und demonstriert. Parallel zum Film werden die Vortragsfolien und die Bedienung der Schnittstelle eingeblendet.
In Kürze wird ein weiteres Video veröffentlicht werden, dieses Mal von einer Schulung für Modulverantwortliche, das die Nutzung der Schnittstelle aus Sicht dieser Rolle demonstriert.

HTTP-Requests, Hibernate Sessions und ThreadLocal

Kurz zum Hintergrund:
Hibernate kapselt Datenbank-Persistenz von der Anwendungslogik. Somit sind keine Low-Level-Datenbankoperationen mehr nötig, die entsprechenden SQL-Statements werden von Hibernate erzeugt. Im Hintergrund öffnet Hibernate die Verbindung zur DB, schickt Statements und stößt die Ausführung an (commit), dies alles im Kontext einer „Session“. Die Erzeugung einer Session ist keine teuere Operation, es wird in der Hibernate-Literatur empfohlen, möglichst kurze Sessions zu verwenden und bei Bedarf neue zu erzeugen.
In der ersten Implementierung der Veranstaltungsverwaltung gab es (sehr schlecht!!) nur eine Session pro Sitzung, d.h. beim Login wurde eine Session erzeugt, die erst bei der Abmeldung wieder freigegeben wurde. Um das Session-Objekt von den Objekten anderer angemeldeter Teilnehmer abzuschotten, wurde es als ThreadLocal an den aktuellen Thread gebunden. Folge war, dass in bestimmten Konstellationen Domänenobjekte veraltete Daten gespeichert hatten, denn ein neuer Request eines Browsers kann in einem anderen Thread abgesetzt werden als bisher.
Inzwischen ist ein Session-Per-Request implementiert, das heißt, dass für jeden Aufruf einer Seite eine neue Session erzeugt wird, die nach erfolgreichem Laden committed und beendet wird. Dies hat jedoch Auswirkungen:

  • Änderungen an der Datenbank (Update, Insert) werden erst ausgeführt, nachdem ein commit() auf die Transaktion der Session aufgerufen wurde. Bei Session-Per-Request kommt dieses commit eigentlich zu spät, nämlich erst nach der Darstellung des Inhalts der Seite. Daher muss das commit() bei Änderungsaktionen explizit angestoßen werden.
  • Objekte, die nicht an eine Session gebunden sind, verursachen Fehler, sobald sie auf ihre Felder zugreifen wollen (Hibernates Lazy Loading – DB-Aktionen werden erst ausgeführt, wenn das Objekt tatsächlich benötigt wird, an sich eine gute Sache) oder selbst wieder persistiert werden sollen („Hibernate: no session or session was closed“). Auch auf solche Fälle muss daher in Zukunft sorgfältig geachtet werden.

Anmeldeheuristiken

In der Veranstaltungsverwaltung wird es zwei Arten von Heuristiken geben. Zum einen Heuristiken bei denen der Teilnehmer direkt für eine Veranstaltung oder einen Termin angemeldet wird und zum anderen Heuristiken bei denen alle Teilnehmer erstmal auf eine Warteliste kommen und die vorhandenen Plätze zu einem Zeitpunkt, anhand bestimmter Kriterien verteilt werden.
Für den Start der Veranstaltungsverwaltung sind erstmal die folgenden Heuristiken geplant. Bei diesen beiden Heuristiken werden die Anmeldungen direkt durchgeführt.

  • First-Come-First-Served (FCFS)
  • Automatische Gleichverteilung (Round-Robin)

First-Come-First-Served: Bei dieser Heuristik kann der Teilnehmer einen konkreten Termin der Veranstaltung wählen und sich für diesen anmelden. Dabei wird er sofort auf der Teilnehmerliste eingetragen, außer der gewählte Termin ist bereits belegt. In diesem Fall erscheint ein Warnhinweis mit der Option sich für diesen Termin auf eine Warteliste einzutragen.
Automatische Gleichverteilung: Hier werden die Anmeldungen nach Eingang direkt auf die einzelnen Termine verteilt. Dabei wird zunächst jeder Kurs mit einem Teilnehmer befüllt, dann mit einem zweiten und so weiter, bis alle Kurse voll sind. Weitere Anmeldungen kommen auf eine Warteliste für die Veranstaltung.
 
In zukünftigen Versionen der Veranstaltungsverwaltung werden dann weitere Heuristiken zur Verfügung stehen. Unter anderen werden das die Folgenden sein.
Losverfahren: Beim Losverfahren werden alle Anmeldungen gesammelt und zu einem festen Zeitpunkt werden aus diesen die Kursteilnehmer per Zufall ermittelt und dann verteilt. Auch hier gibt es die Option die nichtberücksichtigten Anmeldungen auf einer Warteliste zu hinterlegen.
Equal Balancing: Die Anmeldung bereits stark ausgelasteter Termine wird solange geschlossen, bis weniger ausgelastete Termine „aufgeholt“ haben.
Präferenzauswahl: Die Anmeldungen werden gesammelt und bei jeder Anmeldung sind drei Termine mit entsprechender Präferenz (1-3) anzugeben. Nach Anmeldeschluss versucht die Heuristik eine Verteilung zu finden, so dass möglichst viele Erst- und Zweitpräferenzen berücksichtigt werden.

Komponenten der Veranstaltungsverwaltung

Die Veranstaltungsverwaltung wurde von uns in zwei Komponenten aufgeteilt. Die Komponente vv-core ist für das Backend der Veranstaltungsverwaltung zuständig und die Komponente vv-web für das Frontend. Neben diesen beiden Komponenten gibt es noch weitere, die für bestimmte Aufgaben innerhalb der Veranstaltungsverwaltung zuständig sind.
Die Aufgaben der Backendkomponente vv-core umfassen hauptsächlich die folgenden Bereiche:

  • Import aller anmeldbaren Veranstaltungen und ihrer Kurse von UnivIS in die Veranstaltungsverwaltung.
  • Anbindung an die Datenbanken der Veranstaltungsverwaltung und von mein campus. Aus der Datenbank von mein campus bezieht die Veranstaltungsverwaltung alle Daten die Dozenten und Studenten betreffen. In der eigenen Datenbank werden die von UnivIS importierten Veranstaltungen und Kurse sowie ihre „Teilnehmer“ gespeichert.
  • Entwicklung der Heuristiken für die Anmeldung. Mit dem Start der VV kommen mindestens die beiden Heuristiken First-Come-First Served und die Gleichverteilung in Kurse.
  • Verwaltungsaufgaben, wie z.B. dem Überprüfen von Nutzerrechten für geplante Aktionen.

Im Frontend vv-web laufen alle Fäden zusammen. Alle anderen Komponenten, auch der vv-core, werden hier eingebunden um ihre Funktionalitäten zu nutzen. Weiterhin werden in dieser Komponente alle Webseiten der Veranstaltungsverwaltung generiert. Um z.B. die Übersichtsseite aller angemeldeten Teilnehmer einer Veranstaltung zu generieren, werden alle benötigten Daten aus dem vv-core abgerufen. Die Präsentation, z.B. in Tabellenform, erfolgt mittels vorgefertigter Elemente des vv-webs. Das aus mein campus bekannte Layout, wurde für die Veranstaltungsverwaltung in eine eigene Komponente ausgegliedert und wird auf jeder erzeugten Webseite eingebunden.

Lebenszyklus einer Veranstaltung

In der Veranstaltungsverwaltung durchlaufen Veranstaltungen und Kurse ein Lebenszyklus-Modell. Dieses ist nötig um bestimmten Nutzergruppen in den unterschiedlichen Phasen des Modells den Zugriff auf Aktionen zu ermöglichen oder diesen zu verweigern. Diese Phasen des Lebenzyklus wurden wie folgt eingeteilt:
LifeCycleState = {PUBLISHED, REGISTRATION_PERIOD, DISTRIBUTION_PERIOD, RUNNING_PERIOD, FINISHED}
PUBLISHED: Eine Veranstaltung die von dem Dozenten ins UnivIS eingestellt und in die Veranstaltungsverwaltung importiert wurde. Wärend dieser Phase sieht der Student die Veranstaltung, mit allen Informationen, kann aber noch keine Aktionen tätigen.
Mit Beginn des Anmeldezeitraum ändert sich der Lebenszyklus automatisch zu REGISTRATION_PERIOD. Studenten können sich nun anmelden und Dozenten erhalten einen Überblick wie stark die Veranstaltung ausgelastet ist.
Nach dem Ende des Anmeldezeitraums wird die Phase DISTRIBUTION_PERIOD aktiv. In dieser Phase werden die Teilnehmer mittels der gewählten Heuristik automatisch der Veranstaltung oder, falls die Veranstaltung Kurse hat, einem Kurs zugeordnet. Nach dieser Zuordnung geht eine Email an alle angemeldeten Studenten mit ihrem Status.
Während der Durchführung der Veranstaltung befindet sich diese in der Phase RUNNING_PERIOD. Da sich Studenten evtl. für unterschiedliche Veranstaltungen angemeldet haben und dadurch Terminüberschneidungen möglich sind, können sich Studenten in dieser Phase noch abmelden. Dozenten können dann den freien Platz durch einen Nachrücker von der Warteliste auffüllen.
Nach Beendigung der Veranstaltung bekommt die Veranstaltung die Phase FINISHED. Alle Aktionen, mit Ausnahme der Benachrichtigungsfunktion, sind nun für die verschiedenen Benutzergruppen gesperrt. Dozenten können sich zusätzlich noch die Teilnehmerlisten ausdrucken.

Eine Veranstaltung hat keine Teilnehmer

Bei der Konzeption der  Veranstaltungs-Anmeldung dachten wir zunächst daran, dass es eine Teilnehmerliste und eventuell eine Warteliste pro Veranstaltung geben geben sollte. Dies erwies sich jedoch bald als zu unflexibel:
Was zum Bespiel tun bei Anmeldeheuristiken wie RoundRobin? Hier meldet man sich für einen Course an, die Zuteilung zu einem bestimmten Track (zu diesen Begriffen siehe meinen letzen Blogpost) erfolgt aber durch das System. Ähnlich bei Losverfahren bei einem Course mit Tracks. Hier resultiert die Anmeldung darin, dass der Angemeldete zunächst in einer virtuellen Warteliste des Courses gespeichert ist; erst wenn die Verlosung der Plätze durchgeführt wird, erfolgt die Verteilung auf einzelne Tracks – die selbst aber keine Warteliste haben.
Wir haben uns für ein Subscription-Objekt entschieden, in dem die Verbindung zwischen Teilnehmer und Veranstaltung gespeichert wird:
Subscription(Course course, Track track, Participant participant, Subscriptiontype type)
Subscriptiontype := {SUBSCRIBED|WAITINGLIST|UNSUBSCRIBED}
Eine Veranstaltung hat somit eine Liste aus Subscriptions und über deren Type kann Teilnehmer- und Warteliste dynamisch extrahiert werden.
Also, wie im Titel des Posts: Eine Veranstaltung hat keine Teilnehmer, sondern Subscriptions mit Subscriptiontype=SUBSCRIBED
 

Veranstaltungen und Kurse

Die übliche Ausprägung einer Veranstaltung an einer Universität (egal ob Vorlesung, Übung, Seminar oder sonstiges) ist:

  • ein Veranstaltungsname
  • eine bestimmte Zeit und ein Ort für die Durchführung
  • ein Dozent

Jeder kennt jedoch Veranstaltungen, die wegen hoher Teilnehmerzahlen aufgeteilt werden – beispielsweise eine Übung im Grundstudium Informatik mit hunderten von Teilnehmern, bei der jede Übungsgruppe jedoch eine Maximalzahl an Teilnehmern hat. Als Student muss man nur eine der Ausprägungen besuchen, also zum Beispiel die Übung montags 14:00 bis 16:00 Uhr.
Die UnivIS-Nomenklatur hierfür ist „Veranstaltung“ und „Kurs“. Das heißt, eine Veranstaltung kann – muss aber nicht – mehrere untergeordnete Kurse haben. Der Besuch eines dieser Kurse bedeutet den Besuch der Veranstaltung.
Die Veranstaltungsverwaltung bildet diese Struktur natürlich ebenfalls ab, allerdings mit englischen Bezeichnern:

  • UnivIS-Veranstaltung = Course
  • UnivIS-Kurs = Track

Wegen der phonetischen Ähnlichkeit von „Course“ und „Kurs“ ist es geboten, sich an eine der Nomenklaturen zu halten und dies vor dem Gespräch abzuklären.
Ein Track erbt von seinem Course einige Stammdaten wie die Zuordnung zu einem Studiengangsmodul oder die Anzahl der Credits, die bei erfolgreichem Besuch vergeben werden. Tracks eines Courses können sich jedoch unterscheiden in Bezug auf

  • Dozenten
  • Zeit und Ort
  • und natürlich unterscheiden sie sich durch die Teilnehmer, es sei denn, ein Student möchte doppelte Arbeit leisten 😉

Erweiterung des CIT-Teams

Seit Mitte Januar ist das CIT-Team um zwei neue Mitglieder erweitert.  Eines davon bin ich, daher möchte ich mich in aller Kürze vorstellen:
Mein Name ist Peter Reiß, in Bamberg geboren und seit dem Studium (Computerlinguistik) in Erlangen. Nach dem Studium war ich sechs Jahre lang am Lehrstuhl Informatik 8 als wissenschaftlicher Mitarbeiter beschäftigt, wo ich im Sommer auch promoviert habe. Im CIT-Projekt werde ich mich vor allem um die Integration der Veranstaltungsverwaltung in das bisherige Framework kümmern – eine Aufgabe, auf die ich mich freue!