Donnerstag, 5. Juni 2014

Referenz: Architektur eines Cloud-basierten Cross-Plattform-Backend-Systems für mobile Anwendungen

Liebe Leser,

heute wurde ein Blogpost von mir auf dem adesso Unternehmensblog mit dem Titel "Architektur eines Cloud-basierten Cross-Plattform-Backend-Systems für mobile Anwendungen" veröffentlicht. Darin beschreibe ich eine mögliche Architektur für die Anbindung einer mobilen Unternehmens-App an ein entsprechend skalierbares und ausfallsicheres Backend samt Einbindung eines Unternehmens-Services.

Link zum Beitrag: http://blog.adesso.de/architektur-eines-cloud-basierten-cross-plattform-backend-systems-fuer-mobile-anwendungen/

Euer,
JL

Dienstag, 22. Oktober 2013

Fixing the JSF error "ViewRoot is null" occuring exactly after 60 minutes when using MyFaces CODI although session timeout in web.xml is higher

Dear Readers!

I will do this post in English since this problem bugged me for a long long time and I couldn't find the solution on the web by searching for "ViewRoot is null".

Given:

You have JSF 2 web application using MyFaces CODI and you have a session timeout longer than 60 minutes defined in your web.xml (Why? Because the customer wants it!).

<session-config>
    <session-timeout>120</session-timeout> 
</session-config>

The problem:

After more than 60 minutes of inactivity - when you klick somewhere on your page - you get an ugly error stating "ViewRoot is null".

The solution:

It turns out that MyFaces CODI is the source of the problem - it defines a HARDCODED session timeout of 60 minutes.

How did I find out?

I started to download the source code of each library used in my web application and searched for the string "60" - strange, isn't it? But I was successful.

So how to fix this?

We need two classes to circumvent the problem using adavanced features of CDI. The first class uses the CDI Alternative and Specialization feature. It defines a customized WindowContextConfiguration returning a customized session timeout.

package at.coopxarch.bluprint.presentation.controller.cdi;

import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.inject.Alternative;
import javax.enterprise.inject.Specializes;
import org.apache.myfaces.extensions.cdi.core.api.config.ConfigEntry;
import org.apache.myfaces.extensions.cdi.core.api.scope.conversation.config.WindowContextConfig;
import at.coopxarch.bluprint.common.util.BluPrintConstants;

@SuppressWarnings("serial")
@ApplicationScoped
@Alternative
@Specializes

public class BluPrintWindowContextConfig extends WindowContextConfig {

    /**
     * Specifies the time for the timeout for a window. After a timeout is detected all beans 
     * which are only linked to the window will be destroyed.
     *
     * @return the time for the timeout for a window
     */
    @ConfigEntry
    public int getWindowContextTimeoutInMinutes()
    {
        return BluPrintConstants.SESSION_TIMEOUT_IN_MINUTES;
    }
}

The second class is a CDI producer to instantiate and inject our special WindowContextConfig.

package at.coopxarch.bluprint.presentation.controller.cdi;

import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.inject.Produces;

public class BluPrintWindowContextProducer {

    @ApplicationScoped
    @Produces
    public BluPrintWindowContextConfig produceBluPrintWindowContextConfig() {

       return new BluPrintWindowContextConfig();
    }
}

The downside of the solution:

The downside of this solution is the fact that you have to define the session timeout in two places: in the web.xml and as a constant somewhere in the code. It is advisable to comment the web.xml "session-timout" section so in case of a change of the session timeout a coder can also change the second session timeout definition. But that - of course - is optional ;-)

Let's see if anybody replies back to me who has had the same problem...

Yours
JWR@coopXarch

Freitag, 30. März 2012

Die Lizenz zum Entwerfen: JWR@coopXarch ist nun "Certified Professional for Software Architecture - Foundation Level"

Liebe Leser!

Nachdem ich nun erfolgreich die Prüfung zum CPSA-F abgelegt habe (Certified Professional for Software Architecture - Foundation Level), will ich hier ein wenig darüber berichten.

Das Zertifizierungsprogramm zum "CPSA" ist eine Initiative der iSAQB, einer Organisation bestehend aus Experten zum Thema "Software Architektur". Laut Homepage ist die iSAQB ein "unabhängiges, neutrales Gremium, das die fachliche Qualität des Certified-Professional for Software Architecture Schemas und das zugehörige Prüfungswesen überwacht."

Ich habe in Wien den 3-tägigen Kurs "Certified Mastering Software Architectures - Seminar mit Zertifikat CPSA nach ISAQB" besucht und im Anschluss die Zertifizierungsprüfung abgelegt. Der Vortragende war Dipl. Math. Manfred Ferken, den ich als sympathischen und kompetenten Seminarleiter wärmstens weiterempfehlen kann. Das Seminar besteht aus einem Theorievortrag auf Basis von Folien und praktischen Übungen. Das Seminar orientiert sich am "arc42 Framework" von Peter Hruschka (Atlantic Systems Guild) und Gernot Starke (unabhängiger Berater) - beide keine Unbekannten und sehr umtriebig auf dem Gebiet der Software Architektur. Ich hatte als praktischer Anwender des arc42 Templates für Architektur-Dokumentation einen kleinen Vorsprung vor den anderen Teilnehmern - trotzdem hat mir das Seminar neue Sichtweisen und viele Fallbeispiele aus der Praxis vermittelt. Vor allem die Diskussionen mit dem Seminarleiter und den Teilnehmern waren sehr lebhaft und lehrreich - ab und zu muss man einfach über den Tellerrand schauen.

Die Prüfung ist ein Multiple Choice Test und doch ziemlich anspruchsvoll - interessanterweise unterschreibt man ein NDA und daher kann ich über den Inhalt natürlich nichts erzählen. Für den engagierten Software Architekten ist die erfolgreiche Ablegung der Prüfung aber sicher kein Problem.

Übrigens: Durch die Ablegung des CPSA-F bin ich als Ziviltechniker für Informatik nun Österreichs einziger staatlich befugter, beeideter und unabhängig zertifizierter Software Architekt (CPSA-F) und Senior Projektmanager (IPMA-Level B). Ich hoffe, damit meine Kompetenz auf meinen Kernarbeitsgebieten dementsprechend fundiert untermauern zu können.

Euer
JWR@coopXarch.

Donnerstag, 22. Dezember 2011

coopXarch wünscht Frohe Weihnachten!

Liebe Leser!

Ein spannendes und arbeitsreiches Jahr liegt hinter uns - angesichts des unmittelbar bevorstehenden Weihnachtsfestes ist es an der Zeit, 2011 Revue passieren zu lassen.

Das Thema im Jahr 2011 aus Sicht der coopXarch war "Cloud Computing". Und wir nahmen und nehmen uns dieses Themas mit viel Engagement und Enthusiasmus an. Nach einer Zeit der Informationsrecherche, Veranstaltungsbesuche und Diskussionen war es im Frühjahr an der Zeit, selbst aktiv zu werden.

Mit joinMe! haben wir im Oktober eine Referenzarchitektur und -implementierung für ein elastisch skalierbares location-based social service vorgelegt, das auf einer Platform-as-a-Service (PaaS) läuft. Dabei ist es irrelevant, ob ein public PaaS Angebot (wie z.B. VMware CloudFoundry) gewählt wird, oder eine private PaaS (z.B. VMware vFabric) aufgebaut wird, um das Service zu betreiben. Die Softwarekomponenten sind so beschaffen, dass sie ohne eine einzige Code-Änderung in einem lokalen Tomcat, dem vFabric tc Server oder in der CloudFoundry Laufzeitumgebung betrieben werden können! Das zeigt die unglaubliche Deployment-Flexibilität und Umgebungs-Agnostik heutiger Enterprise Frameworks (in diesem Falle Spring).

joinMe! zeigt auch, wie "application-level modularization" erreicht werden kann, die eine Grundlage für elastische Skalierbarkeit ist, aber auch andere Vorteile wie Fehlerlokalisation und "always-on" Deployments bietet. Insofern bietet Cloud Computing für die Software Engineering Praxis die Möglichkeit, auch im Business Software Bereich ein Umdenken weg von monolithischem Applikationsdesign hin zu "loosely coupled" Systemen herbei zu führen.

Schade finden wir es, dass es keinen österreichischen Platform-as-a-Service Anbieter gibt - egal ob für public hosting oder als Anbieter für private PaaS Clouds für Unternehmen. Das würde unseres Erachtens Software-as-a-Service Anbietern die Möglichkeit geben, zu österreichischen Qualitätskriterien und unter österreichischer Gesetzgebung SaaS Angebote zu lancieren. Ob wir uns darum kümmern sollten?

Schlussendlich haben wir - durch die Entwicklung von Apps für Smart Devices für drei unterschiedliche Betriebssysteme (Android, iOS und Windows Phone 7) - einiges an Know How in diesem Bereich hinzu gewonnen. Zentral ist nach wie vor die Frage: "Soll ich nativ für jedes OS entwickeln oder auf 'one-serves-all' Frameworks wie PhoneGap setzen?". Hier haben wir unsere Antwort gefunden.

Unbedingt muss auch der große Erfolg erwähnt werden, den unser coopXarch Architekt Jürgen und unser erfahrener WP7 Entwickler Robert mit der "Spritpreise AT" App für Windows Phone 7 eingefahren haben. Diese App war lange unter den Top 3 Apps im österreichischen Windows Phone Marketplace. Das macht uns stolz und wir freuen uns mit Euch!

Die coopXarch Architekten wünschen ein frohes und besinnliches Weihnachtsfest: Zeit, um inne zu halten und zu reflektieren, Ruhe, um Kraft und Zuversicht zu schöpfen und viel Motivation und Mut, um im neuen Jahr neue Herausforderungen anzugehen und innovative Ideen Realität werden zu lassen.

Euer
JWR@coopXarch.

Montag, 17. Oktober 2011

joinMe! - ein Cloud2Mobile Showcase von coopXarch und Xion IT Systems AG

Liebe Leser!


Unser Cloud- und Mobile-Computing Showcase "joinMe!" ist fertig! joinMe! präsentiert sich für den Benutzer als App für Android, iOS oder Windows Phone 7 Smartphones und Tablets, die es ermöglicht, Personen in der Nähe mit dem gleichen Interesse zu finden. Das Datenhandling, der Geo-Location und Interessens-Match und die Notifikationen an die mobilen Geräte werden dabei von einem losen Applikationsverbund in der Cloud - in unserem Fall CloudFoundry von SpringSource/VMWare - durchgeführt. Durch die lose Kopplung ist eine elastische Skalierbarkeit der Services - so wie man es von den großen Anbietern Facebook, Twitter und Co. gewohnt ist - ermöglicht.

Die Homepage zu joinMe! findet sich hier. Wir haben auch einen Produktflyer mit QR Codes zu den einzelnen Apps erstellt.

In Kürze werden wir in einer Reihe von Blogbeiträgen die technischen Grundlagen, Architekturentscheidungen und den Umsetzungsweg vorstellen und auf Fallstricke und Lessons Learned eingehen.

Cloud- und Mobile-Computing ermöglichen innovative und elastisch skalierbare Services. Unternehmen werden in Zukunft durch die Nutzung von Plattform-as-a-Service Clouds weitere Homogenisierung und Konsolidierung zusammen mit den entsprechenden Einsparungspotentialen erzielen können.

Unser Ziel ist es, durch die frühest mögliche technologische und strategische Erschließung der Grundlagentechnologien als Berater und Umsetzer auf diesem spannenden und innovativen Gebiet erfolgreich tätig zu sein.

Euer
JWR@coopXarch.

Dienstag, 11. Oktober 2011

"Sehnsucht nach Scrum"

Liebe Leser!

Ich halte am Donnerstag, 03. November 2011, 09:00 einen Vortrag zum Thema "Agile Softwareentwicklung" mit dem Titel "Sehnsucht nach Scrum" im Rahmen der Vortragsveranstaltung des IT-Clusters Wien "Agile Software-Entwicklung trifft auf agiles Qualitätsmanagement".

Hier der Link mit näheren Information und der Anmeldung!

Wenn auch Ihr von einer Sehnsucht nach agilen Vorgehensmodellen beschlichen seid (oder die Existenz derjenigen bezweifelt), würde ich mich freuen, Euch zu sehen!

Euer
JWR@coopXarch.

Mittwoch, 17. August 2011

"Elastische Skalierbarkeit in der Cloud" - spritpreisrechner.at zeigt, wie man es nicht macht...

Liebe Leser!

Zugegeben - es ist immer ungleich viel schwerer, Leistung zu erbringen, als Fehlleistung zu kritisieren (als Beispiel sei die österreichische Fußball-Nationalmannschaft angeführt) - aber "die Initiative des BMWFJ für mehr Preistransparenz und Wettbewerb" hat nicht gerade einen Blitzstart hingelegt. Siehe hierfür z.B. http://diepresse.com/home/meinung/marginalien/685968/BenzinpreisRechner-stuerzt-ab_Die-Roboter-sind-schuld, wo es - sehr sarkastisch - heißt:
"Die lange erwartete 'Spritpreis-Datenbank' hätte am Dienstag online gehen sollen. Doch die Homepage kollabierte. Mit so einem Ansturm konnte ja wirklich niemand rechnen."
Seit nunmehr ca. 2 Jahren ist "Cloud Computing" in aller Munde - und die Vorteile, die das neue Paradigma ins Rennen führt, und hier interessiert uns insbesonder das Modell "Platform as a Service (PaaS)" gemeinsam mit elastischer Skalierbarkeit, auch "Auto-Scaling" genannt. Der Anwendungsfall "Spritpreis-Datenbank" - ein paar Clients melden Daten ein (Anforderung 1), viele viele (ev. auch extrem viele - Entschuldigung, wieder sarkastisch) Clients holen Daten ab (Anforderung 2), und die Daten müssen nicht transaktional-aktuell sein (Anforderung 3: soll heißen - es ist ok, wenn ein Client noch kurz den alten Preis bekommt, auch wenn der neue Preis gerade eingemeldet wurde), man verzeihe den Terminus - schreit gerade nach dem Lösungsmuster "PaaS-Cloud mit Auto-Scaling".

Wie hätte coopXarch nun die Architektur ausgelegt:

  1. Web Role spritpreis-meldung@cloudanbieter.com
    1. Eine "Web Role" (wir folgen hier der Microsoft Windows Azure Nomenklatur) ist das Eingangstor für Web Requests und läuft normalerweise auf einer Cloud Instanz (i.e. früher "ein Server"). Diese Web Role ist für die Melder, egal ob es Menschen über ein Web Formular sind, oder ein Automatismus, der die Preise updated (wieder über ein HTTP-basiertes Protokoll, z.B. REST).
    2. Da es eine bekannte Anzahl an Meldern gibt, ist es leicht die Anzahl der Knoten zu dimensionieren - z.B. ein Knoten pro 150 potentielle Benutzer (Warum 150? weil z.B. der Apache Web Server Konfigurations-Wert "maxClients" auf 150 eingestellt ist oder der Tomcat maximal 150 worker threads bietet).
  2. Web Role spritpreis-auskunft@cloudanbieter.com
    1. Das ist nun die Web Role für die Auskunftsapplikation - wieder können hier Menschen vor einen Web Browser oder einer "mobilen App" sitzen bzw. Robots / Crawler, welche die Web Role für Preisauskünfte ansteuern. Hier ist die elastische Skalierbarkeit unumgänglich, da zum Design-Zeitpunkt nicht gesagt werden kann, wie viele Clients auf das Auskunftsservice zugreifen werden. Noch dazu ist mit Spitzen zu rechnen - eben (sic!) bei der Inbetriebnahme. Die Skalierung in Form des Hochstarts neuer Serverinstanzen, um die Last der Anfragen bewältigen zu können, übernimmt nun der Cloud Controller des PaaS Anbieters. Das Starten dieser zusätzlichen Instanzen muss dabei nicht länger als 10-30 Sekunden dauern - daher die Bezeichnung "elastisch", i.e. "quasi in Echtzeit je nach aktuellem Bedarf".
  3. NoSQL Datenbank
    1. Nachdem Konsistenz hier eine untergeordnete Rolle spielt (siehe Anforderung 3), wird eine NoSQL Datenbank verwendet, die hoch skalierbar ist und z.B. dokumentenorientiert arbeitet (Dokument "Tankstelle", Embedded Dokument "Produkt", Embedded Dokument "Preis") - ich würde hier die MongoDB als geeignet vorschlagen, da sie auch (Index-basierte) Geo-Abfragen bietet (z.B. für den Anwendungsfall "Zeige mir den billigsten Diesel im Umkreis von 5km"). Die VMWare CloudFoundry PaaS Cloud bietet etwa die MongoDB als persistenten Storage an.
  4. Worker Roles "Datenbank Cleanup", "Report Generator" etc.
    1. Eine "Worker Role" arbeitet "im Hintergrund" auf einer Datenbasis, um gewisse Aufgaben auszuführen. In diesem Falle könnten alle Spritpreise, die älter als die gehaltene Historie von 14 Tagen (Anforderung 4) sind, aus der Datenbank gelöscht werden. Oder es könnten Preisverlaufskurven generiert und als Bilder abgelegt werden, um Abfragen möglichst effizient mit den Verlaufskurven ausliefern zu können (Anforderung 5).
Zugegeben - viele PaaS Anbieter sind noch im Beta-Stadium bzw. bieten eventuell nur unzureichende Service Levels - ich als staatlich befugter und beeideter Ziviltechniker für Informatik finde es jedoch besonders schade, dass der Staat (in Gestalt des BMWFJ) diese unsere Kompetenz nicht zu Rate gezogen hat, um ein innovatives Service mittels innovativer Technik umzusetzen (und dieser somit ein Stückchen mehr zum Durchbruch zu verhelfen) und verbleibe, mit besten Grüßen,

Euer,
JWR@coopXarch.