SlideShare ist ein Scribd-Unternehmen logo
1 von 33
www.ics.ug #icsug
Fix & fertig:
Best Practises für "XPages-Migranten"
Oliver Busse, 26.03.2015
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
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
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
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
www.ics.ug #icsug
Best Practises für "XPages-Migranten"
Datenbank- & Nutzerprofile migrieren
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
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)
www.ics.ug #icsug
Best Practises für "XPages-Migranten"
Performance-Killer
Viele dieser Formeln bremsen die Anwendung aus
eines von vielen...
www.ics.ug #icsug
Best Practises für "XPages-Migranten"
Transformation
Item1=Values1
Item2=Values2
Item3=Values3
...
NotesDocument
Key1=ValueMap1
Key2=ValueMap2
Key3=ValueMap3
...
HashMap
NSF-basiert, Lookup nötig Speicher-basiert, direkter Zugriff
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
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
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
www.ics.ug #icsug
Best Practises für "XPages-Migranten"
faces-config.xml
<faces-config>
<!-- Database Profile Bean -->
<managed-bean>
<managed-bean-name>dbprofile</managed-bean-name>
<managed-bean-class>com.icsug.DatabaseProfileBean
</managed-bean-class>
<managed-bean-scope>application</managed-bean-scope>
</managed-bean>
<!-- User Profile Bean -->
<managed-bean>
<managed-bean-name>userprofile</managed-bean-name>
<managed-bean-class>com.icsug.UserProfileBean
</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<!-- Application Configuration -->
<managed-bean>
<managed-bean-name>application</managed-bean-name>
<managed-bean-class>com.icsug.AppConfigBean
</managed-bean-class>
<managed-bean-scope>application</managed-bean-scope>
</managed-bean>
</faces-config>
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
www.ics.ug #icsug
Best Practises für "XPages-Migranten"
DEMO
www.ics.ug #icsug
Best Practises für "XPages-Migranten"
Nutzer- und Umgebungsinformationen
www.ics.ug #icsug
Best Practises für "XPages-Migranten"
Nutzer- & Umgebungsinformationen
Namensvariationen
Zugriffslevel
ACL Options notes.ini
Informationen
Environment
Bean
www.ics.ug #icsug
Best Practises für "XPages-Migranten"
faces-config.xml: EnvironmentBean
<?xml version="1.0" encoding="UTF-8"?>
<faces-config>
<!-- Environment Bean -->
<managed-bean>
<managed-bean-name>env</managed-bean-name>
<managed-bean-class>com.icsug.EnvironmentBean
</managed-bean-class>
<managed-bean-scope>view</managed-bean-scope>
</managed-bean>
</faces-config>
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>
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
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>
www.ics.ug #icsug
Best Practises für "XPages-Migranten"
DEMO
www.ics.ug #icsug
Best Practises für "XPages-Migranten"
Volltextsuche vs. Facettensuche
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
www.ics.ug #icsug
Best Practises für "XPages-Migranten"
Facetted Search
www.ics.ug #icsug
Best Practises für "XPages-Migranten"
„Prominente“ Beispiele
amazing.com cyberharbor
muse
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
www.ics.ug #icsug
Best Practises für "XPages-Migranten"
FacettedSearchBean (Session scoped)
FacettenSuchbegriff
FacettedSearch
Bean
DocumentCollection
(ArrayList<SearchResultEntry>)
www.ics.ug #icsug
Best Practises für "XPages-Migranten"
Code/DEMO
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)
www.ics.ug #icsug
Best Practises für "XPages-Migranten"
www.ics.ug #icsug
Best Practises für "XPages-Migranten"
Quellen
http://de.wikipedia.org/wiki/Facettensuche
http://lucene.apache.org/solr/
https://www.focul.net/focul-best-practice-faceted-filtering-xpages-using-java-beans/
https://bitbucket.org/zeromancer1972/icsug-2015-demo

Weitere ähnliche Inhalte

Was ist angesagt?

EntwicklerCamp 2014 - DOTS reloaded
EntwicklerCamp 2014 - DOTS reloadedEntwicklerCamp 2014 - DOTS reloaded
EntwicklerCamp 2014 - DOTS reloaded
René Winkelmeyer
 
Aras PLM Installation
Aras PLM InstallationAras PLM Installation
Aras PLM Installation
Aras
 

Was ist angesagt? (20)

EntwicklerCamp 2014 - DOTS reloaded
EntwicklerCamp 2014 - DOTS reloadedEntwicklerCamp 2014 - DOTS reloaded
EntwicklerCamp 2014 - DOTS reloaded
 
Migration vom ZF1 zum ZF2 von einfach bis fies (IPC Spring 2013, Berlin)
Migration vom ZF1 zum ZF2 von einfach bis fies (IPC Spring 2013, Berlin)Migration vom ZF1 zum ZF2 von einfach bis fies (IPC Spring 2013, Berlin)
Migration vom ZF1 zum ZF2 von einfach bis fies (IPC Spring 2013, Berlin)
 
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan ScheidtAutomatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
 
JavaFX Real-World Apps
JavaFX Real-World AppsJavaFX Real-World Apps
JavaFX Real-World Apps
 
Punkt.de – Layout-Testing: was geht, was bringt´s, wer braucht´s?
Punkt.de – Layout-Testing: was geht, was bringt´s, wer braucht´s?Punkt.de – Layout-Testing: was geht, was bringt´s, wer braucht´s?
Punkt.de – Layout-Testing: was geht, was bringt´s, wer braucht´s?
 
Ant Maven
Ant MavenAnt Maven
Ant Maven
 
Einführung Maven
Einführung MavenEinführung Maven
Einführung Maven
 
XPages - The Basics
XPages - The BasicsXPages - The Basics
XPages - The Basics
 
Legacy WebApps mit AngularJS pimpen
Legacy WebApps mit AngularJS pimpenLegacy WebApps mit AngularJS pimpen
Legacy WebApps mit AngularJS pimpen
 
Taugt AngularJS wirklich was? Erfahrungsbericht und Ausblick
Taugt AngularJS wirklich was? Erfahrungsbericht und AusblickTaugt AngularJS wirklich was? Erfahrungsbericht und Ausblick
Taugt AngularJS wirklich was? Erfahrungsbericht und Ausblick
 
Dnug35 ak-dev.071111-basic
Dnug35 ak-dev.071111-basicDnug35 ak-dev.071111-basic
Dnug35 ak-dev.071111-basic
 
C++ Dependency Management 2.0
C++ Dependency Management 2.0C++ Dependency Management 2.0
C++ Dependency Management 2.0
 
Electron.NET: Cross-Platform Desktop Software mit ASP.NET Core
Electron.NET: Cross-Platform Desktop Software mit ASP.NET CoreElectron.NET: Cross-Platform Desktop Software mit ASP.NET Core
Electron.NET: Cross-Platform Desktop Software mit ASP.NET Core
 
Eine Stunde was mit Api First!
Eine Stunde was mit Api First!Eine Stunde was mit Api First!
Eine Stunde was mit Api First!
 
Testing tools
Testing toolsTesting tools
Testing tools
 
Deploy Magento Shops with Capistrano v3
Deploy Magento Shops with Capistrano  v3Deploy Magento Shops with Capistrano  v3
Deploy Magento Shops with Capistrano v3
 
Aras PLM Installation
Aras PLM InstallationAras PLM Installation
Aras PLM Installation
 
Java EE Microservices ohne Server
Java EE Microservices ohne ServerJava EE Microservices ohne Server
Java EE Microservices ohne Server
 
Gameduell Glassfish Migration
Gameduell Glassfish MigrationGameduell Glassfish Migration
Gameduell Glassfish Migration
 
Build Patterns - Patterns und Best Practices für den Build Prozess
Build Patterns - Patterns und Best Practices für den Build ProzessBuild Patterns - Patterns und Best Practices für den Build Prozess
Build Patterns - Patterns und Best Practices für den Build Prozess
 

Andere mochten auch

OSA Anwendertreffen 2014 - "Clients ausgedünnt: Notes-/Domino-Anwendungen web...
OSA Anwendertreffen 2014 - "Clients ausgedünnt: Notes-/Domino-Anwendungenweb...OSA Anwendertreffen 2014 - "Clients ausgedünnt: Notes-/Domino-Anwendungenweb...
OSA Anwendertreffen 2014 - "Clients ausgedünnt: Notes-/Domino-Anwendungen web...
Oliver Busse
 
DNUG 38: "Einen Rahmen schaffen: Vorteile durch Frameworks in der Domino-Webe...
DNUG 38: "Einen Rahmen schaffen: Vorteile durch Frameworks in der Domino-Webe...DNUG 38: "Einen Rahmen schaffen: Vorteile durch Frameworks in der Domino-Webe...
DNUG 38: "Einen Rahmen schaffen: Vorteile durch Frameworks in der Domino-Webe...
Oliver Busse
 
ULC - Connect 2014 Nachlese
ULC - Connect 2014 NachleseULC - Connect 2014 Nachlese
ULC - Connect 2014 Nachlese
Oliver Busse
 

Andere mochten auch (20)

Find your data
Find your dataFind your data
Find your data
 
Utilizing the OpenNTF Domino API
Utilizing the OpenNTF Domino APIUtilizing the OpenNTF Domino API
Utilizing the OpenNTF Domino API
 
OSA Anwendertreffen 2014 - "Clients ausgedünnt: Notes-/Domino-Anwendungen web...
OSA Anwendertreffen 2014 - "Clients ausgedünnt: Notes-/Domino-Anwendungenweb...OSA Anwendertreffen 2014 - "Clients ausgedünnt: Notes-/Domino-Anwendungenweb...
OSA Anwendertreffen 2014 - "Clients ausgedünnt: Notes-/Domino-Anwendungen web...
 
GraphDb in XPages
GraphDb in XPagesGraphDb in XPages
GraphDb in XPages
 
A World Without Applications
A World Without ApplicationsA World Without Applications
A World Without Applications
 
Beyond XPages
Beyond XPagesBeyond XPages
Beyond XPages
 
XPages From Zero To Hero
XPages From Zero To HeroXPages From Zero To Hero
XPages From Zero To Hero
 
bccon-2014 dev02 xpages-coffe-from-a-friend-using-third-party-java-libraries
bccon-2014 dev02 xpages-coffe-from-a-friend-using-third-party-java-librariesbccon-2014 dev02 xpages-coffe-from-a-friend-using-third-party-java-libraries
bccon-2014 dev02 xpages-coffe-from-a-friend-using-third-party-java-libraries
 
bccon-2014 key01 ibm_collaboration_solutions_connect_2014
bccon-2014 key01 ibm_collaboration_solutions_connect_2014bccon-2014 key01 ibm_collaboration_solutions_connect_2014
bccon-2014 key01 ibm_collaboration_solutions_connect_2014
 
Dnug 112014 modernization_openn_ntf_ersatzsession
Dnug 112014 modernization_openn_ntf_ersatzsessionDnug 112014 modernization_openn_ntf_ersatzsession
Dnug 112014 modernization_openn_ntf_ersatzsession
 
DNUG 38: "Einen Rahmen schaffen: Vorteile durch Frameworks in der Domino-Webe...
DNUG 38: "Einen Rahmen schaffen: Vorteile durch Frameworks in der Domino-Webe...DNUG 38: "Einen Rahmen schaffen: Vorteile durch Frameworks in der Domino-Webe...
DNUG 38: "Einen Rahmen schaffen: Vorteile durch Frameworks in der Domino-Webe...
 
ULC - Connect 2014 Nachlese
ULC - Connect 2014 NachleseULC - Connect 2014 Nachlese
ULC - Connect 2014 Nachlese
 
DNUG 2014 Herbstkonferenz: Moderne Architektur - Hochskalierbare Anwendungsar...
DNUG 2014 Herbstkonferenz: Moderne Architektur - Hochskalierbare Anwendungsar...DNUG 2014 Herbstkonferenz: Moderne Architektur - Hochskalierbare Anwendungsar...
DNUG 2014 Herbstkonferenz: Moderne Architektur - Hochskalierbare Anwendungsar...
 
Utilizing the open ntf domino api
Utilizing the open ntf domino apiUtilizing the open ntf domino api
Utilizing the open ntf domino api
 
SUTOL 2015 - Utilizing the OpenNTF Domino API
SUTOL 2015 - Utilizing the OpenNTF Domino APISUTOL 2015 - Utilizing the OpenNTF Domino API
SUTOL 2015 - Utilizing the OpenNTF Domino API
 
ISBG 2016 - XPages on IBM Bluemix
ISBG 2016 - XPages on IBM BluemixISBG 2016 - XPages on IBM Bluemix
ISBG 2016 - XPages on IBM Bluemix
 
Transformations - a TLCC & Teamstudio Webinar
Transformations - a TLCC & Teamstudio WebinarTransformations - a TLCC & Teamstudio Webinar
Transformations - a TLCC & Teamstudio Webinar
 
Transformations
TransformationsTransformations
Transformations
 
Xpages - oder was man mit einer alten Notes-DB so alles anstellen kann
Xpages - oder was man mit einer alten Notes-DB so alles anstellen kannXpages - oder was man mit einer alten Notes-DB so alles anstellen kann
Xpages - oder was man mit einer alten Notes-DB so alles anstellen kann
 
Out of the Blue - the Workflow in Bluemix Development
Out of the Blue - the Workflow in Bluemix DevelopmentOut of the Blue - the Workflow in Bluemix Development
Out of the Blue - the Workflow in Bluemix Development
 

Ähnlich wie Fix & fertig: Best Practises für "XPages-Migranten"

Javascript done right
Javascript done rightJavascript done right
Javascript done right
Dirk Ginader
 
HTML5 Offline - Fallstricke für mobile Webseiten und WebApps
HTML5 Offline - Fallstricke für mobile Webseiten und WebAppsHTML5 Offline - Fallstricke für mobile Webseiten und WebApps
HTML5 Offline - Fallstricke für mobile Webseiten und WebApps
Ulrich Schmidt
 

Ähnlich wie Fix & fertig: Best Practises für "XPages-Migranten" (20)

Production-ready Infrastruktur in 3 Wochen
Production-ready Infrastruktur in 3 WochenProduction-ready Infrastruktur in 3 Wochen
Production-ready Infrastruktur in 3 Wochen
 
Icsug conf 14_tipps-und-skripts-fuer-ibm-connections-administratoren
Icsug conf 14_tipps-und-skripts-fuer-ibm-connections-administratorenIcsug conf 14_tipps-und-skripts-fuer-ibm-connections-administratoren
Icsug conf 14_tipps-und-skripts-fuer-ibm-connections-administratoren
 
bccon-2014 adm01 tipps-und-skripts-aus-dem-leben-eines-ibm-connections-admins
bccon-2014 adm01 tipps-und-skripts-aus-dem-leben-eines-ibm-connections-adminsbccon-2014 adm01 tipps-und-skripts-aus-dem-leben-eines-ibm-connections-admins
bccon-2014 adm01 tipps-und-skripts-aus-dem-leben-eines-ibm-connections-admins
 
Tipps und Skripts aus dem Leben eines Connections Admins
Tipps und Skripts aus dem Leben eines Connections AdminsTipps und Skripts aus dem Leben eines Connections Admins
Tipps und Skripts aus dem Leben eines Connections Admins
 
JFS 2011 - Top 10 der Tools & Methoden - Baumgartner, Oehmichen
JFS 2011 - Top 10 der Tools & Methoden - Baumgartner, OehmichenJFS 2011 - Top 10 der Tools & Methoden - Baumgartner, Oehmichen
JFS 2011 - Top 10 der Tools & Methoden - Baumgartner, Oehmichen
 
JFS 2011 - Top 10 Tools & Methoden - Baumgartner, Oehmichen
JFS 2011 - Top 10 Tools & Methoden - Baumgartner, OehmichenJFS 2011 - Top 10 Tools & Methoden - Baumgartner, Oehmichen
JFS 2011 - Top 10 Tools & Methoden - Baumgartner, Oehmichen
 
Cloud-native and Enterprise Java? Hold my beer!
Cloud-native and Enterprise Java? Hold my beer!Cloud-native and Enterprise Java? Hold my beer!
Cloud-native and Enterprise Java? Hold my beer!
 
Integration von Security-Checks in die CI-Pipeline
Integration von Security-Checks in die CI-PipelineIntegration von Security-Checks in die CI-Pipeline
Integration von Security-Checks in die CI-Pipeline
 
Arquillian
ArquillianArquillian
Arquillian
 
Let's talk about Java EE
Let's talk about Java EELet's talk about Java EE
Let's talk about Java EE
 
Goobi Präsentation Darmstadt 2009
Goobi Präsentation Darmstadt 2009Goobi Präsentation Darmstadt 2009
Goobi Präsentation Darmstadt 2009
 
Javascript done right
Javascript done rightJavascript done right
Javascript done right
 
JEE-Microservices mit Quarkus – eine Einführung
JEE-Microservices mit Quarkus – eine EinführungJEE-Microservices mit Quarkus – eine Einführung
JEE-Microservices mit Quarkus – eine Einführung
 
Agile Oracle database modeling and development - APEX Connect 2020
Agile Oracle database modeling and development - APEX Connect 2020Agile Oracle database modeling and development - APEX Connect 2020
Agile Oracle database modeling and development - APEX Connect 2020
 
XPages: Performance-Optimierung - Ulrich Krause (eknori) SNoUG 2013
XPages: Performance-Optimierung  - Ulrich Krause (eknori) SNoUG 2013XPages: Performance-Optimierung  - Ulrich Krause (eknori) SNoUG 2013
XPages: Performance-Optimierung - Ulrich Krause (eknori) SNoUG 2013
 
Schnelle Winkel: 10x schnellere Webapps mit AngularJS und JEE
Schnelle Winkel: 10x schnellere Webapps mit AngularJS und JEESchnelle Winkel: 10x schnellere Webapps mit AngularJS und JEE
Schnelle Winkel: 10x schnellere Webapps mit AngularJS und JEE
 
JPA – Der Persistenz-­Standard in der Java EE und SE
JPA – Der Persistenz-­Standard in der Java EE und SEJPA – Der Persistenz-­Standard in der Java EE und SE
JPA – Der Persistenz-­Standard in der Java EE und SE
 
Open Source Monitoring mit Icinga 2 (Webinar vom 13.11.2013)
Open Source Monitoring mit Icinga 2 (Webinar vom 13.11.2013)Open Source Monitoring mit Icinga 2 (Webinar vom 13.11.2013)
Open Source Monitoring mit Icinga 2 (Webinar vom 13.11.2013)
 
HTML5 Offline - Fallstricke für mobile Webseiten und WebApps
HTML5 Offline - Fallstricke für mobile Webseiten und WebAppsHTML5 Offline - Fallstricke für mobile Webseiten und WebApps
HTML5 Offline - Fallstricke für mobile Webseiten und WebApps
 
Hdc2012 cordova-präsi
Hdc2012 cordova-präsiHdc2012 cordova-präsi
Hdc2012 cordova-präsi
 

Mehr von Oliver Busse (9)

HCL Domino Volt - der NSF Killer?
HCL Domino Volt - der NSF Killer?HCL Domino Volt - der NSF Killer?
HCL Domino Volt - der NSF Killer?
 
Outlook becomes a Team Player - with a clever add-in
Outlook becomes a Team Player - with a clever add-inOutlook becomes a Team Player - with a clever add-in
Outlook becomes a Team Player - with a clever add-in
 
The NERD stuff - opening for Domino to the modern web developer
The NERD stuff - opening for Domino to the modern web developerThe NERD stuff - opening for Domino to the modern web developer
The NERD stuff - opening for Domino to the modern web developer
 
DNUG Development Day 2019
DNUG Development Day 2019DNUG Development Day 2019
DNUG Development Day 2019
 
DNUG44 Watson Workspace
DNUG44 Watson WorkspaceDNUG44 Watson Workspace
DNUG44 Watson Workspace
 
Paradiesisch - OpenNTF
Paradiesisch - OpenNTFParadiesisch - OpenNTF
Paradiesisch - OpenNTF
 
XPages on Bluemix - the Do's and Dont's
XPages on Bluemix - the Do's and Dont'sXPages on Bluemix - the Do's and Dont's
XPages on Bluemix - the Do's and Dont's
 
Utilizing the OpenNTF Domino API
Utilizing the OpenNTF Domino APIUtilizing the OpenNTF Domino API
Utilizing the OpenNTF Domino API
 
Out of the Blue: Getting started with IBM Bluemix development
Out of the Blue: Getting started with IBM Bluemix developmentOut of the Blue: Getting started with IBM Bluemix development
Out of the Blue: Getting started with IBM Bluemix development
 

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
  • 6. www.ics.ug #icsug Best Practises für "XPages-Migranten" Datenbank- & Nutzerprofile migrieren
  • 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...
  • 10. www.ics.ug #icsug Best Practises für "XPages-Migranten" Transformation Item1=Values1 Item2=Values2 Item3=Values3 ... NotesDocument Key1=ValueMap1 Key2=ValueMap2 Key3=ValueMap3 ... HashMap NSF-basiert, Lookup nötig Speicher-basiert, direkter Zugriff
  • 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
  • 14. www.ics.ug #icsug Best Practises für "XPages-Migranten" faces-config.xml <faces-config> <!-- Database Profile Bean --> <managed-bean> <managed-bean-name>dbprofile</managed-bean-name> <managed-bean-class>com.icsug.DatabaseProfileBean </managed-bean-class> <managed-bean-scope>application</managed-bean-scope> </managed-bean> <!-- User Profile Bean --> <managed-bean> <managed-bean-name>userprofile</managed-bean-name> <managed-bean-class>com.icsug.UserProfileBean </managed-bean-class> <managed-bean-scope>session</managed-bean-scope> </managed-bean> <!-- Application Configuration --> <managed-bean> <managed-bean-name>application</managed-bean-name> <managed-bean-class>com.icsug.AppConfigBean </managed-bean-class> <managed-bean-scope>application</managed-bean-scope> </managed-bean> </faces-config>
  • 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
  • 16. www.ics.ug #icsug Best Practises für "XPages-Migranten" DEMO
  • 17. www.ics.ug #icsug Best Practises für "XPages-Migranten" Nutzer- und Umgebungsinformationen
  • 18. www.ics.ug #icsug Best Practises für "XPages-Migranten" Nutzer- & Umgebungsinformationen Namensvariationen Zugriffslevel ACL Options notes.ini Informationen Environment Bean
  • 19. www.ics.ug #icsug Best Practises für "XPages-Migranten" faces-config.xml: EnvironmentBean <?xml version="1.0" encoding="UTF-8"?> <faces-config> <!-- Environment Bean --> <managed-bean> <managed-bean-name>env</managed-bean-name> <managed-bean-class>com.icsug.EnvironmentBean </managed-bean-class> <managed-bean-scope>view</managed-bean-scope> </managed-bean> </faces-config>
  • 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>
  • 23. www.ics.ug #icsug Best Practises für "XPages-Migranten" DEMO
  • 24. www.ics.ug #icsug Best Practises für "XPages-Migranten" Volltextsuche vs. Facettensuche
  • 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
  • 26. www.ics.ug #icsug Best Practises für "XPages-Migranten" Facetted Search
  • 27. www.ics.ug #icsug Best Practises für "XPages-Migranten" „Prominente“ Beispiele amazing.com cyberharbor muse
  • 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>)
  • 30. www.ics.ug #icsug Best Practises für "XPages-Migranten" Code/DEMO
  • 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)
  • 32. www.ics.ug #icsug Best Practises für "XPages-Migranten"
  • 33. www.ics.ug #icsug Best Practises für "XPages-Migranten" Quellen http://de.wikipedia.org/wiki/Facettensuche http://lucene.apache.org/solr/ https://www.focul.net/focul-best-practice-faceted-filtering-xpages-using-java-beans/ https://bitbucket.org/zeromancer1972/icsug-2015-demo