126
XPages erweitern und ausbauen - 2017 © 2017 Sven Hasselbach

XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

Embed Size (px)

Citation preview

Page 1: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

XPages erweitern und ausbauen - 2017

© 2017 Sven Hasselbach

Page 2: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

2

XPages erweitern und ausbauen - 2017Über mich

Sven Hasselbach

● Freiberuflicher IT Consultant seit 2003● IBM Champion 2013● Blog: http://blog.hasselba.ch● Komme nicht aus der Schweiz

Page 3: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

XPages erweitern und ausbauen - 2017Themen

Neues aus der XPages-Welt POI 4 XPages JNA Validatoren Phase Listener Komponenten & Renderer Service Locator ( JVM übergreifender

Datenaustausch) OSGi Plugins

Page 4: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

XPages erweitern und ausbauen - 2017Motivation

Es fehlt eine Komponente Der Renderer rendert nicht das, was ich brauche Ich bräuchte eine andere Validierung Wäre es nicht praktisch, wenn… Client wird durch IBM gekillt

Page 5: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

XPages erweitern und ausbauen - 2017Neues aus der XPages-Welt

Neues aus der XPages-Welt

Page 6: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

XPages erweitern und ausbauen - 2017Neues aus der XPages-Welt - Weiterentwicklung

XPages werden nicht mehr weiterentwickelt?

● Feature Pack 8● Java 1.8● Zahlreiche Fixes

● Feature Pack 9● Eclipse Neon für Designer● Update OSGi, SWT, ...

Page 7: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

XPages erweitern und ausbauen - 2017Neues aus der XPages-Welt – Java 1.8 (1)

Zwei Ordner enthalten alte & neue JVM

Page 8: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

XPages erweitern und ausbauen - 2017Neues aus der XPages-Welt – Java 1.8 (2)

JavaSE-1.8 in Eclipse „automatisch“ verfügbar

Page 9: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

XPages erweitern und ausbauen - 2017Neues aus der XPages-Welt – Java 1.8 (3)

s

Page 10: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

XPages erweitern und ausbauen - 2017Neues aus der XPages-Welt – Responsive Design

● Neue Themes: Bootstrap3, Bootstrap3_flat,Bootstrap3_blank (Bootstrap 3.3.7)

● XPages & ExtLib Controls erhalten Bootstrap lookand feel

● Viele Controls sind responsive● Neue Bootstrap XPages controls (z.B. Carousel,

Dashboard, Navbar)● Application Layout Wizard• Zwei neue responsive Konfigurationen

Page 11: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

XPages erweitern und ausbauen - 2017Neues aus der XPages-Welt

Minimum Release 9.0.1FP8

Page 12: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

XPages erweitern und ausbauen - 2017Neues aus der XPages-Welt - Document Encryption (1)

Neue XPages Features

● Secret Key Picker Control● Feldverschlüsselung mit geheimen Schlüsseln der

UserID encryption field with secret keys from userid

● Erweiterung des bestehenden Name Pickercontrol● Schlüssel mit Namen für Public/Private Keys● Neue @Functions

● @UserSecretKeys()● @UserID()

Page 13: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

XPages erweitern und ausbauen - 2017Neues aus der XPages-Welt - Document Encryption (2)

Applikationsweite Einstellung für Verschlüsselung

Page 14: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

XPages erweitern und ausbauen - 2017Neues aus der XPages-Welt - Document Encryption (3)

● Neue Eigenschaft für Document Data Sources encryptionKeysProvider

● Neue Managed Bean für Verbindung zu ID VaultdominoIDVaultBean

(Verarbeitet Authentifizierung für User)

● Neue xsp.propertyxsp.domino.document.encryption=true|false

Page 15: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

XPages erweitern und ausbauen - 2017Neues aus der XPages-Welt - Document Encryption (4)

encryptionKeysProvider

Page 16: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

XPages erweitern und ausbauen - 2017Neues aus der XPages-Welt - Document Encryption (5)

Erweiterung der API

● Neue Klassen, Methoden und Eigenschaften in C, Java,SSJS & LotusScript

● Neue IDVault- & UserID-Klassen & + Erweiterungen:● Session: IDVaultSession.getIDVault()● Database: Database.setUserIDForDecrypt(UserIDuid)● Document: Document.encrypt(Optional UserIDuid)

Page 17: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

XPages erweitern und ausbauen - 2017Neues aus der XPages-Welt - Document Encryption (6)

Page 18: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

XPages erweitern und ausbauen - 2017Neues aus der XPages-Welt – Designer (1)

Verhalten beim Öffnen kann angepasst werden

Page 19: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

XPages erweitern und ausbauen - 2017Neues aus der XPages-Welt – Designer (2)

Sortierung der Controlls alphabetisch

Page 20: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

XPages erweitern und ausbauen - 2017Neues aus der XPages-Welt – Designer (3)

SSJS Editor unterstützt neue globale Objekte(Managed Beans mit TypeAheadSupport)

● UserBean● ViewStateBean● DeviceBean● DominoIDVaultBean● Eigene Managed Beans

Page 21: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

XPages erweitern und ausbauen - 2017Neues aus der XPages-Welt – Designer (4)

Page 22: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

XPages erweitern und ausbauen - 2017Neues aus der XPages-Welt – Und vieles mehr

● Support für eigene Themes (XPages ThemeExtenstion Point)

● iNotesCalendar Support● Swiper Extension Point● Views außerhalb der NSF● Neue @Functions● Erhöhung Document Summary von 64KB auf

16MB

Page 23: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

XPages erweitern und ausbauen - 2017Neues aus der XPages-Welt – Und vieles mehr

Mehr Infos zu finden im IBM Connect Vortrag

„1671 - A Deep Dive into the Feature Pack Pipeline forDomino App Dev“

https://ibm.co/2ocPNUw

Page 24: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

XPages erweitern und ausbauen - 2017POI 4 XPages

POI 4 XPages

Page 25: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

XPages erweitern und ausbauen - 2017POI 4 XPages

OpenNTF Projekthttps://poi4xpages.openntf.org/

POI 4 XPages stellt Apache POI Project bereit● Version 1.3.1● Support von FeaturePack 8● POI Version 3.14● Managed Bean poiBean Backend

Page 26: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

XPages erweitern und ausbauen - 2017POI 4 XPages – Installation (1)

Plugin in Designer importieren● Application Install in Designer

Plugin auf Server deployen● Via UpdateSite

Page 27: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

XPages erweitern und ausbauen - 2017POI 4 XPages – Installation (2)

In Applikation aktivieren

xsp.library.depends=biz.webgate.dominoext.poi.library

Page 28: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

XPages erweitern und ausbauen - 2017POI 4 XPages – Benutzung (1)

Neue Controls im Designer

Neuer Namespace

Page 29: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

XPages erweitern und ausbauen - 2017POI 4 XPages – Benutzung (2)

Beispiel: PDF aus Word-Vorlage

Page 30: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

XPages erweitern und ausbauen - 2017POI 4 XPages – Benutzung (3)

Beispiel: PDF aus Word-Vorlage

http://example.com/poidemo.nsf/docx_contractdocument_pdf.xsp/download/

Page 31: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

XPages erweitern und ausbauen - 2017POI 4 XPages – Benutzung (4)

Beispiel: PDF aus Word-Vorlage

Page 32: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

XPages erweitern und ausbauen - 2017POI 4 XPages - ShowTime

Zahlreiche Demos in der beiliegenden NSF

poidemo.nsf

Page 33: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

XPages erweitern und ausbauen - 2017Domino JNA

Domino JNA

Page 34: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

XPages erweitern und ausbauen - 2017Domino JNA

Domino JNA

Cross-platform access to IBM Notes/Domino C APImethods from Java

https://github.com/klehmann/domino-jna.git

Page 35: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

XPages erweitern und ausbauen - 2017Domino JNA - Build

Benötigt wird:

● Git● Apache Maven● JDK 1.8

Page 36: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

XPages erweitern und ausbauen - 2017Domino JNA – Build (2)

Projekt mit git clonen

Page 37: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

XPages erweitern und ausbauen - 2017Domino JNA – Build (3)

Notes.jar registrieren

Page 38: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

XPages erweitern und ausbauen - 2017Domino JNA – Build (4)

/domino-target bauen

Page 39: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

XPages erweitern und ausbauen - 2017Domino JNA – Build (5)

/com.mindoo.domino.jna.xsp.build bauen

Page 40: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

XPages erweitern und ausbauen - 2017Domino JNA - Installation

Plugin in Designer importieren● Application Install in Designer

Plugin auf Server deployen● Via UpdateSite

Page 41: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

XPages erweitern und ausbauen - 2017Domino JNA – Installation (2)

In Applikation aktivieren

Page 42: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

XPages erweitern und ausbauen - 2017Domino JNA - Demo

XPage mit SSJS

Page 43: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

XPages erweitern und ausbauen - 2017Domino JNA – Demo (2)

Page 44: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

XPages erweitern und ausbauen - 2017Domino JNA – Demo (3)

Page 45: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

XPages erweitern und ausbauen - 2017Domino JNA

Wozu?

● Kein Recycling mehr● Low Level C Zugriff● Fixt das, was es nicht in der Java API gibt, oder

schlecht implementiert ist

Page 46: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

XPages erweitern und ausbauen - 2017Domino JNA – Features (1)

● View Lookups, bei denen Format des Schlüssels egalist (Strings, Nummern, Datum usw.)

● Liefert alle Typen der Spaltenwerte & Rohdaten(NotesID, UNID, Ungelsen-Flag usw.)

● Views im Kontext eines anderen Users lesen● Aufteilen von Views & Daten über mehrere

Datenbanken● Dynamisches Filtern von Ansichtenzeilen mit Hilfe von

einer Note ID-Liste (inkl. Paging)● Lesen kategorisierten Ansichten mit

Expanded/Collapsed Einträgen und Min/Max-Level● Zugriff auf Designelemente

Page 47: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

XPages erweitern und ausbauen - 2017Domino JNA - Features (2)

● Unterschiedliche Lesemethoden für Ansichten: Z.B.nur Einträge, die sich geändert haben

● Direkter Zugriff auf Attachments (IBM's Java APIextrahiert erst auf Platte)

● Standard API-Funktionen für Lesen & Schreiben● Schnelle Prüfung, ob User Dokument editieren darf● FTIndex: Alle Optionen zum Erstellen / Ändern des

Index● Zugriff auf Replikations-Infos● Starten von Agenten ohne ECL Check & mit

DocContext● @UserNamesList für jeden beliebigen User● SSO Token Generierung

Page 48: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

48

XPages erweitern und ausbauen - 2017Eigener Validator

Der eigene Validator

Page 49: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

49

XPages erweitern und ausbauen - 2017Eigener Validator: Passwort-Validator

● Zwei Passwort-Felder: Ein Feld für das Passwort,ein Feld für den Retype

– Verbindung über Binding

Page 50: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

50

XPages erweitern und ausbauen - 2017Eigener Validator: Passwort-Validator (2) - XPage

<xp:inputTextid="httpPassword"password="true">

<xp:this.validators><xp:validator

validatorId="passwordValidator" /></xp:this.validators>

</xp:inputText>

<br />

<xp:inputTextid="httpPasswordRetype"password="true"binding="#{httpPasswordRetype}">

</xp:inputText>

Page 51: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

51

XPages erweitern und ausbauen - 2017Tips & Tricks: Binding von Component Property vermeiden

<xp:inputTextid="httpPasswordRetype"password="true"binding="#{myBean.myComponent}">

</xp:inputText>

Binding von Component Property an ManagedBean-Eigenschaft ist Bad Practice!

public class MyBean {

private transient UIComponent myComponent;

public UIComponent getMyComponent(){};public void setMyComponent(UIComponent cmp){};

}

Page 52: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

52

XPages erweitern und ausbauen - 2017Tips & Tricks: Binding von Component Property vermeiden (2)

Warum? ● Component Tree kann nicht mehr sauber

verarbeitet werden● Auch bei Request Scoped Beans!

Siehe dazu auch:

http://bit.ly/25zVEBi

Page 53: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

53

XPages erweitern und ausbauen - 2017Eigener Validator: Passwort-Validator (3) - Validator

public class PasswordValidator implements Validator {

public void validate(FacesContext fc, UIComponent component, Object value) throws ValidatorException { String password = (String) value;

UIInput confirmComponent = (UIInput) fc.getApplication() .getVariableResolver().resolveVariable(fc, "httpPasswordRetype"); String confirm = (String) confirmComponent.getSubmittedValue();

if (!password.equals(confirm)) { confirmComponent.setValid(false); throw new ValidatorException(new FacesMessage( "Passwords are not equal.")); } } }

Page 54: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

54

XPages erweitern und ausbauen - 2017Eigener Validator: Passwort-Validator (4) – faces-config.xml

<?xml version="1.0" encoding="UTF-8"?><faces-config>

<validator> <description>Password Validator</description> <validator-id>passwordValidator</validator-id> <validator-class>ec2016.PasswordValidator</validator-class> </validator></faces-config>

Page 55: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

55

XPages erweitern und ausbauen - 2017Tips & Tricks: DocType in faces-config.xml setzen

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE faces-config PUBLIC "-//Sun Microsystems, Inc.//DTD JavaServerFaces Config 1.0//EN" "http://java.sun.com/dtd/web-facesconfig_1_1.dtd">

<faces-config />

Page 56: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

56

XPages erweitern und ausbauen - 2017Eigener Validator: Passwort-Validator (5) – Demo

Demo

example10_password.xsp

Page 57: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

57

XPages erweitern und ausbauen - 2017Eigener Validator: Passwort-Validator (6) – Regeln

● Validatoren validieren nur, wenn Werte existieren● Der Required Validator ist „getrickst“:

– In den Komponenten wurden spezielleRoutinen eingebaut

– Nach Instanzen von FacesRequiredValidator wird gesucht

● Klingt verlockend...

Page 58: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

58

XPages erweitern und ausbauen - 2017Eigener Validator: Passwort-Validator (7) - JavaCode

import …;

import com.ibm.xsp.validator.FacesRequiredValidator;

public class RequiredValidator implements FacesRequiredValidator{

public String getRequiredMessage() {return "Required!";

}

public void validate(FacesContext paramFacesContext,UIComponent paramUIComponent, Object paramObject)throws ValidatorException {

FacesMessage msg = new FacesMessage("Required!");throw new ValidatorException(msg);

}

}

Page 59: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

59

XPages erweitern und ausbauen - 2017Eigener Validator: Passwort-Validator (8) – Regeln

Aber: Java-Konvertierung zerstört alles:

Daher nur programmatisch hinzufügbar

http://hasselba.ch/blog/?p=764

Page 60: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

60

XPages erweitern und ausbauen - 2017Eigener Validator: Passwort-Validator (9) – Bean Validierung

● Validator-Attribut ruft MethodBinding auf

● Methode in Bean mit Parametern

– FacesContext, UIComponent, Object– Rückgabewert void

Page 61: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

61

XPages erweitern und ausbauen - 2017Eigener Validator: Passwort-Validator (10) – Bean Validierung

private String binding;

public void validatePassword(FacesContext fc, UIComponent uiComponent,Object parameters) {

String pwd = (String) parameters;UIInput confirmComponent = (UIInput) JSFUtils.resolveVariable(binding);

String confirm = (String) confirmComponent.getSubmittedValue();

if (!parameters.equals(confirm)) {FacesMessage msg = new FacesMessage("Passwords are not equal.");throw new ValidatorException(msg);

}

}

public void setBinding(String binding) {this.binding = binding;

}

public String getBinding() {return binding;

}

Page 62: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

62

XPages erweitern und ausbauen - 2017Eigener Validator: Passwort-Validator (11) – Bean Validierung

<managed-bean><managed-bean-name>validatorBean</managed-bean-name><managed-bean-scope>none</managed-bean-scope><managed-bean-class>ec2016.ValidatorBean</managed-bean-class>

<managed-property><property-name>binding</property-name><value>httpPasswordRetype</value>

</managed-property>

</managed-bean>

Page 63: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

63

XPages erweitern und ausbauen - 2017Eigener Validator: Passwort-Validator (11) – Bean Validierung

Demo

example11_beanValidator.xsp

Page 64: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

64

XPages erweitern und ausbauen - 2017Tipps & Tricks: Managed Properties

● Werden beim Instanzieren der Bean aufgerufen● Können alle möglichen Objekt-Arten sein, auch

Listen● Auch EL möglich● Beans können auch Managed Properties sein

(Scope muss passen)

Page 65: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

65

XPages erweitern und ausbauen - 2017Tipps & Tricks: Managed Properties (2)

<managed-bean><managed-bean-name>myBean</managed-bean-name><managed-bean-scope>requestScope</managed-bean-scope><managed-bean-class>ec2016.myBean</managed-bean-class>

</managed-bean>

<managed-bean>

<managed-bean-name>myOtherBean</managed-bean-name><managed-bean-scope>requestScope</managed-bean-scope><managed-bean-class>ec2016.myOtherBean</managed-bean-class>

<managed-property><property-name>refToMyBean</property-name><value>#{myBean}</value><property-class>ec2016.myBean</property-class>

</managed-property>

</managed-bean>

Page 66: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

66

XPages erweitern und ausbauen - 2017Phase Listener

Phase Listener

Page 67: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

67

XPages erweitern und ausbauen - 2017Phase Listener – Was ist das?

● Phase Listener erlauben den Eingriff in den JSFLifecycle

● Sind in der ganzen Applikation verfügbar● Sehr praktisch

Page 68: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

68

XPages erweitern und ausbauen - 2017Phase Listener: Praktische Beispiele

● URL-Überwachung über die ganze Applikation

http://hasselba.ch/blog/?p=1243● Eingreifen in den ComponentTree (z.B. um

Validierung im FileDownload Controlabzuschalten)

http://hasselba.ch/blog/?p=1363● Zugriffskontrolle per TokenController

Page 69: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

69

XPages erweitern und ausbauen - 2017Phase Listener: TokenController – Anforderung

Anforderung:● Umfrage-Formular soll anonym ausfüllbar sein● jedoch nur „eingeladene“ Benutzer sollen

teilnehmen

Page 70: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

70

XPages erweitern und ausbauen - 2017Phase Listener: TokenController – Lösung

● Per Mail wird uniquer Link mit Token erzeugt● In XPage Applikation wird Link validiert

Page 71: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

71

XPages erweitern und ausbauen - 2017Phase Listener: TokenController (2) – Java Code

public class TokenController implements PhaseListener {

public void beforePhase(PhaseEvent event) {

FacesContextExImpl fc = (FacesContextExImpl) FacesContextExImpl.getCurrentInstance();

ExternalContextEx ec = (ExternalContextEx) fc.getExternalContext();

String uri = ((HttpServletRequest) ec.getRequest()).getRequestURI();if( !(uri.contains( "/example20_survey.xsp" ) ) )

return;

Map<String, String> parameterMap = ec.getRequestParameterMap();String paramId = (String) parameterMap.get( "key" );String paramHash = (String) parameterMap.get( "hash" );

if( !(MD5Utils.isValidHash( paramId, paramHash ))){JSFUtils.redirectToPage( "/example21_generateKey.xsp" );return;

}

}

public PhaseId getPhaseId() {return PhaseId.RENDER_RESPONSE;

}

}

Page 72: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

72

XPages erweitern und ausbauen - 2017Phase Listener: TokenController (3) – faces-config.xml

<faces-config><lifecycle>

<phase-listener>ec2016.phaselisteners.TokenController</phase-listener> </lifecycle></faces-config>

Page 73: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

73

XPages erweitern und ausbauen - 2017Phase Listener: TokenController (4) – Demo

Demo

example21_survey.xsp

Page 74: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

74

XPages erweitern und ausbauen - 2017Phase Listener: Try/Catch behandeln

● Fehler im Phase Listener müssen selbstbehandelt werden (try/catch)

● Sonst wird Phase Listener ohne Rückmeldungdeaktiviert

Page 75: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

75

XPages erweitern und ausbauen - 2017Eigene Threads

Eigene Threads

Page 76: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

76

XPages erweitern und ausbauen - 2017Eigene Threads

Wozu Threads?

– Logging– Aufräumarbeiten– Asynchrone Tätigkeiten– Long Running Operations

Page 77: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

77

XPages erweitern und ausbauen - 2017Eigene Threads: XPagesExecutor Service

Für eigene Threads bietet sich derXPagesExecutor Service an:

com.ibm.xsp.application.XPagesExecutor

Page 78: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

78

XPages erweitern und ausbauen - 2017Eigene Threads: XPagesExecutorService (3) - Demo

Demo

example40_XPagesExecutor.xsp

Page 79: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

79

XPages erweitern und ausbauen - 2017Eigene Komponenten & Renderer

Komponenten & Renderer

Page 80: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

80

XPages erweitern und ausbauen - 2017Eigene Komponenten & Renderer: Kurzer Überblick

● Komponente besteht aus UIComponent &Renderer

● UIComponent ist die Backend-Komponente● Der Renderer generiert die Ausgabe (HTML, XML,

JSON, etc)● Kann voneinander getrennt sein, muss aber nicht

Page 81: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

81

XPages erweitern und ausbauen - 2017Eigene Komponenten & Renderer: Grobkonzept

UI Komponente Renderer Client

Status- /Zustandsänderungen

Datenaustausch

Page 82: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

82

XPages erweitern und ausbauen - 2017Eigene Komponenten & Renderer

● Renderer ist Klasse, die einer Komponentezugeordnet ist

● Liest auch die Daten, die vom Client kommen

– In XPages „aufgeweicht“: UIKomponentenreagieren auch auf A JAX Requests

Page 83: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

83

XPages erweitern und ausbauen - 2017Eigene Renderer

Eigene Renderer

Page 84: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

84

XPages erweitern und ausbauen - 2017Tips & Tricks: Details einer Komponente

● UIComponent.getFamily()

Liefert Familie der Komponente zurück● UIComponent.getRendererType()

Liefert Renderer der Klasse zurück● UIComponent.getStyleKitFamily()

Liefert Theme Id der Komponente zurück

Page 85: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

85

XPages erweitern und ausbauen - 2017Tips & Tricks: Details einer Komponente (2)

Demo

example01_getClass.xsp

Page 86: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

86

XPages erweitern und ausbauen - 2017Renderer Basics

● public void decode(FacesContext context, UIComponent component)

Verarbeitet Request und setzt den Status neu in der UIKomponente

● public void encodeBegin(FacesContext context, UIComponent component)

Startet den Output der UIComponent

● public void encodeChildren(FacesContext context, UIComponent component)

Verarbeitet ggf. Kinder der UIComponent

● public void encodeEnd(FacesContext context, UIComponent component)

Ist das Ende der Verarbeitung

Page 87: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

87

XPages erweitern und ausbauen - 2017Eigener Renderer: Java Klasse

public class DemoRenderer extends Renderer {

public DemoRenderer() {super();

}

@Overridepublic void encodeEnd(FacesContext fc, UIComponent uiComponent)

throws IOException {

ResponseWriter rw = fc.getResponseWriter();rw.startElement("div", uiComponent);rw.writeAttribute("style",

"background-color:red; width:100%; height:100%","style");

super.encodeEnd(fc, uiComponent);

rw.endElement("div");}

}

Page 88: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

88

XPages erweitern und ausbauen - 2017Eigener Renderer: Registrierung in faces-context.xml

<render-kit> <renderer> <renderer-class>ec2016.renderer.DemoRenderer</renderer-class> <renderer-type>ec2016.renderer.DemoRenderer</renderer-type> <component-family>javax.faces.Input</component-family> </renderer> </render-kit>

Page 89: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

89

XPages erweitern und ausbauen - 2017Eigener Renderer: Verwenden in einer UIComponent

<?xml version="1.0" encoding="UTF-8"?><xp:view

xmlns:xp="http://www.ibm.com/xsp/core">

<xp:inputTextid="inputText1"rendererType="ec2016.renderer.DemoRenderer">

</xp:inputText></xp:view>

Page 90: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

90

XPages erweitern und ausbauen - 2017Renderer Basics

Demo

example30_demoRenderer.xsp

Page 91: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

91

XPages erweitern und ausbauen - 2017Renderer Basics: Den richtigen Renderer finden

● core-faces-config.xml

\osgi\shared\eclipse\plugins\com.ibm.xsp.core_9.0.0.20130301-1431\lwpd.xsp.core.jar!\META-INF\core-faces-config.xml

● extsn-faces-config.xml

\osgi\shared\eclipse\plugins\com.ibm.xsp.extsn_9.0.0.20130301-1431\lwpd.xsp.extsn.jar!\META-INF\extsn-faces-config.xml

Beispiel

<renderer>

<component-family>javax.faces.Input</component-family>

<renderer-type>javax.faces.Text</renderer-type>

<renderer-class>com.ibm.xsp.renderkit.html_basic.InputTextRenderer</renderer-class>

</renderer>

Page 92: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

92

XPages erweitern und ausbauen - 2017Eigener Renderer: Java Klasse

public class DemoRenderer extends InputTextRenderer {

public DemoRenderer() {super();

}

@Overridepublic void encodeEnd(FacesContext fc, UIComponent uiComponent)

throws IOException {

ResponseWriter rw = fc.getResponseWriter();rw.startElement("div", uiComponent);rw.writeAttribute("style",

"background-color:red; width:100%; height:100%", "style");

super.encodeEnd(fc, uiComponent);

rw.endElement("div");}

}

Page 93: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

93

XPages erweitern und ausbauen - 2017Renderer Basics

Demo

example31_demoRendererFixed.xsp

Page 94: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

94

XPages erweitern und ausbauen - 2017Tips & Tricks: Setzen des Renderes über Theme

<!-- Theme pager -->

<control><name>InputField.EditBox</name><property>

<name>rendererType</name><value>ec2016.renderer.DemoRendererFixed</value>

</property></control>

Page 95: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

95

XPages erweitern und ausbauen - 2017Eigene Komponenten

Eigene Komponenten

Page 96: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

96

XPages erweitern und ausbauen - 2017Eigene Komponenten

Komponenten bestehen aus zwei Teilen:

1. Java Klasse

2. Eigene faces-config.xml

Page 97: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

97

XPages erweitern und ausbauen - 2017Eigene Komponenten: Java Klasse

package ec2016.component;

import java.io.Serializable;import javax.faces.component.UIComponentBase;

public class DemoComponent extends UIComponentBase implementsSerializable {

private static final long serialVersionUID = 1L;

public DemoComponent() {super();

}

@Overridepublic String getFamily() {

return "ec2016.component";}

}

Page 98: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

98

XPages erweitern und ausbauen - 2017Eigene Komponenten: Eigene faces-config.xml

<faces-config>

<faces-config-extension><namespace-uri>http://entwicklercamp/xsp/control</namespace-uri><default-prefix>ec2016</default-prefix>

</faces-config-extension>

<component><component-type>ec2016.component.DemoComponent</component-type><component-class>ec2016.component.DemoComponent</component-class>

<component-extension><component-family>ec2016.component</component-family><renderer-type>ec2016.component</renderer-type>

<tag-name>DemoComponent</tag-name>

<designer-extension><in-palette>true</in-palette><category>DemoComponent</category>

</designer-extension>

</component-extension>

</component>

</faces-config>

Page 99: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

99

XPages erweitern und ausbauen - 2017Eigene Komponenten: In XPage verwenden

Page 100: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

100

XPages erweitern und ausbauen - 2017Eigene Komponenten: Werte in Komponenten

package ec2016.component;

import javax.faces.component.UIComponentBase;import javax.faces.context.FacesContext;

public class DemoComponentWithState extends UIComponentBase {

private static final long serialVersionUID = 1L;private String myValue;

public DemoComponentWithState() {super();

}

@Overridepublic String getFamily() {

return "ec2016.component";}

@Overridepublic Object saveState(FacesContext fc) {

Object[] obj = new Object[1];obj[0] = super.saveState(fc);obj[1] = myValue;return obj;

}

@Overridepublic void restoreState(FacesContext fc, Object obj) {

Object[] values = (Object[]) obj;super.restoreState(fc, values[0]);this.myValue = ((String) values[1]);

}}

Page 101: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

101

XPages erweitern und ausbauen - 2017Eigene Komponenten: Werte in Komponenten (2)

<component><component-type>ec2016.component.DemoComponentWithState</component-type><component-class>ec2016.component.DemoComponentWithState</component-class>

<component-extension><component-family>ec2016.component</component-family><renderer-type>ec2016.component</renderer-type>

<tag-name>DemoComponentWithState</tag-name>

<designer-extension><in-palette>true</in-palette><category>DemoComponent</category>

</designer-extension></component-extension>

<property><property-name>myValue</property-name><property-class>java.lang.String</property-class>

</property></component>

Page 102: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

102

XPages erweitern und ausbauen - 2017Eigene Komponenten: Werte in Komponenten (3)

Page 103: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

103

XPages erweitern und ausbauen - 2017Eigene Komponenten: XPages Interfaces (Auszug)

Interface Verwendung für

FacesAjaxComponent AJAX Requests

FacesAttrsObject Extra Attribute für Komponente

FacesComponent Für Initialisierung vor / nach den ChildComponents

FacesInputComponent Handling von Validierung & Co

ThemeControl Für Support von Themes

Weitere Interfaces im Mastering XPages (2. Auflage), Kapitel 5!

Page 104: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

104

XPages erweitern und ausbauen - 2017Tipps & Tricks: JD GUI im Designer

JD GUI– Java Decompiler– Als Standalone oder als Eclipse-Plugin– http://jd.benow.ca/– Kein Suchen mehr nach der Spezifikation!

Page 105: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

105

XPages erweitern und ausbauen - 2017Tipps & Tricks: JD GUI im Designer (2)

Installation des Plugins

Page 106: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

106

XPages erweitern und ausbauen - 2017Tips & Tricks: JD GUI im Designer (3)

Page 107: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

107

XPages erweitern und ausbauen - 2017OSGi: ServiceLocator

OSGi: ServiceLocator

Page 108: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

108

XPages erweitern und ausbauen - 2017OSGi: ServiceLocator

ServiceLocator erlaubt Kommunikation über dieGrenzen einer XPages hinaus

- verschiedene XPages Applikationen untereinander

- Kommunikation innerhalb der JVM (z.B. mit einemEquinox Servlet)

Page 109: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

109

XPages erweitern und ausbauen - 2017OSGi: ServiceLocator

Factory Pattern● Factory kontrolliert, dass es nur eine Instanz gibt● Static sorgt dafür, dass Object „ewig“ existiert

Page 110: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

110

XPages erweitern und ausbauen - 2017OSGi: ServiceLocator - ServiceLocatorFactory

package ch.hasselba.xpagesservicelocator;

public class ServiceLocatorFactory {

static private ServiceLocatorFactory instance;static private ServiceLocator serviceLocator;

static {synchronized (ServiceLocatorFactory.class) {

if (instance == null) {instance = new ServiceLocatorFactory();

serviceLocator = new ServiceLocator();}

}}

static public ServiceLocatorFactory getInstance() {return instance;

}

public static ServiceLocator getServiceLocator() {return serviceLocator;

}

public static void setServiceLocator(ServiceLocator serviceLocator) {ServiceLocatorFactory.serviceLocator = serviceLocator;

}

}

Page 111: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

111

XPages erweitern und ausbauen - 2017OSGi: ServiceLocator - ServiceLocator

package ch.hasselba.xpagesservicelocator;

public class ServiceLocator {

private ServerMap servermap = new ServerMap();

public synchronized ServerMap getServerMap() {return servermap;

}

public synchronized void setServerMap(ServerMap map) {servermap = map;

}

}

Page 112: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

112

XPages erweitern und ausbauen - 2017OSGi: ServiceLocator - ServerMap

package ch.hasselba.xpagesservicelocator;

import java.io.Serializable;import java.util.Collection;import java.util.Map;import java.util.Set;import java.util.concurrent.ConcurrentHashMap;

@SuppressWarnings("unchecked")public class ServerMap implements Map<String, Object>, Serializable {

private static final long serialVersionUID = -1L;private static long lastAccessed = 0;private static ConcurrentHashMap<String, Object> map = new ConcurrentHashMap<String, Object>();

public static long getLastAccessed() {return lastAccessed;

}

public static synchronized void setLastAccessed(long lastAccessed) {ServerMap.lastAccessed = lastAccessed;

}

@Overridepublic void clear() {

setLastAccessed(System.currentTimeMillis());map.clear();

}

// usw. → alle Methoden überschreiben, immer setLastAccessed setzen}

Page 113: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

113

XPages erweitern und ausbauen - 2017OSGi: ServiceLocator – Plugin ausrollen & in NSF aktivieren

Page 114: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

114

XPages erweitern und ausbauen - 2017OSGi: ServiceLocator - XPage

Page 115: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

115

XPages erweitern und ausbauen - 2017OSGi: ServiceLocator – Demo 1

Demo!

Page 116: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

116

XPages erweitern und ausbauen - 2017OSGi: ServiceLocator – JVM Grenzen überwinden

Zugriff von außerhalb der JVM per RMI

- Kommunikation von Agenten mit XPages

- Auch „fremde“ JVMs haben Zugriff

Page 117: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

117

XPages erweitern und ausbauen - 2017OSGi: ServiceLocator

Java Code Compliance auf 1.6 setzen

Page 118: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

118

XPages erweitern und ausbauen - 2017OSGi: ServiceLocator – RMI Interface

package ch.hasselba.xpagesservicelocator;

import java.rmi.Remote;import java.rmi.RemoteException;import java.util.HashMap;

public interface ServerMapRemoteInterface extends Remote {

HashMap<String, Object> getServerMapRemote() throws RemoteException;

void setServerMapRemote( HashMap<String, Object> serverMap ) throws RemoteException;

}

Page 119: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

119

XPages erweitern und ausbauen - 2017OSGi: ServiceLocator – ServiceLocator erweitern

public class ServiceLocator extends java.rmi.server.UnicastRemoteObjectimplements ServerMapRemoteInterface {

private static final long serialVersionUID = 1L;private int thisPort = 3232;private String thisAddress;private Registry registry;

protected ServiceLocator() throws RemoteException {

try {thisAddress = (InetAddress.getLocalHost()).toString();

}catch (Exception e) {throw new RemoteException("can't get inet address.");

}

System.out.println("this address=" + thisAddress + ",port=" + thisPort);

try {registry = LocateRegistry.createRegistry(thisPort);registry.rebind("rmiServer", this);

}catch (RemoteException e) {throw e;

}

}

…}

Page 120: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

120

XPages erweitern und ausbauen - 2017OSGi: ServiceLocator – ServiceLocator erweitern (2)

@Overridepublic HashMap<String, Object> getServerMapRemote()

throws RemoteException {HashMap map = new HashMap<String, Object>();for( Entry<String, Object> entry : getServerMap().entrySet() ){

map.put(entry.getKey(), entry.getValue());}return map;

}

@Overridepublic void setServerMapRemote(HashMap<String, Object> serverMap)

throws RemoteException {

for( Entry<String, Object> entry : serverMap.entrySet() ){servermap.put(entry.getKey(), entry.getValue());

}

}

Page 121: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

121

XPages erweitern und ausbauen - 2017OSGi: ServiceLocator

JAR in Agenten importieren

Page 122: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

122

XPages erweitern und ausbauen - 2017OSGi: ServiceLocator - Agent

public class JavaAgent extends AgentBase {

@Overridepublic void NotesMain() {

try {// Registrierung öffnenRegistry registry = LocateRegistry.getRegistry("192.168.2.108",

3232);

// Holen des RemoteInterfacesServerMapRemoteInterface rmiServer =

(ServerMapRemoteInterface) (registry.lookup("rmiServer"));

// auslesen der ServerMapHashMap<String, Object> serverMap = rmiServer.getServerMapRemote();

// Ausgabe des Wertes auf KonsoleSystem.out.println("Wert: " + serverMap.get("ec2016"));

// Wert neu setzenserverMap.put("ec2016", "Agent: " + System.currentTimeMillis());rmiServer.setServerMapRemote(serverMap);

} catch (RemoteException e) {e.printStackTrace();

} catch (NotBoundException e) {e.printStackTrace();

}}

}

Page 123: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

123

XPages erweitern und ausbauen - 2017Vielen Dank!

Danke!

Page 124: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

124

XPages erweitern und ausbauen - 2017AddOn: SessionListener

package ec2016;

import javax.servlet.http.HttpSessionEvent;

import com.ibm.xsp.application.ApplicationEx;import com.ibm.xsp.application.events.SessionListener;

public class ApplicationSessionListener implements SessionListener{

public void sessionCreated(ApplicationEx app, HttpSessionEvent event){

System.out.println( "session Created!");

}

public void sessionDestroyed(ApplicationEx app, HttpSessionEventevent){

System.out.println( "session Destryoed!");

}}

Page 125: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

125

XPages erweitern und ausbauen - 2017AddOn: ApplicationListener

package ec2016;

import com.ibm.xsp.application.ApplicationEx;import com.ibm.xsp.application.events.ApplicationListener2;

public class ApplicationListener implements ApplicationListener2 {

public void applicationRefreshed(ApplicationEx app) {System.out.println( "App refreshed!");

}

public void applicationCreated(ApplicationEx app) {System.out.println( "App created!");

}

public void applicationDestroyed(ApplicationEx app) {System.out.println( "App destroyed!");

}}

Page 126: XPages erweitern & ausbauen - 2017FILE/T2S2-XPagesErweitern.pdfXPages erweitern und ausbauen ... Support für eigene Themes (XPages Theme ... XPage mit SSJS. XPages erweitern und ausbauen

126

XPages erweitern und ausbauen - 2017AddOn: Als Service registrieren

● Ordnerstrukur über Package Explorer anlegen /META-INF/services/

● Dort Textdatei„com.ibm.xsp.core.event.ApplicationListener“ anlegen

● In die Datei den Namen der Klasse eintragen:„ec2016.ApplicationListener“ (ohne Anführungszeichen)