RRZE – Projekte & Prozesse (P&P)

Das Blog der RRZE Stabsstelle "Projekte & Prozesse"

Content

gs-admin Version 3.4.9

Neu:
– Aktivierung wird nicht durchgeführt, wenn bereits ein anderer Eintrag mit gleichem Vor- und Nachnamen und Geburtsdatum aktiviert ist.
– trimmer-plugin: Leerzeichen zu Beginn und am Ende von Strings werden vor dem Speichern grundsätzlich entfernt
– Optimierungen Statistik

New:
– Activation is not performed if another entry is already activated with the same first and last name and date of birth.
– Trimmer-plugin: spaces at the beginning and end of strings are generally removed before saving
– Optimized statistics

Postgres, Serials und Rules: Achtung!

Achtung bei folgender Konstellation:
[sql]
CREATE TABLE source
(
id serial NOT NULL,
“text” character varying(255),
CONSTRAINT id_pkeyPRIMARY KEY (id)
)
[/sql]

mit Regel:
[sql]
CREATE RULE “insert_rule” AS
ON INSERT TO source DO  INSERT INTO dest (sourceid)
VALUES (NEW.id);
[/sql]

Serial und Bigserial sind in Postgres intern so konzipiert, dass der Wert für das Feld durch einen Aufruf von
[sql]
nextval(‘source_id_seq’)
[/sql]
erzeugt wird. Entgegen der Erwartung wird nach Ausführen der Regel aber nicht source.id in die Tabelle dest eingetragen, sondern source.id +1. Bug oder einfach so gewolltes Verhalten von Postgres? In der Postgres-Dokumentation zu Regeln findet sich zumindest ein entsprechender Kommentar:
“Beware that CREATE RULE insert_foo AS ON INSERT TO foos DO ALSO INSERT INTO bar (foo_id) VALUES (NEW.id); won’t work if foo.id is a serial (and foo_id REFERENCES foos ofcourse) because nextval() is evaluated twice.”

Sauberste Lösung: Hier keine Regel, sondern einen Trigger verwenden.

Postgres, Serials and Rules: Caution!

Caution with the following constellations:
[sql]
CREATE TABLE source
(
id serial NOT NULL,
“text” character varying(255),
CONSTRAINT id_pkeyPRIMARY KEY (id)
)
[/sql]

with rule:
[sql]
CREATE RULE “insert_rule” AS
ON INSERT TO source DO  INSERT INTO dest (sourceid)
VALUES (NEW.id);
[/sql]

Serial and Bigserial are so in Postgres internally designed that the data for the field can be generated with the request of
[sql]
nextval(‘source_id_seq’)
[/sql]
Against all expectations after carrying out the rule it is not source.id which is filled into the table dest but source.id +1. Bug or simply unwanted behavior of Postgres? In the Postgres-Documentation the rules can be found at least in on depending commentary:
“Beware that CREATE RULE insert_foo AS ON INSERT TO foos DO ALSO INSERT INTO bar (foo_id) VALUES (NEW.id); won’t work if foo.id is a serial (and foo_id REFERENCES foos ofcourse) because nextval() is evaluated twice.”

Cleanest solution: Do not use a rule here but a trigger.

DocDaten 2.0.2 online

Heute wurde die Version 2.0.2 der Promovierendenverwaltung online gestellt. Die Verbesserungen sind vor allem für die Mitarbeiter der Promotionsbüros relevant. So können E-Mails, mit denen Dokumente von den Promovierenden angefordert werden, nun individuell ergänzt werden.
Sichtbar für alle Nutzer der Registrierung ist die neu gestaltete kontextbezogene Hilfe.

DocDaten 2.0.2 online

Today the version 2.0.2 of the PhD-student management went online. The improvements are especially relevant for the PhD offices. E-mails, with which documents can be requested from the PhD-students can now be individually adjusted.

Visible for every user of the registration is the new designed context based help.

Properties einer Grails-Domänenklasse auslesen

Bei der Deklaration einer Domänen-Klasse in Groovy wird auf die Bean-Notation für Variablen (Variable deklariert als private, zusätzlich Getter und Setter) verzichtet. Stattdessen werden sogenannte Properties definiert, die durch Groovy intern in Java-Beans umgewandelt werden.
[groovy]
class MyTest {
Long id
String val1, val2
}
[/groovy]
Oftmals ist es nötig, die Liste der Properties auszulesen, etwa um ein Objekt in ein anderes zu mappen. Hierfür bietet Groovy die Methode getProperties():
[groovy]
def x = new MyTest()
x.properties.each { key, value ->
println “Property ${key}. ${value}”
}
[/groovy]

Hier tauchen aber plötzlich Properties auf, die in MyType gar nicht definiert wurden, wie version, class, metaClass, constraints! Grails Magic, hier wurden durch das Grails-Framework weitere Properties hinzugefügt!

Wie kommt man nun an die Liste nur der selbst definierten Properties? Die Antwort liegt bei den persistentProperties, die in der Klasse liegen. Diese erreicht man über die DefaultGrailsDomainClass.
[groovy]
def persistentProps = new DefaultGrailsDomainClass(MyTest.class).persistentProperties
persistentProps.each {
println “${it.name}”
}
[/groovy]
Et Voila: Die Liste der persistenten Properties, in aller Regel der selbstdefinierten.

 

Read Properties of a Grails Domain Class

With the declaration of a domain class in  Groovy it is done without a Bean-Notation for variables (variable declared as  private, furthermore Getter and Setter). Instead so called properties are defined which are changed internally into Java-Beans by Groovy
[groovy]
class MyTest {
Long id
String val1, val2
}
[/groovy]
It is often necessary to read out the list, for example to map an object into another. Therefore Groovy offers the methode getProperties():
[groovy]
def x = new MyTest()
x.properties.each { key, value ->
println “Property ${key}. ${value}”
}
[/groovy]

At this points properties suddenly appear which haven’t been defined like version, class, metaClass, constraints! Grails Magic, further properties have been added by the Grails-Framework!

So how do you get the list of the self defined properties only? The answer lies within the persistentProperties, which are within the class. You can reach it via DefaultGrailsDomainClass.
[groovy]
def persistentProps = new DefaultGrailsDomainClass(MyTest.class).persistentProperties
persistentProps.each {
println “${it.name}”
}
[/groovy]
Et Voila: The list of persistent properties, usually the self defined.

VV – was ist das?

English Version

Die Veranstaltungsverwaltung (VV) ist ein Modul der Online-Serviceplattform mein campus. Die Plattform dient Studenten und Prüfern der FAU zur Verwaltung von Prüfungen (An- und Abmeldung, Noteneingabe, Noteneinsicht, Transcript of Records) und bildet Bologna-konform die Studiengänge der Universität ab.
Bald nach der Einführung von mein campus wurde deutlich, dass analog zur Prüfungsverwaltung ein ähnliches Modul zur Verwaltung von Veranstaltungen nötig ist. Da ein solches nicht im Lieferumfang der Software existierte, wurde nach ausführlicher Analyse der Anforderungen und der bestehenden Anmeldungs-Insellösungen eine Eigenentwicklung in Angriff genommen.
Ziel war es, Dozenten einen Überblick über die Teilnehmer der Lehrveranstaltungen zu geben. Mit der VV werden Lehrangebote administriert sowie An- und Abmeldungen durchgeführt. Zudem ist eine einfache Kommunikation zwischen Lehrenden und Teilnehmern der Veranstaltung möglich.
Die Entscheidung, UnivIS als etabliertes zentrales Datensystem beizubehalten und Veranstaltungen von dort zu importieren wurde getroffen, um Dozenten die Mühe und fehlerträchtige Arbeit der mehrfachen Eingabe von Veranstaltungsdaten zu ersparen.
Die rege Nutzung des Moduls zeigt, dass in der Tat großer Bedarf an der durch die VV bereitgestellten Funktionalität bestand – ca. 10% aller Veranstaltungen nutzen die neuen Möglichkeiten.

VV – What is it?

The event management (VV) is a module of the online service platform mein campus. The platform is used by students and examiner of the FAU to manage exams (sign on and sign off, entry of grades, transript of records) and displays, conform to Bologna, the study courses of the university.

Soon after its intruduction of mein campus it became clear that analogue to the exam management a similar model for the management of events is needed.
Because software of this kind wasn’t included in the package, a self developed solution was tackled, after extensive analysis of the requirements and the existing isolated sign on application.

The aim was to give the professors an overview of the participants of their lectures. With VV the scope of lectures offered are administrated and sign on and sign off actions are made. Furthermore, an easy communication between lecturers and participants of the lecture is possible.

The decision to keep UnivIS as an established central data system and to import events from there was made to spare the professors further work and a source of errors whilst multiple entry of lecture data.

The active use of this module shows that there is indeed a big demand of the through VV supplied functionality after all – ca. 10% of all events use the new possibilities.

Logging von Grails-Applikationen in JBoss

Kurzanleitung:

  • Aus Classloader-Gründen darf die Applikation nicht eine eigene log4j-xxx.jar beinhalten. Diese kann aus dem war-file entfernt werden durch folgenden Eintrag in BuildConfig.groovy:
    [groovy]
    grails.war.resources = { stagingDir ->
    delete(file:”${stagingDir}/WEB-INF/lib/log4j-1.2.16.jar”)
    delete(dir:”${stagingDir}/WEB-INF/classes/org/grails/tomcat”)
    }
    [/groovy]
    (Der Eintrag mit tomcat ist für das Thema hier nicht relevant, entfernt aber unnötige Klassen aus dem war-file.)
  • Die Grails-Log4j-Konfiguration aus Config.groovy wird im JBoss nicht ausgewertet. Daher sind die Einträge in der JBoss-Log4j-Konfiguration ${JBOSS}/server/default/conf/jboss-log4j.xml nachzuziehen.
    Beispiel für Controller:
    [xml]
    <category name=”grails.app.controller.MyController”>
    <priority value=”INFO”/>
    </category>
    [/xml]
    Man beachte auch das “grails.app.controller“-Präfix!
  • Eine weitere Seltsamkeit ist, dass nach einem Undeploy oder Redeploy eines Grails-war-files das Logging des JBoss komplett beendet wird, d.h. absolut nichts mehr in die Logdatei geschrieben wird. Den Grund und eine saubere Lösung dafür habe ich noch nicht gefunden, aber als Workaround ist es möglich, ein touch auf ${JBOSS}/server/default/conf/jboss-log4j.xml auszuführen. Da diese Konfiguration regelmäßig eingelesen wird, erscheinen die Logmeldungen wieder.

Logging of Grails application in JBoss

Brief administration:

  • Because of  Classloader reasons the application can not have an own  log4j-xxx.jar. It can be deleted from the war-file with the following entry in  BuildConfig.groovy:
    [groovy]
    grails.war.resources = { stagingDir ->
    delete(file:”${stagingDir}/WEB-INF/lib/log4j-1.2.16.jar”)
    delete(dir:”${stagingDir}/WEB-INF/classes/org/grails/tomcat”)
    }
    [/groovy]
    (The entry with tomcat is not relevant for this topic, but deletes unnecessary classes from the war-file.)
  • The Grails-Log4j-configuration from Config.groovy is not evaluated in JBoss. Therefore the entries need to be moved in the JBoss-Log4j-onfiguration ${JBOSS}/server/default/conf/jboss-log4j.xml.
    Example for Controller:
    [xml]
    <category name=”grails.app.controller.MyController”>
    <priority value=”INFO”/>
    </category>
    [/xml]
    Keep the “grails.app.controller“-Prefix in mind!
  • Another oddity is that after an undeploy or redeploy of a Grails-war-file the logging of the JBoss will be completely closed,  which means that absolutely nothing is written in the log file. We haven’t found yet the reason and a clean solution for this problem, but as a Workaround it is possible to make a touch to ${JBOSS}/server/default/conf/jboss-log4j.xml. Because this configuration will be importet regularly the logging messages will reoccur.

Angebotskalkulation – was ist das?

 

English Version

Wirtschaftliche und nicht-wirtschaftliche Tätigkeiten öffentlicher Forschungseinrichtungen müssen getrennt werden, um die Anforderungen des EU-Gemeinschaftsrahmens für staatliche Beihilfen in Forschung, Entwicklung und Innovation zu erfüllen.

Gemäß AEUV (Vertrag über die Arbeitsweise der Europäischen Union) und EU-Beihilferahmen ist ein Unternehmen wie folgt charakterisiert:

  • Jede eine wirtschaftliche Tätigkeit ausübende Einheit, unabhängig von ihrer Rechtsform und der Art ihrer Finanzierung.
  • Wirtschaftlich tätig ist, wer Waren und/oder Dienstleistungen auf einem bestimmten Markt anbietet.

Das Problem für Forschungseinrichtungen wie Universitäten besteht darin, dass sie in der Regel sowohl wirtschaftlich, als auch nicht-wirtschaftlich tätig sind.

Als Konsequenz daraus ergibt sich, dass die staatliche Finanzierung der nicht-wirtschaftlichen Tätigkeit nicht unter Art. 107 (1) AEUV fällt, wenn die beiden Tätigkeitsformen und ihre Kosten und Finanzierungen eindeutig voneinander getrennt werden können. Seit Januar 2009 ist daher eine sogenannte Trennungsrechnung erforderlich, die die wirtschaftlichen Tätigkeiten der Hochschule von nicht-wirtschaftlichen trennt – damit sollen Quersubventionierungen vermieden werden. Eine unzulässige Beihilfe bei wirtschaftlicher Tätigkeit besteht dann nicht, wenn

  • Dienstleistungen zu Marktpreisen
  • oder bei fehlenden Marktpreisen zu Vollkosten plus angemessener Gewinnspanne

erbracht werden.

Die Angebotskalkulationwurde durch die ZUV, Abteilung F1 (Forschungsförderung, Drittmittel und Rechtsangelegenheiten), bei Projekte & Prozesse in Auftrag gegeben. Ziel ist es, Einrichtungen der Universität Erlangen-Nürnberg bei Durchführung eines Projektes ein Werkzeug an die Hand zu geben, das die Dokumentation dieses Sachverhalts erleichtert.

Browsergestützt werden in der Angebotskalkulation die relevanten Daten der Projekte wie Personal- oder Sachkosten erfasst und so aufbereitet, dass zum Einen ein schneller Überblick über den Kostenrahmen des Projekts gegeben wird, zum Anderen die beschriebenen Voraussetzungen zur Dokumentation der Trennung zwischen wirschaftlicher und nicht-wirtschaftlicher Tätigkeit erfüllt sind.

 

Fee Calculation – What is it?

Commercial and non-commercial jobs in public research facilities need to be separated to fullfill the requirements of the  EU-Communitiy Framework for state aid for research, development and innovation.

According to the TFEU (Treaty on the functioning of the European Union) and  Community Framework for state aid a business is charakterised as following:

  • Every unit working on a commercial job, independent of its legal form and form of funding.
  • Commercial work is doing everybody who offers goods and/or services on a specific market.

The problem for research facilities like universities is that they are usually working on commercial as well as non- commercial jobs.

A consequence of this matter is that the governmental funding of non-commercial jobs does not depend on Art. 107 (1) TFEU, if both job forms and their costs and fundings can be clearly separated from each other. Since January 2009 a so called partition calculation  is needed, which separates commercial jobs of the university from non-commercial – so that cross-subsidies can be avoided. An unacceptable aid for commercial jobs is not given, if

  • services for market prices
  • or with missing market prices for full costs plus adequate margin o

are given.

The fee calculation via the ZUV  Abteilung F1 (Forschungsförderung, Drittmittel und Rechtsangelegenheiten) is commissioned at Projects & Processes. The goal is to give the facilities of the University Erlangen-Nuremberg tools for the accomplishment of a project which makes the documentation of the issue easier.

Browser supported, in the fee calculation relevant data of the projects, like personnel or material costs, are collected and formated in a way that on the one hand a quicker overview of the cost frame of the project can be given and on the other hand the mentioned preconditions for documentation of separation of commercial and non-commercial jobs can be fullfilled.

 

Dr. Peter Reiß

Wie mein Chef Dr. Hergenröder wurde ich in der Weltkulturerbestadt Bamberg geboren und lebte dort bis zum Ende meines Zivildienstes.

Daraufhin studierte ich an der Friedrich-Alexander-Universität Computerlinguistik mit den Nebenfächern Germanistsche Linguistik und Informatik. Nach Abschluss des Studiums (Magister Artium) wechselte ich von der Philosophischen Fakultät an die Technische Fakultät und wurde wissenschaftlicher Mitarbeiter am Lehrstuhl Informatik 8 (Künstliche Intelligenz). Dort forschte ich vor allem in den Bereichen Natürlichsprachliche Dialogsysteme und Assistenzsysteme und promovierte 2008 zum Dr.-Ing.

Seit Januar 2009 arbeite ich am RRZE. Mein Hauptaufgabengebiet war zunächst die Veranstaltungsverwaltung in der Online-Serviceplattform mein campus. Diese wurde von Grund auf neu implementiert, im Oktober 2009 startete der neue Dienst.

Seit Oktober 2010 bin ich stellvertretender Leiter der Abteilung Projekte & Prozesse des RRZE.

Kontaktieren Sie mich oder finden Sie mich in XING!

Dr. Peter Reiß

Like my chief Dr. Hergenröder I was born in the World Heritage Site Bamberg where I went to school and did my civilian service.

I studied Computational Linguistics (subsidiary subjects: german linguistics and computer sciences) at the Friedrich-Alexander-University Erlangen-Nuremberg and finished my studies in 2002. After that I worked at the Chair of Computer Science 8 (Artificial Intelligence) as a scientific employee. My main research topics were Natural Language Dialogue Systems and Assistence Systems. I wrote my doctorate on “Self Explaining Assiscence Systems” under Prof. Görz.

In January 2009 I started working at University Erlangen-Nuremberg’s Regional Computing Centre. My first main task has been to write the software for a new module for the administration of lectures in the service platform mein campus.

Since October 2010 I am deputy manager of the staff unit “Projects & Processes“.

Contact Information or find me on XING!

Promovierendenverwaltung wird selbständig

English Version

Mit Version 5.1 von mein campus wird die Promovierendenverwaltung der Graduiertenschule der Friedrich-Alexander-Universität auf einen eigenen Internet-Auftritt ausgegliedert. Sie ist seit Mittwoch, 17.11. unter der URL https://www.docdaten.uni-erlangen.de zu erreichen.

Unter dieser Adresse können Promotionen registriert werden, registrierte und freigeschaltete Promovenden haben Einsicht in ihre Daten (Benutzername und Passwort bleiben hier unverändert). Zugleich mit der Ausgliederung hat sich auch der Funktionsumfang erweitert:

Neue Features bei der Registrierung von Promotionen:

  • Datenübernahme aus mein campus für (ehemalige) Studierende der FAU ist möglich!Nach Eingabe von Benutzername und Passwort werden persönliche Daten sowie sowie Informationen über Studiengang und -abschluss aus mein campus ausgelesen und in das Registrierungsformular übertragen.
  • Die Registrierung kann zwischengespeichert werden, woraufhin ein Link per E-Mail zugesandt wird, unter dem sie innerhalb zwei Wochen fortgesetzt werden kann. Nach zwei Wochen werden nicht vollständige Registrierungen gelöscht, um Datenmüll zu vermeiden.

Neue Features bei Dateneinsicht:

  • Eine PDF-Ansicht der Daten kann erzeugt und heruntergeladen werden.

Zudem gibt es einige neue Funktionen für die Administratoren des Systems

Wir wünschen viel Spaß mit Docdaten!

PhD Administration becomes independent

With version 5.1 of mein campus the PhD administration of the grad school of the Friedrich-Alexander-Universität will be removed to its own internet appearance. You can reach it since Wednesday, 17.11. under the URL  https://www.docdaten.uni-erlangen.de  .

Under this adress PhD-students can be registered, already registered and activated PhD-students can view their data (username and password remain unchanged here). At the same time with the new appearance the functional range has expanded:

New features at the registration of PhD-students:

  • Data transfer from mein campus for (former) students of the FAU is possible! After inserting username and password, personal data as well as information on the study course and degree can be read from mein campus and be transfered into the register form.
  • The registration process can be saved within, whereupon a link is sent vie e-mail under which the process can be continued within two weeks. After two weeks uncomplete registrations will be deleted to avoid data trash.

New features for data overview:

  • A PDF overview of data can be generated and downloaded.

Further there are some new functions for the admins of the systems.

We hope you have a lot of fun with Docdaten!

Spring, Maven und Variablen

Das Ziel ist: In der Spring-Konfiguration Platzhalter verwenden, die je nach Maven-Profil anders belegt werden.

pom.xml, hier muss Filterung konfiguriert werden:

  • Properties definieren:
    [xml]
    <properties>
    <location>remote</location>
    </properties>
    [/xml]
  • Ersetzung aktivieren, im build-Baum der POM bzw. des jeweiligen Profils. Dies ersetzt in den spezifizierten Dateien Einträge der Form ${location} durch die entsprechenden Werte:
    [xml]
    <resources>
    <resource>
    <directory>src${file.separator}main${file.separator}resources</directory>
    <filtering>true</filtering>
    <includes>
    <include>**${file.separator}*.xml</include>
    <include>*.xml</include>
    <include>**${file.separator}*.properties</include>
    <include>*.properties</include>
    </includes>
    </resource>
    <resource>
    <directory>src${file.separator}main${file.separator}resources</directory>
    <filtering>false</filtering>
    <excludes>
    <exclude>**${file.separator}*.xml</exclude>
    <exclude>*.xml</exclude>
    <exclude>**${file.separator}*.properties</exclude>
    <exclude>*.properties</exclude>
    </excludes>
    </resource>
    </resources>
    [/xml]

Spring-Konfiguration (applicationContext.xml in WEB-INF/):

  • placeholderConfig definieren:
    [xml]
    <bean id=”placeholderConfig”
    class=”org.springframework.beans.factory.config.PropertyPlaceholderConfigurer”>
    <property name=”locations”>
    <list>
    <value>classpath:ejb-configuration.properties</value>
    </list>
    </property>
    </bean>
    [/xml]
  • Variable verwenden:
    [xml]
    <jee:jndi-lookup id=”gradschoolManager” jndi-name=”GradschoolManagerBean/${location}”>
    <jee:environment>
    java.naming.factory.initial=org.jboss.naming.NamingContextFactory
    java.naming.provider.url=${java.naming.provider.url}
    java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
    </jee:environment>
    </jee:jndi-lookup>
    [/xml]

Jetzt muss nur noch eine entsprechende Properties-Datei angelegt werden, z.B. unter /src/main/resources:

[xml]
java.naming.provider.url=${java.naming.provider.url}
location=${location}
[/xml]

Wie läuft das ab?

Bei einem Maven-Lauf werden zunächst die Variablen in der Properties-Datei ersetzt. Spring ist so konfiguriert, dass die (ersetzten) Werte aus dieser Datei gelesen und genutzt werden.