SlideShare uma empresa Scribd logo
1 de 52
Baixar para ler offline
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Maximize the power of OSGi in AEM
Carsten Ziegeler | David Bosschaert | Adobe R&D
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
About
cziegeler@apache.org @cziegeler
•  RnD Adobe Research Switzerland
•  Team Lead / Founder of Adobe Granite
•  Member of the Apache Software Foundation
•  VP of Apache Felix and Sling
•  OSGi Core Platform and Enterprise Expert Groups
•  Member of the OSGi Board
•  Book / article author, technical reviewer, conference speaker
2
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
About
David Bosschaert davidb@apache.org @davidbosschaert
•  R&D Adobe Ireland
•  Co-chair OSGi Enterprise Expert Group
•  Apache Felix, Aries PMC member and committer
•  … other opensource projects
•  Cloud and embedded computing enthusiast
3
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Today’s contents
§  Asynchronous OSGi Services
§  Declarative Services
§  with Configuration Admin
§  HTTP Whiteboard
§  Subsystems
4
Image by Joadl: Lyme_Regis_harbour_02b on wikipedia
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Async programming: OSGi Promises
5
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
OSGi Promises
Javascript-style promises, can be used with Java 5
or later.
§  Asynchronous chaining
§  Very simple programming model
Promises can be used outside of OSGi framework
	
  
Recommended implementation:
https://svn.apache.org/repos/asf/aries/trunk/async
6
public	
  class	
  PromisesTest	
  {	
  
	
  
	
  	
  	
  	
  public	
  static	
  void	
  main(String...	
  args)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  System.out.println("Starting");	
  
	
  	
  	
  	
  	
  	
  	
  	
  takesLongToDo(21)	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  .then(p	
  -­‐>	
  intermediateResult(p.getValue()))	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  .then(p	
  -­‐>	
  finalResult(p.getValue()));	
  
	
  	
  	
  	
  	
  	
  	
  	
  System.out.println("Async	
  computation	
  kicked	
  off");	
  
	
  	
  	
  	
  }	
  
	
  
	
  	
  	
  	
  public	
  static	
  Promise<Long>	
  intermediateResult(Long	
  l)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  System.out.println("Intermediate	
  result:	
  "	
  +	
  l);	
  
	
  	
  	
  	
  	
  	
  	
  	
  return	
  takesLongToDo(l	
  *	
  2);	
  
	
  	
  	
  	
  }	
  
	
  
	
  	
  	
  	
  public	
  static	
  Promise<Void>	
  finalResult(Long	
  l)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  System.out.println("Computation	
  done.	
  Result:	
  "	
  +	
  l);	
  
	
  	
  	
  	
  	
  	
  	
  	
  return	
  Promises.resolved(null);	
  
	
  	
  	
  	
  }	
  
	
  
	
  	
  	
  	
  public	
  static	
  Promise<Long>	
  takesLongToDo(long	
  in)	
  {	
  
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
OSGi Services
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Brief intro to OSGi Services
§  Services are Java Objects (POJOs)
§  registered by Bundles
§  consumed by Bundles
§  “SOA inside the JVM”
§  Services looked up by type and/or custom filter
§  “I want a service that implements org.acme.Payment where location=US”
§  One or many
§  Dynamic! Services can be updated without taking down the consumers
§  OSGi Service Consumers react to dynamism
8
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Dynamic Service Selection
9
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Async Services
§  Take an existing OSGi Service …
§  … and make it async!
§  Or use an async-optimized one
§  Also works great with Remote Services
§  Recommended implementation:
https://svn.apache.org/repos/asf/aries/trunk/async
Normal service use:
	
  TimeConsumingService	
  tcs	
  =	
  ...	
  //	
  from	
  Service	
  Registry	
  
	
  System.out.println("Invoking	
  Big	
  Task	
  Synchronously...");	
  
	
  System.out.println("Big	
  Task	
  returned:	
  "	
  +	
  tcs.bigTask(1));	
  
	
  //	
  further	
  code	
  
10
§  Async service use
§  via mediator obtained from Async Service
	
  TimeConsumingService	
  tcs	
  =	
  ...	
  //	
  from	
  Service	
  Registry	
  
	
  Async	
  async	
  =	
  ...	
  //	
  Async	
  Service	
  from	
  Service	
  Registry	
  
	
  TimeConsumingService	
  mediated	
  =	
  async.mediate(	
  
	
  tcs,	
  TimeConsumingService.class);	
  
	
  	
  
	
  System.out.println("Invoking	
  Big	
  Task	
  Asynchronously...");	
  
	
  async.call(mediated.bigTask(1))	
  
	
  	
  	
  .then(p	
  -­‐>	
  bigTaskFinished(p.getValue()));	
  
	
  System.out.println("Big	
  Task	
  submitted");	
  
	
  
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Declarative Services
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
OSGi Preconceptions
12
No POJOs
Too slow
Dynamics not manageable
No dependency injection
Not suitable forthe enterprise
Notooling
?!
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
The Next Big Thing for AEM
13
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Building Blocks
§  Module aka Bundle
§  Services
§  Components
14
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Architecture
15
Game Servlet
GET
POST
HTML
Game Controller
Game Bundle
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Game Design
16
public enum Level {
EASY,
MEDIUM,
HARD
}
public interface GameController {
Game startGame(final String name,
final Level level);
int nextGuess(final Game status,
final int guess);
int getMax(final Level level);
}
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Implementation
17
@Component
public class GameControllerImpl implements GameController {
...
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Configuration
18
public @interface Config {
int easy_max() default 10;
int medium_max() default 50;
int hard_max() default 100;
}
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. 19
private Config configuration;
@Activate
protected void activate(final Config config) {
this.configuration = config;
}
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. 20
public int getMax(final Level level) {
int max = 0;
switch (level) {
case EASY : max = configuration.easy_max(); break;
case MEDIUM : max = configuration.medium_max(); break;
case HARD : max = configuration.hard_max(); break;
}
return max;
}
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Web?
21
@Component( service = Servlet.class ,
property="osgi.http.whiteboard.servlet.pattern=/game")
public class GameServlet extends HttpServlet {
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. 22
public class GameServlet extends HttpServlet {
@Reference
private GameController controller;
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. 23
No POJOs
Too slow
Dynamics not manageable
No dependency injection
Not suitable forthe enterprise
Notooling
✔
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. 24
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Semantic Versioning
§  Nice whitepaper on the OSGi homepage
§  Versioning policy for API/exported packages
§  OSGi versions: <major>.<minor>.<micro>.<qualifier>
§  Updating package versions:
§  Fix/patch (no API change) : update micro
§  Extend API (affects implementers, not clients) : update minor
§  API breakage: update major
25
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Recipe
§  OSGi Declarative Services (Compendium Chapter 112)
§  + RFC 190 Declarative Services Enhancements (OSGi R6)
§  + RFC 212 Field Injection for Declarative Services (OSGi R6)
§  OSGi Http Whiteboard Service
§  + RFC 189 (OSGi R6)
§  OSGi Configuration Admin (Compendium Chapter 104)
§  OSGi Metatype Service (Compendium Chapter 105)
§  + RFC 208 Metatype Annotations
26
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Recipe
§  OSGi Declarative Services (Compendium Chapter 112)
§  + RFC 190 Declarative Services Enhancements (OSGi R6) (Beta in 6.1)
§  + RFC 212 Field Injection for Declarative Services (OSGi R6) (Beta in 6.1)
§  OSGi Http Whiteboard Service
§  + RFC 189 (OSGi R6)
§  OSGi Configuration Admin (Compendium Chapter 104) (in 6.1)
§  OSGi Metatype Service (Compendium Chapter 105) (in 6.1)
§  + RFC 208 Metatype Annotations
27
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Component Management
28
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Metatype
29
@ObjectClassDefinition(
name = "Game Configuration",
description = "The configuration for the guessing game.")
public @interface Config {
@AttributeDefinition(name="Easy",
description="Maximum value for easy")
int easy_max() default 10;
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Metatype
30
@Component
@Designate( ocd = Config.class )
public class GameControllerImpl
implements GameController {
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Component Container Interaction
31
OSGi Service Registry
Declarative Services Blueprint
iPojo,
Dependency
Manager,
….
Framework API
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Service Scopes
•  Singleton
•  Bundle
•  Prototype
32
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Servlets
33
@Component( service = Servlet.class ,
scope=ServiceScope.PROTOTYPE,
property="osgi.http.whiteboard.servlet.pattern=/game")
public class GameServlet extends HttpServlet {
public void init() {...}
public void destroy() {...}
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Dynamics
§  Lazy instantiation
§  Reconfiguration
§  Reference policy and cardinality
34
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Unary References
35
@Reference
private GameController controller;
@Reference(cardinality=ReferenceCardinality.OPTIONAL
policy=ReferencePolicy.DYNAMIC)
private volatile GameStatistics stats;
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Multiple References
36
@Reference(cardinality=ReferenceCardinality.MULTIPLE)
private volatile List<Highscore> highscores;
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Multiple References
37
@Reference
private final Set<Highscore> highscores =
new ConcurrentSkipListSet<Highscore>();
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Reconfiguration
38
private volatile Config configuration;
@Activate
@Modified
protected void activate(final Config config) {
this.configuration = config;
}
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Granularity
§  Components
§  Services
§  Bundles
39
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
HTTP Whiteboard Service
§  Servlet contexts (grouping, authentication)
§  Servlets
§  Filters
§  Listeners
40
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Declarative Services
§  Easy too use
§  Pojos
§  DI with handling dynamics
41
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Try it out soon
§  Tooling soon available
§  Official open source implementations soon available
§  But how do I get this in AEM 6.1?
42
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
OSGi Subsystems
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Package your app for deployment to AEM
§  Most applications are composed of
multiple bundles
§  Need a neat deployment package
§  Previously: as CQ/AEM Packages
§  As of AEM 6.1
§  support for standard OSGi
Subsystems
44
"Airdrop pallets" by Senior Airman Ricky J. Best - defenselink.mil (search for "airdrop").
Licensed under Public Domain via Wikimedia Commons
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
OSGi Subsystems
§  Chapter 134 of Enterprise spec
§  Packaging of multi-bundle deployments
§  in .esa file (a zip file)
§  Optional isolation models
§  Bundles either in:
§  .esa file
§  OSGi Repository
45
Jack Kennard TSA 3-1-1 rule
https://www.flickr.com/photos/javajoba/4013349543
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Subsystem types
§  Features – everything shared
§  Applications – isolated
§  for ‘friendly’ multi-tenancy – keeps bundles from interfering with each other
§  Composites – configurable isolation
§  generally useful for larger infrastructure components
46
Chiot's Run
A Few Evenings of Work
flickr.com
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Feature Subsystems
Deployment artifacts
47
Feature
api bundle
svc bundle use bundle
feature
bundle
Feature 2
api bundle
svc bundle use bundle
feature
bundle2
Runtime Framework
feature
bundle
svc bundle
feature
bundle2
use bundle
api bundle
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Application Subsystems
Deployment artifacts
48
Top-level Application
Application
api bundle
svc bundle use bundle
Application 2
api bundle
svc
bundle2
use bundle
Runtime Framework
svc bundle
svc
bundle2
api bundle
use bundle
api bundle
use bundle
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Build a subsystem
§  Use maven:
<project>
<artifactId>mysubsystem</artifactId>
<packaging>esa</packaging>
<dependencies>
<!– the bundles you want in your subsystem -->
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.aries</groupId>
<artifactId>esa-maven-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<generateManifest>true</generateManifest>
<instructions>
<Subsystem-Type>osgi.subsystem.feature
</Subsystem-Type>
</instructions>
</configuration>
</plugin>
to produce mysubsystem.esa
49
"Sausage making-H-1" by László Szalai (Beyond silence) - Own work.
Licensed under Public Domain via Wikimedia Commons
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Deploy in AEM
50
https://svn.apache.org/repos/asf/felix/trunk/webconsole-plugins/subsystems
or:
copy your .esa file to
<aem61>/crx-quickstart/install
or:
place it in the repository at
/libs/system/install
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
More info on creating a subsystem
§  OSGi Enterprise R6 spec: http://www.osgi.org/Download/Release6 release early August 2015
(proposed final draft http://www.osgi.org/Specifications/Drafts )
§  Apache Aries website http://aries.apache.org/modules/subsystems.html
§  esa-maven-plugin
http://aries.apache.org/modules/esamavenpluginproject.html
§  For examples see:
https://github.com/coderthoughts/subsystem-examples
51
CIRCUIT – An Adobe Developer Event
Presented by ICF Interactive
Questions?

Mais conteúdo relacionado

Mais procurados

Building Creative Product Extensions with Experience Manager
Building Creative Product Extensions with Experience ManagerBuilding Creative Product Extensions with Experience Manager
Building Creative Product Extensions with Experience ManagerJustin Edelson
 
Build single page applications using AngularJS on AEM
Build single page applications using AngularJS on AEMBuild single page applications using AngularJS on AEM
Build single page applications using AngularJS on AEMAdobeMarketingCloud
 
How to Build a Better JIRA Add-on
How to Build a Better JIRA Add-onHow to Build a Better JIRA Add-on
How to Build a Better JIRA Add-onAtlassian
 
Integrating Apache Wookie with AEM by Rima Mittal and Ankit Gubrani
Integrating Apache Wookie with AEM by Rima Mittal and Ankit GubraniIntegrating Apache Wookie with AEM by Rima Mittal and Ankit Gubrani
Integrating Apache Wookie with AEM by Rima Mittal and Ankit GubraniAEM HUB
 
Plugin architecture (Extensible Application Architecture)
Plugin architecture (Extensible Application Architecture)Plugin architecture (Extensible Application Architecture)
Plugin architecture (Extensible Application Architecture)Chinmoy Mohanty
 
Adobe Experience Manager - 6th Edition by Cedric Huesler
Adobe Experience Manager - 6th Edition by Cedric HueslerAdobe Experience Manager - 6th Edition by Cedric Huesler
Adobe Experience Manager - 6th Edition by Cedric HueslerAEM HUB
 
Spring Boot & Actuators
Spring Boot & ActuatorsSpring Boot & Actuators
Spring Boot & ActuatorsVMware Tanzu
 
Dynamic components using SPA concepts in AEM
Dynamic components using SPA concepts in AEMDynamic components using SPA concepts in AEM
Dynamic components using SPA concepts in AEMBojana Popovska
 
Thoughts on Component Resuse
Thoughts on Component ResuseThoughts on Component Resuse
Thoughts on Component ResuseJustin Edelson
 
OSGi Enterprise R6 specs are out! - David Bosschaert & Carsten Ziegeler
OSGi Enterprise R6 specs are out! - David Bosschaert & Carsten ZiegelerOSGi Enterprise R6 specs are out! - David Bosschaert & Carsten Ziegeler
OSGi Enterprise R6 specs are out! - David Bosschaert & Carsten Ziegelermfrancis
 
Rethinking Angular Architecture & Performance
Rethinking Angular Architecture & PerformanceRethinking Angular Architecture & Performance
Rethinking Angular Architecture & PerformanceMark Pieszak
 
Sling Component Filters in CQ5
Sling Component Filters in CQ5 Sling Component Filters in CQ5
Sling Component Filters in CQ5 connectwebex
 
Integration Testing on Steroids: Run Your Tests on the Real Things
Integration Testing on Steroids: Run Your Tests on the Real ThingsIntegration Testing on Steroids: Run Your Tests on the Real Things
Integration Testing on Steroids: Run Your Tests on the Real ThingsAtlassian
 
The Open-source Eclipse Plugin for Force.com Development, Summer ‘14
The Open-source Eclipse Plugin for Force.com Development, Summer ‘14The Open-source Eclipse Plugin for Force.com Development, Summer ‘14
The Open-source Eclipse Plugin for Force.com Development, Summer ‘14Salesforce Developers
 
A Simple Plugin Architecture for Wicket
A Simple Plugin Architecture for WicketA Simple Plugin Architecture for Wicket
A Simple Plugin Architecture for Wicketnielsvk
 
Configuration as Code: The Job DSL Plugin
Configuration as Code: The Job DSL PluginConfiguration as Code: The Job DSL Plugin
Configuration as Code: The Job DSL PluginDaniel Spilker
 
PhoneGap Enterprise Viewer - ConnectCon 2015
PhoneGap Enterprise Viewer - ConnectCon 2015PhoneGap Enterprise Viewer - ConnectCon 2015
PhoneGap Enterprise Viewer - ConnectCon 2015Justin Edelson
 
Strategies and Tips for Building Enterprise Drupal Applications - PNWDS 2013
Strategies and Tips for Building Enterprise Drupal Applications - PNWDS 2013Strategies and Tips for Building Enterprise Drupal Applications - PNWDS 2013
Strategies and Tips for Building Enterprise Drupal Applications - PNWDS 2013Mack Hardy
 
What's New with Confluence Connect
What's New with Confluence ConnectWhat's New with Confluence Connect
What's New with Confluence ConnectAtlassian
 
All you know about ASP.NET deployment is wrong!
All you know about ASP.NET deployment is wrong!All you know about ASP.NET deployment is wrong!
All you know about ASP.NET deployment is wrong!Roger Pence
 

Mais procurados (20)

Building Creative Product Extensions with Experience Manager
Building Creative Product Extensions with Experience ManagerBuilding Creative Product Extensions with Experience Manager
Building Creative Product Extensions with Experience Manager
 
Build single page applications using AngularJS on AEM
Build single page applications using AngularJS on AEMBuild single page applications using AngularJS on AEM
Build single page applications using AngularJS on AEM
 
How to Build a Better JIRA Add-on
How to Build a Better JIRA Add-onHow to Build a Better JIRA Add-on
How to Build a Better JIRA Add-on
 
Integrating Apache Wookie with AEM by Rima Mittal and Ankit Gubrani
Integrating Apache Wookie with AEM by Rima Mittal and Ankit GubraniIntegrating Apache Wookie with AEM by Rima Mittal and Ankit Gubrani
Integrating Apache Wookie with AEM by Rima Mittal and Ankit Gubrani
 
Plugin architecture (Extensible Application Architecture)
Plugin architecture (Extensible Application Architecture)Plugin architecture (Extensible Application Architecture)
Plugin architecture (Extensible Application Architecture)
 
Adobe Experience Manager - 6th Edition by Cedric Huesler
Adobe Experience Manager - 6th Edition by Cedric HueslerAdobe Experience Manager - 6th Edition by Cedric Huesler
Adobe Experience Manager - 6th Edition by Cedric Huesler
 
Spring Boot & Actuators
Spring Boot & ActuatorsSpring Boot & Actuators
Spring Boot & Actuators
 
Dynamic components using SPA concepts in AEM
Dynamic components using SPA concepts in AEMDynamic components using SPA concepts in AEM
Dynamic components using SPA concepts in AEM
 
Thoughts on Component Resuse
Thoughts on Component ResuseThoughts on Component Resuse
Thoughts on Component Resuse
 
OSGi Enterprise R6 specs are out! - David Bosschaert & Carsten Ziegeler
OSGi Enterprise R6 specs are out! - David Bosschaert & Carsten ZiegelerOSGi Enterprise R6 specs are out! - David Bosschaert & Carsten Ziegeler
OSGi Enterprise R6 specs are out! - David Bosschaert & Carsten Ziegeler
 
Rethinking Angular Architecture & Performance
Rethinking Angular Architecture & PerformanceRethinking Angular Architecture & Performance
Rethinking Angular Architecture & Performance
 
Sling Component Filters in CQ5
Sling Component Filters in CQ5 Sling Component Filters in CQ5
Sling Component Filters in CQ5
 
Integration Testing on Steroids: Run Your Tests on the Real Things
Integration Testing on Steroids: Run Your Tests on the Real ThingsIntegration Testing on Steroids: Run Your Tests on the Real Things
Integration Testing on Steroids: Run Your Tests on the Real Things
 
The Open-source Eclipse Plugin for Force.com Development, Summer ‘14
The Open-source Eclipse Plugin for Force.com Development, Summer ‘14The Open-source Eclipse Plugin for Force.com Development, Summer ‘14
The Open-source Eclipse Plugin for Force.com Development, Summer ‘14
 
A Simple Plugin Architecture for Wicket
A Simple Plugin Architecture for WicketA Simple Plugin Architecture for Wicket
A Simple Plugin Architecture for Wicket
 
Configuration as Code: The Job DSL Plugin
Configuration as Code: The Job DSL PluginConfiguration as Code: The Job DSL Plugin
Configuration as Code: The Job DSL Plugin
 
PhoneGap Enterprise Viewer - ConnectCon 2015
PhoneGap Enterprise Viewer - ConnectCon 2015PhoneGap Enterprise Viewer - ConnectCon 2015
PhoneGap Enterprise Viewer - ConnectCon 2015
 
Strategies and Tips for Building Enterprise Drupal Applications - PNWDS 2013
Strategies and Tips for Building Enterprise Drupal Applications - PNWDS 2013Strategies and Tips for Building Enterprise Drupal Applications - PNWDS 2013
Strategies and Tips for Building Enterprise Drupal Applications - PNWDS 2013
 
What's New with Confluence Connect
What's New with Confluence ConnectWhat's New with Confluence Connect
What's New with Confluence Connect
 
All you know about ASP.NET deployment is wrong!
All you know about ASP.NET deployment is wrong!All you know about ASP.NET deployment is wrong!
All you know about ASP.NET deployment is wrong!
 

Destaque

Circuit 2015 Keynote - Carsten Ziegeler
Circuit 2015 Keynote -  Carsten ZiegelerCircuit 2015 Keynote -  Carsten Ziegeler
Circuit 2015 Keynote - Carsten ZiegelerICF CIRCUIT
 
Multi tenancy - Wining formula for a PaaS
Multi tenancy - Wining formula for a PaaSMulti tenancy - Wining formula for a PaaS
Multi tenancy - Wining formula for a PaaSWSO2
 
When dispatcher caching is not enough... (extended version)
When dispatcher caching is not enough... (extended version)When dispatcher caching is not enough... (extended version)
When dispatcher caching is not enough... (extended version)Jakub Wadolowski
 
Modern operations with Apache Sling (2014 adaptTo version)
Modern operations with Apache Sling (2014 adaptTo version)Modern operations with Apache Sling (2014 adaptTo version)
Modern operations with Apache Sling (2014 adaptTo version)Bertrand Delacretaz
 
Subsystems: For those occasions where bundles are just too small... - Graham ...
Subsystems: For those occasions where bundles are just too small... - Graham ...Subsystems: For those occasions where bundles are just too small... - Graham ...
Subsystems: For those occasions where bundles are just too small... - Graham ...mfrancis
 
Understanding Sling Models in AEM
Understanding Sling Models in AEMUnderstanding Sling Models in AEM
Understanding Sling Models in AEMAccunity Software
 
JCR, Sling or AEM? Which API should I use and when?
JCR, Sling or AEM? Which API should I use and when?JCR, Sling or AEM? Which API should I use and when?
JCR, Sling or AEM? Which API should I use and when?connectwebex
 
Introduction to Sightly and Sling Models
Introduction to Sightly and Sling ModelsIntroduction to Sightly and Sling Models
Introduction to Sightly and Sling ModelsStefano Celentano
 
User Interface customization for AEM 6
User Interface customization for AEM 6User Interface customization for AEM 6
User Interface customization for AEM 6Damien Antipa
 
AEM Sightly Template Language
AEM Sightly Template LanguageAEM Sightly Template Language
AEM Sightly Template LanguageGabriel Walt
 
AEM (CQ) Dispatcher Security and CDN+Browser Caching
AEM (CQ) Dispatcher Security and CDN+Browser CachingAEM (CQ) Dispatcher Security and CDN+Browser Caching
AEM (CQ) Dispatcher Security and CDN+Browser CachingAndrew Khoury
 
Master Chef class: learn how to quickly cook delightful CQ/AEM infrastructures
Master Chef class: learn how to quickly cook delightful CQ/AEM infrastructuresMaster Chef class: learn how to quickly cook delightful CQ/AEM infrastructures
Master Chef class: learn how to quickly cook delightful CQ/AEM infrastructuresFrançois Le Droff
 
AEM Apps Enhanced: In-app Messaging and Beacons by John Fait
AEM Apps Enhanced: In-app Messaging and Beacons by John FaitAEM Apps Enhanced: In-app Messaging and Beacons by John Fait
AEM Apps Enhanced: In-app Messaging and Beacons by John FaitAEM HUB
 
New Repository in AEM 6 by Michael Marth
New Repository in AEM 6 by Michael MarthNew Repository in AEM 6 by Michael Marth
New Repository in AEM 6 by Michael MarthAEM HUB
 
Practical OSGi Subsystems
Practical OSGi SubsystemsPractical OSGi Subsystems
Practical OSGi Subsystemsglynnormington
 

Destaque (19)

EVOLVE'14 | Enhance | Anshul Chhabra & Akhil Aggrawal | Cisco - AEM High Avai...
EVOLVE'14 | Enhance | Anshul Chhabra & Akhil Aggrawal | Cisco - AEM High Avai...EVOLVE'14 | Enhance | Anshul Chhabra & Akhil Aggrawal | Cisco - AEM High Avai...
EVOLVE'14 | Enhance | Anshul Chhabra & Akhil Aggrawal | Cisco - AEM High Avai...
 
Circuit 2015 Keynote - Carsten Ziegeler
Circuit 2015 Keynote -  Carsten ZiegelerCircuit 2015 Keynote -  Carsten Ziegeler
Circuit 2015 Keynote - Carsten Ziegeler
 
Multi tenancy - Wining formula for a PaaS
Multi tenancy - Wining formula for a PaaSMulti tenancy - Wining formula for a PaaS
Multi tenancy - Wining formula for a PaaS
 
When dispatcher caching is not enough... (extended version)
When dispatcher caching is not enough... (extended version)When dispatcher caching is not enough... (extended version)
When dispatcher caching is not enough... (extended version)
 
Modern operations with Apache Sling (2014 adaptTo version)
Modern operations with Apache Sling (2014 adaptTo version)Modern operations with Apache Sling (2014 adaptTo version)
Modern operations with Apache Sling (2014 adaptTo version)
 
Subsystems: For those occasions where bundles are just too small... - Graham ...
Subsystems: For those occasions where bundles are just too small... - Graham ...Subsystems: For those occasions where bundles are just too small... - Graham ...
Subsystems: For those occasions where bundles are just too small... - Graham ...
 
(Re)discover your AEM
(Re)discover your AEM(Re)discover your AEM
(Re)discover your AEM
 
Understanding Sling Models in AEM
Understanding Sling Models in AEMUnderstanding Sling Models in AEM
Understanding Sling Models in AEM
 
JCR, Sling or AEM? Which API should I use and when?
JCR, Sling or AEM? Which API should I use and when?JCR, Sling or AEM? Which API should I use and when?
JCR, Sling or AEM? Which API should I use and when?
 
AEM - Client Libraries
AEM - Client LibrariesAEM - Client Libraries
AEM - Client Libraries
 
REST in AEM
REST in AEMREST in AEM
REST in AEM
 
Introduction to Sightly and Sling Models
Introduction to Sightly and Sling ModelsIntroduction to Sightly and Sling Models
Introduction to Sightly and Sling Models
 
User Interface customization for AEM 6
User Interface customization for AEM 6User Interface customization for AEM 6
User Interface customization for AEM 6
 
AEM Sightly Template Language
AEM Sightly Template LanguageAEM Sightly Template Language
AEM Sightly Template Language
 
AEM (CQ) Dispatcher Security and CDN+Browser Caching
AEM (CQ) Dispatcher Security and CDN+Browser CachingAEM (CQ) Dispatcher Security and CDN+Browser Caching
AEM (CQ) Dispatcher Security and CDN+Browser Caching
 
Master Chef class: learn how to quickly cook delightful CQ/AEM infrastructures
Master Chef class: learn how to quickly cook delightful CQ/AEM infrastructuresMaster Chef class: learn how to quickly cook delightful CQ/AEM infrastructures
Master Chef class: learn how to quickly cook delightful CQ/AEM infrastructures
 
AEM Apps Enhanced: In-app Messaging and Beacons by John Fait
AEM Apps Enhanced: In-app Messaging and Beacons by John FaitAEM Apps Enhanced: In-app Messaging and Beacons by John Fait
AEM Apps Enhanced: In-app Messaging and Beacons by John Fait
 
New Repository in AEM 6 by Michael Marth
New Repository in AEM 6 by Michael MarthNew Repository in AEM 6 by Michael Marth
New Repository in AEM 6 by Michael Marth
 
Practical OSGi Subsystems
Practical OSGi SubsystemsPractical OSGi Subsystems
Practical OSGi Subsystems
 

Semelhante a Maximize the power of OSGi in AEM

Maximize the power of OSGi
Maximize the power of OSGiMaximize the power of OSGi
Maximize the power of OSGiDavid Bosschaert
 
Maximise the Power of OSGi - Carsten Ziegeler & David Bosschaert
Maximise the Power of OSGi - Carsten Ziegeler & David BosschaertMaximise the Power of OSGi - Carsten Ziegeler & David Bosschaert
Maximise the Power of OSGi - Carsten Ziegeler & David Bosschaertmfrancis
 
BeJUG Meetup - What's coming in the OSGi R7 Specification
BeJUG Meetup - What's coming in the OSGi R7 SpecificationBeJUG Meetup - What's coming in the OSGi R7 Specification
BeJUG Meetup - What's coming in the OSGi R7 SpecificationStijn Van Den Enden
 
New and cool in OSGi R7 - David Bosschaert & Carsten Ziegeler
New and cool in OSGi R7 - David Bosschaert & Carsten ZiegelerNew and cool in OSGi R7 - David Bosschaert & Carsten Ziegeler
New and cool in OSGi R7 - David Bosschaert & Carsten Ziegelermfrancis
 
Leveraging the Latest OSGi R7 Specifications - C Ziegeler & D Bosschaert
Leveraging the Latest OSGi R7 Specifications - C Ziegeler & D BosschaertLeveraging the Latest OSGi R7 Specifications - C Ziegeler & D Bosschaert
Leveraging the Latest OSGi R7 Specifications - C Ziegeler & D Bosschaertmfrancis
 
Better Code: Concurrency
Better Code: ConcurrencyBetter Code: Concurrency
Better Code: ConcurrencyPlatonov Sergey
 
Cloud Foundry Day in Tokyo Lightning Talk - Cloud Foundry over the Proxy
Cloud Foundry Day in Tokyo Lightning Talk - Cloud Foundry over the ProxyCloud Foundry Day in Tokyo Lightning Talk - Cloud Foundry over the Proxy
Cloud Foundry Day in Tokyo Lightning Talk - Cloud Foundry over the ProxyMaki Toshio
 
Extending uBuild and uDeploy with Plugins
Extending uBuild and uDeploy with PluginsExtending uBuild and uDeploy with Plugins
Extending uBuild and uDeploy with PluginsIBM UrbanCode Products
 
Mastering the Sling Rewriter by Justin Edelson
Mastering the Sling Rewriter by Justin EdelsonMastering the Sling Rewriter by Justin Edelson
Mastering the Sling Rewriter by Justin EdelsonAEM HUB
 
Mastering the Sling Rewriter
Mastering the Sling RewriterMastering the Sling Rewriter
Mastering the Sling RewriterJustin Edelson
 
Service oriented web development with OSGi
Service oriented web development with OSGiService oriented web development with OSGi
Service oriented web development with OSGiCarsten Ziegeler
 
InterConnect2016: WebApp Architectures with Java and Node.js
InterConnect2016: WebApp Architectures with Java and Node.jsInterConnect2016: WebApp Architectures with Java and Node.js
InterConnect2016: WebApp Architectures with Java and Node.jsChris Bailey
 
How to Architect and Develop Cloud Native Applications
How to Architect and Develop Cloud Native ApplicationsHow to Architect and Develop Cloud Native Applications
How to Architect and Develop Cloud Native ApplicationsSufyaan Kazi
 
Introducing Gridiron Security and Compliance Management Platform and Enclave ...
Introducing Gridiron Security and Compliance Management Platform and Enclave ...Introducing Gridiron Security and Compliance Management Platform and Enclave ...
Introducing Gridiron Security and Compliance Management Platform and Enclave ...Aptible
 
Service Oriented Web Development with OSGi - C Ziegeler
Service Oriented Web Development with OSGi - C ZiegelerService Oriented Web Development with OSGi - C Ziegeler
Service Oriented Web Development with OSGi - C Ziegelermfrancis
 
Advanced iOS Build Mechanics, Sebastien Pouliot
Advanced iOS Build Mechanics, Sebastien PouliotAdvanced iOS Build Mechanics, Sebastien Pouliot
Advanced iOS Build Mechanics, Sebastien PouliotXamarin
 
Spring Cloud Servicesの紹介 #pcf_tokyo
Spring Cloud Servicesの紹介 #pcf_tokyoSpring Cloud Servicesの紹介 #pcf_tokyo
Spring Cloud Servicesの紹介 #pcf_tokyoToshiaki Maki
 
Check Point automatizace a orchestrace
Check Point automatizace a orchestraceCheck Point automatizace a orchestrace
Check Point automatizace a orchestraceMarketingArrowECS_CZ
 
Google Developer Fest 2010
Google Developer Fest 2010Google Developer Fest 2010
Google Developer Fest 2010Chris Ramsdale
 

Semelhante a Maximize the power of OSGi in AEM (20)

Maximize the power of OSGi
Maximize the power of OSGiMaximize the power of OSGi
Maximize the power of OSGi
 
Maximise the Power of OSGi - Carsten Ziegeler & David Bosschaert
Maximise the Power of OSGi - Carsten Ziegeler & David BosschaertMaximise the Power of OSGi - Carsten Ziegeler & David Bosschaert
Maximise the Power of OSGi - Carsten Ziegeler & David Bosschaert
 
BeJUG Meetup - What's coming in the OSGi R7 Specification
BeJUG Meetup - What's coming in the OSGi R7 SpecificationBeJUG Meetup - What's coming in the OSGi R7 Specification
BeJUG Meetup - What's coming in the OSGi R7 Specification
 
New and cool in OSGi R7 - David Bosschaert & Carsten Ziegeler
New and cool in OSGi R7 - David Bosschaert & Carsten ZiegelerNew and cool in OSGi R7 - David Bosschaert & Carsten Ziegeler
New and cool in OSGi R7 - David Bosschaert & Carsten Ziegeler
 
Leveraging the Latest OSGi R7 Specifications - C Ziegeler & D Bosschaert
Leveraging the Latest OSGi R7 Specifications - C Ziegeler & D BosschaertLeveraging the Latest OSGi R7 Specifications - C Ziegeler & D Bosschaert
Leveraging the Latest OSGi R7 Specifications - C Ziegeler & D Bosschaert
 
Better Code: Concurrency
Better Code: ConcurrencyBetter Code: Concurrency
Better Code: Concurrency
 
Cloud Foundry Day in Tokyo Lightning Talk - Cloud Foundry over the Proxy
Cloud Foundry Day in Tokyo Lightning Talk - Cloud Foundry over the ProxyCloud Foundry Day in Tokyo Lightning Talk - Cloud Foundry over the Proxy
Cloud Foundry Day in Tokyo Lightning Talk - Cloud Foundry over the Proxy
 
Sst hackathon express
Sst hackathon expressSst hackathon express
Sst hackathon express
 
Extending uBuild and uDeploy with Plugins
Extending uBuild and uDeploy with PluginsExtending uBuild and uDeploy with Plugins
Extending uBuild and uDeploy with Plugins
 
Mastering the Sling Rewriter by Justin Edelson
Mastering the Sling Rewriter by Justin EdelsonMastering the Sling Rewriter by Justin Edelson
Mastering the Sling Rewriter by Justin Edelson
 
Mastering the Sling Rewriter
Mastering the Sling RewriterMastering the Sling Rewriter
Mastering the Sling Rewriter
 
Service oriented web development with OSGi
Service oriented web development with OSGiService oriented web development with OSGi
Service oriented web development with OSGi
 
InterConnect2016: WebApp Architectures with Java and Node.js
InterConnect2016: WebApp Architectures with Java and Node.jsInterConnect2016: WebApp Architectures with Java and Node.js
InterConnect2016: WebApp Architectures with Java and Node.js
 
How to Architect and Develop Cloud Native Applications
How to Architect and Develop Cloud Native ApplicationsHow to Architect and Develop Cloud Native Applications
How to Architect and Develop Cloud Native Applications
 
Introducing Gridiron Security and Compliance Management Platform and Enclave ...
Introducing Gridiron Security and Compliance Management Platform and Enclave ...Introducing Gridiron Security and Compliance Management Platform and Enclave ...
Introducing Gridiron Security and Compliance Management Platform and Enclave ...
 
Service Oriented Web Development with OSGi - C Ziegeler
Service Oriented Web Development with OSGi - C ZiegelerService Oriented Web Development with OSGi - C Ziegeler
Service Oriented Web Development with OSGi - C Ziegeler
 
Advanced iOS Build Mechanics, Sebastien Pouliot
Advanced iOS Build Mechanics, Sebastien PouliotAdvanced iOS Build Mechanics, Sebastien Pouliot
Advanced iOS Build Mechanics, Sebastien Pouliot
 
Spring Cloud Servicesの紹介 #pcf_tokyo
Spring Cloud Servicesの紹介 #pcf_tokyoSpring Cloud Servicesの紹介 #pcf_tokyo
Spring Cloud Servicesの紹介 #pcf_tokyo
 
Check Point automatizace a orchestrace
Check Point automatizace a orchestraceCheck Point automatizace a orchestrace
Check Point automatizace a orchestrace
 
Google Developer Fest 2010
Google Developer Fest 2010Google Developer Fest 2010
Google Developer Fest 2010
 

Mais de ICF CIRCUIT

CIRCUIT 2015 - Hybrid App Development with AEM Apps
CIRCUIT 2015 - Hybrid App Development with AEM AppsCIRCUIT 2015 - Hybrid App Development with AEM Apps
CIRCUIT 2015 - Hybrid App Development with AEM AppsICF CIRCUIT
 
CIRCUIT 2015 - AEM Infrastructure Automation with Chef Cookbooks
CIRCUIT 2015 - AEM Infrastructure Automation with Chef CookbooksCIRCUIT 2015 - AEM Infrastructure Automation with Chef Cookbooks
CIRCUIT 2015 - AEM Infrastructure Automation with Chef CookbooksICF CIRCUIT
 
CIRCUIT 2015 - Monitoring AEM
CIRCUIT 2015 - Monitoring AEMCIRCUIT 2015 - Monitoring AEM
CIRCUIT 2015 - Monitoring AEMICF CIRCUIT
 
CIRCUIT 2015 - Akamai: Caching and Beyond
CIRCUIT 2015 - Akamai:  Caching and BeyondCIRCUIT 2015 - Akamai:  Caching and Beyond
CIRCUIT 2015 - Akamai: Caching and BeyondICF CIRCUIT
 
CIRCUIT 2015 - Free Beer and Testing
CIRCUIT 2015 - Free Beer and TestingCIRCUIT 2015 - Free Beer and Testing
CIRCUIT 2015 - Free Beer and TestingICF CIRCUIT
 
CIRCUIT 2015 - UI Customization in AEM 6.1
CIRCUIT 2015 - UI Customization in AEM 6.1CIRCUIT 2015 - UI Customization in AEM 6.1
CIRCUIT 2015 - UI Customization in AEM 6.1ICF CIRCUIT
 
CIRCUIT 2015 - Content API's For AEM Sites
CIRCUIT 2015 - Content API's For AEM SitesCIRCUIT 2015 - Content API's For AEM Sites
CIRCUIT 2015 - Content API's For AEM SitesICF CIRCUIT
 
CIRCUIT 2015 - Responsive Websites & Grid-Based Layouts
CIRCUIT 2015 - Responsive Websites & Grid-Based LayoutsCIRCUIT 2015 - Responsive Websites & Grid-Based Layouts
CIRCUIT 2015 - Responsive Websites & Grid-Based LayoutsICF CIRCUIT
 
CIRCUIT 2015 - Glimpse of perceptual diff
CIRCUIT 2015 - Glimpse of perceptual diffCIRCUIT 2015 - Glimpse of perceptual diff
CIRCUIT 2015 - Glimpse of perceptual diffICF CIRCUIT
 
CIRCUIT 2015 - Orchestrate your story with interactive video and web content
CIRCUIT 2015 -  Orchestrate your story with interactive video and web contentCIRCUIT 2015 -  Orchestrate your story with interactive video and web content
CIRCUIT 2015 - Orchestrate your story with interactive video and web contentICF CIRCUIT
 
How to migrate from any CMS (thru the front-door)
How to migrate from any CMS (thru the front-door)How to migrate from any CMS (thru the front-door)
How to migrate from any CMS (thru the front-door)ICF CIRCUIT
 
CIRCUIT 2015 - 10 Things Apache Sling Can Do
CIRCUIT 2015 - 10 Things Apache Sling Can DoCIRCUIT 2015 - 10 Things Apache Sling Can Do
CIRCUIT 2015 - 10 Things Apache Sling Can DoICF CIRCUIT
 

Mais de ICF CIRCUIT (12)

CIRCUIT 2015 - Hybrid App Development with AEM Apps
CIRCUIT 2015 - Hybrid App Development with AEM AppsCIRCUIT 2015 - Hybrid App Development with AEM Apps
CIRCUIT 2015 - Hybrid App Development with AEM Apps
 
CIRCUIT 2015 - AEM Infrastructure Automation with Chef Cookbooks
CIRCUIT 2015 - AEM Infrastructure Automation with Chef CookbooksCIRCUIT 2015 - AEM Infrastructure Automation with Chef Cookbooks
CIRCUIT 2015 - AEM Infrastructure Automation with Chef Cookbooks
 
CIRCUIT 2015 - Monitoring AEM
CIRCUIT 2015 - Monitoring AEMCIRCUIT 2015 - Monitoring AEM
CIRCUIT 2015 - Monitoring AEM
 
CIRCUIT 2015 - Akamai: Caching and Beyond
CIRCUIT 2015 - Akamai:  Caching and BeyondCIRCUIT 2015 - Akamai:  Caching and Beyond
CIRCUIT 2015 - Akamai: Caching and Beyond
 
CIRCUIT 2015 - Free Beer and Testing
CIRCUIT 2015 - Free Beer and TestingCIRCUIT 2015 - Free Beer and Testing
CIRCUIT 2015 - Free Beer and Testing
 
CIRCUIT 2015 - UI Customization in AEM 6.1
CIRCUIT 2015 - UI Customization in AEM 6.1CIRCUIT 2015 - UI Customization in AEM 6.1
CIRCUIT 2015 - UI Customization in AEM 6.1
 
CIRCUIT 2015 - Content API's For AEM Sites
CIRCUIT 2015 - Content API's For AEM SitesCIRCUIT 2015 - Content API's For AEM Sites
CIRCUIT 2015 - Content API's For AEM Sites
 
CIRCUIT 2015 - Responsive Websites & Grid-Based Layouts
CIRCUIT 2015 - Responsive Websites & Grid-Based LayoutsCIRCUIT 2015 - Responsive Websites & Grid-Based Layouts
CIRCUIT 2015 - Responsive Websites & Grid-Based Layouts
 
CIRCUIT 2015 - Glimpse of perceptual diff
CIRCUIT 2015 - Glimpse of perceptual diffCIRCUIT 2015 - Glimpse of perceptual diff
CIRCUIT 2015 - Glimpse of perceptual diff
 
CIRCUIT 2015 - Orchestrate your story with interactive video and web content
CIRCUIT 2015 -  Orchestrate your story with interactive video and web contentCIRCUIT 2015 -  Orchestrate your story with interactive video and web content
CIRCUIT 2015 - Orchestrate your story with interactive video and web content
 
How to migrate from any CMS (thru the front-door)
How to migrate from any CMS (thru the front-door)How to migrate from any CMS (thru the front-door)
How to migrate from any CMS (thru the front-door)
 
CIRCUIT 2015 - 10 Things Apache Sling Can Do
CIRCUIT 2015 - 10 Things Apache Sling Can DoCIRCUIT 2015 - 10 Things Apache Sling Can Do
CIRCUIT 2015 - 10 Things Apache Sling Can Do
 

Último

Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 

Último (20)

Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 

Maximize the power of OSGi in AEM

  • 1. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Maximize the power of OSGi in AEM Carsten Ziegeler | David Bosschaert | Adobe R&D
  • 2. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. About cziegeler@apache.org @cziegeler •  RnD Adobe Research Switzerland •  Team Lead / Founder of Adobe Granite •  Member of the Apache Software Foundation •  VP of Apache Felix and Sling •  OSGi Core Platform and Enterprise Expert Groups •  Member of the OSGi Board •  Book / article author, technical reviewer, conference speaker 2
  • 3. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. About David Bosschaert davidb@apache.org @davidbosschaert •  R&D Adobe Ireland •  Co-chair OSGi Enterprise Expert Group •  Apache Felix, Aries PMC member and committer •  … other opensource projects •  Cloud and embedded computing enthusiast 3
  • 4. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Today’s contents §  Asynchronous OSGi Services §  Declarative Services §  with Configuration Admin §  HTTP Whiteboard §  Subsystems 4 Image by Joadl: Lyme_Regis_harbour_02b on wikipedia
  • 5. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Async programming: OSGi Promises 5
  • 6. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. OSGi Promises Javascript-style promises, can be used with Java 5 or later. §  Asynchronous chaining §  Very simple programming model Promises can be used outside of OSGi framework   Recommended implementation: https://svn.apache.org/repos/asf/aries/trunk/async 6 public  class  PromisesTest  {            public  static  void  main(String...  args)  {                  System.out.println("Starting");                  takesLongToDo(21)                          .then(p  -­‐>  intermediateResult(p.getValue()))                          .then(p  -­‐>  finalResult(p.getValue()));                  System.out.println("Async  computation  kicked  off");          }            public  static  Promise<Long>  intermediateResult(Long  l)  {                  System.out.println("Intermediate  result:  "  +  l);                  return  takesLongToDo(l  *  2);          }            public  static  Promise<Void>  finalResult(Long  l)  {                  System.out.println("Computation  done.  Result:  "  +  l);                  return  Promises.resolved(null);          }            public  static  Promise<Long>  takesLongToDo(long  in)  {  
  • 7. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. OSGi Services
  • 8. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Brief intro to OSGi Services §  Services are Java Objects (POJOs) §  registered by Bundles §  consumed by Bundles §  “SOA inside the JVM” §  Services looked up by type and/or custom filter §  “I want a service that implements org.acme.Payment where location=US” §  One or many §  Dynamic! Services can be updated without taking down the consumers §  OSGi Service Consumers react to dynamism 8
  • 9. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Dynamic Service Selection 9
  • 10. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Async Services §  Take an existing OSGi Service … §  … and make it async! §  Or use an async-optimized one §  Also works great with Remote Services §  Recommended implementation: https://svn.apache.org/repos/asf/aries/trunk/async Normal service use:  TimeConsumingService  tcs  =  ...  //  from  Service  Registry    System.out.println("Invoking  Big  Task  Synchronously...");    System.out.println("Big  Task  returned:  "  +  tcs.bigTask(1));    //  further  code   10 §  Async service use §  via mediator obtained from Async Service  TimeConsumingService  tcs  =  ...  //  from  Service  Registry    Async  async  =  ...  //  Async  Service  from  Service  Registry    TimeConsumingService  mediated  =  async.mediate(    tcs,  TimeConsumingService.class);        System.out.println("Invoking  Big  Task  Asynchronously...");    async.call(mediated.bigTask(1))        .then(p  -­‐>  bigTaskFinished(p.getValue()));    System.out.println("Big  Task  submitted");    
  • 11. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Declarative Services
  • 12. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. OSGi Preconceptions 12 No POJOs Too slow Dynamics not manageable No dependency injection Not suitable forthe enterprise Notooling ?!
  • 13. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. The Next Big Thing for AEM 13
  • 14. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Building Blocks §  Module aka Bundle §  Services §  Components 14
  • 15. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Architecture 15 Game Servlet GET POST HTML Game Controller Game Bundle
  • 16. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Game Design 16 public enum Level { EASY, MEDIUM, HARD } public interface GameController { Game startGame(final String name, final Level level); int nextGuess(final Game status, final int guess); int getMax(final Level level); }
  • 17. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Implementation 17 @Component public class GameControllerImpl implements GameController { ...
  • 18. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Configuration 18 public @interface Config { int easy_max() default 10; int medium_max() default 50; int hard_max() default 100; }
  • 19. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. 19 private Config configuration; @Activate protected void activate(final Config config) { this.configuration = config; }
  • 20. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. 20 public int getMax(final Level level) { int max = 0; switch (level) { case EASY : max = configuration.easy_max(); break; case MEDIUM : max = configuration.medium_max(); break; case HARD : max = configuration.hard_max(); break; } return max; }
  • 21. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Web? 21 @Component( service = Servlet.class , property="osgi.http.whiteboard.servlet.pattern=/game") public class GameServlet extends HttpServlet {
  • 22. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. 22 public class GameServlet extends HttpServlet { @Reference private GameController controller;
  • 23. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. 23 No POJOs Too slow Dynamics not manageable No dependency injection Not suitable forthe enterprise Notooling ✔
  • 24. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. 24
  • 25. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Semantic Versioning §  Nice whitepaper on the OSGi homepage §  Versioning policy for API/exported packages §  OSGi versions: <major>.<minor>.<micro>.<qualifier> §  Updating package versions: §  Fix/patch (no API change) : update micro §  Extend API (affects implementers, not clients) : update minor §  API breakage: update major 25
  • 26. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Recipe §  OSGi Declarative Services (Compendium Chapter 112) §  + RFC 190 Declarative Services Enhancements (OSGi R6) §  + RFC 212 Field Injection for Declarative Services (OSGi R6) §  OSGi Http Whiteboard Service §  + RFC 189 (OSGi R6) §  OSGi Configuration Admin (Compendium Chapter 104) §  OSGi Metatype Service (Compendium Chapter 105) §  + RFC 208 Metatype Annotations 26
  • 27. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Recipe §  OSGi Declarative Services (Compendium Chapter 112) §  + RFC 190 Declarative Services Enhancements (OSGi R6) (Beta in 6.1) §  + RFC 212 Field Injection for Declarative Services (OSGi R6) (Beta in 6.1) §  OSGi Http Whiteboard Service §  + RFC 189 (OSGi R6) §  OSGi Configuration Admin (Compendium Chapter 104) (in 6.1) §  OSGi Metatype Service (Compendium Chapter 105) (in 6.1) §  + RFC 208 Metatype Annotations 27
  • 28. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Component Management 28
  • 29. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Metatype 29 @ObjectClassDefinition( name = "Game Configuration", description = "The configuration for the guessing game.") public @interface Config { @AttributeDefinition(name="Easy", description="Maximum value for easy") int easy_max() default 10;
  • 30. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Metatype 30 @Component @Designate( ocd = Config.class ) public class GameControllerImpl implements GameController {
  • 31. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Component Container Interaction 31 OSGi Service Registry Declarative Services Blueprint iPojo, Dependency Manager, …. Framework API
  • 32. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Service Scopes •  Singleton •  Bundle •  Prototype 32
  • 33. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Servlets 33 @Component( service = Servlet.class , scope=ServiceScope.PROTOTYPE, property="osgi.http.whiteboard.servlet.pattern=/game") public class GameServlet extends HttpServlet { public void init() {...} public void destroy() {...}
  • 34. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Dynamics §  Lazy instantiation §  Reconfiguration §  Reference policy and cardinality 34
  • 35. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Unary References 35 @Reference private GameController controller; @Reference(cardinality=ReferenceCardinality.OPTIONAL policy=ReferencePolicy.DYNAMIC) private volatile GameStatistics stats;
  • 36. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Multiple References 36 @Reference(cardinality=ReferenceCardinality.MULTIPLE) private volatile List<Highscore> highscores;
  • 37. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Multiple References 37 @Reference private final Set<Highscore> highscores = new ConcurrentSkipListSet<Highscore>();
  • 38. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Reconfiguration 38 private volatile Config configuration; @Activate @Modified protected void activate(final Config config) { this.configuration = config; }
  • 39. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Granularity §  Components §  Services §  Bundles 39
  • 40. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. HTTP Whiteboard Service §  Servlet contexts (grouping, authentication) §  Servlets §  Filters §  Listeners 40
  • 41. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Declarative Services §  Easy too use §  Pojos §  DI with handling dynamics 41
  • 42. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Try it out soon §  Tooling soon available §  Official open source implementations soon available §  But how do I get this in AEM 6.1? 42
  • 43. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. OSGi Subsystems
  • 44. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Package your app for deployment to AEM §  Most applications are composed of multiple bundles §  Need a neat deployment package §  Previously: as CQ/AEM Packages §  As of AEM 6.1 §  support for standard OSGi Subsystems 44 "Airdrop pallets" by Senior Airman Ricky J. Best - defenselink.mil (search for "airdrop"). Licensed under Public Domain via Wikimedia Commons
  • 45. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. OSGi Subsystems §  Chapter 134 of Enterprise spec §  Packaging of multi-bundle deployments §  in .esa file (a zip file) §  Optional isolation models §  Bundles either in: §  .esa file §  OSGi Repository 45 Jack Kennard TSA 3-1-1 rule https://www.flickr.com/photos/javajoba/4013349543
  • 46. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Subsystem types §  Features – everything shared §  Applications – isolated §  for ‘friendly’ multi-tenancy – keeps bundles from interfering with each other §  Composites – configurable isolation §  generally useful for larger infrastructure components 46 Chiot's Run A Few Evenings of Work flickr.com
  • 47. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Feature Subsystems Deployment artifacts 47 Feature api bundle svc bundle use bundle feature bundle Feature 2 api bundle svc bundle use bundle feature bundle2 Runtime Framework feature bundle svc bundle feature bundle2 use bundle api bundle
  • 48. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Application Subsystems Deployment artifacts 48 Top-level Application Application api bundle svc bundle use bundle Application 2 api bundle svc bundle2 use bundle Runtime Framework svc bundle svc bundle2 api bundle use bundle api bundle use bundle
  • 49. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Build a subsystem §  Use maven: <project> <artifactId>mysubsystem</artifactId> <packaging>esa</packaging> <dependencies> <!– the bundles you want in your subsystem --> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.aries</groupId> <artifactId>esa-maven-plugin</artifactId> <extensions>true</extensions> <configuration> <generateManifest>true</generateManifest> <instructions> <Subsystem-Type>osgi.subsystem.feature </Subsystem-Type> </instructions> </configuration> </plugin> to produce mysubsystem.esa 49 "Sausage making-H-1" by László Szalai (Beyond silence) - Own work. Licensed under Public Domain via Wikimedia Commons
  • 50. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Deploy in AEM 50 https://svn.apache.org/repos/asf/felix/trunk/webconsole-plugins/subsystems or: copy your .esa file to <aem61>/crx-quickstart/install or: place it in the repository at /libs/system/install
  • 51. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. More info on creating a subsystem §  OSGi Enterprise R6 spec: http://www.osgi.org/Download/Release6 release early August 2015 (proposed final draft http://www.osgi.org/Specifications/Drafts ) §  Apache Aries website http://aries.apache.org/modules/subsystems.html §  esa-maven-plugin http://aries.apache.org/modules/esamavenpluginproject.html §  For examples see: https://github.com/coderthoughts/subsystem-examples 51
  • 52. CIRCUIT – An Adobe Developer Event Presented by ICF Interactive Questions?