Your SlideShare is downloading. ×
0
Apache conna2010 os-gi_flex-fornaciari
Apache conna2010 os-gi_flex-fornaciari
Apache conna2010 os-gi_flex-fornaciari
Apache conna2010 os-gi_flex-fornaciari
Apache conna2010 os-gi_flex-fornaciari
Apache conna2010 os-gi_flex-fornaciari
Apache conna2010 os-gi_flex-fornaciari
Apache conna2010 os-gi_flex-fornaciari
Apache conna2010 os-gi_flex-fornaciari
Apache conna2010 os-gi_flex-fornaciari
Apache conna2010 os-gi_flex-fornaciari
Apache conna2010 os-gi_flex-fornaciari
Apache conna2010 os-gi_flex-fornaciari
Apache conna2010 os-gi_flex-fornaciari
Apache conna2010 os-gi_flex-fornaciari
Apache conna2010 os-gi_flex-fornaciari
Apache conna2010 os-gi_flex-fornaciari
Apache conna2010 os-gi_flex-fornaciari
Apache conna2010 os-gi_flex-fornaciari
Apache conna2010 os-gi_flex-fornaciari
Apache conna2010 os-gi_flex-fornaciari
Apache conna2010 os-gi_flex-fornaciari
Apache conna2010 os-gi_flex-fornaciari
Apache conna2010 os-gi_flex-fornaciari
Apache conna2010 os-gi_flex-fornaciari
Apache conna2010 os-gi_flex-fornaciari
Apache conna2010 os-gi_flex-fornaciari
Apache conna2010 os-gi_flex-fornaciari
Apache conna2010 os-gi_flex-fornaciari
Apache conna2010 os-gi_flex-fornaciari
Apache conna2010 os-gi_flex-fornaciari
Apache conna2010 os-gi_flex-fornaciari
Apache conna2010 os-gi_flex-fornaciari
Apache conna2010 os-gi_flex-fornaciari
Apache conna2010 os-gi_flex-fornaciari
Apache conna2010 os-gi_flex-fornaciari
Apache conna2010 os-gi_flex-fornaciari
Apache conna2010 os-gi_flex-fornaciari
Apache conna2010 os-gi_flex-fornaciari
Apache conna2010 os-gi_flex-fornaciari
Apache conna2010 os-gi_flex-fornaciari
Apache conna2010 os-gi_flex-fornaciari
Apache conna2010 os-gi_flex-fornaciari
Apache conna2010 os-gi_flex-fornaciari
Apache conna2010 os-gi_flex-fornaciari
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Apache conna2010 os-gi_flex-fornaciari

1,479

Published on

Au cours de sa conférence, François expliquera comment concevoir une application avec OSGi et Flex et comment architecturer une telle application de manière à ce que les évolutions futures …

Au cours de sa conférence, François expliquera comment concevoir une application avec OSGi et Flex et comment architecturer une telle application de manière à ce que les évolutions futures n'entraînent pas une interruption totale de service.

Pour cela, il présentera les différents moyens de communication entre le client Flex et le back-end OSGi. A cette occasion, il établira une comparaison rapide entre les différentes briques logicielles open source permettant d’intégrer ces deux technologies.

Puis, il montrera comment une application Flex peut être découpée en un ensemble de sous applications qui pourront être chargées ou déchargées à chaud grâce aux mécanismes de déploiement offerts par OSGi.

Published in: Technology, Education
1 Comment
0 Likes
Statistics
Notes
  • Au cours de sa conférence, François expliquera comment concevoir une application avec OSGi et Flex et comment architecturer une telle application de manière à ce que les évolutions futures n'entraînent pas une interruption totale de service.

    Pour cela, il présentera les différents moyens de communication entre le client Flex et le back-end OSGi. A cette occasion, il établira une comparaison rapide entre les différentes briques logicielles open source permettant d’intégrer ces deux technologies.

    Puis, il montrera comment une application Flex peut être découpée en un ensemble de sous applications qui pourront être chargées ou déchargées à chaud grâce aux mécanismes de déploiement offerts par OSGi.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Be the first to like this

No Downloads
Views
Total Views
1,479
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
14
Comments
1
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Building complex and modular RIAs with OSGi ™ and Flex ® francois.fornaciari@zenika.com www.zenika.com
  • 2. Content • Introduction • OSGi™ and Flex® interactions • Application modularization • Demo • Conclusion 2ApacheCon NA 2010 - François Fornaciari
  • 3. • Java EE / RIA consultant and trainer • Technical leader on the new temporary staff search engine at Manpower • Board member of the OSGi™ Users’ Group France • Over the last 4 years • Participation in the refactoring of the new version of JOnAS based on OSGi™ 3ApacheCon NA 2010 - François Fornaciari Bio
  • 4. What is Flex ® (1/2) • Framework for building RIA • Flash technology • Flash Player (VM) • Free Software Development Kit (SDK) • Strong integration with Java • Tooling • Flash Builder™ : IDE based on Eclipse • IntelliJ IDEA 4ApacheCon NA 2010 - François Fornaciari
  • 5. What is Flex ® (2/2) • MXML: XML-based language • ActionScript: ECMAScript-compliant scripting • Library of pre-built components • Compiler: create SWFs from MXML/ActionScript 5ApacheCon NA 2010 - François Fornaciari
  • 6. MXML • XML-based language • Declarative way to build applications <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx"> <s:Panel> <s:Label text="Label" /> <s:Button label="Button" /> </s:Panel> </s:Application> 6ApacheCon NA 2010 - François Fornaciari
  • 7. ActionScript • Core of the Flex® Framework • ECMAScript-compliant scripting • Familiar syntax package com.zenika.flex { public class MyClass interface MyInterface { public function MyClass() { } public function doSomething():String { } } } 7ApacheCon NA 2010 - François Fornaciari
  • 8. What is OSGi ™ • OSGi™ framework specifications (4.2) • Core Specification • Compendium Specification • Enterprise Specification • A module system and service platform for the Java programming language 8ApacheCon NA 2010 - François Fornaciari
  • 9. Purpose • Presentation of the main design patterns for building complex and modular applications with OSGi™ and Flex® • Two axes • Communication between Flex® and OSGi™ • Application modularization 9ApacheCon NA 2010 - François Fornaciari
  • 10. General architecture Flex® OSGi™ Framework Client (browser) Server (Java) HTTPService WebService RemoteObject Producer Consumer SWFApplication SWFModule SWFModule Bundle Bundle Bundle 10ApacheCon NA 2010 - François Fornaciari
  • 11. Handling remote calls • HTTPService, WebService, Remote Objects, Consumer/Producer • Asynchronous calls • Result, Fault or Message handlers • Arguments and result types • Strongly typed or generic objects • XML format • Properties • URL, destination, endpoint, id, … 11ApacheCon NA 2010 - François Fornaciari
  • 12. Service call example private function callService():void { var service:MyService = new MyService(destination); service.addEventListener(ResultEvent.RESULT, onResult); service.addEventListener(FaultEvent.FAULT, onFault); service.send(); } private function onResult(event:ResultEvent):void { var result:MyObject = event.result as MyObject; ... } private function onFault(event:FaultEvent):void {...} 12ApacheCon NA 2010 - François Fornaciari
  • 13. Accessing web services (1/2) • “Non-OSGi™ ” services • Flex consumer objects • HTTPService • Supported methods: GET | POST • HEAD | OPTIONS | PUT | TRACE | DELETE only through the server-based proxy service • WebService • Provides access to SOAP-based web services on remote servers 13ApacheCon NA 2010 - François Fornaciari
  • 14. Accessing web services (2/2) • Expose OSGi™ services through the “Remote Services Specification” • Development of OSGi™ standard services • Service properties for defining • SOAP-based services • RESTful JAXRS-based endpoints • Implementation: Distributed OSGi™ • Sub-project of Apache CXF 14ApacheCon NA 2010 - François Fornaciari
  • 15. Accessing OSGi ™ services • In a transparent way • Two communication types • RemoteObject • Simple call to an existing OSGi™ service • Strongly-typed arguments and result or … • … generic objects • Producer/Consumer • Topic subscription 15ApacheCon NA 2010 - François Fornaciari
  • 16. AMF Protocol • Action Message Format (v3) • Binary format used to serialize ActionScript objects • Optimized transferred data amount • Primarily used to exchange data between Adobe Flash applications and remote services • Specification since 2007 • Supported by many server-side languages and technologies: Java™ , .NET, PHP, … 16ApacheCon NA 2010 - François Fornaciari
  • 17. Integration frameworks • Existing open source frameworks • AMF3 for OSGi™ (Christopher Brind) • Robust, OSGi™ compliant and easy to use • Only 3 bundles to deploy Name OSGi™ support RemoteObject OSGi ™ EventAdmin bridge AMF3 for OSGi™ (LGPL) yes yes yes GraniteDS (LGPL) yes (prototype) yes (unstable) no Spring Flex (ASL) yes (Virgo) yes no 17ApacheCon NA 2010 - François Fornaciari
  • 18. AMF3 for OSGi ™ • OSGi™ bundle description • uk.co.arum.osgi.amf3 • Serialization-deserialization of AMF3 objects • uk.co.arum.osgi.amf3.http • Registers an HTTP servlet that is capable of reading and writing AMF3 objects • uk.co.arum.osgi.amf3.flex.remoting • Implements FlexRemoting over HTTP • Provides support for channel based messaging 18ApacheCon NA 2010 - François Fornaciari
  • 19. Apache Felix projects (1/2) • Core of the server-side application • Framework • File Install • Directory based OSGi™ management agent • Used internally by AMF3 for OSGi ™ • Declarative Service (SCR) • Event Admin Service • Log Service • HTTP Service (Jetty) 19ApacheCon NA 2010 - François Fornaciari
  • 20. Apache Felix projects (2/2) • Application-specific projects • Event Admin Service • OSGi™ EventHandler receives messages from Flex Producers • Messages posted by the OSGi™ EventAdmin service are received by Flex Consumers • iPOJO • Used to declare OSGi™ components • Support of annotations • Extensible handlers 20ApacheCon NA 2010 - François Fornaciari
  • 21. Event Admin • Based on the Publish-Subscribe pattern Publisher EventAdmin « service » postEvent (topics) EventHandler « service » handleEvent (topics) 21ApacheCon NA 2010 - François Fornaciari
  • 22. Publishing OSGi ™ services • Additional service property • AMF_SERVICE_NAME • Instantiated with the service class name @Component(name="MyService") @Provides public class MyServiceImpl implements MyService { @ServiceProperty(name="AMF_SERVICE_NAME") private String serviceName = MyService.class.getName(); ... } 22ApacheCon NA 2010 - François Fornaciari
  • 23. Consuming OSGi ™ services • Flex RemoteObject • Endpoint: AMF3 servlet path ex: http://localhost:8080/amf3osgi • Destination: OSGi™ service class name <s:RemoteObject id="myService" endpoint="/amf3osgi" destination="com.zenika.service.MyService"> <s:method name="doSometing" result="onResult(event)" fault="onFault(event)" /> </s:RemoteObject> 23ApacheCon NA 2010 - François Fornaciari
  • 24. Producer / Consumer (1/2) • Bridge between Flex® events and EventAdmin service • Elements attributes • Consumer: callback when a message is received • Consumer and producer: destination <s:Consumer message="onMessage(event)" destination="events" fault="onFault(event)" /> <s:Producer destination="events" fault="onFault(event)" /> 24ApacheCon NA 2010 - François Fornaciari
  • 25. Producer / Consumer (2/2) • Destination configuration • Set of channels used to send messages to a target destination • QoS: many channels for network failure tolerance var channelSet:ChannelSet = new ChannelSet(); var channel:AMFChannel = new AMFChannel("events","/amf3osgi"); channel.pollingInterval = 5000; channelSet.addChannel(channel); consumer.channelSet = channelSet; 25ApacheCon NA 2010 - François Fornaciari
  • 26. Sending messages (1/2) • From OSGi™ • PublishedObjectEvent (channelID, object) • Extends org.osgi.service.event.Event @Bind public void bindEventAdmin(EventAdmin eventAdmin) { this.eventAdmin = eventAdmin; } private void sendMessage() { eventAdmin.postEvent( new PublishedObjectEvent("events", object)); } 26ApacheCon NA 2010 - François Fornaciari
  • 27. Sending messages (2/2) • From Flex® • Sending AsyncMessage through the producer • Body: object to send var message:AsyncMessage = new AsyncMessage(); message.body = messageObject; producer.send(message); 27ApacheCon NA 2010 - François Fornaciari
  • 28. Receiving message (1/2) @Component(name="FlexEventHandler") @Provides public class FlexEventHandler implements EventHandler { @ServiceProperty(name="event.topics") private String eventTopics = ".../amf3/flex/remoting/events/PublishedObjectEvent"; @ServiceProperty(name="event.filter") private String eventFilter = "(channel.id=events)"; public void handleEvent(Event event) { if (event instanceof PublishedObjectEvent) { ...} } } 28ApacheCon NA 2010 - François Fornaciari
  • 29. Receiving message (2/2) private function start():void { consumer.subscribe(); } private function stop():void { consumer.unsubscribe(); } private function onMessage(event:MessageEvent):void { var msg:MyMessage = event.message.body as MyMessage; ... } • Start / cancel subscription • Message: typed-object 29ApacheCon NA 2010 - François Fornaciari
  • 30. Flex ® modulary • Flex® modules • SWF files that can be loaded and unloaded at runtime by an application • Free up memory and resources if needed • Better encapsulation • No need to load all modules at startup • Smaller initial download size • Cannot be run independently 30ApacheCon NA 2010 - François Fornaciari
  • 31. Main goal • OSGi™ is the Java modularity • Flex® supports modules • How can we build a complete modular application? 31ApacheCon NA 2010 - François Fornaciari
  • 32. Creating modules • “Module” as root element <mx:Module xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" implements="...api.ModuleInterface" creationComplete="start()"> <fx:Script> <![CDATA[ public function start():void {...} public function stop():void {...} ]]> </fx:Script> <s:Label text="Label" /> </mx:Module> 32ApacheCon NA 2010 - François Fornaciari
  • 33. Module lifecycle • Start method is called when the module is loaded • Stop method is called before unloading the module • Common interface between the application and the module package com.zenika.systemmanager.api { public interface ModuleInterface { function stop():void; } } 33ApacheCon NA 2010 - François Fornaciari
  • 34. Module Bundle Packaging Application Bundle UI (SWF) JAVA (OSGi™ ) • Each bundle contains • Business logic • OSGi™ services • User interface • SWF file • Building tools like Maven, Ant or Gradle can ease the packaging phase manifest manifest 34ApacheCon NA 2010 - François Fornaciari UI (SWF) JAVA (OSGi™ )
  • 35. Application bundle • User Interface skeleton • Able to retrieve list of available modules • OSGi™ service for getting module URLs • Flex® client notified when a module appears or disappears • Flex consumer is aware of events posted by the EventAdmin 35ApacheCon NA 2010 - François Fornaciari
  • 36. Technical view (1/4) • At startup, registers bundle resources by using the HTTP Service • Main SWF, HTML files, … • Gets registered modules and listens to bundle arrival / departure • Implementation of the extender pattern 36ApacheCon NA 2010 - François Fornaciari
  • 37. Technical view (2/4) • Extender pattern • Use of a BundleTracker in order to be notified of ACTIVE bundles declaring Flex® modules • MANIFEST.MF : • SWF-Modules: [path]=[SWF name] • Register / unregister SWFs into path • Creation of a resource-aware context • Post event to notify Flex® client 37ApacheCon NA 2010 - François Fornaciari
  • 38. Technical view (3/4) var modules:ArrayCollection = event.result as ArrayCollection; for each(var module:SWFModule in modules) { var loader:ModuleLoader = new ModuleLoader(module.url); // Register event listeners loader.addEventListener(ModuleEvent.READY, handleModuleReady); loader.addEventListener(ModuleEvent.ERROR, handleModuleError); // Start the module loading loader.load(); } 38ApacheCon NA 2010 - François Fornaciari
  • 39. Technical view (4/4) • After bundle undeployment • Call the stop method • Stop properly on-going processes • Warning: OSGi™ services have already been unregistered • Unload associated modules • Free-up memory and resources 39ApacheCon NA 2010 - François Fornaciari
  • 40. Module bundle • Autonomous module • Contains its own UI and logic • Good isolation • Flex® modules have to be based upon their own OSGi™ services • Avoid using unregistered services or managing service dynamicity on the client- side 40ApacheCon NA 2010 - François Fornaciari
  • 41. Demo
  • 42. Conclusion (1/2) • Flex® • Development of rich interfaces • Native support of modules • Loading / unloading modules at runtime • OSGi™ • The Dynamic Module System for Java™ • Service Oriented Architecture • Service availability to Flex® 42ApacheCon NA 2010 - François Fornaciari
  • 43. Conclusion (2/2) • Seamless communications • Asynchronous remote calls • Notifications • Integration • Application: set of autonomous bundles with their own interface and business logic 43ApacheCon NA 2010 - François Fornaciari
  • 44. References • OSGi™ : www.osgi.org • Apache Felix: felix.apache.org • Adobe Flex® : www.adobe.com/fr/products/flex • AMF3 for OSGi™ : www.arum.co.uk/amf3osgi.php 44ApacheCon NA 2010 - François Fornaciari
  • 45. Questions 45ApacheCon NA 2010 - François Fornaciari francois.fornaciari@zenika.com www.zenika.com

×