EntwicklerCamp 2015: Java Managed Beans

3. März 2015 Posted by Bernd Hort

EntwicklerCamp

Der zweite Tag des EntwicklerCamps nähert sich dem Ende. Heute war mein Vortrag "Java Managed Beans". Nach einer kurzen Einführung in Java Managed Beans haben wir uns die Verwendung in XPages angesehen. Wobei gerade auch das Verständnis für die internen Abläufe in der XPages-Laufzeitumgebung ein wichtiger Aspekt war. Am Schluß wurden die Einsatzmöglichkeiten diskutiert.

Wie immer können die Folien und die Beispiel-Anwendung heruntergeladen werden.


EntwicklerCamp 2015: Jetzt geht es los

2. März 2015 Posted by Bernd Hort

EntwicklerCamp
Der Moment, auf denen viele Leute in den letzten Monaten hingearbeitet haben, ist nun gekommen. Heute beginnt das EntwicklerCamp in Gelsenkirchen.


Wie wir berichtet haben, sind wir mit vier Vorträgen vertreten.

Seit 2004 war ich bei dem jedem EntwicklerCamp.

Wenn ich mir die Agenda von diesem Jahr und den letzten Jahren ansehe, bin ich immer wieder begeistert, wie leistungsfähig und vielseitig Anwendungsentwicklung auf der Notes Plattform ist.

Was ich an Konferenzen wie dem EntwicklerCamp besonders mag, sind nicht nur die Vorträge über Themen wie objekt-orientiertem LotusScript, Web-Services, REST-Schnittstellen, JavaScript, Java etc.. Es sind insbesondere auch die Diskussionen, in denen immer wieder herauskommt, welche genialen Anwendungen für die Anwender im Laufe der Zeit entstanden sind. Das geht von klassischen Notes Anwendungen mit z.B. Web-Service Schnittstellen zu Reisebüro-Diensten, über Web-Anwendungen bis hin zu Anwendungen für mobile Endgeräte.

Das Beste daran ist, dass man für alle diese Anwendungstypen man nur einen Server braucht.  

IBM ConnectED 2015: BP 108 – Be Open – Use Web Services and REST in XPages Applications

28. Januar 2015 Posted by Bernd Hort

IBM ConnectED 2015

Before I head to the party I will keep my promise and post the presentation and the sample database.

BP 108 - Be Open - Use Web Services and REST in XPages Applications

Thank you to everyone who joined my session.


IBM ConnectED 2015: Wir sind dabei

13. Januar 2015 Posted by Bernd Hort

IBM ConnectED 2015

Letztes Jahr hatten wir bereits die Ehre zweimal als Sprecher bei der internationalen Konferenz IBM Connect (ehemals Lotusphere) in Erscheinung treten zu können. Dieses Jahr haben wir diese Ehre bei der kommenden IBM ConnectED 2015 wieder.

BP108: Be open - Use WebServices and REST in XPages applications
Session date Tuesday, 2015-01-27
Session time 05:00 PM - 06:00 PM
Session location Swan Hotel, Toucan 1-2
Speaker Bernd Hort, assono GmbH

Lotus Domino always was a very integrative system. Today with XPages it is even simpler to connect to other systems. Join us in this session to find out how to use Web Services and / or RESTfull Service (REST) within XPages.

After giving some backgrounds both to Web Service and REST we start with consuming a Web Service from within the Browser using JavaScript. Than we look at how to do the same from the back end using Java.

REST can also be consumed from JavaScript (Browser) or Java (Backend). We show samples for both. Additionally we demonstrate the use of some of the Dojo widgets that can be used with REST.

At the end we deal with security and show how to use Web Services and REST with Basic Authentication.

CHALK405: XPages and Java: Share your Experience
Session date Wednesday, 2015-01-28
Session time 07:15 AM - 08:15 AM
Session location Dolphin Hotel, Dolphin Southern Hemisphere 2
Speaker Bernd Hort, assono GmbH

For the third year we would like to discuss with you using Java in XPages. Over the last few years we have been building a Java-based framework for XPages applications, therefore we have a lot of experiences to share. Share your experiences with us. If you are new to writing your own Java classes for XPages applications, then bring your questions!

Looking forward to see you at IBM Connected 2015.


Domino Designer and XPages Extensibility APIs Javadoc 9.0.1

10. Juni 2014 Posted by Bernd Hort

XPages

During IBM Connect this year I asked in the developer lab about an update for the Javadoc documentation which came with the first version of the Extension Library.

A couple of days ago I finally found it in the Domino Wiki:

Domino Designer & XPages Extensibility APIs Javadoc 9.0.1

It is a really helpful source for anybody who wants to dive deeper into XPages.

Thank you IBM


EntwicklerCamp 2014: XPages – WebServices und REST

19. März 2014 Posted by Bernd Hort

EntwicklerCamp

Der letzte Tag des EntwicklerCamps ist gekommen. Heute war mein zweiter Vortrag zum Thema "XPages - WebServices und REST". In 90 Minuten habe ich ausführlich beschrieben, wie Webservices und RESTful Webservices innerhalb von XPages konsumiert werden können. Die erste Hälfte des Vortrages konzentrierte sich auf das Backend mittels Java. In der zweiten Hälfte habe ich den Blick auf JavaScript im Browser gerichtet.

Wie immer können die Folien und die Beispiel-Anwendung heruntergeladen werden. Basis für diesen Vortrag war mein Vortrag auf der IBM Connect 2014: BP 206 - Be Open - Use Web Services and REST in XPages Applications. Insofern ist die Beispiel-Anwendung die gleiche wie beim IBM Connect-Vortrag.

 

In der Beispiel-Anwendung befinden sich nicht nur XPages, um die Webservices und RESTful Webservices zu konsumieren. Damit die Beispiele auch bei Ihnen ohne Probleme laufen, sind ein Webservice und drei RESTful Webservices implementiert.

Webservice

Die WSDL-Datei zu dem Webservice kann über
http://{Ihr-Server}/{Datenbank-Pfad}/sessionService?wsdl
erreicht werden.

RESTful Webservice

Um verschiedene Techniken zu zeigen, gibt es insgesamt 3 RESTful Webservices, die alle die XPages Extension Library - OpenNTF benötigen.

Custom Database Servlet

Der erste RESTful Webservice verwendet ein Custom Database Servlet.
http://{Ihr-Server}/{Datenbank-Pfad}/xsp/services/Sessions
CustomDatabaseServlet.png

RESTService Control - xe:viewJsonService

Der zweite RESTful Webservice basiert auf einem viewJsonService.
http://{Ihr-Server}/{Datenbank-Pfad}/extensionlibrary.xsp/sessions
viewJsonService.png

RESTService Control - xe:customRestService

Zu guter Letzt gibt es einen RESTful Webservice als customRestService
http://{Ihr-Server}/{Datenbank-Pfad}/customrestservice.xsp/sessions
http://{Ihr-Server}/{Datenbank-Pfad}/customrestservice.xsp/sessions/BP206
customRestService1.png
customRestService2.png

EntwicklerCamp 2014: XPages und Java

18. März 2014 Posted by Bernd Hort

EntwicklerCamp

Der erste meiner zwei Vorträge auf dem diesjährigen EntwicklerCamp lief sehr gut.

Im Vortrag „XPages und Java“ ging es primär darum, wie eigene Klassen für XPages in Java geschrieben werden können, was Managed Beans sind und welche Elemente aus dem JSF-Umfeld sinnvoll für eigene Anwendungen eingesetzt werden können. Den Abschluss bildete eine Betrachtung des Model-View-Controller-Patterns und wie wir es in unserem assono XPages-Framework einsetzen.

Die Beispielanwendung ist die gleiche wie letztes Jahr.


EntwicklerCamp 2014: Nur noch zwei Wochen

4. März 2014 Posted by Bernd Hort

EntwicklerCamp

In zwei Wochen findet das EntwicklerCamp statt. Wie jedes Jahr freue ich mich riesig darauf. Drei Tage lang wird es nur um Anwendungsentwicklung rund um IBM Notes und Domino gehen.

Sicherlich sind XPages dieses Jahr wieder ein großem Thema. Vom irischen IBM XPages Labor wird Tony McGuckin wieder dabei sein. Seine drei Sessions versprechen Erkenntnisse aus erster Hand.

Abgesehen von diesem Hype-Thema, zu dem auch ich meinen Teil beitragen werde (s.u.), gibt es viele weitere spannende Themen. Stephan H Wissel wird sich drei Stunden lang einem seiner Lieblingsthemen widmen: XML. Darüber hinaus wird es Sessions zu LotusScript, Fehlerbehandlung, Connections, Java, C/C++ geben. Das faszinierende an Notes als Entwicklungsplattform ist seine Vielseitigkeit. Das EntwicklerCamp schafft es jedes Jahr wieder diese Vielseitigkeit abzubilden und für jeden neue Erkenntnisse bereit zu halten.

Track 2 - Session 5 XPages und Java
Dienstag, 18.03.2014, 13:30 - 15:00

Die Beschreibung des Vortrages lautet:

In der Session "XPages und Java" wird zunächst beschrieben, wie Java im allgemeinen und eigene Java-Klassen im besonderen in XPages-Anwendungen verwendet werden können. Anschließend wird auf die Basis von XPages, JavaServer Faces JSF, eingegangen. Neben dem JSF Lifecycle werden die verschiedenen Konzepte und Klassen erklärt.

Selbstverständlich geht der Vortrag auch auf die magischen Bohnen ein: Managed Beans.

Kenntnisse in XPages und Java sind Voraussetzung.

Track 2 - Session 8 XPages - WebServices und REST konsumieren
Mittwoch, 19.03.2014, 11:00 - 12:30

Die Beschreibung des Vortrages lautet:

Lotus Domino war schon immer ein integratives System. Mit XPages ist es sogar noch einfacher, auf andere Systeme zuzugreifen. In dieser Session wird erklärt, wie Web Services und / oder RESTful Service (REST) innerhalb von XPages verwendet werden können. Nach einer kurzen Einführung in Web Services und REST zeigen wir, wie Web Services und RESTful Web Services vom Server Backend via Java aufgerufen werden können. Anschließend wechseln wir auf die Browser-Seite und untersuchen die Aufrufmöglichkeiten mittels JavaScript. Dabei werden wir auch auf den Einsatz von dojo für dieses Zwecke eingehen.

Kenntnisse in XPages und Java sind mehr als vorteilhaft.

Wie jedes Jahr werden wir die Folien und Beispielanwendungen in unserem Block veröffentlichen


IBM Connect 2014 – Fazit

3. Februar 2014 Posted by Bernd Hort

IBM Connect 2014

Die IBM Connect 2014 ist nun zu Ende. Mit ein paar Tagen Abstand ist es Zeit für mein persönliches Fazit.

Am meisten beeindruckt hat mich während der Konferenz die Vorstellung von IBM Mail Next. Die IBM hat sich gute Gedanken dazu gemacht, wie man der Informationsflut in unseren Inboxen Herr werden könnte. Neben solchen Konzepten, wie wer sind meine wichtigsten E-Mail-Kontakte, halte ich persönlich den Ansatz einer "persönlichen Schuld" vielversprechend. Die Idee dahinter ist, das mit jeder E-Mail in der etwas angefordert wird, meine Schuld gegenüber dieser Person wächst. Wobei es andersherum genauso ist. Wenn ich etwas anfordere, schuldet mir der Empfänger etwas. Über die Begrifflichkeiten kann sicherlich gestritten werden. Persönlich gefällt mir der Begriff "Schuld" nicht. Trotzdem ist eine Filtermöglichkeit auf die E-Mails, bei denen ich noch tätig werden muss, sehr hilfreich.

IBMmailnext-small.jpeg

Obwohl es sich aktuell nur um Designstudien handelt, plant die IBM eine erste Beta für Mai diesen Jahres. Eine weitere Beta ist für August geplant. Ende des Jahres soll das Web-Dashboard, das die wichtigsten Informationen zu Mail und Kalender kombiniert, in der IBM Smartcloud verfügbar sein. In 2015 soll eine Version für selbst gehostete Domino-Installation zur Verfügung stehen. Man darf sehr gespannt sein.

Erwähnenswert an dieser Stelle ist auf alle Fälle das Projekt Hawthorn, hinter dem sich "IBM Mail Access für Microsoft Outlook 2013" verbirgt. Mit Hilfe der Exchange Active Sync Fähigkeiten des Domino Servers und einem zusätzlichen Plugin kann Microsoft Outlook 2013 als vollständiger Client verwendet werden. Somit können diejenigen im Unternehmen, die glauben das Outlook der bessere E-Mail-Client sei, zufrieden gestellt werden. Das Projekt befindet sich gerade noch in der Testphase. Ein Verfügbarkeitstermin gibt es noch nicht.

BP206.jpgMeine persönlichen Beiträge zur IBM Connect 2014 sind ebenfalls zu meiner vollsten Zufriedenheit verlaufen. In der Birds-of-a-Feather Session BOF201 - XPages and Java: Share your experience ist eine fruchtbare Diskussion über den Einsatz von Java in XPages Anwendungen entstanden.

Meine Session BP 206 - Be Open - Use Web Services and REST in XPages Applications war ein voller Erfolg.

Bei GURUpalooza! zusammen mit den besten Sprechern der Community auf der Bühne zu sitzen, war schon ein unbeschreibliches Gefühl. GURUpalooza.jpg Mehr geballtes Know how zu IBM Notes und Domino gibt es auf der Welt nirgends.

GURUpalooza2.jpg


IBM Connect 2014: BP 206 – Be Open – Use Web Services and REST in XPages Applications

30. Januar 2014 Posted by Bernd Hort

IBM Connect 2014

Sitting in the closing session of IBM Connect 2014. So there is only one more thing to do before enjoying the show. Keeping my promise to upload the presentation and the sample application from my session.

BP 206 - Be Open - Use Web Services and REST in XPages Applications


Connect 2014 – We’ll be there

23. Dezember 2013 Posted by Bernd Hort

IBM Connect 2014

To have a session at Lotusphere IBM Connect is a great honor. At the coming IBM Connect 2014 we will have two session

BP206: Be open - Use WebServices and REST in XPages applications
Session date Wednesday, 29/Jan, 10:00 AM-11:00 AM, 2014-01-29
Session time 10:00 am - 11:00 am
Session location Swan Hotel, Swan-SW 5 - 6
Speaker Bernd Hort, assono GmbH

Lotus Domino always was a very integrative system. Today with XPages it is even simpler to connect to other systems. Join us in this session to find out how to use Web Services and / or RESTfull Service (REST) within XPages.

After giving some backgrounds both to Web Service and REST we start with consuming a Web Service from within the Browser using JavaScript. Than we look at how to do the same from the back end using Java.

REST can also be consumed from JavaScript (Browser) or Java (Backend). We show samples for both. Additionally we demonstrate the use of some of the Dojo widgets that can be used with REST.

At the end we deal with security and show how to use Web Services and REST with Basic Authentication.

BOFxxx - XPages and Java: Share your experience
Session date and location to be announced
Speaker Bernd Hort, assono GmbH

This session is about sharing experiences with using Java in XPages. Over the last few years we have been building a Java-based framework for XPages applications, therefore we have a lot of experiences to share. Share your experiences with us. If you are new to writing your own Java classes for XPages applications, then bring your questions!

Looking forward to see you at Lotusphere.


Irritierende Fehlermeldung im IE bei selbsterstellten SSL-Zertifikaten

29. November 2013 Posted by Bernd Hort

Auf meinem Testserver hatte ich ein sehr irritierendes Verhalten des Internet Explorers im Zusammenhang mit einem selbsterstellten SSL-Zertifikat.

Datenbankeigenschaft - SSL erforderlich

Beim Zugriff auf eine Datenbank, bei der über die Datenbankeigenschaften zwingend SSL als erforderlich definiert worden war, meldete IE, dass der Server nicht erreichbar war. Wobei ohne Probleme auf andere Datenbanken auf dem gleichem Server zugegriffen werden konnte.

Nach einigen Tests kamen wir darauf, dass zwei Probleme mit dem SSL-Zertifikat den IE zu diesem Verhalten brachten.

  1. 1. Das Zertifikat war abgelaufen.
  2. 2. Die Schlüssellänge mit 512 Bit war zu kurz.

Ersteres war sehr einfach zu ändern. Leider war eine Verlängerung des SSL-Zertifikates alleine nicht ausreichend.

Aber in den Kommentaren zu unserem Blog-Artikel "Erstellen von selbst-zertifizierten SSL-Zertifikaten, die länger als ein Jahr gültig sind" war auch ein Hinweis, wie die Schlüssellänge auf 2048 geändert werden kann.


Method view.createViewNavFromAllUnread not working

26. August 2013 Posted by Bernd Hort

Unreadcounticon.png

In Lotus Notes and Domino 8.0 a new Java method was added to the view class: createViewNavFromAllUnread(). I spend quite some time to figure out that it is not working.

It seams that this method is broken since version 8.5 and is still broken in 9.0.

IBM is aware of the situation but there is no priority to fixing this issue.

console showing unread counts

One workaround is to use the method getAllUnreadEntries() from the view class. But this method is much slower than a ViewNavigator.

In my XPages project I was lucky. I only needed the number of unread mails from the users inbox. So I could use a feature from iNotes.

http://[path to users mail database]/iNotes/Proxy/?OpenDocument&Form=s_ReadViewEntries&PresetFields=FolderName;($Inbox),UnreadCountInfo;1,noPI;1&TZType=UTC&Start=1&Count=1

The URL returns a XML file with an entry unreadinfo.

<unreadinfo>
  <foldername>($Inbox)</foldername>
  <unreadcount>7</unreadcount>
</unreadinfo>

LotusScript: db.search in Abhängigkeit vom SUMMARY Flag

18. Juli 2013 Posted by Bernd Hort

Es hat mich heute ein wenig Zeit gekostet, den Fehler in einer unser Kundenanwendungen zu finden.

Die LotusScript Funktion db.search hat nicht alle Dokumente gefunden, die der Kunde erwartet hatte. Ein Blick auf die Eigenschaften eines der fehlenden Dokumente zeigte uns die Ursache

Screenshot Summary flag
Bei einem der Felder, die wir in der Suchabfrage verwendet hatten, fehlte das "SUMMARY" Flag. Dieses Flag regelt normaller weise, ob der Feldinhalt in einer Ansicht angezeigt werden kann.

Offensichtlich verwendet db.search die gleichen Mechanismen für die Suche wie der Indexer für die Ansicht.

Nachdem wir die Ursache gefunden hatten, war es eine Leichtigkeit mit einem kleinen Agent die Summary-Flags wieder zu setzen.

XPages: Speicher- und Replikationskonflikte bei gemeinsamer Verwendung von DominoDocument and Document

22. März 2013 Posted by Bernd Hort

XPages

In einer unserer XPages Anwendungen gab es unregelmäßig ein Problem mit Speicher- und Replikationskonflikten. Die Anwender bekamen die irritierende Meldung:

Das Dokument wurde von einem anderen Benutzer gespeichert. Mit dem Speichern wurde ein neues Dokument als eine Antwort auf das geänderte Dokument erstellt.

Wenn die betroffenen Anwender herumgefragt haben, hat kein Kollege zu der Zeit an dem Dokument gearbeitet.

Als wir daraufhin die Dokumente näher untersucht haben, fanden wir heraus, dass das Speicherkonflikt-Dokument unmittelbar nach dem Speichern des Hauptdokumentes gespeichert worden war. Beide Dokumente wurden vom gleichen Anwender gespeichert. Offensichtlicherweise lag das Problem in unserem Code. Weil diese Speicherkonflikte aber nur sehr sporadisch auftauchten, war die Suche nach der Ursache sehr schwierig.

Letztendlich gab uns Tony McGuckin aus dem XPages Labor in Irland den entscheidenden Hinweis. Der Speicherkonflikt wurde verursacht durch ein Timing-Problem bei der gemischten Verwendung der Javaklassen DominoDocument und Document.


Für Demonstrationszwecke habe ich eine Testdatenbank mit einer einfachen Javaklasse geschrieben:

public void simplifiedSample(DominoDocument uidoc) {
        try {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd HH:MM:ss");
            uidoc.replaceItemValue("Status", "approved");
            uidoc.save();
            System.out.println(sdf.format(new Date()) + " uidoc.save() "
                    + uidoc.getDocumentId());

            java.lang.Thread.sleep(10000);

            Document backendDoc = uidoc.getDocument(true);
            Item authorItem = backendDoc.replaceItemValue("CurrentAuthor",
                    "CN=Bernd Hort/O=assono");
            authorItem.setAuthors(true);
            backendDoc.save();
            System.out.println(sdf.format(new Date()) + " backendDoc.save() "
                    + backendDoc.getUniversalID());

            java.lang.Thread.sleep(10000);

            uidoc.replaceItemValue("SomeOtherItem", "anotherValue");
            uidoc.replaceItemValue("Subject", "Test " + sdf.format(new Date()));
            uidoc.save();
            System.out.println(sdf.format(new Date()) + " uidoc.save() "
                    + uidoc.getDocumentId());

            java.lang.Thread.sleep(10000);

            backendDoc = uidoc.getDocument(true);
            Item readerItem = backendDoc.replaceItemValue("Supervisor",
                    "CN=Bernd Hort/O=assono");
            readerItem.setReaders(true);
            backendDoc.save();
            System.out.println(sdf.format(new Date()) + " backendDoc.save() "
                    + backendDoc.getUniversalID());

        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

Der eigentliche Produktionscode ist wesentlich komplexer. Es werden eine Reihe von Methoden mit entsprechender Business Logik aufgerufen. Einige dieser Methoden müssen die Backend-Klasse Dokument (entspricht NotesDocument in LotusScript) verwenden, weil in der Klasse DominoDocument die notwendigen Methoden nicht vorhanden sind, z.B. um ein Authorenfeld zu erzeugen.

Wenn in der obigen Beispielmethode die Aufrufe von java.lang.Thread.sleep(10000) auskommentiert werden, wird das Dokument ohne Speicher- und Replikationkonflikt abgespeichert. Mit den Thread.sleep-Aufrufen entsteht bei jedem Aufruf ein Speicherkonflikt.

Beim Blick auf die Serverkonsole kann sehr gut gesehen werden, wo der Speicherkonflikt entsteht.

HTTP JVM: 2013-07-22 15:03:52 uidoc.save() 94E
HTTP JVM: 2013-08-22 15:03:02 backendDoc.save() DFB7E2DFD82C80F6C1257B36004D9FAA
HTTP JVM: 2013-08-22 15:03:12 uidoc.save() 952
HTTP JVM: 2013-08-22 15:03:22 backendDoc.save() 52EB22DEF8D31AC6C1257B36004DA77D

Wenn das DominoDocument Objekt (uidoc) zum zweiten Mal gespeichert wird, werden die Zeitstempel verglichen. Die XPages Laufzeitumgebung stellt eine Abweichung zwischen Frontend- und Backend-Dokument fest und erzeugt den Speicherkonflikt. Weil in unseren XPage-Anwendung diese Abweichungen in den Zeitstempeln nur sehr selten auftraten, gab es auch nur wenige Meldungen.

Das Problem lässt sich sehr einfach beseitigen. Wenn der zweite Aufruf für uidoc.save() entfernt wird, gibt es keinen Speicherkonflikt und alle Feldänderungen werden ordnungsgemäß gespeichert.

            // uidoc.save();
            // System.out.println(sdf.format(new Date()) + " uidoc.save() "
            // + uidoc.getDocumentId());
            System.out.println("skip second uidoc save");

Hier ist die Serverkonsole für den Test ohne das zweite uidoc.save():

HTTP JVM: 2013-15-22 15:03:44 uidoc.save() 95E
HTTP JVM: 2013-15-22 15:03:54 backendDoc.save() BB088DF6768831FDC1257B36004E5861
HTTP JVM: skip second uidoc save
HTTP JVM: 2013-16-22 15:03:14 backendDoc.save() BB088DF6768831FDC1257B36004E5861 

Natürlich wäre es besser gewesen, von vorne herein nicht die Verwendung von DominoDocument und Document zu mischen.