development MODULARITY PATTERNS USING OSGI Rafik HARABI - - PowerPoint PPT Presentation

development
SMART_READER_LITE
LIVE PREVIEW

development MODULARITY PATTERNS USING OSGI Rafik HARABI - - PowerPoint PPT Presentation

Liferay portal modern architecting and development MODULARITY PATTERNS USING OSGI Rafik HARABI INNOVSQUARE EclipseCon Europe 2015 Who am I ? Software Architect and Liferay Specialist. Building portal using Liferay since 2009 (more


slide-1
SLIDE 1

Liferay portal modern architecting and development

MODULARITY PATTERNS USING OSGI

INNOVSQUARE Rafik HARABI EclipseCon Europe 2015

slide-2
SLIDE 2

Who am I ?

 Software Architect and Liferay Specialist.  Building portal using Liferay since 2009 (more then 15 portals).

@innovsquare linkedin.com/rafik.harabi

INNOVSQUARE

https://github.com/innovsquare rafik.harabi@innovsquare.com

EclipseCon Europe 2015

slide-3
SLIDE 3

Who are you ?

Before we get started...

We are building portals at work, We are building Portal using Liferay, We have heard about Liferay Portal and we want to learn more.

INNOVSQUARE EclipseCon Europe 2015

slide-4
SLIDE 4

This talk ...

Liferay monolithic architecture Modularity promises Liferay 7 modular architecture Building modules in Liferay 7: the OSGi way Customizing & extending modules Lessons learned & takeaways

INNOVSQUARE EclipseCon Europe 2015

slide-5
SLIDE 5

A few words about Liferay

Open source leader Portal that implement Portlet API 1.0 (JSR 168) and Portlet 2.0 (JSR 286) Lines of Code : 5. 1 Millions  About 70 Out of The Box Portlets Features: Web Content Management, Document Management, Workflow, Search, Enterprise Collaboration & Social Networking, … A marketplace: 490 apps http://liferay.com/marketplace

INNOVSQUARE EclipseCon Europe 2015

slide-6
SLIDE 6

A few words about Liferay

Portal Instance Site Portal Instance Site Site Site Site Site Portlets Instances INNOVSQUARE EclipseCon Europe 2015 System

slide-7
SLIDE 7

Liferay monolithic architecture

Portlet Application Liferay Portal WAR Core Services Web Content Management Wiki Blog Application Server Portlet Application Portlet Application INNOVSQUARE EclipseCon Europe 2015 …

slide-8
SLIDE 8

Liferay class loading hierarchy

JDK Class Loaders Application Server Class Loaders Portal Class Loader Plugin A Plugin B Plugin C Service A Service B Service C Portal Services API Portal Services Impl INNOVSQUARE EclipseCon Europe 2015 WAR WAR WAR WAR

slide-9
SLIDE 9

Liferay class loading hierarchy

JDK Class Loaders Application Server Class Loaders Portal Class Loader Plugin A Plugin B Plugin C Service A Service B Service C Portal services api INNOVSQUARE EclipseCon Europe 2015 WAR WAR WAR WAR Portal Services Impl

slide-10
SLIDE 10

Liferay class loading hierarchy

JDK Class Loaders Application Server Class Loaders Portal Class Loader Plugin A Plugin B Plugin C Service A Service B Service C Portal services api INNOVSQUARE EclipseCon Europe 2015 Portal Services Impl WAR WAR WAR WAR

slide-11
SLIDE 11

Liferay class loading hierarchy

JDK Class Loaders Application Server Class Loaders Portal Class Loader Plugin A Plugin B Plugin C Service A Service B Service C Portal services api INNOVSQUARE EclipseCon Europe 2015 Portal Services Impl WAR WAR WAR WAR

slide-12
SLIDE 12

Portal customization capabilities

* Liferay Buyer’s Checklist INNOVSQUARE EclipseCon Europe 2015

slide-13
SLIDE 13

Portal customization capabilities

INNOVSQUARE EclipseCon Europe 2015 Extend menu Add Entry Customize

slide-14
SLIDE 14

Portal customization capabilities

INNOVSQUARE EclipseCon Europe 2015 Extend menu Add Entry Customize

Customization should be a first class citizen

slide-15
SLIDE 15

Liferay releases vs Business agility

2012 2013 2014 2015 2016 6.1.0 6.2.0 6.2.1 6.2.2 > 1 year

Business agility Recurrent incremental change services building and delivery are going from few months to few weeks to few days

INNOVSQUARE EclipseCon Europe 2015

slide-16
SLIDE 16

Limits of the Liferay monolithic architecture

Invoking service between plugins /portlets:

No standard solution Technical debt: hard to maintain

An All-in-One Package

One big war of 230 MB Cannot deploy only what is needed: minimal version Cannot manage portal features separately

 Deployment depends on app server Scalability: only one dimension scaling Marketplace: overriding JSP creates conflicts

INNOVSQUARE EclipseCon Europe 2015

slide-17
SLIDE 17

Modularity promises

 Portlet independent versioning from Liferay Portal

OSGi semantic versioning

 Business Agility:

More frequent delivery of new features or improvements Easy and decoupled development process.

Contract first approach / Loose coupling Dynamic extensions

INNOVSQUARE INNOVSQUARE EclipseCon Europe 2015

slide-18
SLIDE 18

Modularity promises

Resiliency /design for failure Enhance Security : bundle isolation/seal Patching : just replace the bundle  Microservices: small and independent (both for development and deployment)

Make your product Powerfully customizable

INNOVSQUARE EclipseCon Europe 2015

slide-19
SLIDE 19

Modularity challenges

Communications challenges => OSGi provides in VM-microservices. Zero configuration. How do I manage the configuration ? OSGi Framework provides Configuration Admin service.

INNOVSQUARE EclipseCon Europe 2015

slide-20
SLIDE 20

From monolithic to microservices

INNOVSQUARE EclipseCon Europe 2015 Core Services (ldap auth, messaging, cache …) Wiki Blog Liferay Portal WAR OSGi Container ldap auth messaging cache OSGi Service Registry Blog UI Blog API Blog Service Wiki UI Wiki API Wiki Service …

slide-21
SLIDE 21

Liferay 7 modular architecture

OSGI Container Module Module Module App App App App Liferay Portal Core (not yet extracted) Log Service Http Service JSP Support Config Admin INNOVSQUARE EclipseCon Europe 2015 Application Server

slide-22
SLIDE 22

Liferay 7 modular architecture

Statistics (based on Liferay 7 alpha1): Number of extracted bundles: 326 Number of integration points > 200

INNOVSQUARE EclipseCon Europe 2015

slide-23
SLIDE 23

Liferay module framework

base path of the module framework Module bundles Portal core’s services bundles framework persistence directory

INNOVSQUARE EclipseCon Europe 2015

Liferay’s module framework bundles Testing bundles Bundles to start with the module framework Test utility Tools

slide-24
SLIDE 24

Liferay module framework

Liferay Portal OSGi Container OSGi Service Registry Bundle A Bundle B Bundle C

IndexPostProcessorWrapper ServiceRegistryWrapper Liferay custom bundle registration Utility (Service Tracker)

Hot deploy listeners Module deploy folder INNOVSQUARE EclipseCon Europe 2015

Liferay Service Registry Liferay Service Tracker

Liferay Core’s Services

slide-25
SLIDE 25

Liferay module framework

 Liferay 7 owns the deployment Lifecycle: no longer relaying on application server for deployment. Dynamically manage module lifecycles. Liferay modules are versioned and explicitly declare dependencies.

INNOVSQUARE EclipseCon Europe 2015

slide-26
SLIDE 26

Building modules with OSGi

 Liferay support various OSGi framework:  OSGi API Blueprint iPOJO OSGi Declarative Services

INNOVSQUARE EclipseCon Europe 2015

slide-27
SLIDE 27

Building modules with OSGi

Which technology is recommended by Liferay ?  Liferay recommendation is to use declarative services.

INNOVSQUARE EclipseCon Europe 2015

slide-28
SLIDE 28

Portlets using Declaratives Services

6.2 and earlier 7.0 portlet.xml liferay-portlet.xml liferay-display.xml XML Configuration Annotation (DS) Portlet as a service INNOVSQUARE EclipseCon Europe 2015

slide-29
SLIDE 29

Modularize the service builder

Service builder : Liferay service layer code scaffolding

6.2 and earlier 7.0 API (jar) Service Impl Portlet UI (JSP, …) Portlet Application (WAR) Bundles (Jars) Service Registry API Service Test INNOVSQUARE EclipseCon Europe 2015

slide-30
SLIDE 30

Sharing services between applications

 Zero Effort, Zero Configuration ! All what you need is to publish your services in the OSGi service registry.

Service A Service B Service C Service D Portlet 1 Portlet 2 Portlet 3 Service Registry INNOVSQUARE EclipseCon Europe 2015

slide-31
SLIDE 31

Overriding Liferay’s services

INNOVSQUARE EclipseCon Europe 2015

slide-32
SLIDE 32

Overriding core services

deploy a service with a higher service ranking than the original Using OSGi service ranking : property= {"service.ranking:Integer=100"}

INNOVSQUARE EclipseCon Europe 2015

slide-33
SLIDE 33

Portlet Filter

6.2 and earlier 7.0 Portlet Application (WAR) Portlet Filter

  • Defined inside the portlet app !
  • Hard to implement filter for OTB portlets

Bundles (Jars) INNOVSQUARE EclipseCon Europe 2015

slide-34
SLIDE 34

Portlet Filter

6.2 and earlier 7.0 Portlet Application (WAR) Portlet Filter

  • Defined inside the portlet app !
  • Hard to implement filter for OTB portlets

Portlet Filter Bundles (Jars) Portlet INNOVSQUARE EclipseCon Europe 2015

slide-35
SLIDE 35

Split into modules : Form Builder as example

INNOVSQUARE EclipseCon Europe 2015

slide-36
SLIDE 36

Split into microservices: Form Builder as example

6.2 (Monolithic) 7 (OSGI) INNOVSQUARE EclipseCon Europe 2015

slide-37
SLIDE 37

Split into microservices: Form Builder as example

com.liferay.dynamic.data.mapping.type.checkbox.jar com.liferay.dynamic.data.mapping.type.radio.jar com.liferay.dynamic.data.mapping.type.text.jar com.liferay.dynamic.data.mapping.type.select.jar INNOVSQUARE EclipseCon Europe 2015

slide-38
SLIDE 38

Split into microservices: build for extension

My custom type INNOVSQUARE EclipseCon Europe 2015

slide-39
SLIDE 39

Portal Configuration API

Available Configuration for Liferay 6: Portal properties files:

don’t have types restart on every change

Portal.properties file:

One big file with 10000 lines

Portlets preferences:

XML based don’t support types

INNOVSQUARE EclipseCon Europe 2015

slide-40
SLIDE 40

Portal Configuration API

Configuration management based on :

 OSGi Configuration Admin OSGi MetaType

Properties are typed Properties are well separated by modules Dynamically load properties on runtime

INNOVSQUARE EclipseCon Europe 2015

slide-41
SLIDE 41

Portal Configuration API

INNOVSQUARE EclipseCon Europe 2015

slide-42
SLIDE 42

Portal Configuration API - Scopes

Portal Instance Site Portal Instance Site Site Site Site Site Portlets System INNOVSQUARE EclipseCon Europe 2015

slide-43
SLIDE 43

Portal Configuration API –Customize properties

Customize properties using Configuration Admin portlet:

INNOVSQUARE EclipseCon Europe 2015

slide-44
SLIDE 44

Portal Configuration API –Customize properties

 Locate the Configuration class : annotated with :  Create a .cfg file with the id:  Add properties with the new values: admin.email.from.address=contentmanager@mycompany.com admin.email.from.name=contentmanager@mycompany.com  Drop it into the deploy folder of Liferay

INNOVSQUARE EclipseCon Europe 2015

slide-45
SLIDE 45

UI customization & extension

extensible user interfaces using the already built in mechanisms into the platform.  Dynamic include using the Liferay extension points : <liferay-util:dynamic-include key=“com.liferay.frontend.editors.web"/>

INNOVSQUARE EclipseCon Europe 2015

slide-46
SLIDE 46

Customizing UI Components

Why: provide a better configuration for your needs.

INNOVSQUARE EclipseCon Europe 2015

slide-47
SLIDE 47

Customizing UI Components

INNOVSQUARE EclipseCon Europe 2015

slide-48
SLIDE 48

Dev Tools

 BND Tools:

Robust OSGi bundles build tools.

 Blade Tools: Liferay tools to build modules https://github.com/gamerson/blade.tools  Liferay provide also a set of plugins to build custom modules: com.liferay.portal.tools.sample.sql.builder com.liferay.portal.tools.service.builder com.liferay.portal.tools.upgrade.table.builder com.liferay.portal.tools.wsdd.builder

INNOVSQUARE EclipseCon Europe 2015

slide-49
SLIDE 49

Useful Resources

Liferay developer network: https://dev.liferay.com/develop/ Liferay DevCon 2015: https://www.liferay.com/fr/web/events2015/devcon/recap Liferay Blade project: https://github.com/rotty3000/blade Liferay Blade Tools: https://github.com/gamerson/blade.tools

INNOVSQUARE INNOVSQUARE EclipseCon Europe 2015

slide-50
SLIDE 50

Conclusion – lessons learned

Be realistic & do it in steps: leaving Rome wasn't built in a day ! First step: In-VM microservices Choose robust tools and standards: OSGi is one of the best for java world.  Provide dev and migration tools :very important for your customers. Focus on Single Responsibility Principle (SRP)

INNOVSQUARE EclipseCon Europe 2015

slide-51
SLIDE 51

Conclusion – takeaways

 Each @Component can be replaced with your own. Reusable components: Taglibs, Item Selector, Portlet decorator … Customize and extend

INNOVSQUARE EclipseCon Europe 2015

slide-52
SLIDE 52

Questions ?

INNOVSQUARE EclipseCon Europe 2015

slide-53
SLIDE 53
slide-54
SLIDE 54

You want to learn more ?

2 talks by Ray Augé : Today : Tomorrow: