Adobe LiveCycle Data Services

78
2006 Adobe Systems Incorporated. All Rights Reserved. 1 Après-midi technique Adobe Comment améliorer la communication entre une application RIA et votre SI

description

Mes slides sur livecycle data services

Transcript of Adobe LiveCycle Data Services

Page 1: Adobe LiveCycle Data Services

2006 Adobe Systems Incorporated. All Rights Reserved. 11

Après-midi technique Adobe

Comment améliorer la communication entre une application RIA et votre SI

Page 2: Adobe LiveCycle Data Services

2008 Adobe Systems Incorporated. All Rights Reserved. 2

Agenda

Rappels sur l’offre Adobe Flex

Flex et les appels standards du web

Flex et le HTTPRequest

Flex et l’appel de WebService

Communication entre Flex et les serveurs d’applications Java

Différences entre Blaze DS et LiveCycle DS

Flex et le Remoting, et architecture

Flex et les techniques de messaging

Le Data Management

Services additionnels

Architecture: Sécurité, Cluster

Génération d’un PDF avec LCDS

Appel d’un service documentaire LiveCycle.

AIR

Page 3: Adobe LiveCycle Data Services

2006 Adobe Systems Incorporated. All Rights Reserved. 33

Rappels sur l’offre Adobe Flex

Page 4: Adobe LiveCycle Data Services

Copyright 2008 Adobe Systems Incorporated. All rights reserved.

®

Quatre générations d’applications d’Entreprise

4

MAINFRAME

RE

ACH

Local

Global

RICHServer Interaction Client Interaction

DESKTOP

WEB APPLICATIONS

2004

1992

1998

RICH INTERNETAPPLICATIONS

Page 5: Adobe LiveCycle Data Services

®

Copyright 2008 Adobe Systems Incorporated. All rights reserved. Adobe confidential. 55

Challenges techniques de la RIA

• Améliorer les temps de réponses• Alléger la bande passante• Décharger le serveur• Diminuer les tests

Web 1.0 application Rich Internet Application

<page>

<page>

<page>

<page>

<page>

<page>

<page><application>

<data>

Page 6: Adobe LiveCycle Data Services

®

Copyright 2008 Adobe Systems Incorporated. All rights reserved. Adobe confidential. 66

Trois technologies Open Source d’Adobe pour les RIA

Flash Player 9

12 ans d’existence

98% des PC équipés

Langage objet AS3

AVM2 JIT Compiler

Open Source: Tamarin

Gratuit, framework open source

Flex Builder basé sur Eclipse

Framework MVC

Accessibilité, Test unitaire, Debug

Component based programming

Dévelopment rapide

LiveCycle Data Services

Data intensive applications

Meilleures perfs du marché

Remoting architecture

Messaging and Data Push

Data Management Services

Offline synchronization

FLASH PLAYER FLEX 3 SDK LIVECYCLE DATA SERVICES

Page 7: Adobe LiveCycle Data Services

2008 Adobe Systems Incorporated. All Rights Reserved.

Adobe Flex Lineup

Standard Edition

Visual Layout

Code Hinting

Debugging

Skinning & Styling

Adobe®Flex™ Builder™ 3

Data Management

Web-Tier Compiler

RIA-PDF Creation

Portal Deployment

Adobe® LiveCycle®Data Services ES

Charting Components

Advanced DataGrid / OLAP

Performance Profiling

Professional EditionMessaging

RPC Services

Service Adapters

Proxy Service

Command-line Compiler

MXML and ActionScript 3.0

Framework and Class Library

Adobe®Flex™ SDK 3

Page 8: Adobe LiveCycle Data Services

Fonctionnement et déploiement

Flex Builder IDE

Flex SDK

Flex Class Library

MXML ActionScript

Compile

SOAP HTTP/S AMF/S RTMP/S

Web Server

Existing Applications & Infrastructure

J2EE Application Server

LC Data ServicesXML/HTTPRESTSOAP Web Services

Browser

Flash Player

Page 9: Adobe LiveCycle Data Services

2008 Adobe Systems Incorporated. All Rights Reserved. 9

Ressources pour apprendre Flex

Site web de référence:

http://www.flex.org Tutoriaux et vidéos techniques:

http://developer.adobe.com

Ateliers gratuits de formation sur 1 jour:

http://www.baao.com

Blog pour se tenir informé de l’actualité Adobe France, tutoriaux, slides:

http://codemoiunmouton.wordpress.com

Page 10: Adobe LiveCycle Data Services

2006 Adobe Systems Incorporated. All Rights Reserved. 1010

Flex et les appels standards du webHTTPRequest, WebService

Page 11: Adobe LiveCycle Data Services

2008 Adobe Systems Incorporated. All Rights Reserved.

HTTPRequest: le standard du web

11

Appel d’un script sur une URL qui retourne du texte (print)

Si la réponse est en XML, les composants Flex l’interprête nativement

Déclaration par un tag <mx:HTTPService>. La méthode send() lance une requête HTTP sur l’url spécifiée.

Si la requête ne passe pas par un proxy:

useProxy = false

HTTP GET, POST

Si la requête passe par un proxy:

useProxy = true

HTTP GET, POST, HEAD, OPTIONS, TRACE & DELETE

Page 12: Adobe LiveCycle Data Services

2008 Adobe Systems Incorporated. All Rights Reserved.

HTTPRequest par l’exemple

12

Page 13: Adobe LiveCycle Data Services

2008 Adobe Systems Incorporated. All Rights Reserved.

WebService: le standard du web

13

Une application Flex peut interagir avec des Webservices qui définissent leurs interfaces en document:

Web Services Description Language 1.1 (WSDL 1.1)

Du coup, une application Flex accède à un webService par une URL.

Une application Flex supporte les requêtes et les réponses SOAP

Flex Builder dispose d’un outil d’introspection de WSDL qui génère automatiquement un proxy AS3.

Page 14: Adobe LiveCycle Data Services

2008 Adobe Systems Incorporated. All Rights Reserved.

WebService: le standard du web

14

Page 15: Adobe LiveCycle Data Services

2008 Adobe Systems Incorporated. All Rights Reserved.

Crossdomain.xml

15

Le Flash Player applique des règles de sécurité pour accéder à des données.

Une application Flex peut accéder aux sources de données qui sont sur le même domaine que le fichier SWF.

Cependant une application Flex ne peut accéder à des sources de données situées dans un domaine différent, sauf si le domaine lui en donne la permission. Pour cela, il faut déployer un fichier crossdomain.xml à la racine du domaine.

<?xml version="1.0"?> <!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd"> <cross-domain-policy>

<allow-access-from domain="*.monserveur.com"/> </cross-domain-policy>

Exemple: http://www.yahoo.com/crossdomain.xml

Page 16: Adobe LiveCycle Data Services

2008 Adobe Systems Incorporated. All Rights Reserved.

Les projets autres que J2EE

16

Flex et PHP : Flex et .Net:

Flex et Coldfusion: Flex et Ruby:

Page 17: Adobe LiveCycle Data Services

2005 Adobe Systems Incorporated. All Rights Reserved.

17

Deux approches dans le développement Client/Server

Couplage faible: Protocoles basés sur le Document(XML, SOAP, …) Langage neutre, facile à débugger et documenter

Le parsing et le formatage du code est plus difficile à maintenir (de + en + complexe)

Le temps de traitement augmente avec l’augmentation de la complexité

Il est plus simple de développement indépendamment le client du serveur

Couplage fort: Protocoles basés sur un modèle Objet (RMI, AMF, …) Difficile de changer de langage

Plus rapide pour le client et le serveur, diminution de la bande passante

Plus simple de partager du code ou d’utiliser de la génération automatique de code basée sur le modèle

Meilleure gestion de la complexité du modèle (scalabilité)

Moins de design de code, moins de dépendance sur le format qui transite

Manipulation du client et du serveur en parallèle pour rafraichir en même temps les deux parties

Page 18: Adobe LiveCycle Data Services

2006 Adobe Systems Incorporated. All Rights Reserved. 1818

Flex et les serveurs d’application JavaRemoting, Messaging et Data Management

Page 19: Adobe LiveCycle Data Services

2008 Adobe Systems Incorporated. All Rights Reserved.

LiveCycle Data Services ES

Créer des RIA qui manipulent énormément de données avec un minimum de code, et accélérer la mise en production en programmant sur un modèle client-serveur.

Intégrer une RIA avec des applications existantes de l’infrastructure J2EE.

Intégrer facilement des RIA avec des processus documentaires LiveCycle.

Développer des application collaboratives, gérer la synchronisation offline, gérer le temps réel.

Générer des PDF à la demande qui intègrent des éléments graphiques.

19

LiveCycle Data Services est un ensemble de composants J2Ee et d’API utilisés pour:

LiveCycle Data Services ES

Data Management

RPC Services

Messaging

ServiceAdapters

Data Synchronization

Off-line Applications

Data Paging

Web Service

HTTP Service

Remote Object Service

Publish & Subscribe

Collaboration

Real Time Data Push

Proxy Service

Web-tier Compiler

Portal Deployment

RIA-PDF Generation

LiveCycle

ColdFusion

Hibernate

SQL

JMS

Java

Custom…

Page 20: Adobe LiveCycle Data Services

2008 Adobe Systems Incorporated. All Rights Reserved. 20

Qu’est ce que BlazeDS?

Gratuit et Open Source Ouverture du format d’échange de données AMF3

(Action Message Format) Technologie de messaging sur le standard HTTP

(équivalent de Comet) Builds certifiées, support entreprise disponible (LC

Community Edition)

BlazeDS est un sous-ensemble Open Source (LGPL) de LCDS. C’est une solution de Remoting et de HTTP messaging.

BlazeDS

Data Management

RPC Services

Messaging

ServiceAdapters

Data Synchronization

Off-line Applications

Data Paging

Web Service

HTTP Service

Remote Object Service

Publish & Subscribe

Collaboration

Real Time Data Push

Proxy Service

Web-tier Compiler

Portal Deployment

RIA-PDF Generation

LiveCycle

ColdFusion

Hibernate

SQL

JMS

Java

Custom…

Page 21: Adobe LiveCycle Data Services

2008 Adobe Systems Incorporated. All Rights Reserved. 21

LCDS.war

Structure du WAR: +WEB-INF/classes Pour placer ses classes Java

+WEB-INF/lib Contient les librairies Java de LCDS

+WEB-INF/flex Contient les fichiers XML de configuration Remoting-config.xml Destinations vers les classes Java Messaging-config.xml Destinations pour le messaging Data-Management-config.xml Destinations vers les assemblers Proxy-config.xml Destinations vers les services HTTP Services-config.xml Configuration des canaux

Un fichier LCDS.war est fourni pour démarrer vos projets Flex / Java.

Page 22: Adobe LiveCycle Data Services

2008 Adobe Systems Incorporated. All Rights Reserved.

Plateformes supportées

Windows 2000 and Vista, x86, x64

Windows 2003 x86, x64, IPF

Solaris 9 and 10 SPARC

RedHat Linux AS 4 and 5, x86, x64

Suse Enterprise Linux 9 and 10, x86, x64

Suse Enterprise Linux 9 and 10, zSeries (with IBM WebSphere only)

IBM AIX 5.3, PPC (with IBM WebSphere only)

HP-UX 11i v3 IPF, PA/RISC (with BEA Weblogic only)

22

Page 23: Adobe LiveCycle Data Services

2008 Adobe Systems Incorporated. All Rights Reserved.

Serveurs d’applications supportés

Apache Tomcat 6.0.x

JBoss Application Server 4.2.2 4.0.3 SP1+, 4.2.x

BEA Weblogic 9 and 10

IBM WebSphere Application Server 6.1.x

Fujitsu Interstage 9

Hitachi Cosminexus 7

NEC WebOTX

Oracle 10G AS (10.1.3)

SAP NetWeaver CE 7.1 SP3

Adobe JRun 4 Updater 7

23

Sun JDK 5

BEA JRockit 5

IBM JDK 5

JDK supportés

Page 24: Adobe LiveCycle Data Services

2006 Adobe Systems Incorporated. All Rights Reserved. 2424

RemotingDemonstration

Page 25: Adobe LiveCycle Data Services

2008 Adobe Systems Incorporated. All Rights Reserved.

Créez une classe Java

25

Page 26: Adobe LiveCycle Data Services

2008 Adobe Systems Incorporated. All Rights Reserved.

remoting-config.xml

Les destinations pour le remoting pointent directement sur les classes Java en utilisant un « adapter » préconfiguré sur le serveur (java-object) et un canal de communication (my-amf)

Chaque destination pointe sur une seule classe Java

<destination id=“SimpleJavaService”>

<properties>

<source>NoidaTraining.SimpleJavaService</source>

<scope>application</scope>

</properties>

</destination>

NB: Vous n’avez pas besoin de redémarrer le serveur après avoir modifié les fichiers de configuration de LCDS

26

Page 27: Adobe LiveCycle Data Services

2008 Adobe Systems Incorporated. All Rights Reserved.

Précisions sur le <scope>

<destination id=“SimpleJavaService”>

<properties>

<source>NoidaTraining.SimpleJavaService</source>

<scope>application</scope>

</properties>

</destination>

request - un nouvel objet pour chaque appel de méthode (par défaut)

session - les objets restent disponibles le temps de la session cliente

application – les objets restent disponibles pendant toute la durée de vie de l’application web

27

Page 28: Adobe LiveCycle Data Services

2008 Adobe Systems Incorporated. All Rights Reserved.

<mx:RemoteObject>

28

Page 29: Adobe LiveCycle Data Services

2008 Adobe Systems Incorporated. All Rights Reserved.

Multiple Event Handlers

Pour un même service Java, je peux gérer plusieurs méthodes.

29

Page 30: Adobe LiveCycle Data Services

2008 Adobe Systems Incorporated. All Rights Reserved.

Appel asynchrone et utilisation du token

Lorsqu’on appelle une méthode, je rajoute un attribut à l’opération

var remoteFn:AbstractOperation = remoteObject.getOperation("login");

var call : AsyncToken = remoteFn.send();

call.someAttr = “A";

Lorsque je gère le retour, je teste l’attribut:

if (event.token.someAttr == “A”) {…

} else {…

}

Page 31: Adobe LiveCycle Data Services

2008 Adobe Systems Incorporated. All Rights Reserved.

Echange de données entre Java and ActionScript

31

Page 32: Adobe LiveCycle Data Services

2008 Adobe Systems Incorporated. All Rights Reserved.

Java Value Object

32

Page 33: Adobe LiveCycle Data Services

2008 Adobe Systems Incorporated. All Rights Reserved.

ActionScript Value Object

33

Page 34: Adobe LiveCycle Data Services

2008 Adobe Systems Incorporated. All Rights Reserved.

Architecture n-tiers avec Remoting

Page 35: Adobe LiveCycle Data Services

2008 Adobe Systems Incorporated. All Rights Reserved.

Advanced Concepts - Remote Object

Scope et attribute-id pour gérer des composants Scope: request, session, application – contrôle de cycle de vie de votre remote object

Attribute-id: stock le composant sous ce nom dans le ServletContext ou la HTTPSession pour le partager avec une JSP ou d’autres destinations

FlexFactory: interface pour Spring Exemple de configuration:

<destination name=“SpringComponent”><properties>

<factory>spring</factory><source>MySpringComponentId</source>

</properties></destination>

FlexSession Obtenue à partir de FlexContext

Utilise HTTPSession if vous êtes sur HTTP, émule les fonctionnalités d’une session HTTP pour le RTMP

[Transient] metadata Propriété pour l’ActionScript (annotation) qui ne sera pas sérialiser pour le serveur

35

Page 36: Adobe LiveCycle Data Services

2008 Adobe Systems Incorporated. All Rights Reserved.

Mapping personnalisé entre ActionScript et Java

Si les mécanismes standards de sérialisation et de désérialisation de données entre ActionScript (client) et Java (server) ne sont pas satisfaisants:

Vous pouvez implémenter l’interface ActionScript sur le client grâce à flash.utils.Iexternalizable

Vous pouvez créer la correspondance Java et écrire votre propre schéma de sérialisation avec java.io.Externalizable

Page 37: Adobe LiveCycle Data Services

2006 Adobe Systems Incorporated. All Rights Reserved. 3737

Messaging

Page 38: Adobe LiveCycle Data Services

2008 Adobe Systems Incorporated. All Rights Reserved.

Publish/Subscribe Messaging

38

Message

Service

Livecycle Data Services

Endpoint

PublisherSubscriber

RTMP

AMF

HTTP

Client A

Client B

Client C

Page 39: Adobe LiveCycle Data Services

2008 Adobe Systems Incorporated. All Rights Reserved. 39

Demo: Chat

Page 40: Adobe LiveCycle Data Services

2008 Adobe Systems Incorporated. All Rights Reserved. 40

messaging-config.xml

Ajout de la destination “chat

<destination id=“chat”>

<adapter ref=“actionscript”>

</destination>

L’adapter ActionScript n’est utilisé que pour les applications qui n’utilisent que des clients Flex. C’est l’adapter par défaut.

L’adapter JMS permet à des clients Flex et Java de communiquer.

Page 41: Adobe LiveCycle Data Services

2008 Adobe Systems Incorporated. All Rights Reserved. 41

Publier un Message

Déclaration d’un tag Producer

<mx:Producer id="producer" destination="chat"/>

Envoyer le message

public function send():void

{

var message:AsyncMessage = new AsyncMessage();

message.header.userId = userId.text;

message.body = msg.text;

producer.send(message);

}

Page 42: Adobe LiveCycle Data Services

2008 Adobe Systems Incorporated. All Rights Reserved. 42

S’abonner à une Destination

Déclarer un Consumer

<mx:Consumer id="consumer" destination="chat“ message="messageHandler(event)"/>

Gérer la réception de messages

public function messageHandler(event:MessageEvent):void{

log.text += event.message.header.userId + ": " + event.message.body.msg + "\n";}

S’abonner aux messages

consumer.subscribe();

Exemple: www.toutracker.org

Page 44: Adobe LiveCycle Data Services

2008 Adobe Systems Incorporated. All Rights Reserved.

Déclaration de la destination « feed »

44

<destination id="feed">

<properties>

<network>

<session-timeout>0</session-timeout>

</network>

<server>

<max-cache-size>1000</max-cache-size>

<message-time-to-live>0</message-time-to-live>

<durable>false</durable>

</server>

</properties>

</destination>

Page 45: Adobe LiveCycle Data Services

2008 Adobe Systems Incorporated. All Rights Reserved.

Classe Java qui génère et envoie un message sur « feed » 1/2

45

Page 46: Adobe LiveCycle Data Services

2008 Adobe Systems Incorporated. All Rights Reserved.

Classe Java qui génère et envoie un message sur « feed » 2/2

46

Page 47: Adobe LiveCycle Data Services

2008 Adobe Systems Incorporated. All Rights Reserved.

Les Channels dans LiveCycle Data Services ES

47

Page 48: Adobe LiveCycle Data Services

2008 Adobe Systems Incorporated. All Rights Reserved.

Quels canaux utiliser pour le temps réel ? (BlazeDS)

Channel Description Les Plus Les Moins

AMFLong Polling

Poll ~ 1 minServer parks poll

until data availableWorks with firewalls

Poll roundtrip overhead

Servlet API blocking IO

Streaming AMFServer pushes

infinite messages(HTTP Chunk)

No polling overhead

Works with firewalls

HTTP proxies can swallow messages

Servlet API blocking IO

AMF Simple polling

Piggyback Enabled

Messages/ request/response

piggybacking

Works with firewalls

48

Page 49: Adobe LiveCycle Data Services

2008 Adobe Systems Incorporated. All Rights Reserved.

Quels canaux utiliser pour le temps réel ? (LCDS)

Channel Description Les Plus Les Moins

RTMP(in a ChannelSet with fallback to NIO AMFChannel configured to

Long Poll)

Single duplex connection

Immediate notification when a client is closed

Non standard port blocked by firewalls

NIO AMFLong Polling(no fallback)

Uses an NIO server and minimal HTTP stack

1000s of clients

Better scalability and no configured upper bound

on no. of parked poll requests

Requires more network configuration

NIO Streaming AMF(in a ChannelSet followed by

the polling AMFChannel below for fallback)

Uses an NIO server and minimal HTTP stack

1000s of clients

Better scalability and no configured upper bound

on the number of streaming connections

Same as above

NIO AMF Simple polling

Piggyback Enabled

Uses an NIO server and minimal HTTP stack

1000s of clientsSame as above Same as above

49

Page 50: Adobe LiveCycle Data Services

2006 Adobe Systems Incorporated. All Rights Reserved. 5050

Data ManagementDemonstration

Page 51: Adobe LiveCycle Data Services

2008 Adobe Systems Incorporated. All Rights Reserved.

Travailler avec des données:Le mode traditionnel du HTML (page)

Le client est souvent utiliser pour capturer de la données et l’affichage

Le client ne conserve pas une version de la donnée

Pas de réelle manipulation de données côté client

Les données doivent être snchronisées entre le middle-tier et la base

51

data data

Persistence Solutions:

Hibernate

JDOs

EJB 3

Others…

Page 52: Adobe LiveCycle Data Services

2008 Adobe Systems Incorporated. All Rights Reserved.

Le modèle de la RIA

Le client possède une version de la donnée

Manipulation riche des données côté client

La donnée doit être synchronisée entre le tiers client, le middle-tier ET entre le middle-tier et la base

52

data data data

Page 53: Adobe LiveCycle Data Services

2008 Adobe Systems Incorporated. All Rights Reserved.

L’approche RPC

Responsabilité du développeur:

Notifier les changements - flags (create, update, delete)

Maintenir une version originelle de la donne pour appliquer une stratégie de locking

Créer des Remote Procedure Calls pour créer, mettre à jour et effacer des enregistrements

Identifier et gérer les conflits / les appels concurrents

53

data

RPC

Services

data

Page 54: Adobe LiveCycle Data Services

2008 Adobe Systems Incorporated. All Rights Reserved.

L’approche de LiveCycle Data Services

Client-Side API:

Flags changes (create, update, delete)

Maintient une version d’origine de la donnée pour appliquer la stratégie de locking

Envoie une liste de changement à LCDS dans un groupe de messages

Gère les conflits, les accès concurrents

54

data

Data

Service

data

Page 55: Adobe LiveCycle Data Services

2008 Adobe Systems Incorporated. All Rights Reserved.

L’approche de LiveCycle Data Services

Data Service:

Désérialise la liste des changements qui proviennent du client

Sérialise les données avant de les données au client

Passe la liste des changement au bon adapter

Notifie les clients qui sont abonnés à la destination

Adapter:

Effectue les changements

Identifie les conflits

Passe les résultats à Data Services

55

data data

JDBC

Object

Hibernate

ColdFusion

Data

Service

Custom

Page 57: Adobe LiveCycle Data Services

2008 Adobe Systems Incorporated. All Rights Reserved.

La résolution de conflits

Les conflits interviennent quand différents clients essayent de mettre à jour la même donnée en même temps.

Le nombre de conflits dans une application dépend de la stratégie de locking (concurrency level) implémentée dans l’application.

LCDS n’impose pas de stratégie de locking, vous pouvez même choisir de ne pas gérer les conflits.

Vous êtes libre d’estimer ce que représente un conflit par rapport au contexte de votre application.

LCDS prévient les clients quand un conflit a lieu en envoyant une DataSyncException.

Côté client, LCDS fournit une API sophistiquée pour résoudre les conflits. Un événement est dispatché en cas de conflit.

Page 58: Adobe LiveCycle Data Services

2008 Adobe Systems Incorporated. All Rights Reserved.

Concepts avancés - Data Management Services

Paging

Managed associations Supports replicating general object graphs from server to client (with cycles)

Tracks changes to relationships and pushes them to the server

Ensures a single instance of the client object for each id

Optionally associations can be “lazy” – referenced item is fetched as needed

Writing custom assemblers Implement these methods: getItem, createItem, updateItem, deleteItem, fill, count

Source to HibernateAssembler is included

58

Page 59: Adobe LiveCycle Data Services

2008 Adobe Systems Incorporated. All Rights Reserved. 59

Le code côté client Flex

<?xml version="1.0" encoding="utf-8"?>

<mx:Application xmlns:mx="http://www.macromedia.com/2005/mxml" creationComplete="initApp()">

<mx:Script>

public var ds:DataService;

[Bindable]public var contacts:ArrayCollection;

public function initApp() {

contacts = new ArrayCollection();

ds = new DataService("contact");

ds.fill(contacts);

}

</mx:Script>

<mx:DataGrid dataProvider="{contacts}" editable="true“/>

</mx:Application>

Page 60: Adobe LiveCycle Data Services

2008 Adobe Systems Incorporated. All Rights Reserved. 60

Data management-confis.xml

<destination id="contact">

<adapter ref="java-dao" />

<properties>

<metadata><identity property="contactId"/>

</metadata>

<server>

<assembler><class>samples.contact.ContactAssembler</class>

</assembler>

<fill-method><name>loadContacts</name>

</fill-method>

<sync-method><name>syncContacts</name>

</sync-method>

</server>

</properties>

</destination>

Page 61: Adobe LiveCycle Data Services

2008 Adobe Systems Incorporated. All Rights Reserved. 61

ContactAssembler.java

public class ContactAssembler {

public List loadContacts() {ContactDAO dao = new ContactDAO();return dao.getContacts();

}

public List syncContacts(List changes) {Iterator iterator = changes.iterator();ChangeObject co;while (iterator.hasNext()) {

co = (ChangeObject) iterator.next();if (co.isCreate()) {

// invoke logic to create item} else if (co.isUpdate()) {

// invoke logic to update item} else if (co.isDelete()) {

// invoke logic to delete item}

}return changes;

}

}

Page 62: Adobe LiveCycle Data Services

2006 Adobe Systems Incorporated. All Rights Reserved. 6262

Clustering

Page 63: Adobe LiveCycle Data Services

2008 Adobe Systems Incorporated. All Rights Reserved.

Implémentation du clustering

In-built software clustering

Basé sur Jgroups

Support du Load Balancing Hardware (out-of-the-box)

Support de clusters horizontaux et verticaux

Les destinations diffusent leurs disponibilités et les endpoints accessibles dans le cluster

Les destinations de messaging et de data services diffusent les messages ou les changements aux destinations correspondantes sur les autres serveurs du cluster.

63

Page 64: Adobe LiveCycle Data Services

2008 Adobe Systems Incorporated. All Rights Reserved.

En résumé …

Failover Messaging State Replication

Proxy Service OUI NON

Remoting Service OUI NON

Message Service OUI OUI

Data Management Service OUI OUI

64

Page 65: Adobe LiveCycle Data Services

2006 Adobe Systems Incorporated. All Rights Reserved. 6565

Sécurité

Page 66: Adobe LiveCycle Data Services

2008 Adobe Systems Incorporated. All Rights Reserved.

Glossaire

66

ChannelMSG

MSG

Endpoint

Destination

Channel Endpoint

Destination

Destination

Destination

Destination

https://monserveur:443/messagebroker/amfsecure

Page 67: Adobe LiveCycle Data Services

2008 Adobe Systems Incorporated. All Rights Reserved.

Securiser le canal RTMP

<channel-definition id="my-rtmps“ class="mx.messaging.channels.SecureRTMPChannel">

<endpoint uri="rtmps://{server.name}:2099“ class="flex.messaging.endpoints.SecureRTMPEndpoint"/>

<properties>

<idle-timeout-minutes>30</idle-timeout-minutes>

<keystore-file>C:/somedir/flex/dataservices/apps/j2ee/dev/WEBINF/flex/keys/server.keystore</keystore-file>

<keystore-password>password</keystore-password>

</properties>

</channel-definition>

Page 68: Adobe LiveCycle Data Services

2008 Adobe Systems Incorporated. All Rights Reserved.

Securiser le canal RTMP

Vous pouvez aussi spécifier un autre algorithme que celui proposé par défaut par la JVM quand on active le SSL.

<algorithm>Default</algorithm> pour explicitement utiliser celui proposé par défaut par la JVM.

<algorithm>SunX509</algorithm> pour utiliser celui de SUN.

<algorithm>IbmX509</algorithm> pour utiliser celui d’IBM.

De même, il exite les canaux secureAMF et le secureHTTP tous deux basés sur HTTPS

Page 69: Adobe LiveCycle Data Services

2008 Adobe Systems Incorporated. All Rights Reserved.

Sécuriser les endpoints HTTP et RTMP

Vous pouvez aussi protéger l’accès aux endpoints des canaux HTTP- et RTMP- :

<whitelist>

<ip-address-pattern>237.*</ip-address-pattern>

<ip-address>10.132.64.63</ip-address>

</whitelist>

<blacklist>

<ip-address>10.60.147.*</ip-address>

<ip-address-pattern>10\\.132\\.17\\.5[0-9]{1,2}</ip-address-pattern>

</blacklist>

Page 70: Adobe LiveCycle Data Services

2008 Adobe Systems Incorporated. All Rights Reserved.

Sécuriser des endpoints via JAAS

Par les contraintes de sécurité web basée sur JAAS<destination id=“sampleJaasService">

……………………..

<security>

<security-constraint>

<auth-method>Custom</auth-method>

<roles>

<role>roDestUser</role>

</roles>

</security-constraint>

</security>

</destination>

Page 71: Adobe LiveCycle Data Services

2008 Adobe Systems Incorporated. All Rights Reserved.

Invocation de services sécurisés

Sécurisation de la communication Flex <-> LCDS :var employeeHTTP:HTTPService = new HTTPService();

employeeHTTP.destination = "SecureDest";

employeeHTTP.setCredentials("myUserName", "myPassword");

empoyeeHTTP.send({param1: 'foo'});

Sécurisation d’un proxy:<destination id="samplesProxy">

<channels>

<channel ref="samples-amf"/>

</channels>

<properties>

<url>http://someserver/SecureService.jsp</url>

<remote-username>johndoe</remote-username>

<remote-password>opensaysme</remote-password>

</properties>

</destination>

Page 72: Adobe LiveCycle Data Services

2006 Adobe Systems Incorporated. All Rights Reserved. 7272

Les bonusGénération de PDF, invocation de LiveCycle ES, AIR…

Page 73: Adobe LiveCycle Data Services

2006 Adobe Systems Incorporated. All Rights Reserved. 7373

Conclusion

Page 74: Adobe LiveCycle Data Services

2006 Adobe Systems Incorporated. All Rights Reserved. 74

Pour aller plus loin…

Récupérer sur le site d’Adobe LiveCycle Data Services:

Installation automatique de lcds-samples

Installation du 30mins Test Drive avec toutes les sources

Retrouvez les slides sur le blog « Code moi un mouton »

Nos emails :

Bertrand Collard: [email protected]

Michael Chaize: [email protected]

Page 75: Adobe LiveCycle Data Services

2008 Adobe Systems Incorporated. All Rights Reserved.

Le QUIZZ !!!

75

Que doit-on modifier si l’on souhaite utiliser un autre canal de communication pour le RemoteObject entre l’application Flex et LCDS ?

Page 76: Adobe LiveCycle Data Services

2008 Adobe Systems Incorporated. All Rights Reserved.

Le QUIZZ !!!

76

Que doit-on mettre en place pour accéder à un webService externe à l’entreprise?

Page 77: Adobe LiveCycle Data Services

2008 Adobe Systems Incorporated. All Rights Reserved.

Le QUIZZ !!!

77

Comment Adobe a implémenté le support du clustering dans LCDS ?

Page 78: Adobe LiveCycle Data Services

2008 Adobe Systems Incorporated. All Rights Reserved.