Xpert.ivy Q & A Forum

Seit einiger Zeit ist nun das Xpert.ivy Q & A Forum unter http://answers.xpertivy.ch/ verfügbar.

Dort können Sie Ihre Fragen rund um Xpert.ivy platzieren.

Viel Spass!
Über den Author: Heinrich Spreiter ist der Gründer von xpertivyhacker.ch. Kontaktieren Sie ihn auf Xing und Twitter

Melden Sie sich für den Xpert.ivy hacker Newsletter an und Sie erhalten immer die neusten Tutorials und Tricks zu Xpert.ivy sobald sie publiziert werden.

Ihre Email Adresse wird nur für diesen Newsletter verwendet und nicht an dritte weitergegeben.

xpertivy.ch

Mit dem Release von Xpert.ivy 5.0 wurde auch eine komplett neue Webseite unter xpertivy.ch erstellt. Neben Produktinformationen möchte ich vor allem die Downloads und das zukünftige Forum hervorheben.

Bei den Downloads finden Sie neben den Designer und Server Downloads weitere Extensions die Sie gratis benutzen können.

Das neue Forum wird bald als weitere Plattform für Fragen dienen und das alte ivyTeam Forum ablösen.

Viel Spass mit xpertivy.ch!
Über den Author: Heinrich Spreiter ist der Gründer von xpertivyhacker.ch. Kontaktieren Sie ihn auf Xing und Twitter

Melden Sie sich für den Xpert.ivy hacker Newsletter an und Sie erhalten immer die neusten Tutorials und Tricks zu Xpert.ivy sobald sie publiziert werden.

Ihre Email Adresse wird nur für diesen Newsletter verwendet und nicht an dritte weitergegeben.

Xpert.ivy 5.0 Release

Am 11. April 2013 wurden rund 90 Personen Zeugen von offiziellen Xpert.ivy 5.0 Release. Nach einer kurzen Begrüssung wurde Xpert.ivy 5.0 mit einem Hollywood-reifen Film released.



Nach diesem fulminanten Start wurden die neuen Html User Dialoge vorgestellt. Neben den Basics wurde auch ein komplettes Kundenprojekt vorgestellt das Ende Mai Live geht.

Neben den neuen Html User Dialogen gibt es auch viele Neuerungen bei den ULC Widgets sowie dem Designer und dem Server.

Ich empfehle Ihnen die DevDay Präsentationen dazu anzuschauen. Es lohnt sich.

Fazit

Es war ein toller Anlass mit vielen Highlights. Bei Brezel und Bier konnte sich die Xpert.ivy Community kennen lernen und austauschen und ich freue mich schon heute auf den nächsten DevDay.

Und nun wünsche ich Ihnen viel Spass mit Xpert.ivy 5.0!
Über den Author: Heinrich Spreiter ist der Gründer von xpertivyhacker.ch. Kontaktieren Sie ihn auf Xing und Twitter

Melden Sie sich für den Xpert.ivy hacker Newsletter an und Sie erhalten immer die neusten Tutorials und Tricks zu Xpert.ivy sobald sie publiziert werden.

Ihre Email Adresse wird nur für diesen Newsletter verwendet und nicht an dritte weitergegeben.

JSF Formulare mit Excel und OpenRefine generieren

Mit OpenRefine lassen sich Daten bereinigen, verbessern und exportieren.

Wer ein bisschen kreativ ist, kann mit der Export Funktion sogar Code für Xpert.ivy generieren. In diesem Screencast zeige ich Ihnen, wie Sie mit Excel und OpenRefine schnell und einfach JSF Formulare generieren können.

OpenRefine installieren und starten

Als erstes muss man OpenRefine installieren und starten. Auf der Wiki Seite von OpenRefine finden Sie eine Anleitung.

Sobald OpenRefine installiert und gestartet ist, öffnet sich automatisch ein Browser Fenster mit OpenRefine.

Im folgenden Screencast sehen Sie, wie Sie aus einer Excel Tabelle ein Formular generieren können.

Wie funktioniert es?

Mit der Template Export Funktion kann man für die verschiedenen Bereiche Templates definieren. Prefix und Suffix wurden hier benutzt, um das p:panelGrid zu öffnen bzw. zu schliessen.

Interessant ist vor allem das Row Template. Dies wird für jede Zeile der Tabelle durchlaufen.

Code-Snippet 1: Row Template

Hier kann per {{cells["spalte"].value}} auf den Wert der jeweiligen Spalte zugegriffen werden.

Fazit

Während dies ein eher triviales Beispiel ist so könnte man ohne weiteres mächtigere Templates erstellen. Man könnte aus einem Datenmodell z.B. das Formular, die Datenklasse sowie den JPA Code generieren.

Lassen Sie Ihrer Kreativität freien lauf!
Über den Author: Heinrich Spreiter ist der Gründer von xpertivyhacker.ch. Kontaktieren Sie ihn auf Xing und Twitter

Melden Sie sich für den Xpert.ivy hacker Newsletter an und Sie erhalten immer die neusten Tutorials und Tricks zu Xpert.ivy sobald sie publiziert werden.

Ihre Email Adresse wird nur für diesen Newsletter verwendet und nicht an dritte weitergegeben.

PrimeFaces Theme pro Projekt konfigurieren

Themes in PrimeFaces zu konfigurieren ist einfach. Doch was ist, wenn man auf einem Xpert.ivy Server 2 Projekte hat die unterschiedliche Themes benötigen?

Ein Beispiel wäre, wenn es ein Projekt für Kunden und eines für die Administration gibt.

Ich hatte die Aufgabe dies in der Soreco zu lösen. Dabei ist eine kleine Extension zusammen mit einer Anleitung raus gekommen.

Zur Wiki Page mit dem Download und der Anleitung.
Über den Author: Heinrich Spreiter ist der Gründer von xpertivyhacker.ch. Kontaktieren Sie ihn auf Xing und Twitter

Melden Sie sich für den Xpert.ivy hacker Newsletter an und Sie erhalten immer die neusten Tutorials und Tricks zu Xpert.ivy sobald sie publiziert werden.

Ihre Email Adresse wird nur für diesen Newsletter verwendet und nicht an dritte weitergegeben.

Xpert.ivy Code Rezept: File Download mit p:fileDownload

Problem

Sie wollen eine Datei zum Download anbieten.

Lösung

Mit p:fileDownload kann man einen beliebigen (File)InputStream herunterladen.

SVN

Sie können das fertige Projekt per SVN von http://xpert-ivy-hacker-source-code.googlecode.com/svn/trunk/Forms in den Xpert.ivy Designer importieren.

Code

Die Demo File Download Demo zeigt wie man eine Datei herunterladen kann.

Um einen Download zu initialisieren benötigt man einen p:commandButton (oder p:commandLink) und ein p:fileDownload.

Code-Snippet 1: Code für File Download

Wichtig beim p:commandButton ist, dass das ajax Attribut auf false gesetzt ist. Grund dafür ist, dass man Files nicht per AJAX herunterladen kann.

Das value Attribut von p:fileDownload zeigt auf ein StreamedContent Objekt. Das ist das Objekt bzw. das File das man herunterladen will.

Code-Snippet 2: StreamedContent Objekt erstellt

In der Logic erstellen wir ein DefaultStreamedContent Objekt, welches das File an den Browser sendet.

Wichtig ist auch, dass der FileInputStream nicht per close() geschlossen wird. Dies hätte zur Folge, dass der Download fehlschlägt.

Das schliessen macht das DefaultStreamedContent automatisch nachdem der Download abgeschlossen ist.

Weiterführende Ressourcen

Über den Author: Heinrich Spreiter ist der Gründer von xpertivyhacker.ch. Kontaktieren Sie ihn auf Xing und Twitter

Melden Sie sich für den Xpert.ivy hacker Newsletter an und Sie erhalten immer die neusten Tutorials und Tricks zu Xpert.ivy sobald sie publiziert werden.

Ihre Email Adresse wird nur für diesen Newsletter verwendet und nicht an dritte weitergegeben.

Xpert.ivy Multi View Navigation

Bei jeder nicht trivialen Applikation wird sich schnell die Frage stellen: Wie kann man zwischen verschiedenen Views die man hat wechseln?

In JSF gibt es dafür einen Standard-Mechanismus mit <navigation-rule> und dem action Attribut.

Xpert.ivy bietet einen ähnlichen Mechanismus der sich Multi View nennt. Mit Multi View kann man mehrere Views innerhalb eines einzigen Html User Dialoges definieren und wie in JSF über das action Attribut zwischen den einzelnen View hin und her wechseln.

Multi View erstellen

Um eine View zu einem Html User Dialog hinzuzufügen, klickt man mit der rechten Maustaste auf den Html User Dialog und wählt New -> Other. Nun sucht man nach view, wählt Html Dialog View aus und klickt Next. Auf dem nächsten Dialog gibt man noch den Namen der View ein.

Dies ist zugleich auch der Name, der im action Attribut verwendet werden muss. Dazu gleich mehr.

Zwischen Views wechseln

In den Html Dialog Demos gibt es eine Demo die zeigt, wie man zwischen den einzelnen Views hin und her wechseln kann.

Die Demo ist unter ch.ivyteam.htmldialog.demo.input.MutliViewDemo zu finden.

Das Prinzip ist einfach: Man definiert eine Methode in der Logic die einen String zurück gibt. Dieser String muss der Name der View sein, zu der man wechseln will.

In den Html Dialog Demos wird als Input-Parameter noch der Name der aktuellen View mitgegeben, damit man in der Logic entscheiden kann, welches die nächste View sein muss.

Code-Snippet 1: View über action wechseln

Im Code-Snippet 1 sieht man, wie die Methode zum wechseln zwischen den Views über das action Attribut aufgerufen wird.

Fazit

Multi View ist ein einfaches und zugleich sehr wichtiges Werkzeug das jeder Xpert.ivy Entwickler kennen muss.

Mit Multi View lassen sich auf einfache Art und Weise Html User Dialoge erstellen, die zwischen den verschiedenen Views hin und her wechseln müssen.
Über den Author: Heinrich Spreiter ist der Gründer von xpertivyhacker.ch. Kontaktieren Sie ihn auf Xing und Twitter

Melden Sie sich für den Xpert.ivy hacker Newsletter an und Sie erhalten immer die neusten Tutorials und Tricks zu Xpert.ivy sobald sie publiziert werden.

Ihre Email Adresse wird nur für diesen Newsletter verwendet und nicht an dritte weitergegeben.

Eingabefelder und Composite Components mit <f:validate...> validieren

Müll rein, Müll raus. Das passiert, wenn man seine Formulare nicht richtig validiert. Zum Glück bietet JSF diverse Möglichkeiten dies einfach und richtig zu tun.

In diesem Tutorial schauen wir uns an, wie man mit <f:validate...> Eingabefelder und Composite Components validieren kann.

SVN

Sie können das fertige Projekt per SVN von http://xpert-ivy-hacker-source-code.googlecode.com/svn/trunk/Forms in den Xpert.ivy Designer importieren.

web.xml konfigurieren

Bevor wir loslegen können, müssen wir noch etwas im web.xml ([ivy-installations-pfad]/webapps/ivy/WEB-INF) anpassen bzw. kontrollieren. Grund dafür ist, dass leere Eingabefelder aus Kompatibilitätsgründen zu JSF 1.x nicht validiert werden. Wer mehr darüber erfahren will, kann dies hier tun.

Im web.xml muss folgender Eintrag drin sein.

Code-Snippet 1: web.xml Eintrag

Eingabefelder validieren

Um ein Eingabefeld wie z.B. ein <p:inputText> mit <f:validate...> validieren zu können, kann man die Validatoren zwischen <p:inputText>...</p:inputText> schreiben.

Code-Snippet 2: Eingabefeld validieren (ConfigureValidationComponent)

Eingabefelder von Composite Components validieren

Wie sieht es aber aus, wenn man die Eingabefelder von Composite Components je nach Situation anders validieren will?

Im <cc:interface> eines Composite Components kann man so genannte valueHolder bzw. editableValueHolder definieren. Diese erlauben es unter andrem <f:validate...> Konfigurationen von aussen zu definieren.

Code-Snippet 3: valueHolder definieren (ConfigureValidationComponent)

Bei einen valueHolder gibt man den Namen an unter dem man ihn von aussen ansprechen will sowie die Eingabefelder, die man über diesen valueHolder konfigurieren will.

Jetzt kann man den den Composite Component benutzen und mit <f:validate...> konfigurieren.

Code-Snippet 4: valueHolder konfigurieren (ConfigureValidationDemo)

Man beachte das for Attribut das auf das name Attribut des valueHolder referenziert.

Fazit

Mit <f:validate...> und valueHolder kann man auf einfach Art und Weise die Validation von Composite Components konfigurierbar machen.
Über den Author: Heinrich Spreiter ist der Gründer von xpertivyhacker.ch. Kontaktieren Sie ihn auf Xing und Twitter

Melden Sie sich für den Xpert.ivy hacker Newsletter an und Sie erhalten immer die neusten Tutorials und Tricks zu Xpert.ivy sobald sie publiziert werden.

Ihre Email Adresse wird nur für diesen Newsletter verwendet und nicht an dritte weitergegeben.

Rothorn Sprint 14 Review Meeting: Doku & Issues

Mit dem 14. Rothorn Sprint sind die letzten neuen Features in Xpert.ivy 5.0 eingeflossen. Ab sofort werden bis zum Release am 11. April nur noch Bugs gefixt.

Die letzten Features die es in den kommenden Release geschafft haben sind:

  • Multi View Navigation in Html User Dialogen
  • File Upload
  • Templates im webContent Ordner
  • Kompletter Refactoring Support für Html User Dialoge

Multi View Navigation

Mein Highlight ist die Multi View Navigation innerhalb eines Html User Dialoges. Ähnlich wie bei Standard JSF mit Navigation Rules, kann man nun das action Attribut von p:commandButton und co. benutzen, um zwischen verschiedenen Views hin und her zu Navigieren.

Schauen Sie sich dazu unbedingt die Demo in den Html Dialog Demos an.

Templates im webContent Ordner

Vor diesem Sprint Release musste man die Templates noch im src_hd Ordner anlegen und relativ zum Html User Dialog referenzieren. Dies ist nun nicht mehr nötig.

Ab sofort können die Templates im webContent Ordner angelegt und eindeutig angesprochen werden.

Ich habe dazu das Templating Tutorial aktualisiert.

Dokumentation und Demos

Die Dokumentation wurde um ein neues Html User Dialog Kapitel ergänzt. Ich habe einen kurzen Blick drauf geworfen und finde es gut gelungen.

Auch die Html Dialog Demos wurden noch einmal überarbeitet und sind eine tolle Ressource für Beispiele wie z.B. Multi View Navigation, File Upload und vieles mehr.

Fazit

Das waren also die letzten Features die es in Xpert.ivy 5.0 geschafft haben. Ab sofort werden nur noch Bugs bis zum Release am 11. April gefixt.

Mit den Features die Xpert.ivy 5.0 nun bietet denke ich, dass dies ein guter erster Release ist mit dem man tolle Applikationen und Prozesse entwickeln kann.
Über den Author: Heinrich Spreiter ist der Gründer von xpertivyhacker.ch. Kontaktieren Sie ihn auf Xing und Twitter

Melden Sie sich für den Xpert.ivy hacker Newsletter an und Sie erhalten immer die neusten Tutorials und Tricks zu Xpert.ivy sobald sie publiziert werden.

Ihre Email Adresse wird nur für diesen Newsletter verwendet und nicht an dritte weitergegeben.

Xpert.ivy ActiveMQ JMS Extension

Vor einiger Zeit hatte ich eine JMS Extension für Xpert.ivy angekündigt. Heute ist es nun soweit. Eine erste Version für ActiveMQ 5.8.0 steht jetzt auf google code zur Verfügung.

Ivy 5.0 Projekt: http://xpert-ivy-hacker-source-code.googlecode.com/svn/trunk/IvyActiveMQ
Ivy 5.0 Demo Projekt: http://xpert-ivy-hacker-source-code.googlecode.com/svn/trunk/IvyActiveMQDemo

Das Demo Projekt zeigt wie man das Ganze verwenden kann. Die URL zum ActiveMQ Broker muss per Globale Variable activemq.broker.url konfiguriert werden.

Sie müssen eine ActiveMQ Instanz am laufen haben damit das die Demo funktioniert (Download).

Wenn Sie mehr über ActiveMQ lernen wollen, empfehle ich Ihnen ActiveMQ in Action zu lesen.

Viel Spass!

Weiterführende Ressourcen

Über den Author: Heinrich Spreiter ist der Gründer von xpertivyhacker.ch. Kontaktieren Sie ihn auf Xing und Twitter

Melden Sie sich für den Xpert.ivy hacker Newsletter an und Sie erhalten immer die neusten Tutorials und Tricks zu Xpert.ivy sobald sie publiziert werden.

Ihre Email Adresse wird nur für diesen Newsletter verwendet und nicht an dritte weitergegeben.

2. Xpert.ivy Developer Day

Nach dem ersten erfolgreichen Xpert.ivy Developer Day, findet am 11. April 2013 der 2. Xpert.ivy Developer Day statt.

Unten die Einladung, die vom ivyTeam versendet wurde.

Liebe Anwender-Community von Xpert ivy

Hiermit laden wir Sie herzlich zum 2. Xpert.ivy Developer Day vom 11. April 2013 in Zug ein. 

Die Entwickler der Xpert.ivy Plattform präsentieren Ihnen aus erster Hand den Release 5.0. ganz nach dem Motto "von Entwickler für Entwickler". 

Ort: IFZ Institut für Finanzdienstleistungen Zug, Seminarraum Auditorium in der Grafenau, in Zug

Datum: Donnerstag den 11. April 2013
13:00 - 13:30   Eintreffen
13:30 - 14:00   Offizieller Launch Xpert.ivy 5
14:00 - 15:30   Präsentationen zu Xpert.ivy
15:30 – 16:00   Pause
16:00 - 17:00   Präsentationen zu Xpert.ivy
Ab 17:00          Networking-Bier

Wir freuen uns, Sie am 11. April 2013 zum 2. Developer Day begrüssen zu dürfen. Bitte melden Sie sich noch heute bei caty.huerlimann@ivyteam.ch an. Teilnehmerzahl ist beschränkt.

Bruno Bütler                            Reto Weiss
Leiter ivyTeam AG                   Dipl. El. Ing. HTL

Über den Author: Heinrich Spreiter ist der Gründer von xpertivyhacker.ch. Kontaktieren Sie ihn auf Xing und Twitter

Melden Sie sich für den Xpert.ivy hacker Newsletter an und Sie erhalten immer die neusten Tutorials und Tricks zu Xpert.ivy sobald sie publiziert werden.

Ihre Email Adresse wird nur für diesen Newsletter verwendet und nicht an dritte weitergegeben.

Templating mit Xpert.ivy und JSF

Jede nicht triviale Applikation hat ein Grunddesign das sich über die meisten Masken wiederholt. Damit man dieses Design nicht für jede Maske immer wieder Codieren muss, gibt es in JSF Templates, mit denen man an einem zentralen Ort diese Designs erstellen und, was noch viel wichtiger ist, warten kann.

In diesem Tutorial werde ich zeigen, wie man Templates in Xpert.ivy erstellt und verwendet.

SVN

Sie können das fertige Projekt per SVN von http://xpert-ivy-hacker-source-code.googlecode.com/svn/trunk/Forms in den Xpert.ivy Designer importieren.

Demos

Ich habe 2 Demos erstellt die Application Template Demo und Decorated Template Demo heissen.

Templates erstellen

Templates sind *.xhtml Dateien die im webContent Ordner drin sein müssen.

Die Templates sollten in einem dafür vorgesehenen Ordner abgelegt werden. Dazu legt man einfach einen neuen Ordner im webContet Folder an. In diesem Beispiel heisst er templates.

Jetzt wo die Grundstruktur steht, kann man über das Kontext-Menu per New -> Other ein HTML Template anlegen.

Abb. 1: Neues HTML Template erstellen

Im Dialog wählt man nun den templates Ordner aus, gibt den Namen des Templates ein und klickt auf Next.

Abb. 2: Name des Templates eingeben

Als Template wählt man das New Facelet Template aus und klickt Finish. Das Resultat ist eine einfaches Template mit Titel, Header, Content und Footer. Dieses Template kann jetzt bearbeitet werden.

Abb. 3: Vorlage auswählen

Aufbau eines Templates

Schauen wir uns nun applicationTemplate.xhtml an und wie es von ApplicationTemplateDemo verwendet wird.

Code-Snippet 1: applicationTemplate.xhtml

Code-Snippet 2: ApplicationTemplateDemo

Wie im Code-Snippet 1 zu sehen ist, besteht ein Template nur aus HTML, ui:insert und ui:include.

ui:insert ist ein Platzhalter für den Inhalt den man per ui:define in einer Komponente, wie ApplicationTemplateDemo, definieren kann. Wenn nichts definiert ist, wird das Default das zwischen ui:insert ist verwendet.

Im Code-Snippet 2 sieht man, wie mit ui:composition das Template verwendet wird.

Interessant bei ui:composition ist auch, dass nur der Inhalt von ui:composition gerendert wird. Alles was ausserhalb von ui:composition ist, wird ignoriert.

ui:include, wie der Name schon verrät, fügt den Inhalt eines Templates ein. Ein solches Template kann wie das erste Template vorher erstellt werden, mit dem Unterschied, dass man New Facelet Composition Page als Template wählt.

Abb. 4: Facelet Composition Page

Code-Snippet 3: header.xhtml

ui:decorate

Eine Variation von ui:composition ist ui:decorate. ui:decorate hat die selben Funktionen wie ui:composition. Zusätzlich kann man aber ein ui:insert ohne name im Template definieren.

Code-Snippet 4: decoratedTemplate.xhtml

Im Code-Snippet 4 sieht man auf Zeile 17, dass ui:insert ohne name Attribute verwendet wird. Dies hat zur Folge, dass im Code-Snippet 5, alles was ausserhalb von einem ui:define ist, dort eingefügt wird.

Code-Snippet 5: DecoratedTemplateDemo

Fazit

Templates sind für jede nicht triviale Applikation ein muss, damit Änderungen am Design nicht an zig Stellen nachgeführt werden müssen.
Über den Author: Heinrich Spreiter ist der Gründer von xpertivyhacker.ch. Kontaktieren Sie ihn auf Xing und Twitter

Melden Sie sich für den Xpert.ivy hacker Newsletter an und Sie erhalten immer die neusten Tutorials und Tricks zu Xpert.ivy sobald sie publiziert werden.

Ihre Email Adresse wird nur für diesen Newsletter verwendet und nicht an dritte weitergegeben.

Xpert.ivy Code-Rezept: Drill-Down Master-Detail-Edit Formular erstellen

Problem

Sie wollen ein Formular mit Drill-Down Master-Detail-Edit Funktionalität erstellen.

Lösung

Die PrimeFaces Extensions bieten eine pe:masterDetail Komponente an, mit der solche Formulare schnell und einfach erstellt werden können.

In diesem Tutorial zeige ich, wie man die pe:masterDetail Komponente einsetzt.

Abb. 1: Stufe 1 - Übersicht der Kontakte

Abb. 2: Stufe 2 - Detail des gewählten Kontaktes

Abb. 3: Stufe 3 - Kontakt bearbeiten

SVN

Sie können das fertige Projekt per SVN von http://xpert-ivy-hacker-source-code.googlecode.com/svn/trunk/Forms in den Xpert.ivy Designer importieren.

Code

Die Demo Master Detail Edit Demo zeigt ein Beispiel, wie man pe:masterDetail einsetzen kann (Abbildungen 1 bis 3).

Als kleinen Bonus habe ich noch ein Beispiel für das hinzufügen und löschen von Kontakten reingepackt. Dies hat aber nichts mit der pe:masterDetail Komponente an sich zu tun und ist fürs Selbststudium gedacht.

Code-Snippet 1: MasterDetail Code der Demo

Code-Snippet 1 zeigt den ganzen JSF Code der für die Demo benötigt wird.

Während dies nach sehr viel Code aussieht, kann man das Ganze auf 1 Pattern reduzieren, dass Allgemein eingesetzt werden kann, um mit pe:masterDetail zu Entwickeln.

Code-Snippet 2: pe:masterDetail Pattern

Der pe:masterDetail Tag kann 1 oder mehrere pe:masterDetailLevel beinhalten. Im pe:masterDetail konfiguriert man das Allgemeine Verhalten der Komponente wie z.B. ob oberhalb der Levels ein Breadcrumb angezeigt werden soll. Die pe:masterDetailLevel beinhalten die eigentlichen Komponenten, die je nach Level angezeigt werden sollen.

Allgemein hat man im ersten Level eine Liste/Tabelle von etwas, von dem man das Detail im zweiten Level anzeigt.

pe:selectDetailLevel kann als Child-Element von p:commandButton und p:commandLink verwendet werden. pe:selectDetailLevel bestimmt, zu welchem Level gewechselt wird, wenn man z.B. einen Button drück. Des Weiteren kann man das selektierte Objekt per contextValue übergeben, dass danach im nächsten pe:masterDetailLevel per contextVar zur Verfügung steht.

Mit dem selectLevelListener kann man pe:selectDetailLevel übersteuern. Schauen Sie sich dazu die selectLevel Methode in der Logic an.

Wie man sieht, kann man dieses Pattern beliebig weit erweitern. In der Demo habe ich z.B. ein drittes Level erstellt, über das man den selektierten Kontakt direkt bearbeiten kann.

Bei Objekten die selber wieder Listen von Objekten beinhalten, kann man mit der pe:masterDetail Komponte einfach weitere Levels hinzufügen und somit einen Drill-Down Effekt erzielen.

Weiterführende Ressourcen

Über den Author: Heinrich Spreiter ist der Gründer von xpertivyhacker.ch. Kontaktieren Sie ihn auf Xing und Twitter

Melden Sie sich für den Xpert.ivy hacker Newsletter an und Sie erhalten immer die neusten Tutorials und Tricks zu Xpert.ivy sobald sie publiziert werden.

Ihre Email Adresse wird nur für diesen Newsletter verwendet und nicht an dritte weitergegeben.

Rothorn Sprint 13 Review Meeting: Polish Html Dialog

Der Fokus in diesem Sprint war Polish Html Dialog. Zu diesem Polish gehören unter andrem eine neue Perspektive für Html User Dialog Entwicklung, verbesserte Html User Dialog Validation und ein verbesserter Ivy Projekt Tree, der nun die src, webContent und eigene Verzeichnisse anzeigt.

Meine persönlichen Highlights kamen ganz am Schluss des Review Meetings: Das Update auf PrimeFaces 3.5 und das Xpert.ivy nun mit PrimeFaces Mobile und PrimeFaces Extensions ausgeliefert wird. Ich werde sicher den einen oder anderen Blog Post den PrimeFaces Extensions widmen.

Eine weitere nennenswerte Neuerung ist das bei Datenbank- bzw. Webservicekonfigurationen nun die Passwörter verschlüsselt gespeichert werden, wenn man es über den entsprechenden Editor eingibt und speichert. Wer die Konfigurationen per Texteditor öffnent, der kann immer noch Plaintext Passwörter verwenden.

Migration auf Rothorn S13

Die verbesserte Html User Dialog Validation bringt auch etwas Arbeit mit sich, falls man Projekte mit älteren Builds entwickelt hat.

Vor S13 wurden für Script-Steps in Html User Dialogen die Scripts-Steps von den ULC RIA Dialogen verwendet. Ab S13 werden aber die von den Prozessen verwendet, da Html User Dialoge keine panel Variable haben.

Zum Glück ist die Migration einfach und gut dokumentiert.

Fazit

Man merkt, dass der offizielle Rothorn Release nicht mehr weit weg ist und das Sprint Motto Polish Html Dialog zeigt dies. Während es in diesem Sprint keine grossen Neuerungen wie in den letzten paar Sprints gab, ist es trotzdem ein toller Sprint Inkrement geworden, denn Details wie z.B. ein verbesserter Projekt Tree erleichtern einem Xpert.ivy Entwickler das Leben.

Für eine komplette Übersicht der neuen Features, schauen Sie sich den ivyTeam Blog an.
Über den Author: Heinrich Spreiter ist der Gründer von xpertivyhacker.ch. Kontaktieren Sie ihn auf Xing und Twitter

Melden Sie sich für den Xpert.ivy hacker Newsletter an und Sie erhalten immer die neusten Tutorials und Tricks zu Xpert.ivy sobald sie publiziert werden.

Ihre Email Adresse wird nur für diesen Newsletter verwendet und nicht an dritte weitergegeben.

Java Klassen mit Xpert.ivy Debuggen

Wer Java Klassen in seinen Prozessen verwendet und diese Debuggen will, der wir schnell merken, dass die Breakpoints nicht funktionieren. Doch mit 2 kleinen Konfigurationen bringt man auch das zum laufen.

Um Java Klassen die von Xpert.ivy verwendet Debuggen zu können, muss man auf Remote Debugging zurückgreifen. Das Ganze funktioniert im Designer sowie auf dem Server, da man Remote den Server, der auch im Designer läuft, debuggt.

Im Designer kann man Remote Debugging aktivieren, in dem man in der Xpert.ivy Designer.ini Datei folgende Zeile zuunterst hinzufügt.

-agentlib:jdwp=transport=dt_socket,server=y,address=8001,suspend=n

Mit diesem zusätzlichen JVM Argument erlaubt man es einem Remote Debugger auf Port 8001 zu verbinden und das Programm zu Debuggen.

Nach einem Neustart des Designer muss man nun auf die Java View wechseln. Unter Run -> Debug Configurations kann man eine neue Remote Java Application Debugging Konfiguration erstellen.

Abb. 1: Remote Java Application Debugging Konfiguration
Dazu wählt man das Projekt aus und überprüft, ob Host und Port stimmen. Per Knopfdruck auf Debug kann es los gehen.

Wenn man nun die Applikation startet und Breakpoints im einer Java Klasse hat, dann wird dieser getriggert und man kann den Code und die Daten analysieren.

Für den Server muss man den ivy.vm.additional.options Eintrag im der entsprechenden *.ilc Datei im bin Verzeichnis anpassen. Nach einer Änderung ist auch hier ein Neustart erforderlich.
Über den Author: Heinrich Spreiter ist der Gründer von xpertivyhacker.ch. Kontaktieren Sie ihn auf Xing und Twitter

Melden Sie sich für den Xpert.ivy hacker Newsletter an und Sie erhalten immer die neusten Tutorials und Tricks zu Xpert.ivy sobald sie publiziert werden.

Ihre Email Adresse wird nur für diesen Newsletter verwendet und nicht an dritte weitergegeben.

Xpert.ivy Code-Rezept: Komponenten in der Html User Dialog Logic updaten

Problem

Sie wollen in der Logic eines Html User Dialogs Komponenten updaten bzw. neu rendern lassen.

Lösung

Über den PartialViewContext kann man Ids von Komponenten die geupdatet werden sollen hinzufügen.

SVN

Sie können das fertige Projekt per SVN von http://xpert-ivy-hacker-source-code.googlecode.com/svn/trunk/Forms in den Xpert.ivy Designer importieren.

Code

Die Demo Update Component From Logic Demo zeigt, wie man normale Komponenten sowie Composite Components updaten kann.

Code-Snippet 1 zeigt, welcher Code nötig ist, um normale Komponenten (Zeile 3) und Composite Components (Zeile 4) innerhalb der Logic updaten zu können.

Code-Snippet 1: Komponenten in der Logic updaten

Interessant bei Composite Components ist, dass man die Id 2 mal angeben muss. Ein Blick auf die Implementation verrät auch warum das so ist.

Code-Snippet 2: Composite Component Id

Wie auf Zeile 2 zu sehen ist, wird die Id, die von aussen per <ic:forms.UpdateComponentFromLogicComponent id="mycomponent" /> mitgegeben wird, per #{cc.id} eingesetzt. Der Pfad setzt sich nun aus der Id im Parent sowie der Id im Composite Component zusammen. Da beide die selbe Id haben, muss man es auch 2 mal angeben.
Über den Author: Heinrich Spreiter ist der Gründer von xpertivyhacker.ch. Kontaktieren Sie ihn auf Xing und Twitter

Melden Sie sich für den Xpert.ivy hacker Newsletter an und Sie erhalten immer die neusten Tutorials und Tricks zu Xpert.ivy sobald sie publiziert werden.

Ihre Email Adresse wird nur für diesen Newsletter verwendet und nicht an dritte weitergegeben.

Composite Components mit insert children und Facetten individualisieren

Mit Composite Components hat man die Möglichkeit, wiederverwendbare Komponenten wie z.B. Loginmaske zu schreiben. Doch manchmal kann man trotzdem nicht alles in eine Komponente reinpacken, da es je nach Anwendung kleine Unterschiede gibt.

Was kann man also tun, damit man trotzdem wiederverwendbare Komponenten mit geringem Aufwand individualisieren kann?

JSF bietet insertChildren und f:facet an, um Teile von Composite Components vom aussen zu konfigurieren.

Schauen Sie sich dazu die Facet and Insert Children Demo im Forms Demo Projekt an das unter http://xpert-ivy-hacker-source-code.googlecode.com/svn/trunk/Forms ausgecheckt werden kann.

Code-Snippet 1: Ivy Composite Component

Code-Snippet 2: Composite Component konfigurieren

insertChildren

Mit insertChildren werden alle Elemente die innerhalb des Composite Components definiert werden, direkt in den Composite Component eingefügt. Ein tolles Beispiel ist die p:dataTable die als Kinder p:column entgegennimmt.

Um diese Kinder innerhalb eines Composite Components anzeigen zu können, kann man einfach cc:insertChildren (Code-Snippet 1, Zeile 15) verwenden. Im Beispiel wird das p:outputLabel und das p:inputText als Kind eingefügt (Code-Snippet 2, Zeilen 9 und 10).

Facetten

Facetten funktionieren ähnlich wie insertChildren. Der Unterschied ist, dass sie Namen haben und man sie mit f:facet einfügen muss. Des Weiteren muss man die Facetten im Interface angeben und es gibt 2 Möglichkeiten Facetten innerhalb des Composite Components zu rendern.

Die erste ist cc:renderFacet (Code-Snippet 1, Zeile 8). Sie rendert den Inhalt von f:facet direkt und hat somit den selben Effekt wie cc:insertChildren.

cc:insertFacet wird nicht direkt im Composite Component gerendert, sondern in der Komponente, in der cc:insertFacet aufgerufen wird als Facette mitgegeben. Im Beispiel geben wird die header und footer Facette der p:panelGrid mitgegeben und dort gerendert (Code-Snippet 1, Zeilen 11 und 13).

Fazit

Facetten und insertChildren sind tolle Werkzeuge, um Composite Components von Fall zu Fall einfach individualisieren zu können.
Über den Author: Heinrich Spreiter ist der Gründer von xpertivyhacker.ch. Kontaktieren Sie ihn auf Xing und Twitter

Melden Sie sich für den Xpert.ivy hacker Newsletter an und Sie erhalten immer die neusten Tutorials und Tricks zu Xpert.ivy sobald sie publiziert werden.

Ihre Email Adresse wird nur für diesen Newsletter verwendet und nicht an dritte weitergegeben.

Xpert.ivy Code Rezpet: Managed Beans in der Logic verwenden

Problem

Sie wollen auf ein Managed Bean in der Logic zugreifen. 

Lösung

Über die Application kann man EL-Expressions evaluieren und somit auch auf Managed Beans zugreifen.

Ich werde Ihnen zeigen, wie Sie das Application Objekt holen und eine EL-Expression evaluieren, um auf ein Managed Bean zugreifen zu können.

SVN

Sie können das fertige Projekt per SVN von http://xpert-ivy-hacker-source-code.googlecode.com/svn/trunk/ManagedBeans in den Xpert.ivy Designer importieren.

Code

Als erstes definieren wir ein einfaches Managed Bean.

Code-Snippet 1: Managed Bean

Das description Attribut des Bean wird nun in einem p:inputText verwendet.

Code-Snippet 2: Bean Attribut verwenden

Wie hier zu sehen ist, wird über den name des Beans darauf zugegriffen.

Wenn der Button gedrückt wird, wird in der Logic auf das Bean zugegriffen und das description Attribute geändert.

Code-Snippet 3: Zugriff auf das Managed Bean

Der Schlüssel hier ist das evaluieren der EL-Expression auf Zeile 8. Wenn #{sampleBean} evaluiert wird, hat dies den selben Effekt, wie wenn diese EL-Expression innerhalb der View ausgeführt wird.
Über den Author: Heinrich Spreiter ist der Gründer von xpertivyhacker.ch. Kontaktieren Sie ihn auf Xing und Twitter

Melden Sie sich für den Xpert.ivy hacker Newsletter an und Sie erhalten immer die neusten Tutorials und Tricks zu Xpert.ivy sobald sie publiziert werden.

Ihre Email Adresse wird nur für diesen Newsletter verwendet und nicht an dritte weitergegeben.

Xpert.ivy Code Rezept: PrimeFaces Charts anzeigen

Problem

Sie wollen Charts in Ihren Html User Dialogen anzeigen.

Lösung

PrimeFaces hat out of the box diverse Chart Komponente die einfach in die Html User Dialoge integriert werden können.

In diesem Tutorial zeige ich, wie man Bar-, Line- und MeterGaugeChart konfiguriert und in einem Html User Dialog anzeigt.

Abb. 1: Chart Demo

SVN

Sie können das fertige Projekt per SVN von http://xpert-ivy-hacker-source-code.googlecode.com/svn/trunk/Forms in den Xpert.ivy Designer importieren.

Code

Charts in PrimeFaces zu erstellen ist relativ einfach. Alles was man braucht ist das richtige ChartModel. Für Bar- und Linechart ist es das CartesianChartModel. Für das MeterGaugeChart das MeterGaugeChartModel.

Hier ein Beispiel wie man das Barchart Konfiguriert.

Code-Snippet 1: Barchart konfigurieren

Das CartesianChartModel an sich hat keine Daten. Die Daten werden durch ChartSeries Objekte konfiguriert. Im Fall von Code-Snippet 1 sind dies 2.

Das Linechart kann fast gleich konfiguriert werden, mit dem Unterschied, dass anstelle der ChartSeries LineChartSeries verwendet werden.

Code-Snippet 2: Linechart konfigurieren

Zu guter Letzt noch ein spezielles Chart: Das MeterGaugeChart. Oder in Deutsch einfach TachometerChart.

Code-Snippet 3: MeterGaugeChart konfigurieren

Im Gegensatz zu den 2 vorherigen Charts benötigt das MeterGaugeChart ein MeterGaugeChartModel. Dieses Model nimmt als Konstruktor-Parameter den Tachostand und die Intervalle, in die der Tacho eingeteilt ist, entgegen.

Die Charts selber in den Html User Dialog einzubetten ist trivial.

Code-Snippet 4: Charts in Html User Dialog einbetten

Jedes Chart bietet diverse Attribute um Aussehen und Verhalten zu steuern. Am besten schauen Sie sich die PrimeFace Demos und die PrimeFaces Dokumentation dazu an.
Über den Author: Heinrich Spreiter ist der Gründer von xpertivyhacker.ch. Kontaktieren Sie ihn auf Xing und Twitter

Melden Sie sich für den Xpert.ivy hacker Newsletter an und Sie erhalten immer die neusten Tutorials und Tricks zu Xpert.ivy sobald sie publiziert werden.

Ihre Email Adresse wird nur für diesen Newsletter verwendet und nicht an dritte weitergegeben.

PrimeFaces Cookbook ist verfügbar

Das PrimeFaces Cookbook ist nun endlich da! Man kann es auf der Pack Publishing Seite kaufen.

Von der Webseite:

PrimeFaces is the de facto standard in the Java web development. PrimeFaces is a lightweight library with one jar, zero-configuration, and no required dependencies. You just need to download PrimeFaces, add the primefaces-{version}.jar to your classpath and import the namespace to get started. This cookbook provides a head start by covering all the knowledge needed for working with PrimeFaces components in the real world.

"PrimeFaces Cookbook" covers over 100 effective recipes for PrimeFaces 3.x which is a leading component suite to boost JSF applications. The book’s range is wide - from AJAX basics, theming, and input components to advanced usage of datatable, menus, drag & drop, and charts. It also includes creating custom components and PrimeFaces Extensions.

You will start with the basic concepts such as installing PrimeFaces, configuring it, and writing a first simple page. You will learn PrimeFaces' theming concept and common inputs and selects components. After that more advanced components and use cases will be discussed. The topics covered are grouping content with panels, data iteration components, endless menu variations, working with files and images, using drag & drop, creating charts, and maps. The last chapters describe solutions for frequent, advanced scenarios and give answers on how to write custom components based on PrimeFaces and also show the community-driven open source project PrimeFaces Extension in action.

Sobald ich es gelesen habe, werde ich ein kleines Review darüber schreiben.
Über den Author: Heinrich Spreiter ist der Gründer von xpertivyhacker.ch. Kontaktieren Sie ihn auf Xing und Twitter

Melden Sie sich für den Xpert.ivy hacker Newsletter an und Sie erhalten immer die neusten Tutorials und Tricks zu Xpert.ivy sobald sie publiziert werden.

Ihre Email Adresse wird nur für diesen Newsletter verwendet und nicht an dritte weitergegeben.

Berechtigungen in Xpert.ivy


Berechtigungen sind die letzte Verteidigungslinie in Xpert.ivy um unerlaubten Zugriff auf gewisse Systeme und Daten zu verhindern. So ist es z.B. möglich, gewissen Rollen oder Benutzern das lesen von System Properties und Tasks zu verbieten oder zu erlauben. Wenn ein Stück Code nun versucht diese auszulesen und der Benutzer keine Berechtigung hat dies zu tun, so wird die Methode eine Exception werfen.

Code-Snippet 1: Keine Berechtigung

D.h., auch wenn man als Entwickler etwas vergisst, können diese Berechtigungen grösseren Schaden vermeiden, sofern sie richtig konfiguriert sind.

Doch wo und wie vergibt man diese Berechtigungen? Im Designer hat der Developer Benutzer alle Berechtigungen.

Normalerweise will man sich jedoch mit einem eigenen Benutzer einloggen. Wenn es dann zu einer Exception kommt, kann folgendes Code-Snippet ausgeführt werden um Root Berechtigungen zu bekommen.

Code-Snippet 2: Root Berechtigungen im Designer

Dies gibt der Rolle Everybody alle Berechtigungen. Diesen Code braucht man nur einmal nach dem Starten des Designer auszuführen.

Auf dem Server gibt es im Admin Bereich bei den Rollen und Benutzern 2 Knöpfe, mit denen sich diese Berechtigungen einstellen lassen.

Abb. 1: Berechtigungen
Abb. 2: Berechtigungen vergeben
Hier kann man die einzelnen Berechtigungen sehr fein einstellen.

Fazit

Mit den Berechtigungen hat man ein effektives Werkzeug um auf globaler Ebene den Zugriff auf gewisse Systeme, Ressourcen und Daten zu Beschränken.
Über den Author: Heinrich Spreiter ist der Gründer von xpertivyhacker.ch. Kontaktieren Sie ihn auf Xing und Twitter

Melden Sie sich für den Xpert.ivy hacker Newsletter an und Sie erhalten immer die neusten Tutorials und Tricks zu Xpert.ivy sobald sie publiziert werden.

Ihre Email Adresse wird nur für diesen Newsletter verwendet und nicht an dritte weitergegeben.

Rothorn Sprint 12 Review Meeting: Validation & Cleanup

Im Sprint 12 Review Meeting gab es viele tolle Neuerungen. Zu meinen Highlights gehören
  • Bean Validation Annotations für Java Klassen & JSF Converters
  • Quick Outline für Prozesse
  • Toolsupport für IIS Integration

Bean Validation Annotations für Java Klassen & JSF Converters

Mit den Bean Validation Annotations ist es nun möglich Java Klassen mit Validation Annotations zu annotieren. Wenn eine annotierte Java Klasse in einem JSF Html Dialog in einem Formular verwendet wird, so wird dieses automatisch anhand von den Annotations validiert. Es ist keine Konfiguration mehr nötig.

Der Vorteil ist, dass man diese Annotations nur einmal auf der Klasse definiert und nicht für jedes Formular neu von Hand konfigurieren muss. Schauen Sie sich dazu die BeanValidationDemo in den Html Demo Dialogs an.

Zur Zeit werden nur Java Klassen unterstützt. Support für Xpert.ivy Datenklassen ist jedoch geplant.

Des Weiteren können nun auch eigene JSF Converter erstellt und verwendet werden.

Quick Outline für Prozesse

Prozesselemente zu finden war bis jetzt nicht eine Stärke von Xpert.ivy. Mit der Quick Outline für Prozesse kann man nun innerhalb eines Prozesses nach Elementen suchen und diese gleich auswählen. Dabei kann man entweder nach dem Namen oder nach der Prozess Id (PID) suchen.

Dazu drück man einfach CTRL+SHIFT+O und gibt den Suchbegriff ein.

Abb. 1: Quick Outline

Toolsupport für IIS Integration

Will man den IIS als Proxy für Xpert.ivy verwenden, so kann man dies nun automatisch konfigurieren lassen.

Dazu muss man das autoconfig.bat als Administrator starten, welches unter webserver/iis/{architektur} zu finden ist. Das Script konfiguriert nun den IIS automatisch.

Will man zusätzlich SSO einrichten, so startet man nach der IIS Konfiguration autoconfigSSO.bat.

Zum Schluss kann man noch IvyCheckup.exe laufen lassen. Dieses Programm überprüft, ob der IIS richtig konfiguriert wurde und bietet Vorschläge an falls etwas nicht richtig läuft.

Fazit

Es ist wieder ein toller Sprint Release mit vielen Neuerungen und Verbesserungen geworden. Eine Liste mit allen Anpassungen findet man auf dem ivyTeam Blog.
Über den Author: Heinrich Spreiter ist der Gründer von xpertivyhacker.ch. Kontaktieren Sie ihn auf Xing und Twitter

Melden Sie sich für den Xpert.ivy hacker Newsletter an und Sie erhalten immer die neusten Tutorials und Tricks zu Xpert.ivy sobald sie publiziert werden.

Ihre Email Adresse wird nur für diesen Newsletter verwendet und nicht an dritte weitergegeben.

6 Shortcuts um effektiver mit Xpert.ivy zu entwickeln (inkl. Cheat sheet)

Mit der Maus lassen sich ganz einfach und schnell Prozesse in Xpert.ivy zeichnen. Doch wenn es darum geht in Xpert.ivy zwischen den Prozessen zu wechseln und Code zu schreiben, so scheint die Maus manchmal das falsche Werkzeug zu sein.

Mit den 6 nachfolgenden Tastaturshortcuts wird das entwickeln mit Xpert.ivy um einiges effektiver.

Prozesse, Datenklassen und User Dialoge öffnen

Normalerweise wenn man z.B. einen Prozess öffnen will, so weiss man in etwa wo dieser ist. Man klickt sich durch den Projektbaum bis man ihn gefunden hat und öffnet ihn. Bei einem Workspace mit vielen Projekten kann dies jedoch sehr mühsam werden, da man sich zuerst orientieren muss, wo man im Projektbaum ist.

Abhilfe schafft hier der Shortcut CTRL+SHIFT+R. Drück man diese Tastenkombination, so öffnet sich der Open Resource Dialog.

Abb. 1: Open Resource Dialog
Hier kann man nach dem Prozess oder nach anderen Ressourcen suchen und direkt öffnen.

Klassen im Code Tab importieren

Wenn man Klassen im Code Tab des Script-Steps importieren will, so kann man das grüne "C" Icon drücken. Wem das zu langsam geht, der drückt CTRL+SHIFT+C.

Abb. 2: Klasse importieren

Datentyp für Datenklassen-Attribut auswählen

Wer im Datenklasseneditor schnell den Datentyp eines Datenklassen-Attributs auswählen will, der gibt den Namen des Attributs ein, gefolgt von einem Doppelpunkt und drück ENTER. Es öffnet sich der Type Selection Dialog, wo man dem gewünschten Datentyp suchen und auswählen kann.

Abb. 3: Type Selection Dialog

In Call Sub und Composites springen

Um direkt in einen Call Sub oder Composite zu springen, kann man einfach mit der Maus über den Call Sub oder Composite fahren und J drücken. J steht hier für Jump.

Abb. 4: In Call Sub und Composite springen

Prozesspfeile Biegen und Strecken

Wer viel Zeit damit verbringt Prozesspfeile in die richtige Form zu bringen, dem werden diese beiden Shortcuts gefallen.

Um einen Pfeil zu biegen, kann man mit der Maus über den Pfeil fahren und B drücken. Der Pfeil wird dann ums Eck gebogen. Wenn er wieder gerade sein soll, so kann man ihn mit S wieder Strecken.

Prozesselemente automatisch ausrichten

Um Prozesselemente auf einer Linie automatisch auszurichten, selektiert man zuerst die Elemente die ausgerichtet werden sollen und drück A. Xpert.ivy richtet nun alle selektierten Prozesselemente entweder horizontal oder vertikal auf einer Linie aus.

Fazit

Mit diesen einfachen Shortcuts muss man weniger zur Maus greifen und kann schneller und effizienter Arbeiten.

Ich habe Ihnen ein kleines Cheatsheet mit den Shortcuts erstellt, dass Sie hier herunterladen können.
Über den Author: Heinrich Spreiter ist der Gründer von xpertivyhacker.ch. Kontaktieren Sie ihn auf Xing und Twitter

Melden Sie sich für den Xpert.ivy hacker Newsletter an und Sie erhalten immer die neusten Tutorials und Tricks zu Xpert.ivy sobald sie publiziert werden.

Ihre Email Adresse wird nur für diesen Newsletter verwendet und nicht an dritte weitergegeben.

3 Tipps um Probleme auf dem Server zu analysieren und zu lösen

Auch wenn es einem nicht gefällt, Probleme treten immer wieder auf. Im Designer lassen sich Probleme relativ leicht Debuggen. Auf dem Server wird dies etwas schwieriger. Meistens hat man nur das Log. Was kann man also tun, um diese Probleme zu beseitigen?

Hier 3 Tipps die sich bei mir bewährt haben.

Workspace mit gleicher Konfiguration wie auf dem Server einrichten

Das einfachste was man machen kann ist einen Designer mit dem exakt gleichem Workspace wie auf dem Server deployt ist einzurichten und den Fehler zu reproduzieren zu versuchen. Und mit exakt meine ich auch exakt. Sonst kann es sein, dass über Abhängigkeiten etwas ein bisschen anders als auf dem Server ist und somit kein Fehler ausgelöst wird.

Falls man trotz gleicher Konfiguration den Fehler nicht reproduzieren kann, können nachfolgende Tipps helfen.

Die richtige Fehlermeldung lesen

Wenn ein Fehler auftritt so kann es durchaus sein, dass dies im Log viele ERROR Einträge generiert. Am besten fängt man mit dem ersten ERROR Eintrag an, da die nachfolgenden Einträge meistens Folgefehler sind.

Sollte man mal nicht sicher sein, welcher der erste ERROR Eintrag ist und man den Fehler wieder provozieren kann, so kann man einfach den Inhalt des Ivy Logs löschen und speichern und den Fehler erneut provozieren. Nun sucht man einfach nach dem ersten ERROR Eintrag und analysiert diesen.

Fehlermeldungen richtig analysieren

Was kann mit dieser Fehlermeldung gemacht werden? Schauen wir uns eine Beispiel an.

Code Snippet. 1: ERROR Eintrag

Das erste was man machen kann ist den Designer zu starten und nach dem Prozesselement zu suchen, welches den Fehler auslöst. Das Prozesselement ist im Log als processElement=13B7A11C2E76352B-f12-bean eingetragen.

Ab Xpert.ivy 4.3 und höher kann man das Prozesselement direkt über Xpert.ivy -> Debug -> Find Process or Element suchen. Dazu gibt man im Textfeld 13B7A11C2E76352B-f12 ein. Das gefundene Prozesselement wird direkt markiert.

Bis und mit Xpert.ivy 4.2 ist es etwas umständlicher. Im Designer sucht man zuerst nach 13B7A11C2E76352B (ohne -f12).

Dazu öffnet man den Search Dialog über Search -> File.

Abb. 1: Prozesselement suchen
Nachdem das Prozesselement gefunden worden ist, kann man den betroffenen Prozess öffnen. Nun muss man im Prozess nach dem richtigen Prozesselement suchen. Das kann man machen, indem man mit der Maus über die Elemente hovert.
Abb. 2: Prozesselement Pid
Hier sieht man auch den zweiten Teil der ID, f12. Jetzt kann man das Prozesselement analysieren und schauen, ob da etwas falsch konfiguriert oder programmiert wurde.

Fazit

Mit diesen 3 einfachen Tipps lassen sich die meisten Fehler auf dem Server lösen oder zumindest eingrenzen.
Über den Author: Heinrich Spreiter ist der Gründer von xpertivyhacker.ch. Kontaktieren Sie ihn auf Xing und Twitter

Melden Sie sich für den Xpert.ivy hacker Newsletter an und Sie erhalten immer die neusten Tutorials und Tricks zu Xpert.ivy sobald sie publiziert werden.

Ihre Email Adresse wird nur für diesen Newsletter verwendet und nicht an dritte weitergegeben.

Ankündigung: Xpert.ivy JMS Extension

Update: Die Extension ist erschienen.

Im Ausblick für 2013 habe ich angekündigt, dass ich Xpert.ivy Extensions veröffentlichen werde. Die erste die dieses Jahr kommen wird ist die Integration von JMS in Xpert.ivy.

Sie wird Ihnen erlauben per JMS Messages zu senden und zu empfangen. Dies eröffnet neue Möglichkeiten Xpert.ivy mit anderen Applikationen zu integrieren (z.B. über einen ESB) aber auch die Entwicklung von Prozessen, die noch loser voneinander gekoppelt sind.

Ein Release Datum gibt es noch nicht. Sie können sich hier per Email anmelden um zu erfahren, wann die JMS Extension zur Verfügung steht.
Über den Author: Heinrich Spreiter ist der Gründer von xpertivyhacker.ch. Kontaktieren Sie ihn auf Xing und Twitter

Melden Sie sich für den Xpert.ivy hacker Newsletter an und Sie erhalten immer die neusten Tutorials und Tricks zu Xpert.ivy sobald sie publiziert werden.

Ihre Email Adresse wird nur für diesen Newsletter verwendet und nicht an dritte weitergegeben.

Publish-Subscribe mit System Events

Publish-Subscribe, kurz Pub/Sub, ist ein Messaging Pattern das einem erlaubt, den Sender (Publisher) einer Nachricht von den Empfängern (Subscriber) zu entkoppeln. D.h. der Publisher sendet eine Nachricht, wie z.B. Dokument generiert, an eine Zentrale Stelle, auch Broker genannt. Der Broker sendet diese Nachricht nun an alle Subscribers, die sich für diese Nachricht interessieren.

Abb. 1: Pub/Sub


Diese Funktion wird meistens von so genannten Message-Oriented-Middlewares, kurz MOM, bereit gestellt und von APIs wie z.B. JMS implementiert.

Doch was ist der Nutzen von Pub/Sub? Das lässt sich anhand eines Beispieles am besten zeigen.

Nehmen wir an, wir haben einen Prozess der am Ende ein Dokument generiert und dieses Dokument per Email versendet. Nachdem der Prozess eingeführt wurde, will der Kunde, dass dieses Dokument zusätzlich archiviert wird. Gesagt, getan.

Der Prozess ist ein voller Erfolg und wird an einen weiteren Kunden verkauft. Dieser will aber, dass das Dokument weder per Email versendet noch archiviert wird, sondern per FTP hochgeladen wird.

Wie kann dies nun gelöst werden? Eine beliebte Möglichkeit ist das erstellen eines CallSub der per Kunden Projekt und Override überschrieben wird. Dies bedingt jedoch, dass der Prozess aus dem Kundenprojekt gestartet wird und je nach Situation werden Funktionalitäten dadurch dupliziert.

Eine andere Möglichkeit ist Pub/Sub mit System Events. Der Prozess (Publisher) ruft nun nicht mehr den CallSub auf, sondern sendet einen System Event Dokument generiert. Subscribers in Form von Event Start Beans empfangen nun dieses System Event.

Der Vorteil einer solchen Nachrichten basierten Architektur ist, dass man nun Teile der Applikation einfach hinzufügen und wieder wegnehmen kann, ohne das andere Teile der Applikation betroffen sind.

In unserem Beispiel könnten wir die einzelnen Funktionen (Email senden, archivieren, FTP etc.) in Projekte ablegen und je nach bedarf deployen. Diese würden dann das System Event empfangen und ihre Aufgabe unabhängig von einander verrichten.

System Events

Xpert.ivy bietet zwar keine MOM, doch mit den System Events bietet sich eine Möglichkeit, Pub/Sub ohne weitere Bibliotheken zu implementieren.

Xpert.ivy hat 2 Kategorien von System Events. Workflow und 3rd Party.

Workflow System Events werden von Xpert.ivy generiert und man kann selber keine generieren. Es gibt 4 Events die man empfangen kann:
  • WorkflowSystemEvent.TASK_CREATED
  • WorkflowSystemEvent.TASK_CHANGED
  • WorkflowSystemEvent.CASE_CREATED
  • WorkflowSystemEvent.CASE_CHANGED
3rd Party System Events können Sie dagegen selber generieren und empfangen.

Beispiel Projekt

Unter http://xpert-ivy-hacker-source-code.googlecode.com/svn/trunk/PublishSubscribe habe ich Ihnen ein Beispiel Projekt zur Verfügung gestellt.

System Events senden

In Ivy gibt es 2 Möglichkeiten System Event zu senden. 1 davon funktioniert nur in User Dialogen. Die andere, die ich Ihnen zeigen werden, funktioniert in Prozessen wie auch in User Dialogen. Wenn Sie wissen wollen, wie Sie mit einem User Dialog Interface System Events empfangen und senden können, öffnen Sie die Hilfe und suchen Sie nach System Event.

Im Code Snippet 1 ist zu sehen, wie man 3rd Party System Events versendet.

Code Snippet 1: System Event senden

Auf Zeile 5 wird das System Event erstellt. Der erste Parameter ist die Kategorie und muss immer THIRD_PARTY sein. Der zweite Parameter ist der Name des System Events. Auf diesen Namen müssen die Subscribers hören, wenn sie diesen Event empfangen wollen. Der letzte Parameter ist der Payload den man dem System Event mitgeben kann und ist optional.

System Events empfangen

Um System Events empfangen zu können, muss ein ISystemEventListener registriert werden. Ich habe dazu ein Event Start Bean (SystemEventSubscriber.java) geschrieben, dass dazu verwendet werden kann. Im folgenden Code Snippet sieht man die relevanten Teile, um einen ISystemEventListener zu erstellen und zu registrieren.

Code Snippet 2: ISystemEventListener erstellen

Ein ISystemEventListener registriert sich nicht auf einen bestimmten Event, sondern empfängt alle die gesendet werden. Es ist die Aufgabe des Listeners nur die Events zu verarbeiten, an denen er interessiert ist. Auf Zeile 4 sieht man, wie der Listener die Events herausfiltert.

Damit der Listener Events empfängt, muss, wie auf Zeile 15 zu sehen ist, der Listener registriert werden.

Wenn der Listener nicht mehr benötigt wird, muss dieser unbedingt wieder entfernt werden. Dies ist z.B. der Fall, wenn das Event Start Bean gestoppt wird.

Code Snippet 3: Listener entfernen

Wenn dies nicht gemacht wird kann es sein, dass unerwünschte Effekte auftreten, wie z.B. das Events in alten Prozess Model Versionen verarbeitet werden.

Limitationen und Tücken von System Events

Während System Events auf den ersten Blick nach einem tollen Ersatz für MOMs aussehen, muss man sich ihrer Limitationen und Tücken bewusst sein.

Die grösste Limitation von System Events ist das Fakt, dass es keine Garantie gibt das die Nachrichten auch ankommen. Während dies bei MOMs realisiert werden kann, bieten System Events keine solche Funktion an. Hier ein Beispiel, wie eine Nachricht verloren gehen kann.

Nehmen wir an, wir haben ein Projekt A das System Events versendet. Projekt B empfängt diese. Nun wollen wir Projekt B updaten. D.h. wird deaktivieren Projekt B. Wenn nun während dieser Zeit eine Nachricht von Projekt A gesendet wird, so wird Projekt B nach dem aktivieren diese Nachricht nicht sehen. Die Nachricht geht verloren.

Um dies zu verhindern könnte z.B. die Applikation deaktiviert werden.  Man muss jedoch immer noch aufpassen, dass Projekt A nicht vor Projekt B aktiviert wird und schon Nachrichten sendet bevor Projekt B aktiviert ist. Sonst gehen diese Nachrichten verloren.

Ein weiteres Problem ist das senden von Objekten als Parameter und unterschiedliche Prozess Model Versionen (PMVs).

Als Beispiel nehmen wir die beiden Projekte A und B vom vorherigen Beispiel. Projekt B ist abhängig von A.

Projekt A (A1) erstellt Tasks, die nachdem aufnehmen einen System Event mit einem Parameter von einer Datenklasse in Projekt A versenden. Nun erstellen wir eine neue PMV von Projekt A (A2).

Wenn nun in A1 ein Task aufgenommen wird und somit ein System Event mit der Datenklasse als Parameter versendet wird, so wird es in Projekt B zu einer "merkwürdigen" Exception kommen.

Can not cast object projektA.MeineDatenklasse to projektA.MeineDatenklasse.

Der Grund dafür ist, dass MeineDatenklasse die von A1 gesendet wird und MeineDatenklasse die von Projekt B verwendet wird von 2 unterschiedlichen Classloaders kommen. Nämlich vom Projekt Classloader A1 und vom Projekt Classloader A2. Da Projekt B nun A2 verwendet, kann es die Datenklasse von A1 nicht casten, auch wenn sich nichts an der Datenklasse geändert hat.

Eine Lösung um dieses Problem zu vermeiden ist, den Parameter im Projekt A z.B. in einen JSON String zu Serialisieren und in Projekt B wieder in ein Objekt zu Deserialisieren.

Eine weitere Möglichkeit ist nur mit IDs als Parameter zu arbeiten. Die Subscribers können bei Bedarf das Objekt per ID laden.

Message oriented architecture mit Xpert.ivy & JMS Extension

Will man weitergehen als Pub/Sub, stösst man mit System Events schnell auf Grenzen. Im Ausblick für 2013 habe ich angekündigt, dass ich dieses Jahr Extensions für Xpert.ivy veröffentliche werde. Die erste Extension die ich veröffentlichen werde ist eine JMS Extension. Lesen Sie hier mehr darüber.

Fazit

Pub/Sub mit System Events ermöglicht es losgekoppelte Prozesse zu entwickeln und ist eine einfache alternative zu MOMs, wenn man sich den Limitationen bewusst ist und weiss wie mit ihnen umzugehen ist.
Über den Author: Heinrich Spreiter ist der Gründer von xpertivyhacker.ch. Kontaktieren Sie ihn auf Xing und Twitter

Melden Sie sich für den Xpert.ivy hacker Newsletter an und Sie erhalten immer die neusten Tutorials und Tricks zu Xpert.ivy sobald sie publiziert werden.

Ihre Email Adresse wird nur für diesen Newsletter verwendet und nicht an dritte weitergegeben.