RRZE – Projekte & Prozesse (P&P)

Das Blog der RRZE Stabsstelle "Projekte & Prozesse"

Content

JBoss And JBoss ESB Color-coded Logging

Farbcodiertes Logging für JBoss und JBoss ESB

English Version

Sowohl während der Entwicklung als auch in einer Produktivumgebung können nach Prioritäten farbcodierte Logs sehr nützlich sein. Die folgenden Logging Konfiguration werden auf den von PP genutzten JBoss und JBoss ESB Systemen verwendet.

  1. Die Konfiguration des JBoss Loggings ist in der Datei $JBOSS_HOME/server/default/conf/jboss-log4j.xml definiert. Der Standard ConsoleAppender kann durch den ANSIConsoleAppender ersetzt werden. Die Declaration sieht folgendermaßen aus:
  2.    <!--<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">-->
       <appender name="CONSOLE" class="de.rrze.ppsa.log.ANSIConsoleAppender">
          <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
          <param name="Target" value="System.out"/>
          <param name="Threshold" value="INFO"/>
     
          <layout class="org.apache.log4j.PatternLayout">
             <!-- The default pattern: Date Priority [Category] Message\n -->
             <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>
          </layout>
       </appender>

    Um ähnliche Farbcodierungen für den server.log zu erhalten, der ein anderes Farbschema benutzt, müssen die folgenden Änderungen vorgenommen werden:

       <!-- A time/date based rolling appender -->
       <appender name="FILE" class="org.jboss.logging.appender.DailyRollingFileAppender">
          <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
          <param name="File" value="${jboss.server.log.dir}/server.log"/>
          <param name="Append" value="false"/>
     
          <!-- Rollover at midnight each day -->
          <param name="DatePattern" value="'.'yyyy-MM-dd"/>
     
          <!-- Rollover at the top of each hour
          <param name="DatePattern" value="'.'yyyy-MM-dd-HH"/>
          -->
     
          <layout class="org.osuosl.logging.ANSIColorLayout">
             <!-- The default pattern: Date Priority [Category] Message\n -->
             <param name="ConversionPattern" value="%d %-5p [%c{1}] %m%n"/>
     
             <!-- The full pattern: Date MS Priority [Category] (Thread:NDC) Message\n
             <param name="ConversionPattern" value="%d %-5r %-5p [%c] (%t:%x) %m%n"/>
              -->
          </layout>
       </appender>
  3. Zuletzt muss ppsa-log4j-color-0.0.1.jar zum JBoss classpath hinzugefügt werden. Dies wird dadurch erreicht, dass man es in die $JBOSS_HOME/server/default/lib kopiert. Die Jar-Datei enthält sowohl den ANSIConsoleAppender als auch die ANSIColorLayout Klassen.
  4. Nicht vergessen, den Server danach neu zu starten.

Die vorgeschlagene Lösung basiert auf dem ANSIColorAppender, geschrieben von Dan Dyer und dem ANSIColorLayout von Peter Krenesky.

During development cycle or in a productive environment color-coded log messages based on their priority can prove pretty useful. The following logging configurations are deployed on the JBoss and JBoss ESB systems used by PP:

  1. The JBoss loggin configuration is defined in the $JBOSS_HOME/server/default/conf/jboss-log4j.xml file. The standard ConsoleAppender can be exchanged with the ANSIConsoleAppender. Declaration change looks like that:
  2.    <!--<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">-->
       <appender name="CONSOLE" class="de.rrze.ppsa.log.ANSIConsoleAppender">
          <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
          <param name="Target" value="System.out"/>
          <param name="Threshold" value="INFO"/>
     
          <layout class="org.apache.log4j.PatternLayout">
             <!-- The default pattern: Date Priority [Category] Message\n -->
             <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>
          </layout>
       </appender>

    in order to get similar color-coding(this one uses different color scheme) for the server.log the following changes have to applied:

       <!-- A time/date based rolling appender -->
       <appender name="FILE" class="org.jboss.logging.appender.DailyRollingFileAppender">
          <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
          <param name="File" value="${jboss.server.log.dir}/server.log"/>
          <param name="Append" value="false"/>
     
          <!-- Rollover at midnight each day -->
          <param name="DatePattern" value="'.'yyyy-MM-dd"/>
     
          <!-- Rollover at the top of each hour
          <param name="DatePattern" value="'.'yyyy-MM-dd-HH"/>
          -->
     
          <layout class="org.osuosl.logging.ANSIColorLayout">
             <!-- The default pattern: Date Priority [Category] Message\n -->
             <param name="ConversionPattern" value="%d %-5p [%c{1}] %m%n"/>
     
             <!-- The full pattern: Date MS Priority [Category] (Thread:NDC) Message\n
             <param name="ConversionPattern" value="%d %-5r %-5p [%c] (%t:%x) %m%n"/>
              -->
          </layout>
       </appender>
  3. At last the ppsa-log4j-color-0.0.1.jar has to be added to the JBoss classpath. This can be achieved by copying it in the$JBOSS_HOME/server/default/lib. This jar file contains the ANSIConsoleAppender and the ANSIColorLayout classes.
  4. Do not forget to restart the server.

The proposed solution is based on the ANSIColorAppender written by Dan Dyer and the ANSIColorLayout provided by Peter Krenesky.

Refactoring WAID

WAID is build-up of various, separately developed, components which are combined in a monolithic application. The application is structured and deployed as a single web application archive(war). The above mentioned components are of different granularity and perform tasks related to business logic, data fetching, presentation, transformation and so on. Refer to Fig.1 for a simplified diagram:

Architektur (Komponenten) von WAID

Splitting the application into small parts during the development cycle proved to be more than useful for code maintenance and rapid on-demand changes. Similar component-based approach is now proposed for the runtime structure of the application. The idea is to break up the application into smaller business-logic-based parts which can be easily exchanged during runtime without or with insignificant downtimes. Downtimes should occur only at redeployment of components which are directly related to user sessions. The exchange of all other underlying components should happen transparent to the users of the application. A simplified version of WAID’s current runtime architectural design can be seen on Fig.2. The application is started by deploying the web application archive into a JBoss AS. The JBoss server initializes a Spring (springframework) context, which is depicted by orange on Fig.2. The Spring framework is responsible for linking together the different runtime components. The most important component is idmone-core. This module is itself a Spring project which is developed separately and is responsible for the back-end functionality related to interacting with MetaDirectory. This project is only configured and used within the web application. Security is provided by the spring-security module, which is not shown on the Fig.2 but it closely couples with the Tapestry module, so these are represented by a single block. The Tapestry module is responsible for rendering the web page templates. Other required components are added within the Spring context to provide additional functionality. The pdf-generator module is shown on Fig.2 as an example of these type of components. The current implementation is focused on combining different projects into a single web application. The Spring framework provides the necessary flexibility and configuration options. The newly proposed component paradigm does the same but at runtime. Components are bound together when requested and not at initialization time. This allows for changing the underlying components implementation without re-deployment of the dependent applications. This would also allow for a better load distribution because different components can run on different machines. Generating pdf files, for example, can consume quite a lot of CPU cycles and memory. Distributing components to different machines can provide better performance but at the same time can make components reusable. Thus it would be possible to share a runtime component between applications – for example, pdf generation utilities can be used by several applications. An additional advantage is that in case of a bug fix only a single instance of a component is to be replaced. This would clearly prevent repackaging all applications that use it.

Struktur von WAID vor Refactoring

At the same time the proposed paradigm enables a major conceptual shift to Service Oriented Architecture(SOA). To put it short, the idea is instead of combining smaller projects into bigger applications, to start building up composite applications. These will consist of different runtime-bound services. The services will provide distributed business logic instead of packaged functionality. Once a certain degree of “service orientation” is achieved it would be possible to start using enterprise integration design patterns to accommodate better communication between the different systems involved. A proof of concept has been developed and a schematic view of the proposed solution is shown on Fig.3.

WAID Struktur nach Refactoring

At first glance there is not much of a difference. However, the yellow components are Enterprise Java Beans(EJBs) and run outside the web application. These can be looked up by the web application and used. EJBs have two type of interfaces local and remote. On the figure the local interface is depicted in pale blue and is the one connected with WAID. Technically this type of interface is used in the case when both modules run within the same application server, thus enabling data exchange with better performance. Although idmone-core exposes its functionality in the form of EJBs these are still initialized by a Spring context, depicted with green on Fig.3. Several developers share the opinion that Spring and JEE are excluding and competing standards but in our case these seem to form a symbiosis.

At the same time a proposal is evaluated to deploy the application as an exploded war file to accommodate on-the-fly changes. This proposal is done for the purpose of fixing typos, translation errors and similar. The same technique was tested, as a proof of concept, for implementing complex changes such as registering or unregistering existent Tapestry components on a page. So far , the concept seems useful but raises questions related to stability, reliability and can lead to inconsistencies if not thoroughly thought through. By inconsistencies are meant different versions of code on the productive system and the one tagged in the repository. In emergency cases there exists the possibility that updates are introduced in the productive system and these are later not propagated into the source code. In general managing a single web application archive seems to be a better way of handling tagging. Thus a system restore can be done by copying a single file instead of hundreds of small ones. This operation is also much more time efficient in the above mentioned case. At the time being, deploying WAID as an exploded archive is not considered harmful. However, unless the above mentioned issues are properly address and tested, changes of files under the exploded directory is granted only in exceptional situations.

Eine neue Struktur für WAID

WAID besteht aus verschiedenen, unabhängig entwickelten Komponenten, zusammengefügt zu einer monolithischen Anwendung. Diese Anwendung wird als einfaches web application archive (war) strukturiert und entwickelt. Die oben genannten Komponenten haben unterschiedliche Granularität und erfüllen Aufgaben im Zusammenhang mit Business Logic, Datensammlung, Präsentation, Transformation und so weiter. Abb.1 zeigt ein vereinfachtes Diagramm:

Architektur (Komponenten) von WAID

Die Aufteilung der Anwendung in kleinere Teile erwies sich als vorrteilhaft für Codepflege und schnell gewünschte Änderungen. Eine ähnliche komponentenbasierte Herangehensweise bietet sich nun für die Laufzeitstruktur der Anwendung an. Die Idee besteht darin, die Anwendung in kleinere, auf Business Logic basierende Einheiten aufzubrechen, die einen einfachen Austausch während der Laufzeit erlauben, entweder ganz ohne, oder zumindest mit vernachlässigbaren Ausfallzeiten. Ausfälle sollten nur bei einer Umstrukturierung von Komponenten stattfinden, die direkt mit den Nutzer-Arbeitssitzungen zu tun haben. Änderungen an allen anderen zugrundeliegenden Komponenten sollten so geschehen, dass sie für die Nutzer der Anwendung transparent sind. Eine vereinfachte Version der aktuellen WAID Laufzeitarchitektur ist in Abb.2 dargestellt. Die Anwendung wird gestarted, indem das Webanwendungsarchiv in eine JBoss AS übertragen wird. Der JBoss Server initialisiert einen Spring Kontext, der in Abb.2 orange dargestellt ist. Das Spring framework ist dafür verantwortlich, die verschiedenen Laufzeitkomponenten zu verbinden. Die wichtigste Komponente ist idmone-core. Das Modul ist selbst ein unabhängig entwickeltes Spring Projekt, verantwortlich für die Back-end Funktionalität im Zusammenhang mit der MetaDirectory-Interaktion. Das Projekt wird nur innerhalb der Webanwendung konfiguriert und genutzt. Sicherheit wird durch ein Spring Security Modul gewährleistet. Dieses Modul ist in Abb.2 nicht gezeigt, es ist jedoch eng an das Tapestry Modul gekoppelt, so dass beide durch einen einzelnen Block dargestellt werden. Das Tapestry Modul ist für das Rendern der Web page templates verantwortlich. Andere benötigte Module werden innerhalb des Spring Kontextes hinzugefügt, um zusätzliche Funktionalität bereitzustellen. Das pdf-Generator Modul in Abb.2 dient als Beispiel für diese Art Komponente. Der Fokus der momentanen Implementierung liegt darauf, die verschiedenen Projekte zu einer einzigen Webanwendung zusammenzubringen. Das Spring Framework bietet die dafür nötige Flexibilität und die entsprechenden Konfigurationsmöglichkeiten. Das kürzlich vorgeschlagene Komponentenmodell erfüllt die gleiche Aufgabe auf der Laufzeitebene. Komponenten werden erst auf Anfrage zusammengefasst, und nicht bereits bei der Initialisierung. Dies erlaubt es, die zugrundeliegenden Komponenten auszutauschen, ohne alle abhängigen Komponenten erneut übertragen zu müssen. Es macht zudem eine bessere Lastverteilung möglich, da die jeweiligen Komponenten auf unterschiedlichen Servern laufen können. PDF-Dateien zu generieren, beispielsweise, kann eine Menge CPU-Zeit und Arbeitsspeicher belegen. Durch die Verteilung der Komponenten auf verschiedene Rechner kann sowohl eine bessere Performance, als auch eine Wiederbenutzbarkeit der einzelnen Komponenten erreicht werden. Dadurch wäre es möglich, Laufzeitkomponenten mit verschiedenen Anwendungen zu nutzen – Dienstprogramme für die pdf-Generierung beispielsweise können von mehreren Anwendungen genutzt werden. Ein weiterer Vorteil liegt darin, das bei einem Bugfix nur eine einzige Instanz der Komponente ersetzt werden muss. Dadurch würde verhindert, alle Anwendungen neu packen zu müssen, die die Komponente nutzen.

Struktur von WAID vor Refactoring

Gleichzeitig ermöglicht das vorgeschlagene Modell eine wichtige Konzeptverschiebung hin zur dienstorientierten Architektur (Service Oriented Architecture, SOA). Kurz gesagt besteht die Idee darin, Kompositanwendungen zu bauen anstatt kleine Projekte zu großen Anwendungen zusammenzufassen. Diese Kompositanwendungen werden aus verschiedenen Laufzeitgebundenen Diensten bestehen. Die Dienste stellen eine dezentralisierte Business Logik zur Verfügung anstelle einer fertig gepackten Funktionalität. Sobald ein gewisser Grad der “Dienstorientierung” erreicht ist, würde es möglich werden, Unternehmensintegrations-Muster zu nutzen, um eine bessere Kommunikation zwischen den verschiedenen involvierten Systemen zu erreichen. Eine Machbarkeitsstudie ist bereits entwickelt worden und eine schematische Übersiccht der vorgeschlagenen Lösung ist in Abb.3 zu sehen.

WAID Struktur nach Refactoring

Auf den ersten Blick ist kein großer Unterschied zu sehen. Die gelben Komponenten sind jedoch Enterprise Java Beans (EJBs), die ausserhalb der Webanwendung laufen. Sie können von der Webanwendung aufgerufen und genutzt werden. EJBs haben zwei Arten von Schnittstellen, lokal oder remote. In der Darstellung ist die lokale Schnittstelle hellblau dargestellt, verbunden mit WAID. Technisch gesehen wird diese Art der Schnittstelle genutzt, wenn beide Module innerhalb der gleichen Anwendung laufen, um einen Datenaustausch mit besserer Performance zu erreichen. Obwohl idmone-core seine Funktionalität in Form der EJBs offenlegt, werden sie trotzdem durch einen Spring Kontext initialisiert, in Abb.3 dunkelgrün dargestellt. Mehrere Entwickler sind der Meinung, dass SPRING und JEE sich gegenseitig ausschließen und miteinander konkurrieren. In unserem Fall bilden sie jedoch anscheinend eine Symbiose.

Zur gleichen Zeit wird ein Vorschlag bewertet, die Anwendung als entpackte .war Datei einzusetzen, um “fliegende” Änderungen möglich zu machen. Ziel des Vorschlages ist ein vereinfachtes Verbessern von Schreibfehlern, Übersetzungsfehlern und Ähnlichem. Die Technik wurde als Machbarkeitsstudie bei der Umsetzung komplexer Änderungen erprobt, wie dem Registrieren und Entfernen existierender Tapestry Komponenten auf einer Seite. Bisher erscheint das Konzept brauchbar, es wirft jedoch Fragen in Bezug auf Stabilität und Zuverlässigkeit auf, und kann zu Inkonsistenzen führen, wenn es nicht gründlich genug durchdacht ist. Inkonsistenzen beziehen sich in diesem Zusammenhang auf verschiedene Code-Versionen im Produktivsystem und dem Repository. In Notfällen besteht die Möglichkeit, dass Updates im Produktivsystem eingefügt werden, dann aber nicht in den Code übernommen werden. Generell erscheint für die Handhabe des tagging eine einzelne Webanwendung besser geeignet, da eine Systemmwiederherstellung in diesem Fall durch das Kopieren einer einzelnen Datei einfacher ist als durch Hunderte kleiner Dateien. Die Operation verläuft ebenso deutlich effizienter im oben genannten Fall. Zum gegenwärtigen Zeitpunkt wird der Einsatz von WAID als entpacktes Archiv als nicht schädlich beurteilt. Solange jedoch die oben genannten Schwierigkeiten nicht ordentlich angegangen und getestet worden sind, sind Dateiänderungen im entpackten Verzeichnis nur in Ausnahmesituationen gestattet.

Krasimir Zhelev

Foto Krasimir Zhelev

I was born in the city of Plovdiv which is the second largest city in Bulgaria. In this unique and ancient city I obtained my primary education which concentrated on Literature and Art. Afterwards I attended the elite Secondary School with extensive teaching of Foreign Languages which I also graduated with honours. Having built solid knowledge in the English language and Mathematics I decided to move to the capital Sofia, where I attended the Technical University of Sofia and started my university education at the English Language Department of Engineering. My profile was ‘Industrial Engineering’ and within 4 years I completed my Bachelor Degree with honours and received the award for ‘Best Final Year Project’ for my Bachelor thesis named: ‘Development of a Web-based Information System for University Management Assistance’. Thus I gradually started extending my knowledge in the field of software development and issues related to organizational management.

 

In the course of studies at the Technical University of Sofia I got acquainted with some professors from the Friedrich-Alexander Universität Erlangen-Nürnberg who offered me a chance to continue my education at the above mentioned university. I decided to accept the proposition and soon after completing my Master Thesis in ‘Industrial Engineering’ I moved to Germany to attend a second master course entitled: ‘Computational Engineering’. During my studies I worked as a student assistant at the Data Management department at the Friedrich-Alexander Universität Erlangen-Nürnberg, and was a member of the COMQUAD and COMAERA projects.

Straight after submitting my master thesis in ‘Computational Engineering’ I was recruited by RRZE to support their development efforts on the Identity Management project ‘IDMone’. My major tasks were targeted at building the web interface of the project. However, it was soon recognized that various supporting tools would also be required for the successful completion of the project. Yet other needs emerged in the course of work – such as establishing uniform development standards, external tools evaluation and integration, deploying continuous integration and so on. My efforts were soon recognized and as of March 2008 I was promoted to the position of Chief Software Architect at the staff unit "Projects & Processes".

My main interests are in the field of Enterprise Architecture, Identity Management and Data Management. A special field of research for me is the deployment of business processes within organizations which is also a part of my job. I aim at starting a Ph.D Thesis in this field as soon as I have finished my research on the topic and have obtained a deeper understanding of the emerging problems.

Deutsch

 

Ich wurde in Plovdiv geboren, der zweitgrößten Stadt Bulgariens. In dieser einzigartigen, alten Stadt ging ich zur Grundschule, mit dem Schwerpunkt Literatur und Kunst. Danach besuchte ich eine Eliteschule mit ausgiebigem Fremdsprachenunterricht, die ich mit Auszeichnung abschloss. Nachdem ich so solide Kenntnisse in Englisch und Mathematik erlangt hatte, entschied ich mich, in die Hauptstadt Sofia zu ziehen, wo ich die Technische Universität von Sofia besuchte. Ich begann meine Universitätslaufbahn am englischsprachigen Institut für Maschinenbau. Ich studierte Industriellen Maschinenbau, und erhielt nach vier Jahren meinen Bachelor mit Auszeichnung. Ich erhielt ebenfalls den Preis für ‘Beste Abschlussarbeit’ für meine Bachelorarbeit: ‘Entwicklung eines Web-basierten Informationssystems zur Unterstützung von Universitätsverwaltungen’. So begann ich schrittweise, mein Wissen im Bereich Softwareentwicklung und Organisationsmanagement auszuweiten

 

Während meinen Studien an der Technischen Universität von Sofia wurde ich mit einigen Professoren der Friedrich-Alexander Universität Erlangen-Nürnberg bekannt, die mir anboten, meine Ausbildung an der genannten Universität fortzusetzen. Ich nahm das Angebot an, und zog nach Abschluss meiner Masterarbeit in Industriellem Maschinenbau nach Deutschland, um mich für einen weiteren Master-Kurs, Computergestützter Maschinenbau einzuschreiben. Während dem Studium arbeitete ich als Studentische Hilfskraft am Rechenzentrum der Friedrich-Alexander Universität Erlangen-Nürnberg und war beteiligt an den COMQUAD und COMAERA Projekten.

Direkt nach Abgabe meiner Masterarbeit in "Computational Engineering" wurde ich am RRZE angestellt, um das Identitätsmanagement Projekt IDMone zu unterstützen. Meine Hauptaufgaben lagen in der Entwicklung der Web-Oberfläche für das Projekt. Es wurde jedoch bald klar, dass weitere unterstützende Tools für einen erfolgreichen Abschluss des Projekts benötigt wurden. Weitere Anforderungen wurden im Verlauf der Arbeit deutlich – wie die Erstellung einheitlicher Entwicklungsstandards, die Evaluation und Einbindung externer Tools, die fortlaufende Einbindung und so weiter. Meine Leistung wurde bald anerkannt und ich wurde im März 2008 zum Chief Software Architect der Abteilung Projekte & Prozesse befördert.

Meine Hauptinteressen liegen in den Bereichen Unternehmensarchitektur, Identitäts- und Datenmanagemenent. Ein besonderes Forschungsfeld für mich ist der Einsatz von Unternehmensprozessen in Organisationen, was ebenfalls Teil meines Berufs ist. Ich plane, eine Doktorarbeit über dieses Thema anzufangen, sobald ich meine Forschungen dazu abgeschlossen und ein besseres Verständnis der zugrundeliegenden Probleme habe.

PPSA T5 Komponenten

Während ich am FAU.ORG Projekt arbeitete, stellte ich fest, dass viele verschiedene Webkomponenten von der bereits existierenden alpha Version der WAID Applikation in dem zurzeit entwickelnden fauorg-web Teilprojekt übernommen werden müssen(für mehr Information wenden sie sich bitte an das FAU.ORG Blog). WAID ist die Web Oberfläche des IDMone Projektes und funktioniert als self-service Portal für die an der Friedrich-Alexander Universität Erlangen-Nürnberg beschäftigten Personen. Das ausgewählte Webframework für beide Anwendungen ist Tapestry 5 und es ist als ein Teil des PPSA Apllikationsstacks definiert.

Im Vergleich mit anderen Java Webframeworks bietet Tapestry eine komponentenbasierte Platform, die die Wiederverwendung des existierenden Kodes ermöglicht. Mehrere Instanzen von den vorgegebenen Komponenten können innerhalb einer Applikation eingebaut werden. Die Komponenten können auch in einzelnen Modulen extrahiert werden, die später als Bausteine verwendet werden können. Es wurde die Entscheidung getroffen, von der oben erwähnten Modularität Gebrauch zu machen, deswegen wurden manche Komponenten von WAID entfernt und in einzelnen Projekte übertragen. Zurzeit sind die folgenden Module in PPSA verfügbar:

  • ppsa-t5-commons
  • ppsa-t5-d7
  • ppsa-t5-jcaptcha
  • ppsa-t5-weather

Das wichtigste von den oben erwähnten Projekten ist ppsa-t5-commons. Dieses Projekt definiert die Platform aller Webapplikationen, die mithilfe von PPSA entwickelt wurden, weil es die Tapestry 5 Libraries beinhaltet. Auf dieser Art und Weise wird die Konsistenz innerhalb der verschiedenen Anwendungen so wie die in denen implementierten Komponenten bewahrt. Der ausgewählte Ansatz setzt die Libraryversionen fest, die von der Platform verwendet sind, und sichert die Verbreitung einer vereinheitlichten Entwicklungsbasis ab. Alle weiteren Projektkomponenten sollten das ppsa-t5-commons als Abhängigkeit beinhalten, so dass die mit der Architektur übereinstimmen. Dadurch ist im Fall einer Änderung von der Tapestry- oder Apache commons-logging- Version eine einzige Aktualisierungsschittstelle definiert.

Ppsa-t5-commons trägt nicht nur dazu bei die Platform zu definieren, sondern auch
oft genutzte Tapestry Komponenten. Aktuell sind es:

  • AlternatingClass – eine Komponente, die ungerade und gerade Tabellenzeilen rendert
  • FileUpload – eine Komponente, die auf Apache commons-upload basiert und Dateien hochladet
  • SwitchLocale – eine Komponente, die das ?Locale? innerhalb der Webapplikation verändert
  • FlotrGraph – eine Komponente, die Browser basierte Diagramme rendert, Flotr Library nutzt und die Serverauslastung reduziert
  • GoodiesTree – eine Baumkomponente, die auf XHTML Goodies basiert
  • JQueryTree – eine Baumkomponente, die auf JQuery Script Libraries basiert
  • TafelTree – eine Baumkomponente, die auf TafelTree Prototype Library basiert
  • ProgressBar – eine Progressbarkomponente , die auf die Prototype-basierende Livepipe Library beruht
  • ULAutoUpdate – ein Mixin, das die Prototype Javascript Library verwendet um eine Komponente periodisch zu aktualisieren

Das ppsa-t5-d7 Modul beinhaltet alle Seiten, Komponenten, CSS Dateien, Javascript Dateien, Bilder usw., die zu dem D7 Design des RRZE Vorlagenkatalogs gehören. Dieses Modul definiert eine Tapestry Layout Komponente, die auf verschiedenen Seiten benutzt werden kann um das Corporate Design zu wahren. Das Modul beschäftigt sich auch mit der Sessionverwaltung so wie: An- und Abmeldung, Zeitablauf usw. Die Aufgabe des ppsa-t5-jcaptcha Modules ist die Gewährleistung einer wiederverwendbaren JCaptcha Komponente und des entsprechenden Tapestry Services. Trotz nicht anerkannter Barrierefreiheit sollten diese vor Hackerangriffe schützen. Das letzte ppsa-t5-weather Modul ruft die Wettervorhersage von Yahoo!’s Feed ab und wandelt sie in reinen HTML Kode um.

Eine Dokumentation und Beispiele, wie man die verschiedenen Module und Komponenten benutzt, werden bald auf der PPSA Wiki Seite verfügbar sein. Manche Beispiele werden auch auf dieser Seite geblogt.

PPSA T5 Components

While I was working on the FAU.ORG project, I identified that various web components had to be migrated from the existing alpha version of the WAID web application into the currently developed fauorg-web subproject(see the FAU.ORG for more information). WAID is the web front-end of the IDMone project and functions as a self-service portal for people associated with Friedrich-Alexander University Erlangen-Nürnberg. The web framework of choice for both application is Tapestry 5 and is defined as a part of the PPSA application stack.

Compared with other Java web frameworks, Tapestry provides a component based platform which allows for re-usability of existing pieces of code. Multiple instances of a given component can be embedded within an application. Components can also be extracted into separate modules which can be later used as building blocks. A decision was made to take advantage of the above mentioned modularity and several important components were taken out from WAID and moved into individual projects. Currently the following modules are available under the PPSA initiative:

  • ppsa-t5-commons
  • ppsa-t5-d7
  • ppsa-t5-jcaptcha
  • ppsa-t5-weather

The most important of the above listed projects is the ppsa-t5-commons. This project defines the platform of all web applications developed under PPSA as the Tapestry 5 libraries are included in it. This provides consistency within the different applications and the components implemented as parts of them. The chosen approach fixes the version of the libraries used by the platform and ensures propagation of a unified development base. All other component projects should include ppsa-t5-commons as a dependency to conform with the architecture. Thus a single point of update is defined in case of a change of the Tapestry or of the Apache’s commons-logging version.

ppsa-t5-commons not only defines the platform but also contributes some commonly used Tapestry components. At the moment of writing these are:

  • AlternatingClass – a component used to render odd and even table rows
  • FileUpload – a component used for file uploads, based on Apache commons-upload
  • SwitchLocale – a component which changes the locale within the web application
  • FlotrGraph – a component for browser graph rendering, uses Flotr alpha library, reduces server load
  • GoodiesTree – a tree component based on XHTML Goodies
  • JQueryTree – a tree component based on the JQuery script libraries
  • TafelTree – a tree component based on the TafelTree Prototype library extension
  • ProgressBar – a progress bar component using the Prototype-based Livepipe library
  • ULAutoUpdate – a mixin which uses the Prototype javascript library to periodically update a component

The ppsa-t5-d7 module provides all the pages, components, CSS files, javascript files, images and so on that belong to the D7 design from the RRZE’s Vorlagenkatalog. The module defines a Tapestry layout component that can be used within different pages to ensure corporate design. The module also handles basic session management such as – login, logout, timeout and so on. The role of the ppsa-t5-jcapcha module is to provide a reusable JCaptcha component and a corresponding Tapestry service. These should be used to protect from intruder attacks, though are not generally considered appropriate for disabled users. The last module – ppsa-t5-weather, is a modules which fetches the weather forecast from Yahoo!’s feed and renders it as HTML code.

Documentation and examples of how to use the different modules and components will soon be available on the PPSA wiki page. Some samples will be also posted in this blog.

FAU.ORG Neustrukturierung

Nachdem ich mich gründlicher mit dem Projekt FAU.ORG befasst habe, habe ich mich entschieden es in kleineren Teilen zu zerlegen. Das Projekt, das mir übergeben wurde, hatte eine monolithische Struktur, die alle Aspekte der Softwareentwicklung in einem Kodebündel zusammenpackte. Es hat sich herausgestellt, dass die Struktur schwer zu verwalten ist, vor allem mit der anwachsenden Anzahl der Artefakte. Zurzeit, als Ergebnis der Neustrukturierung, besteht FAU.ORG aus den folgenden Komponenten:

  • fauorg-core
  • fauorg-web
  • fauorg-identity
  • fauorg-system
  • fauorg-misc

Die Kernfunktionalität von FAU.ORG, die für die Verwaltung und das Wiederabrufen von älteren Zuständen der Univesitätstruktur, sowie für die Generierung von verschiedenen Reporttypen usw. verantwortlich ist, wird derzeit in fauorg-core implementiert. Die Web-Oberfläche , die einen benutzerfreundlichen Zugriff auf die Kernfunktionalität ermöglicht, ist in dem fauorg-web Teilprojekt extrahiert. Das fauorg-identity Teilprojekt befasst sich mit der Benutzerverwaltung innerhalb dieser Applikation, genau so wie mit der Authentifizierung und der Authorisierung der Benutzer. Verschiedene Arten von Rollen und hierarchische Gruppen können modelliert und instanziiert werden. Ausführungsrechte auf existierende Kodeausschnitte könnten auch vergeben werden. Das fauorg-system Teilprojekt ist für die Serverkonfiguration, für den Einsatz der Applikation und für die Verwaltung der einzelnen Teilprojekte verantwortlich. Viele verschiedene Ideen und Tests werden in fauorg-misc Teilprojekt implementiert und dieses dient als Inkubator für neue Funktionen. Derzeit ist noch der Aufbau von einem Teilprojekt vorgesehen und zwar – fauorg-bpms. Es wird sich mit der Funktionalität der Geschäftsprozessmodellierung innerhalb FAU.ORG beschäftigen. Das Ziel ist die konsistente Integration der fauorg-core, fauorg-identitiy und fauorg-web Teilprojekte. Es ist bereits einen rudimentären Prototyp in PPSA entwickelt worden. Am Ende werden alle Teilprojekte in fauorg-web zusammengefasst und diese Zusammenfassung wird dann als FAU.ORG bezeichnet.

Alle Komponenten sind aufgrund der Verfahren und der Prinzipien von PPSA entwickelt worden. Sie sind alle Maven Projekte, die so schnell wie möglich in P&P’s Archiva Repository verfügbar sein werden. Die Teilprojekte werden mit der existierenden Continumm Instalation kontinuierlich getestet. Zusätzliche Information bezüglich der Planung und Spezifikation von FAU.ORG und den einzelnen Teilprojekten wird bald hier gebloggt.

FAU.ORG Restructuring

After gaining some deeper understanding of the FAU.ORG project, I have decided to break FAU.ORG into smaller parts. The inherited project had a monolithic structure, combining all aspects of development into a single code bundle. This structure proved hard to manage, especially with the growing number of artifacts. Presently, as a result of the restructuring, FAU.ORG consists of the following components:

  • fauorg-core
  • fauorg-web
  • fauorg-identity
  • fauorg-system
  • fauorg-misc

The core functionality of FAU.ORG, which is responsible for managing the university structure, retrieving older states of the structure, different types of reports, and so on is currently being implemented in fauorg-core. The web interface, which provides user friendly access to the core functionality, is extracted into the fauorg-web subproject. The fauorg-identity subproject handles user management within the application. It also deals with authentication and authorization of the above mentioned users. Different types of roles and hierarchical groups can be modeled and instantiated with the developed code and rights on executing pieces of code can be granted. fauorg-system subproject is responsible for the server configuration and deployment of the application, as well as managing the subprojects code bundles. Various ideas and tests will be included in fauorg-misc. It will serve as an incubator for new features. Currently, one more subproject is envisioned and namely the fauorg-bpms. It will deal with tasks related to the business process management within FAU.ORG. The goal is to consistently integrate fauorg-core, fauorg-identitiy and fauorg-web. There is a rudimentary prototype developed within the PPSA initiative. At the end of day, all of the subprojects are to be included in fauorg-web, which assembles the final artifact representing FAU.ORG.

All components of FAU.ORG are developed by using techniques and principles established in PPSA. These are all Maven projects which as soon as possible will be available in P&P’s Archiva repository and will be continuously tested with the existing Continuum installation. Further information concerning FAU.ORG – like planning and specification of the whole project and the consistent parts will be soon posted.