Upload
milen-dyankov
View
129
Download
1
Tags:
Embed Size (px)
Citation preview
Leveraging OSGi to Create
Extensible Plugins for Liferay 6.2
Eduardo García edupgv@Julio Camarero juliocamarero@Core Engineers at Liferay, Inc
Milen Dyankov milendyankov@Senior Consultant at Liferay, Inc
OSGi is about
modularity
... and Liferay already
allowed for
modularity ...
PortletsPortlets
HooksHooks
ThemesThemes
LayoutsLayouts
......
... but modules are
not modular !!!
OSGi brings into
Liferay
modularity of
modules !!!
...
Microservices
Supported in
Liferay marketplace
Let’s see an example…
A Shipping Cost Calculator
https://github.com/epgarcia/liferay-plugins/commits/LRNAS2014.OSGI
final price
common features for all countries
specific features for each country
we could…
Develop a very complex and laborious application that covers all possible cases
Release a new version every time any shipping cost
algorithm changes or we add new countries
Develop a simple core application that covers only the common features
Make the application extensible with country modules“ ”
If a shipping algorithm changes, our core application remains the same and only that specific
extension must be changed
will be the future of all
Liferay 7 applications ...
... because it’s all advantages!
improves
maintainability
maximizes
reusability
simplification of
releases(independent)
new market
opportunities(extensions)
App
ver. 1
App
ver. 2
App
ver. 3
time
size
...
App
ver. 1
App
ver. 2
time
size
...
ext 1
ver. 1
ext 1
ver. 2
ext 1
ver. 3
ext 2
ver. 3
ext 2
ver. 1
ext 2
ver. 2
ext 3
ver. 1
ext 1
ver. 4
ext 3
ver. 2
But OSGi makes this
possible already in
Liferay 6.2 !
In fact, Audience Targeting,
the first Liferay 6.2 application
following this approach, is already
available on Marketplace!
Sounds great,
but I have no idea
about OSGi…
OSGi basic concepts
in 3 minutes!
(or what you need to understand
before we continue)
OSGi bundles (this is what our plug-ins are)
manifestmanifestmanifestmanifest manifest
Manifest-Version: 1.0Bundle-ManifestVersion: 2Bundle-Name: Shipping ImplBundle-SymbolicName: com.liferay.shipping.implBundle-Vendor: Liferay, Inc.Bundle-Version: 1.0.0Private-Package: com.liferay.shipping.impl.model,com.liferay.shipping.impl.utilRequire-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.6))". . .
#1
#1 OSGi bundles (this is what our plug-ins are)
manifestmanifestmanifestmanifest manifest
Manifest-Version: 1.0Bundle-ManifestVersion: 2Bundle-Name: Shipping ImplBundle-SymbolicName: com.liferay.shipping.implBundle-Vendor: Liferay, Inc.Bundle-Version: 1.0.0Private-Package: com.liferay.shipping.impl.model,com.liferay.shipping.impl.utilRequire-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.6))". . .
All modern build tools (Ant, Maven, Gradle, ...)
can build OSGi bundles!
So can Liferay SDK !
Package dependencies (this is how we describe what we provide and expect)
Import-Package: com.liferay.shipping.api.model,com.liferay.shipping.api.util,com.liferay.portal.kernel.io.unsync;resolution:=optional,com.liferay.portal.kernel.util;resolution:=optional,freemarker.cache;resolution:=optional,freemarker.template;resolution:=optional
Export-Package: com.liferay.shipping.api.model;version="1.0.0",com.liferay.shipping.api.util;version="1.0.0"
manifestmanifestmanifestmanifest manifestEXPORT EXPORT
#2
manifestmanifestmanifestmanifest manifestEXPORT EXPORT
Package dependencies (this is how we describe what we provide and expect)
Import-Package: com.liferay.shipping.api.model,com.liferay.shipping.api.util,com.liferay.portal.kernel.io.unsync;resolution:=optional,com.liferay.portal.kernel.util;resolution:=optional,freemarker.cache;resolution:=optional,freemarker.template;resolution:=optional
Export-Package: com.liferay.shipping.api.model;version="1.0.0",com.liferay.shipping.api.util;version="1.0.0"
#2
#2
manifestmanifestmanifestmanifest manifestEXPORT EXPORT
Package dependencies (this is how we describe what we provide and expect)
Import-Package: com.liferay.shipping.api.model,com.liferay.shipping.api.util,com.liferay.portal.kernel.io.unsync;resolution:=optional,com.liferay.portal.kernel.util;resolution:=optional,freemarker.cache;resolution:=optional,freemarker.template;resolution:=optional
Export-Package: com.liferay.shipping.api.model;version="1.0.0",com.liferay.shipping.api.util;version="1.0.0"
The BND tool (bnd.bndtools.org) can discover dependencies
and automatically generate export/import manifest headers!
Liferay SDK also allows you to use BND tool!
OSGi services (this is how we provide and consume functionality)
manifestmanifestmanifest manifest
OSGi service registry
Interface
Service 1
...
Service N
#3
OSGi services (this is how we provide and consume functionality)
manifestmanifestmanifest
OSGi service registry
Interface
Service 1
...
Service N
REGISTER
REGISTER
USE
manifest
#3
#3 OSGi services (this is how we provide and consume functionality)
manifestmanifestmanifest
OSGi service registry
Interface
Service 1
...
Service N
REGISTER
REGISTER
USE
manifest
There are number of component frameworks on top of OSGi
(Declarative Services and Blueprint being part of the specs)
which greatly simplify the usage of services!
Sounds great,
but how OSGi fits
into Liferay ?
Application server / Servlet container
Liferay 6.2
Liferay CORE
Portlet Portlet...
Application server / Servlet container
Liferay 6.2
Portlet application
Portlet application
Portlet application
Portlet application
Liferay CORE
Portlet Portlet...
Application server / Servlet container
Liferay 6.2
Portlet application
Portlet application
Portlet application
Portlet application
Liferay CORE
Portlet Portlet
OSGi container
...
Application server / Servlet container
Liferay 6.2
Portlet application
Portlet application
Portlet application
Portlet application
Liferay CORE
Portlet Portlet
OSGi container
OSGi core services
HTTP Service Configuration Admin Service
...
...Liferay core OSGi services
Application server / Servlet container
Liferay 6.2
Portlet application
Portlet application
Portlet application
Portlet application
Liferay CORE
Portlet Portlet
OSGi container
API Bundle
API Bundle
Service Bundle
Extension bundle
Service Bundle
Portlet Bundle
Extension Bundle
Portlet Bundle
OSGi core services
HTTP Service Configuration Admin Service
...
...Liferay core OSGi services
Application server / Servlet container
Liferay 6.2
Portlet application
Portlet application
Portlet application
Portlet application
Liferay CORE
Portlet Portlet
OSGi container
API Bundle
API Bundle
Service Bundle
Extension bundle
Service Bundle
Portlet Bundle
Extension Bundle
Portlet Bundle
OSGi core services
HTTP Service Configuration Admin Service
...
...Liferay core OSGi services
In Liferay 6.2 portlets inside OSGi
container have certain limitations!
shipping-api
shipping-impl
shipping-web
Shipping application
shipping-extension-europe
shipping-extension-usa
Shipping applicationextensions
Shipping application modules (bundles)
There is an extra step in Liferay 6.2
as not all dependencies are
provided!
You will NOT need to do this in
Liferay 7!
#0 Shipping application modules (bundles)
#1 Shipping application modules (bundles)
#1 Shipping application modules (bundles)
#1 Shipping application modules (bundles)
#2 Shipping application modules (bundles)
#2 Shipping application modules (bundles)
#2 Shipping application modules (bundles)
#2 Shipping application modules (bundles)
#2 Shipping application modules (bundles)
#3 Shipping application modules (bundles)
This approach is for Liferay 6.2 only !
It will change in Liferay 7 !
This approach is for Liferay 6.2 only !
It will change in Liferay 7 !
#3 Shipping application modules (bundles)
Our main application
is ready!
Let's try it !
#4 Shipping application modules (bundles)
#4 Shipping application modules (bundles)
Let's try it !
#5 Shipping application modules (bundles)
#5 Shipping application modules (bundles)
Let's try it !
Where you go from
here?
Send feedback!
Build your own OSGi modules
Learn more about OSGi
Try the samples yourselfhttps://github.com/epgarcia/liferay-plugins/commits/LRNAS2014.OSGI
Thank you!
http://www.liferay.com/web/milen.dyankov/
@milendyankov@LiferayPL
http://www.liferay.com
@Liferay
http://www.facebook.com/Liferay