From Zero to still Zero: Die schönsten Fehler auf dem Weg in die Cloud
Fix & fertig: Best Practises für "XPages-Migranten"
1. www.ics.ug #icsug
Fix & fertig:
Best Practises für "XPages-Migranten"
Oliver Busse, 26.03.2015
2. www.ics.ug #icsug
Best Practises für "XPages-Migranten"
Oliver Busse
• „Bleeding Yellow“ seit R4.5
• Certified Lotus Instructor seit 2001
• IBM Champion for ICS in 2015
• OpenNTF Contributor &
Board Member
• XPages Advocate
• Framework-süchtig, vor allem
Bootstrap
3. www.ics.ug #icsug
Best Practises für "XPages-Migranten"
• Worum geht's?
– Alltags-Anforderungen mit XPages umsetzen
– Keine Angst vor Java mit XPages
– Vermeidung von @Formeln in SSJS
– Denkanstöße & Best Practises
• Worum geht es nicht?
– XPages Einführung
– Java für Einsteiger
– Komplette Anwendungsmigration
Übersicht
4. www.ics.ug #icsug
Best Practises für "XPages-Migranten"
Warum kein ServerSide Javascript?
• SSJS wird zur Laufzeit interpretiert
• SSJS wird zur Laufzeit kompiliert
• SSJS-Kompilat wird ausgeführt, ist aber kaum zu
debuggen
5. www.ics.ug #icsug
Best Practises für "XPages-Migranten"
• Datenbank- & Nutzerprofile migrieren
– „Klassische“ Profildokumente vs. Scoped Beans
– Wertelisten immer verfügbar machen
• Nutzer- & Umgebungsinformationen
– was darf und soll der Nutzer sehen & können
• Volltextsuche vs. Facettensuche
– Zusätzliche Datenfilterung mit Tags
Themen
7. www.ics.ug #icsug
Best Practises für "XPages-Migranten"
Was wir häufig vorfinden: Profildokumente
Nachteile
• Man sieht sie ohne Hilfsmittel
nicht
• Man kann sie nur
programmatisch erzeugen und
bearbeiten
• Zum Teil Probleme mit der
Replikation
• Relativ viel Code nötig, um auf
Daten zuzugreifen
• Caching ;-)
Vorteile
• Schneller Zugriff auch ohne
Ansichten / Lookups
• Caching
8. www.ics.ug #icsug
Best Practises für "XPages-Migranten"
Was wir häufig vermisst haben
DatabaseScript != Globale Deklarationen
Leider gekapselt, kein Zugriff von außen
(außer Database Events)
9. www.ics.ug #icsug
Best Practises für "XPages-Migranten"
Performance-Killer
Viele dieser Formeln bremsen die Anwendung aus
eines von vielen...
11. www.ics.ug #icsug
Best Practises für "XPages-Migranten"
• Umwandlung von Profildokumenten in
„normale“ Dokumente
1. Erzeugen einer entsprechenden
Lookup-Ansicht
2. Optional: entsprechende Masken
3. Erstellen der Java Beans
4. Definition der Bean-Klassen in der
faces-config.xml
Zutaten
12. www.ics.ug #icsug
Best Practises für "XPages-Migranten"
• Key für Database Profile = dbprofile
• Key für Nutzer Profile = Kanonischer Name
• Key für Wertlisten = frei definierbar, eindeutig
Lookup Ansicht
13. www.ics.ug #icsug
Best Practises für "XPages-Migranten"
• 3 Klassen:
– DatabaseProfileBean
– AppConfigBean
– UserProfileBean
• Die DatabaseProfileBean initialisiert das
Dokument, falls es noch nicht vorhanden ist
• Die UserProfileBean initialisiert das
Dokument, wenn der Nutzer es speichert
Java Beans
15. www.ics.ug #icsug
Best Practises für "XPages-Migranten"
• Request
– kurzzeitig für die Dauer einer Anfrage bis zur Antwort (pro
Nutzer)
• View
– innerhalb einer Seite, auch bei partiellem Refresh (pro
Nutzer)
• Session
– Pro Nutzer für die Dauer der Anmeldung
• Application
– Anwendungsweit für die Dauer der Laufzeit (z.B. bis Server
Neustart bzw. Re-Initialisierung)
Exkurs: Bean Scopes
20. www.ics.ug #icsug
Best Practises für "XPages-Migranten"
Beispiel: Variationen des Nutzernamens
<p>
<xp:label
value="#{javascript:env.userName}"
id="label1">
</xp:label>
</p>
<p>
<xp:label
value="#{javascript:env.commonUserName}"
id="label2">
</xp:label>
</p>
<p>
<xp:label
value="#{javascript:env.abbreviatedUserName}"
id="label3">
</xp:label>
</p>
21. www.ics.ug #icsug
Best Practises für "XPages-Migranten"
Beispiel: ACL Options
Der Löschen-Button ist nur
verfügbar, wenn der Nutzer dies
per ACL auch kann
22. www.ics.ug #icsug
Best Practises für "XPages-Migranten"
Sogar in Themes nutzbar!
<theme
extends="flatly"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="platform:/plugin/com.ibm.designer.domino.style
kits/schema/stylekit.xsd">
<!--
display a submit type button only if user can create documents via ACL
-->
<control>
<name>Button.Submit</name>
<property
type="boolean">
<name>rendered</name>
<value>#{env.createDocuments}</value>
</property>
</control>
</theme>
25. www.ics.ug #icsug
Best Practises für "XPages-Migranten"
Facetted Search
„Bei der Facettensuche oder Facettennavigation
werden anhand einer Facettenklassifikation
Suchtreffer eingegrenzt, beispielsweise in Produkt-
oder Bibliothekskatalogen. Die Facetten nutzen zur
Filterung Metadaten der jeweiligen Einträge.“
http://de.wikipedia.org/wiki/Facettensuche
28. www.ics.ug #icsug
Best Practises für "XPages-Migranten"
Facetted Search mit Domino?
1. Fulltext Search
2. Eingrenzen des Ergebnisses mit Metadaten-
Auswahl
1. Suche nach Metadaten-Auswahl
2. Durchsuchen des Ergebnisses mit Fulltext Search
29. www.ics.ug #icsug
Best Practises für "XPages-Migranten"
FacettedSearchBean (Session scoped)
FacettenSuchbegriff
FacettedSearch
Bean
DocumentCollection
(ArrayList<SearchResultEntry>)
31. www.ics.ug #icsug
Best Practises für "XPages-Migranten"
Facetted Search: Ausblick & Alternativen
• Graph-DB Funktionalität in der OpenNTF API
• 3rd party Graph-DB benutzen (z.B. Apache Solr)