SlideShare ist ein Scribd-Unternehmen logo
1 von 31
Downloaden Sie, um offline zu lesen
© IBM Corporation 2012
Hints and Tips for Modularizing Existing Enterprise
Applications
Graham Charters
Graham Charters - Senior Technical Staff Member, WebSphere Application Server
October 2012
© IBM Corporation 2012
Agenda
 Motivation for a Modular Enterprise
 Approaches to OSGi Adoption
 A Staged Approach in Detail
 Summary
2
© IBM Corporation 20123
Java EE modularity is inadequate
Across apps - each archive typically contains
all required libraries
– Common libraries/frameworks get installed
with each application
– Multiple copies of libraries in memory
Within apps - 3rd party libraries
consume other 3rd party libraries
leading to conflicting versions on
the application classpath.
webB.war
WEB-INF/classes/servletB.class
WEB-INF/lib/json4j.jar
WEB-INF/lib/commons-logging.jar
WEB-INF/lib/junit.jar…
webC.war
WEB-INF/classes/servletC.class
WEB-INF/lib/json4j.jar
WEB-INF/lib/commons-logging.jar
WEB-INF/lib/junit.jar…
plankton.v1
plankton.v2
Modularity Issues in Java EE
© IBM Corporation 2012
Enterprise OSGi
Specifications are growing coverage
 First specification released 2010 added:
– Web Applications (WAR -> WAB)
– JNDI (including OSGi Service scheme)
– Transactions
– Blueprint (inspired by Spring)
– Remote Services
 Second specification released 2012, added:
– Subsystems (standard application model)
– Repository
– Resolver
 Work in the pipeline
– EJB
– CDI
– Blueprint transactions
– Blueprint enhancements
 Platforms are plugging the gaps: Apache Aries, Eclipse Virgo, Apache Geronimo,
WebSphere Application Server, JBoss AS, Glassfish, ... your mileage may vary...
4
© IBM Corporation 2012
A Staged Approach
 Lots of good reasons to improve modularity but don‟t have to achieve all in one go
– “Big bang” =often=> “damp squib”
 Incremental successes are successes that help build and sustain momentum
 A bad practice may still be a better practice (a means to an end)
5
A
CB
D
How?
© IBM Corporation 2012
Useful Tools
 Many tools help with OSGi development, including bundle generation from simple
configuration
– Rational Application Developer
– IBM WebSphere Application Server V8.5 Developer Tools V8.5
– BND
– BNDTools
– Maven-bundle-plugin
– BND Ant Task
– ...
 Example taken from modularizing the Apache Geronimo DayTrader application.
 DayTrader is built using maven and so maven-bundle-plugin snippets are used throughout.
6
© IBM Corporation 2012
Strategies
 A number of possible approaches:
– Hargrave & Kriens: “Single Bundle”
– Feng & Charters: “One to One”
– Nottingham & Charters: “Fragments” (a “work in progress”)
7
© IBM Corporation 2012
application
Hargrave & Kriens
 JavaOne 2008: http://www.osgi.org/wiki/uploads/Links/TS-5122.pdf
 Approach Summary:
1. Single bundle project with all dependent jars on Bundle-Classpath
2. Over time, pull out dependent jars as bundles
 Focuses on Java SE:
– Does not consider Java EE classloaders
– Does not consider Java EE component models
 Surfaces OSGi slower, but delivers incremental benefits
8
bundle
bundle
log
entities log
core ejb3
entities log
core ejb3
entities
core ejb3
© IBM Corporation 2012
Feng & Charters
 ApacheCon 2009:
http://people.apache.org/~lresende/presentations/felix%20goes%20to%20tuscany.pdf
 Approach Summary:
1. Convert each build module directly to an OSGi Bundle
2. Analyze and refactor
 Focused on Java SE
– No consideration for Java EE classloaders
– No consideration for Java EE component models
 Motivated by need to deliver assembly subsets
 Surfaces OSGi early, but longer lead-time to first success
9
beans
core
ejb3
entities
json-proxy
soap
wsappclient
streamer
web
beans
core
ejb3
entities
json-proxy
soap
wsappclient
streamer
web
core
ejb3
entities
json-proxy
soap
wsappclient
streamer
web
log
log
© IBM Corporation 2012
Nottingham & Charters
 EclipseCon 2012: this deck
 Approach Summary:
1. Replicate existing classloading in OSGi using bundle fragments
2. Incrementally separate out individual bundles
3. Adopt OSGi best practices
 Considers Java EE classloading and component models
 Surfaces OSGi early, and incrementally - a staged approach
10
beans
core
ejb3
entities
json-proxy
soap
wsappclient
streamer
web
app-host
logcoreejb3
wab
web
app-host
logcoreejb3
wab
web
log
© IBM Corporation 2012
Stage 1: Understanding the starting point
 Java EE prescribes a hierarchical classloading
model
 Assuming “parent first” and “multiple”:
– Each Application has own classloader
– Each WAR has own class loader
– WAR has visibility to Application classes
– WAR prefers Application classs,
Application prefers System classes, etc...
 OSGi modularity enforced through class
visibility using classloaders
 Migration strategies need to consider the
impact of this change
– e.g. replicate visibility relationships of
existing application in OSGi
11
Bootstrap
Extensions
System
Application Application
WAR WAR WAR
© IBM Corporation 2012
Replicating Java EE classloading: Classloaders
 Preserve Application and WAR roles
 Application -> Application Host Bundle
– Add application modules to fragments
of host bundle
 Web App Archive -> Web Application
Bundle
– Add WEB-INF/classes to Bundle-
Classpath
– Extract WEB-INF/lib jars and add as
fragments of Web Application Bundle
 We now have two classloaders just as we
did in Java EE 
 We also have full visibility of the modules
12
System
Application
WAR
app-host
logcoreejb3
wab
web
© IBM Corporation 2012
Maven-bundle-plugin - Application Host Bundle Example
13
...
<parent>
...
</parent>
<packaging>bundle</packaging>
<groupId>org.apache.geronimo.daytrader.modules</groupId>
<artifactId>app-host</artifactId>
<version>0.1</version>
<name>DayTrader :: Modules – Application</name>
<description>DayTrader Application Module</description>
<dependencies>
...
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<configuration>
<instructions>
...
</instructions>
</configuration>
</plugin>
</plugins>
</build>
</project>
bundle artefact type to be built
plugin uses this as default bundle
metadata
the dependencies to build against
extra bundle configuration
(e.g. exports, imports, etc)
© IBM Corporation 2012
Maven-bundle-plugin - Fragment Bundle Example
14
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<configuration>
<instructions>
<Fragment-Host>org.apache.geronimo.daytrader.modules.daytrader-app-host</Fragment-Host>
</instructions>
</configuration>
</plugin>
Fragment-Host: org.apache.geronimo.daytrader.modules.daytrader-app-host
© IBM Corporation 2012
Replicating Java EE classloading: Delegation
 App and wab can‟t see the container
apis from the System Classloader
 Wab can‟t see app classes
 Solution:
– Add package imports for container
packages to app and wab
– Add package exports to app-host
fragments required by wab
– Add require bundle from wab to app
 Note: delegation semantics are not
identical to Java EE
– WAS provides all imported packages
(close to “parent-first”)
– Bundle provides everything else
– Now have control over what wab &
app-host see from the System
classloader
15
System
app-host
wab
X
X
X
© IBM Corporation 2012
Determining the Container APIs (System Classloader)
Warning: This step will vary depending on target server
 <was_install>/dev contains the APIs in was_public.jar and JavaEE/jee.jar
 Take Export-Package entries and add as Import-Package entries on app and wab
bundles
 If using BND-based tools then can wildcard values (e.g. com.ibm.*, javax.*)
 <was_install>/dev includes a pom for WAS API for maven development (available
since v8.0)
 Applications should not rely on packages not defined in <was_install>/dev
16
© IBM Corporation 2012
Maven-bundle-plugin: Container delegation
17
<Import-Package>
<!-- from was_public.jar -->
com.ibm.*,
...
<!-- from jdk & jee.jar -->
javax.*
</Import-Package>
Import-Package:
com.ibm.websphere.ActivitySession;version="1.1.0",
...
javax.xml.rpc.server;version="1.1.0",
javax.xml.rpc.soap;version="1.1.0"
maven-bundle-plugin
(pom.xml)
daytrader-app.jar
META-INF/MANIFEST.MF
mvn install:install-file -DgroupId=com.ibm.websphere.appserver -DartifactId=was_public -Dversion=8.5 -
Dpackaging=jar -Dfile=was_public-8.5.0.jar
<dependency>
<groupId>com.ibm.websphere.appserver</groupId>
<artifactId>was_public</artifactId>
<version>8.5</version>
</dependency>
maven dependency
on WAS API
© IBM Corporation 2012
Maven-bundle-plugin: WAB to App Delegation
 Fragment exports (daytrader package naming allowed wildcarding)
 Wab Require-Bundle
18
<instructions>
<Fragment-Host>org.apache.geronimo.daytrader.modules.daytrader-app-host</Fragment-Host>
<Export-Package>org.apache.geronimo.samples.daytrader.core*</Export-Package>
</instructions>
<instructions>
<Require-Bundle>org.apache.geronimo.daytrader.modules.daytrader-app-host</Require-Bundle>
</instructions>
app-host
wab
Export-Package: ...
Require-Bundle:
app-host
core
log
entities
ejb3
logcoreejb3
© IBM Corporation 2012
A Note on Require-Bundle
 Uses
– Merge split package
– When there‟ll only ever be one provider (e.g. extension points)
 Considered bad practice because:
– The required bundle can change what it provides - brittle in the face of refactoring
19
© IBM Corporation 2012
Extenders: Enabling Component Models
 Web Components, EJBs, Persistence Contexts, Blueprint Beans all handled by extenders
 Extenders look inside bundles for code/metadata to process
 Extenders typically require a bundle to „opt in‟ using a manifest header
– host must opt-in
 JPA entities not permitted to come from fragments: “...any entity classes must originate in
the bundle’s JAR, it cannot come from a fragment.”
20
<!-- maven-bundle-plugin configuration snippet-->
<instructions>
<!-- Opt in for Web Extender -->
<Web-ContextPath>/daytrader</Web-ContextPath>
</instructions>
Tip: <<EMPTY>> allows empty header in BND (needs a recent version
of maven-bundle-plugin)
app-host
wab
Web-ContextPath:
/daytrader
Export-EJB:
<!-- maven-bundle-plugin configuration snippet-->
<instructions>
...
<!-- Opt in for EJB Extender -->
<Export-EJB>&lt;&lt;EMPTY&gt;&gt;</Export-EJB>
</instructions>
© IBM Corporation 2012
daytrader.eba
OSGi Application
Warning: this step will vary depending
on target server
 Servers typically enable a deployment
artefact and build tools for an
application
 Example was targeting WebSphere,
so used a .eba (a zip file with an
application manifest)
– RAD/WDT tools make
development simple
– Ant zip task and eba-maven-
plugin (Apache Aries) can also be
used in builds
wab app-host
Application-Name: DayTrader Application
Application-SymbolicName:
org.apache.aries.samples.daytrader
Application-ManifestVersion: 1
Application-Version: 0.1
Manifest-Version: 1.0
Application-Content:
daytrader.app;version="[0.1,1.0)",
daytrader.wab;version="[0.1,1.0)"
<plugin>
<groupId>org.apache.aries</groupId>
<artifactId>eba-maven-plugin</artifactId>
<version>0.4-SNAPSHOT</version>
<extensions>true</extensions>
<configuration>
<generateManifest>true</generateManifest>
<instructions>
<Application-SymbolicName>
${project.artifactId}
</Application-SymbolicName>
</instructions>
</configuration>
</plugin>
© IBM Corporation 2012
Stage 2: Factoring out Bundles
 Now the application‟s running in OSGi we can start to split out the fragments as
independent, re-usable bundles
 Strategy:
– Do one fragment at a time
– Start with the leaf dependencies
• Wab bundle contents first, then the app bundle
• Project build dependencies help with identification
• Third-party libraries
• “shared libraries” (if runtime supports this concept)
– Detach from host and calculate the package imports & exports
22
wab
web
wab
web
Fragment-Host: wab Export-Package: daytrader.web
Import-Package: daytrader.web
© IBM Corporation 2012
Split Package Strategies
 A split package is a package exported by more than one provider where the contents differ
– Sub-set/superset relationship - e.g. javax.transactions
– Intersecting or non-intersecting subsets
– Not different releases
 Split packages hint at poor modularity or naming
 Consumers often need access to all providers, but OSGi Import-Package will only wire to
one
 Solution:
– Combine jars with split packages into a single bundle
• Multiple jars on single Bundle-Classpath or
• Fragment Bundles attached to a single host
 This approach is tactical and is addressed in Stage 3
23
log
Bundle-Classpath: .,
A.jar. B.jar
Export-Package: p
A B
p p
© IBM Corporation 2012
Converting Jars to Bundles
 Using RAD/WDT?
– Convert Java projects to OSGi Bundle
Projects (also works for EJB and WAR)
– Or import “Java Archive into OSGi
Bundle”
• Wraps Jar in a Bundle
 Using maven or ant?
– Modify build to produce bundles (e.g.
maven-bundle-plugin or bnd in ant task)
– Use wild-cards to generate initial
imports/exports then refine...
24
<packaging>bundle</packaging>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<configuration>
<instructions>
...
</instructions>
</configuration>
</plugin>
© IBM Corporation 2012
Third-party Libraries
 Applications often use third-party libraries, such as open source
– DayTrader uses commons.logging
 Many now come with OSGi metadata
 Most others have been bundlized by repository projects
– Eclipse Orbit - bundlized, pedigree reviewed for Eclipse projects
– Apache Felix Commons
– SpringSource Enterprise Bundle Repository
 or by other OSGi-based projects
– Apache Tuscany
– Apache ServiceMix
– Ops4J Pax *
 Use these if available
 But what if you can‟t find a bundlized library...?
25
© IBM Corporation 2012
Bundlizing third-party libraries
 Use tools to calculate manifest
– RAD/WDT -
Import -> Java Archive into an OSGi Bundle
– BND
– Refine Imports/Exports
 If library required to work inside and outside
OSGi?
– inject OSGi manifest into existing jar
– Doesn‟t work for signed Jars
– Can‟t aggregate multiple Jars
 If library only required to work in OSGi
– Wrap jar in bundle (add jar to Bundle-
Classpath)
– Works for signed jars
– Can aggregate multiple jars, if necessary
26
log
log Export-Package: org.c...
log
log
Bundle-Classpath: .,
log.jar
Export-Package: org.c...
log
org/apache/commons/...
inject
wrap
© IBM Corporation 2012
The story so far...
 The first two stages have:
– Taken Java EE application and run
in OSGi
– Decomposed single deployment
artefact into multiple bundles
 Now have the potential to:
– Understand the application architecture;
modules used and their relationships (OSGi
Application Console)
– Remove duplicate deployment binaries (single
bundle in repository)
– Remove duplicate runtime binaries (share
bundle in server)
– Reduce operational costs and errors - deploy
shared binaries based on application needs
– Determine which binaries are in use (e.g. to
apply critical fix)
 But there‟s more...
27
© IBM Corporation 2012
Stage 3: Incrementally Adopt Best Practices
 Stage 2 documents the „as-is‟ architecture, warts-„n‟-all
 OSGi Best Practices show how to make the most of OSGi
– Hopefully you attended Emily Jiang‟s session
– http://www.ibm.com/developerworks/websphere/techjournal/1007_charters/1007_charters.html
 Adopting best practices leads to:
– High cohesion - bundles with clear and distinct roles in the architecture
– Loose coupling - flexible, but necessary, dependencies
 ...which all leads to greater agility, flexibility and re-use
– Development teams can understand and explain the architecture and are no longer
afraid to change the code
– Applications can evolve and new application can be created at a pace that enables,
rather than inhibits, the business
28
© IBM Corporation 2012
Summary
 Moving enterprise applications to OSGi helps:
– increase understanding of application architecture
– increase module cohesiveness
– reduce module coupling
 Leads to greater application agility through re-use and understanding of impact of change
 A staged approach to adoption delivers value sooner and in-line with investment
 With the wealth of tools, runtimes, and existing assets, it‟s never been easier to adopt OSGi
 What OSGi could do to better:
– Enable „fragments‟ to define everything except a classloader
– Enable JPA entities in fragments
29
© IBM Corporation 2012
Questions
30
© IBM Corporation 2012
Trademarks
 Eclipse and the Eclipse logo are trademarks of Eclipse Foundation, Inc.
 Apache, Apache Felix, Felix, the Apache Felix project logo, Apache Tuscany and the
Apache Tuscany project logo are trademarks of The Apache Software Foundation.
 Java and all Java-based trademarks and logos are trademarks or registered trademarks of
Oracle and/or its affiliates.
 IBM and the IBM logo are trademarks of International Business Machines Corporation,
registered in many jurisdictions.
 Other marks may be trademarks or registered trademarks of their respective owners.
31

Weitere ähnliche Inhalte

Was ist angesagt?

The Power of Enterprise Java Frameworks
The Power of Enterprise Java FrameworksThe Power of Enterprise Java Frameworks
The Power of Enterprise Java FrameworksClarence Ho
 
Spring core module
Spring core moduleSpring core module
Spring core moduleRaj Tomar
 
JavaOne 2012 CON3978 Scripting Languages on the JVM
JavaOne 2012 CON3978 Scripting Languages on the JVMJavaOne 2012 CON3978 Scripting Languages on the JVM
JavaOne 2012 CON3978 Scripting Languages on the JVMPaulThwaite
 
JavaOne 2012 CON 3961 Innovative Testing Techniques Using Bytecode Instrument...
JavaOne 2012 CON 3961 Innovative Testing Techniques Using Bytecode Instrument...JavaOne 2012 CON 3961 Innovative Testing Techniques Using Bytecode Instrument...
JavaOne 2012 CON 3961 Innovative Testing Techniques Using Bytecode Instrument...PaulThwaite
 
Java 9 Modularity and Project Jigsaw
Java 9 Modularity and Project JigsawJava 9 Modularity and Project Jigsaw
Java 9 Modularity and Project JigsawComsysto Reply GmbH
 
Apache MyFaces 1.2 Web Application Development
Apache MyFaces 1.2 Web Application DevelopmentApache MyFaces 1.2 Web Application Development
Apache MyFaces 1.2 Web Application DevelopmentBart Kummel
 
Hibernate complete notes_by_sekhar_sir_javabynatara_j
Hibernate complete notes_by_sekhar_sir_javabynatara_jHibernate complete notes_by_sekhar_sir_javabynatara_j
Hibernate complete notes_by_sekhar_sir_javabynatara_jSatya Johnny
 
Next-Generation Enterprise Application Development with SpringSource dm Serve...
Next-Generation Enterprise Application Development with SpringSource dm Serve...Next-Generation Enterprise Application Development with SpringSource dm Serve...
Next-Generation Enterprise Application Development with SpringSource dm Serve...Aditya Jha
 
Java & J2EE Struts with Hibernate Framework
Java & J2EE Struts with Hibernate FrameworkJava & J2EE Struts with Hibernate Framework
Java & J2EE Struts with Hibernate FrameworkMohit Belwal
 
What Is Spring Framework In Java | Spring Framework Tutorial For Beginners Wi...
What Is Spring Framework In Java | Spring Framework Tutorial For Beginners Wi...What Is Spring Framework In Java | Spring Framework Tutorial For Beginners Wi...
What Is Spring Framework In Java | Spring Framework Tutorial For Beginners Wi...Edureka!
 
Spring framework-tutorial
Spring framework-tutorialSpring framework-tutorial
Spring framework-tutorialvinayiqbusiness
 
Hibernate Interview Questions
Hibernate Interview QuestionsHibernate Interview Questions
Hibernate Interview QuestionsSyed Shahul
 
Introduction to Spring Framework
Introduction to Spring FrameworkIntroduction to Spring Framework
Introduction to Spring FrameworkHùng Nguyễn Huy
 
JavaOne - 10 Tips for Java EE 7 with PrimeFaces
JavaOne - 10 Tips for Java EE 7 with PrimeFacesJavaOne - 10 Tips for Java EE 7 with PrimeFaces
JavaOne - 10 Tips for Java EE 7 with PrimeFacesMert Çalışkan
 
Towards a modularity maturity model - osgi users forum uk 16-nov2011
Towards a modularity maturity model - osgi users forum uk 16-nov2011Towards a modularity maturity model - osgi users forum uk 16-nov2011
Towards a modularity maturity model - osgi users forum uk 16-nov2011mfrancis
 

Was ist angesagt? (20)

Java Spring
Java SpringJava Spring
Java Spring
 
Java spring ppt
Java spring pptJava spring ppt
Java spring ppt
 
The Power of Enterprise Java Frameworks
The Power of Enterprise Java FrameworksThe Power of Enterprise Java Frameworks
The Power of Enterprise Java Frameworks
 
Spring core module
Spring core moduleSpring core module
Spring core module
 
Code One 2018 maven
Code One 2018   mavenCode One 2018   maven
Code One 2018 maven
 
Spring notes
Spring notesSpring notes
Spring notes
 
JavaOne 2012 CON3978 Scripting Languages on the JVM
JavaOne 2012 CON3978 Scripting Languages on the JVMJavaOne 2012 CON3978 Scripting Languages on the JVM
JavaOne 2012 CON3978 Scripting Languages on the JVM
 
JavaOne 2012 CON 3961 Innovative Testing Techniques Using Bytecode Instrument...
JavaOne 2012 CON 3961 Innovative Testing Techniques Using Bytecode Instrument...JavaOne 2012 CON 3961 Innovative Testing Techniques Using Bytecode Instrument...
JavaOne 2012 CON 3961 Innovative Testing Techniques Using Bytecode Instrument...
 
Java 9 Modularity and Project Jigsaw
Java 9 Modularity and Project JigsawJava 9 Modularity and Project Jigsaw
Java 9 Modularity and Project Jigsaw
 
Apache MyFaces 1.2 Web Application Development
Apache MyFaces 1.2 Web Application DevelopmentApache MyFaces 1.2 Web Application Development
Apache MyFaces 1.2 Web Application Development
 
Hibernate complete notes_by_sekhar_sir_javabynatara_j
Hibernate complete notes_by_sekhar_sir_javabynatara_jHibernate complete notes_by_sekhar_sir_javabynatara_j
Hibernate complete notes_by_sekhar_sir_javabynatara_j
 
Next-Generation Enterprise Application Development with SpringSource dm Serve...
Next-Generation Enterprise Application Development with SpringSource dm Serve...Next-Generation Enterprise Application Development with SpringSource dm Serve...
Next-Generation Enterprise Application Development with SpringSource dm Serve...
 
Java & J2EE Struts with Hibernate Framework
Java & J2EE Struts with Hibernate FrameworkJava & J2EE Struts with Hibernate Framework
Java & J2EE Struts with Hibernate Framework
 
What Is Spring Framework In Java | Spring Framework Tutorial For Beginners Wi...
What Is Spring Framework In Java | Spring Framework Tutorial For Beginners Wi...What Is Spring Framework In Java | Spring Framework Tutorial For Beginners Wi...
What Is Spring Framework In Java | Spring Framework Tutorial For Beginners Wi...
 
Spring framework-tutorial
Spring framework-tutorialSpring framework-tutorial
Spring framework-tutorial
 
Hibernate Interview Questions
Hibernate Interview QuestionsHibernate Interview Questions
Hibernate Interview Questions
 
Introduction to Spring Framework
Introduction to Spring FrameworkIntroduction to Spring Framework
Introduction to Spring Framework
 
JavaOne - 10 Tips for Java EE 7 with PrimeFaces
JavaOne - 10 Tips for Java EE 7 with PrimeFacesJavaOne - 10 Tips for Java EE 7 with PrimeFaces
JavaOne - 10 Tips for Java EE 7 with PrimeFaces
 
Java modularization
Java modularizationJava modularization
Java modularization
 
Towards a modularity maturity model - osgi users forum uk 16-nov2011
Towards a modularity maturity model - osgi users forum uk 16-nov2011Towards a modularity maturity model - osgi users forum uk 16-nov2011
Towards a modularity maturity model - osgi users forum uk 16-nov2011
 

Ähnlich wie Hints and Tips for Modularizing Existing Enterprise Applications with OSGi - Graham Chaters

Best Practices for Enterprise OSGi Applications - Emily Jiang
Best Practices for Enterprise OSGi Applications - Emily JiangBest Practices for Enterprise OSGi Applications - Emily Jiang
Best Practices for Enterprise OSGi Applications - Emily Jiangmfrancis
 
"Micro-frontends: Scalable and Modular Frontend in Parimatch Tech", Kyrylo Ai...
"Micro-frontends: Scalable and Modular Frontend in Parimatch Tech", Kyrylo Ai..."Micro-frontends: Scalable and Modular Frontend in Parimatch Tech", Kyrylo Ai...
"Micro-frontends: Scalable and Modular Frontend in Parimatch Tech", Kyrylo Ai...Fwdays
 
Custom Buildpacks and Data Services
Custom Buildpacks and Data ServicesCustom Buildpacks and Data Services
Custom Buildpacks and Data ServicesTom Kranz
 
Part 4: Custom Buildpacks and Data Services (Pivotal Cloud Platform Roadshow)
Part 4: Custom Buildpacks and Data Services (Pivotal Cloud Platform Roadshow)Part 4: Custom Buildpacks and Data Services (Pivotal Cloud Platform Roadshow)
Part 4: Custom Buildpacks and Data Services (Pivotal Cloud Platform Roadshow)VMware Tanzu
 
Monoliths are so 2001 – What you need is Modularity
Monoliths are so 2001 – What you need is ModularityMonoliths are so 2001 – What you need is Modularity
Monoliths are so 2001 – What you need is ModularityGraham Charters
 
Modules all the way down: OSGi and the Java Platform Module System
Modules all the way down: OSGi and the Java Platform Module SystemModules all the way down: OSGi and the Java Platform Module System
Modules all the way down: OSGi and the Java Platform Module SystemTim Ellison
 
DevNexus 2017 - Building and Deploying 12 Factor Apps in Scala, Java, Ruby, a...
DevNexus 2017 - Building and Deploying 12 Factor Apps in Scala, Java, Ruby, a...DevNexus 2017 - Building and Deploying 12 Factor Apps in Scala, Java, Ruby, a...
DevNexus 2017 - Building and Deploying 12 Factor Apps in Scala, Java, Ruby, a...Neil Shannon
 
DevNexus 2019: Migrating to Java 11
DevNexus 2019: Migrating to Java 11DevNexus 2019: Migrating to Java 11
DevNexus 2019: Migrating to Java 11DaliaAboSheasha
 
Chris OBrien - Pitfalls when developing with the SharePoint Framework (SPFx)
Chris OBrien - Pitfalls when developing with the SharePoint Framework (SPFx)Chris OBrien - Pitfalls when developing with the SharePoint Framework (SPFx)
Chris OBrien - Pitfalls when developing with the SharePoint Framework (SPFx)Chris O'Brien
 
Spring Architecture | Advanced Java
Spring Architecture | Advanced JavaSpring Architecture | Advanced Java
Spring Architecture | Advanced JavaVISHAL DONGA
 
GR8Conf 2011: Adopting Grails
GR8Conf 2011: Adopting GrailsGR8Conf 2011: Adopting Grails
GR8Conf 2011: Adopting GrailsGR8Conf
 
Adopting Grails - GR8Conf Europe
Adopting Grails - GR8Conf EuropeAdopting Grails - GR8Conf Europe
Adopting Grails - GR8Conf EuropeKlausBaumecker
 
An Introduction to Maven and Flex
An Introduction to Maven and FlexAn Introduction to Maven and Flex
An Introduction to Maven and FlexJustin J. Moses
 
Maven 2.0 - Project management and comprehension tool
Maven 2.0 - Project management and comprehension toolMaven 2.0 - Project management and comprehension tool
Maven 2.0 - Project management and comprehension toolelliando dias
 
eXo Platform SEA - Play Framework Introduction
eXo Platform SEA - Play Framework IntroductioneXo Platform SEA - Play Framework Introduction
eXo Platform SEA - Play Framework Introductionvstorm83
 
[Patel] SPFx: An ISV Insight into latest Microsoft's customization model
[Patel] SPFx: An ISV Insight into latest Microsoft's customization model[Patel] SPFx: An ISV Insight into latest Microsoft's customization model
[Patel] SPFx: An ISV Insight into latest Microsoft's customization modelEuropean Collaboration Summit
 
Java 9 and the impact on Maven Projects (JavaOne 2016)
Java 9 and the impact on Maven Projects (JavaOne 2016)Java 9 and the impact on Maven Projects (JavaOne 2016)
Java 9 and the impact on Maven Projects (JavaOne 2016)Robert Scholte
 

Ähnlich wie Hints and Tips for Modularizing Existing Enterprise Applications with OSGi - Graham Chaters (20)

Best Practices for Enterprise OSGi Applications - Emily Jiang
Best Practices for Enterprise OSGi Applications - Emily JiangBest Practices for Enterprise OSGi Applications - Emily Jiang
Best Practices for Enterprise OSGi Applications - Emily Jiang
 
"Micro-frontends: Scalable and Modular Frontend in Parimatch Tech", Kyrylo Ai...
"Micro-frontends: Scalable and Modular Frontend in Parimatch Tech", Kyrylo Ai..."Micro-frontends: Scalable and Modular Frontend in Parimatch Tech", Kyrylo Ai...
"Micro-frontends: Scalable and Modular Frontend in Parimatch Tech", Kyrylo Ai...
 
Custom Buildpacks and Data Services
Custom Buildpacks and Data ServicesCustom Buildpacks and Data Services
Custom Buildpacks and Data Services
 
Part 4: Custom Buildpacks and Data Services (Pivotal Cloud Platform Roadshow)
Part 4: Custom Buildpacks and Data Services (Pivotal Cloud Platform Roadshow)Part 4: Custom Buildpacks and Data Services (Pivotal Cloud Platform Roadshow)
Part 4: Custom Buildpacks and Data Services (Pivotal Cloud Platform Roadshow)
 
Monoliths are so 2001 – What you need is Modularity
Monoliths are so 2001 – What you need is ModularityMonoliths are so 2001 – What you need is Modularity
Monoliths are so 2001 – What you need is Modularity
 
Modules all the way down: OSGi and the Java Platform Module System
Modules all the way down: OSGi and the Java Platform Module SystemModules all the way down: OSGi and the Java Platform Module System
Modules all the way down: OSGi and the Java Platform Module System
 
DevNexus 2017 - Building and Deploying 12 Factor Apps in Scala, Java, Ruby, a...
DevNexus 2017 - Building and Deploying 12 Factor Apps in Scala, Java, Ruby, a...DevNexus 2017 - Building and Deploying 12 Factor Apps in Scala, Java, Ruby, a...
DevNexus 2017 - Building and Deploying 12 Factor Apps in Scala, Java, Ruby, a...
 
Webpack: from 0 to 2
Webpack: from 0 to 2Webpack: from 0 to 2
Webpack: from 0 to 2
 
DevNexus 2019: Migrating to Java 11
DevNexus 2019: Migrating to Java 11DevNexus 2019: Migrating to Java 11
DevNexus 2019: Migrating to Java 11
 
Chris OBrien - Pitfalls when developing with the SharePoint Framework (SPFx)
Chris OBrien - Pitfalls when developing with the SharePoint Framework (SPFx)Chris OBrien - Pitfalls when developing with the SharePoint Framework (SPFx)
Chris OBrien - Pitfalls when developing with the SharePoint Framework (SPFx)
 
Spring Architecture | Advanced Java
Spring Architecture | Advanced JavaSpring Architecture | Advanced Java
Spring Architecture | Advanced Java
 
GR8Conf 2011: Adopting Grails
GR8Conf 2011: Adopting GrailsGR8Conf 2011: Adopting Grails
GR8Conf 2011: Adopting Grails
 
Adopting Grails - GR8Conf Europe
Adopting Grails - GR8Conf EuropeAdopting Grails - GR8Conf Europe
Adopting Grails - GR8Conf Europe
 
An Introduction to Maven and Flex
An Introduction to Maven and FlexAn Introduction to Maven and Flex
An Introduction to Maven and Flex
 
Maven 2.0 - Project management and comprehension tool
Maven 2.0 - Project management and comprehension toolMaven 2.0 - Project management and comprehension tool
Maven 2.0 - Project management and comprehension tool
 
eXo Platform SEA - Play Framework Introduction
eXo Platform SEA - Play Framework IntroductioneXo Platform SEA - Play Framework Introduction
eXo Platform SEA - Play Framework Introduction
 
Java Spring Framework
Java Spring FrameworkJava Spring Framework
Java Spring Framework
 
[Patel] SPFx: An ISV Insight into latest Microsoft's customization model
[Patel] SPFx: An ISV Insight into latest Microsoft's customization model[Patel] SPFx: An ISV Insight into latest Microsoft's customization model
[Patel] SPFx: An ISV Insight into latest Microsoft's customization model
 
What's new in p2 (2009)?
What's new in p2 (2009)?What's new in p2 (2009)?
What's new in p2 (2009)?
 
Java 9 and the impact on Maven Projects (JavaOne 2016)
Java 9 and the impact on Maven Projects (JavaOne 2016)Java 9 and the impact on Maven Projects (JavaOne 2016)
Java 9 and the impact on Maven Projects (JavaOne 2016)
 

Mehr von mfrancis

Eclipse Modeling Framework and plain OSGi the easy way - Mark Hoffman (Data I...
Eclipse Modeling Framework and plain OSGi the easy way - Mark Hoffman (Data I...Eclipse Modeling Framework and plain OSGi the easy way - Mark Hoffman (Data I...
Eclipse Modeling Framework and plain OSGi the easy way - Mark Hoffman (Data I...mfrancis
 
OSGi and Java 9+ - BJ Hargrave (IBM)
OSGi and Java 9+ - BJ Hargrave (IBM)OSGi and Java 9+ - BJ Hargrave (IBM)
OSGi and Java 9+ - BJ Hargrave (IBM)mfrancis
 
Simplify Web UX Coding using OSGi Modularity Magic - Paul Fraser (A2Z Living)
Simplify Web UX Coding using OSGi Modularity Magic - Paul Fraser (A2Z Living)Simplify Web UX Coding using OSGi Modularity Magic - Paul Fraser (A2Z Living)
Simplify Web UX Coding using OSGi Modularity Magic - Paul Fraser (A2Z Living)mfrancis
 
OSGi for the data centre - Connecting OSGi to Kubernetes - Frank Lyaruu
OSGi for the data centre - Connecting OSGi to Kubernetes - Frank LyaruuOSGi for the data centre - Connecting OSGi to Kubernetes - Frank Lyaruu
OSGi for the data centre - Connecting OSGi to Kubernetes - Frank Lyaruumfrancis
 
Remote Management and Monitoring of Distributed OSGi Applications - Tim Verbe...
Remote Management and Monitoring of Distributed OSGi Applications - Tim Verbe...Remote Management and Monitoring of Distributed OSGi Applications - Tim Verbe...
Remote Management and Monitoring of Distributed OSGi Applications - Tim Verbe...mfrancis
 
OSGi with Docker - a powerful way to develop Java systems - Udo Hafermann (So...
OSGi with Docker - a powerful way to develop Java systems - Udo Hafermann (So...OSGi with Docker - a powerful way to develop Java systems - Udo Hafermann (So...
OSGi with Docker - a powerful way to develop Java systems - Udo Hafermann (So...mfrancis
 
A real world use case with OSGi R7 - Jurgen Albert (Data In Motion Consulting...
A real world use case with OSGi R7 - Jurgen Albert (Data In Motion Consulting...A real world use case with OSGi R7 - Jurgen Albert (Data In Motion Consulting...
A real world use case with OSGi R7 - Jurgen Albert (Data In Motion Consulting...mfrancis
 
OSGi Feature Model - Where Art Thou - David Bosschaert (Adobe)
OSGi Feature Model - Where Art Thou - David Bosschaert (Adobe)OSGi Feature Model - Where Art Thou - David Bosschaert (Adobe)
OSGi Feature Model - Where Art Thou - David Bosschaert (Adobe)mfrancis
 
Migrating from PDE to Bndtools in Practice - Amit Kumar Mondal (Deutsche Tele...
Migrating from PDE to Bndtools in Practice - Amit Kumar Mondal (Deutsche Tele...Migrating from PDE to Bndtools in Practice - Amit Kumar Mondal (Deutsche Tele...
Migrating from PDE to Bndtools in Practice - Amit Kumar Mondal (Deutsche Tele...mfrancis
 
OSGi CDI Integration Specification - Ray Augé (Liferay)
OSGi CDI Integration Specification - Ray Augé (Liferay)OSGi CDI Integration Specification - Ray Augé (Liferay)
OSGi CDI Integration Specification - Ray Augé (Liferay)mfrancis
 
How OSGi drives cross-sector energy management - Jörn Tümmler (SMA Solar Tech...
How OSGi drives cross-sector energy management - Jörn Tümmler (SMA Solar Tech...How OSGi drives cross-sector energy management - Jörn Tümmler (SMA Solar Tech...
How OSGi drives cross-sector energy management - Jörn Tümmler (SMA Solar Tech...mfrancis
 
Improved developer productivity thanks to Maven and OSGi - Lukasz Dywicki (Co...
Improved developer productivity thanks to Maven and OSGi - Lukasz Dywicki (Co...Improved developer productivity thanks to Maven and OSGi - Lukasz Dywicki (Co...
Improved developer productivity thanks to Maven and OSGi - Lukasz Dywicki (Co...mfrancis
 
It Was Twenty Years Ago Today - Building an OSGi based Smart Home System - Ch...
It Was Twenty Years Ago Today - Building an OSGi based Smart Home System - Ch...It Was Twenty Years Ago Today - Building an OSGi based Smart Home System - Ch...
It Was Twenty Years Ago Today - Building an OSGi based Smart Home System - Ch...mfrancis
 
Popular patterns revisited on OSGi - Christian Schneider (Adobe)
Popular patterns revisited on OSGi - Christian Schneider (Adobe)Popular patterns revisited on OSGi - Christian Schneider (Adobe)
Popular patterns revisited on OSGi - Christian Schneider (Adobe)mfrancis
 
Integrating SLF4J and the new OSGi LogService 1.4 - BJ Hargrave (IBM)
Integrating SLF4J and the new OSGi LogService 1.4 - BJ Hargrave (IBM)Integrating SLF4J and the new OSGi LogService 1.4 - BJ Hargrave (IBM)
Integrating SLF4J and the new OSGi LogService 1.4 - BJ Hargrave (IBM)mfrancis
 
OSG(a)i: because AI needs a runtime - Tim Verbelen (imec)
OSG(a)i: because AI needs a runtime - Tim Verbelen (imec)OSG(a)i: because AI needs a runtime - Tim Verbelen (imec)
OSG(a)i: because AI needs a runtime - Tim Verbelen (imec)mfrancis
 
Flying to Jupiter with OSGi - Tony Walsh (ESA) & Hristo Indzhov (Telespazio V...
Flying to Jupiter with OSGi - Tony Walsh (ESA) & Hristo Indzhov (Telespazio V...Flying to Jupiter with OSGi - Tony Walsh (ESA) & Hristo Indzhov (Telespazio V...
Flying to Jupiter with OSGi - Tony Walsh (ESA) & Hristo Indzhov (Telespazio V...mfrancis
 
MicroProfile, OSGi was meant for this - Ray Auge (Liferay)
MicroProfile, OSGi was meant for this - Ray Auge (Liferay)MicroProfile, OSGi was meant for this - Ray Auge (Liferay)
MicroProfile, OSGi was meant for this - Ray Auge (Liferay)mfrancis
 
Prototyping IoT systems with a hybrid OSGi & Node-RED platform - Bruce Jackso...
Prototyping IoT systems with a hybrid OSGi & Node-RED platform - Bruce Jackso...Prototyping IoT systems with a hybrid OSGi & Node-RED platform - Bruce Jackso...
Prototyping IoT systems with a hybrid OSGi & Node-RED platform - Bruce Jackso...mfrancis
 
How to connect your OSGi application - Dirk Fauth (Bosch)
How to connect your OSGi application - Dirk Fauth (Bosch)How to connect your OSGi application - Dirk Fauth (Bosch)
How to connect your OSGi application - Dirk Fauth (Bosch)mfrancis
 

Mehr von mfrancis (20)

Eclipse Modeling Framework and plain OSGi the easy way - Mark Hoffman (Data I...
Eclipse Modeling Framework and plain OSGi the easy way - Mark Hoffman (Data I...Eclipse Modeling Framework and plain OSGi the easy way - Mark Hoffman (Data I...
Eclipse Modeling Framework and plain OSGi the easy way - Mark Hoffman (Data I...
 
OSGi and Java 9+ - BJ Hargrave (IBM)
OSGi and Java 9+ - BJ Hargrave (IBM)OSGi and Java 9+ - BJ Hargrave (IBM)
OSGi and Java 9+ - BJ Hargrave (IBM)
 
Simplify Web UX Coding using OSGi Modularity Magic - Paul Fraser (A2Z Living)
Simplify Web UX Coding using OSGi Modularity Magic - Paul Fraser (A2Z Living)Simplify Web UX Coding using OSGi Modularity Magic - Paul Fraser (A2Z Living)
Simplify Web UX Coding using OSGi Modularity Magic - Paul Fraser (A2Z Living)
 
OSGi for the data centre - Connecting OSGi to Kubernetes - Frank Lyaruu
OSGi for the data centre - Connecting OSGi to Kubernetes - Frank LyaruuOSGi for the data centre - Connecting OSGi to Kubernetes - Frank Lyaruu
OSGi for the data centre - Connecting OSGi to Kubernetes - Frank Lyaruu
 
Remote Management and Monitoring of Distributed OSGi Applications - Tim Verbe...
Remote Management and Monitoring of Distributed OSGi Applications - Tim Verbe...Remote Management and Monitoring of Distributed OSGi Applications - Tim Verbe...
Remote Management and Monitoring of Distributed OSGi Applications - Tim Verbe...
 
OSGi with Docker - a powerful way to develop Java systems - Udo Hafermann (So...
OSGi with Docker - a powerful way to develop Java systems - Udo Hafermann (So...OSGi with Docker - a powerful way to develop Java systems - Udo Hafermann (So...
OSGi with Docker - a powerful way to develop Java systems - Udo Hafermann (So...
 
A real world use case with OSGi R7 - Jurgen Albert (Data In Motion Consulting...
A real world use case with OSGi R7 - Jurgen Albert (Data In Motion Consulting...A real world use case with OSGi R7 - Jurgen Albert (Data In Motion Consulting...
A real world use case with OSGi R7 - Jurgen Albert (Data In Motion Consulting...
 
OSGi Feature Model - Where Art Thou - David Bosschaert (Adobe)
OSGi Feature Model - Where Art Thou - David Bosschaert (Adobe)OSGi Feature Model - Where Art Thou - David Bosschaert (Adobe)
OSGi Feature Model - Where Art Thou - David Bosschaert (Adobe)
 
Migrating from PDE to Bndtools in Practice - Amit Kumar Mondal (Deutsche Tele...
Migrating from PDE to Bndtools in Practice - Amit Kumar Mondal (Deutsche Tele...Migrating from PDE to Bndtools in Practice - Amit Kumar Mondal (Deutsche Tele...
Migrating from PDE to Bndtools in Practice - Amit Kumar Mondal (Deutsche Tele...
 
OSGi CDI Integration Specification - Ray Augé (Liferay)
OSGi CDI Integration Specification - Ray Augé (Liferay)OSGi CDI Integration Specification - Ray Augé (Liferay)
OSGi CDI Integration Specification - Ray Augé (Liferay)
 
How OSGi drives cross-sector energy management - Jörn Tümmler (SMA Solar Tech...
How OSGi drives cross-sector energy management - Jörn Tümmler (SMA Solar Tech...How OSGi drives cross-sector energy management - Jörn Tümmler (SMA Solar Tech...
How OSGi drives cross-sector energy management - Jörn Tümmler (SMA Solar Tech...
 
Improved developer productivity thanks to Maven and OSGi - Lukasz Dywicki (Co...
Improved developer productivity thanks to Maven and OSGi - Lukasz Dywicki (Co...Improved developer productivity thanks to Maven and OSGi - Lukasz Dywicki (Co...
Improved developer productivity thanks to Maven and OSGi - Lukasz Dywicki (Co...
 
It Was Twenty Years Ago Today - Building an OSGi based Smart Home System - Ch...
It Was Twenty Years Ago Today - Building an OSGi based Smart Home System - Ch...It Was Twenty Years Ago Today - Building an OSGi based Smart Home System - Ch...
It Was Twenty Years Ago Today - Building an OSGi based Smart Home System - Ch...
 
Popular patterns revisited on OSGi - Christian Schneider (Adobe)
Popular patterns revisited on OSGi - Christian Schneider (Adobe)Popular patterns revisited on OSGi - Christian Schneider (Adobe)
Popular patterns revisited on OSGi - Christian Schneider (Adobe)
 
Integrating SLF4J and the new OSGi LogService 1.4 - BJ Hargrave (IBM)
Integrating SLF4J and the new OSGi LogService 1.4 - BJ Hargrave (IBM)Integrating SLF4J and the new OSGi LogService 1.4 - BJ Hargrave (IBM)
Integrating SLF4J and the new OSGi LogService 1.4 - BJ Hargrave (IBM)
 
OSG(a)i: because AI needs a runtime - Tim Verbelen (imec)
OSG(a)i: because AI needs a runtime - Tim Verbelen (imec)OSG(a)i: because AI needs a runtime - Tim Verbelen (imec)
OSG(a)i: because AI needs a runtime - Tim Verbelen (imec)
 
Flying to Jupiter with OSGi - Tony Walsh (ESA) & Hristo Indzhov (Telespazio V...
Flying to Jupiter with OSGi - Tony Walsh (ESA) & Hristo Indzhov (Telespazio V...Flying to Jupiter with OSGi - Tony Walsh (ESA) & Hristo Indzhov (Telespazio V...
Flying to Jupiter with OSGi - Tony Walsh (ESA) & Hristo Indzhov (Telespazio V...
 
MicroProfile, OSGi was meant for this - Ray Auge (Liferay)
MicroProfile, OSGi was meant for this - Ray Auge (Liferay)MicroProfile, OSGi was meant for this - Ray Auge (Liferay)
MicroProfile, OSGi was meant for this - Ray Auge (Liferay)
 
Prototyping IoT systems with a hybrid OSGi & Node-RED platform - Bruce Jackso...
Prototyping IoT systems with a hybrid OSGi & Node-RED platform - Bruce Jackso...Prototyping IoT systems with a hybrid OSGi & Node-RED platform - Bruce Jackso...
Prototyping IoT systems with a hybrid OSGi & Node-RED platform - Bruce Jackso...
 
How to connect your OSGi application - Dirk Fauth (Bosch)
How to connect your OSGi application - Dirk Fauth (Bosch)How to connect your OSGi application - Dirk Fauth (Bosch)
How to connect your OSGi application - Dirk Fauth (Bosch)
 

Kürzlich hochgeladen

08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessPixlogix Infotech
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 

Kürzlich hochgeladen (20)

08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 

Hints and Tips for Modularizing Existing Enterprise Applications with OSGi - Graham Chaters

  • 1. © IBM Corporation 2012 Hints and Tips for Modularizing Existing Enterprise Applications Graham Charters Graham Charters - Senior Technical Staff Member, WebSphere Application Server October 2012
  • 2. © IBM Corporation 2012 Agenda  Motivation for a Modular Enterprise  Approaches to OSGi Adoption  A Staged Approach in Detail  Summary 2
  • 3. © IBM Corporation 20123 Java EE modularity is inadequate Across apps - each archive typically contains all required libraries – Common libraries/frameworks get installed with each application – Multiple copies of libraries in memory Within apps - 3rd party libraries consume other 3rd party libraries leading to conflicting versions on the application classpath. webB.war WEB-INF/classes/servletB.class WEB-INF/lib/json4j.jar WEB-INF/lib/commons-logging.jar WEB-INF/lib/junit.jar… webC.war WEB-INF/classes/servletC.class WEB-INF/lib/json4j.jar WEB-INF/lib/commons-logging.jar WEB-INF/lib/junit.jar… plankton.v1 plankton.v2 Modularity Issues in Java EE
  • 4. © IBM Corporation 2012 Enterprise OSGi Specifications are growing coverage  First specification released 2010 added: – Web Applications (WAR -> WAB) – JNDI (including OSGi Service scheme) – Transactions – Blueprint (inspired by Spring) – Remote Services  Second specification released 2012, added: – Subsystems (standard application model) – Repository – Resolver  Work in the pipeline – EJB – CDI – Blueprint transactions – Blueprint enhancements  Platforms are plugging the gaps: Apache Aries, Eclipse Virgo, Apache Geronimo, WebSphere Application Server, JBoss AS, Glassfish, ... your mileage may vary... 4
  • 5. © IBM Corporation 2012 A Staged Approach  Lots of good reasons to improve modularity but don‟t have to achieve all in one go – “Big bang” =often=> “damp squib”  Incremental successes are successes that help build and sustain momentum  A bad practice may still be a better practice (a means to an end) 5 A CB D How?
  • 6. © IBM Corporation 2012 Useful Tools  Many tools help with OSGi development, including bundle generation from simple configuration – Rational Application Developer – IBM WebSphere Application Server V8.5 Developer Tools V8.5 – BND – BNDTools – Maven-bundle-plugin – BND Ant Task – ...  Example taken from modularizing the Apache Geronimo DayTrader application.  DayTrader is built using maven and so maven-bundle-plugin snippets are used throughout. 6
  • 7. © IBM Corporation 2012 Strategies  A number of possible approaches: – Hargrave & Kriens: “Single Bundle” – Feng & Charters: “One to One” – Nottingham & Charters: “Fragments” (a “work in progress”) 7
  • 8. © IBM Corporation 2012 application Hargrave & Kriens  JavaOne 2008: http://www.osgi.org/wiki/uploads/Links/TS-5122.pdf  Approach Summary: 1. Single bundle project with all dependent jars on Bundle-Classpath 2. Over time, pull out dependent jars as bundles  Focuses on Java SE: – Does not consider Java EE classloaders – Does not consider Java EE component models  Surfaces OSGi slower, but delivers incremental benefits 8 bundle bundle log entities log core ejb3 entities log core ejb3 entities core ejb3
  • 9. © IBM Corporation 2012 Feng & Charters  ApacheCon 2009: http://people.apache.org/~lresende/presentations/felix%20goes%20to%20tuscany.pdf  Approach Summary: 1. Convert each build module directly to an OSGi Bundle 2. Analyze and refactor  Focused on Java SE – No consideration for Java EE classloaders – No consideration for Java EE component models  Motivated by need to deliver assembly subsets  Surfaces OSGi early, but longer lead-time to first success 9 beans core ejb3 entities json-proxy soap wsappclient streamer web beans core ejb3 entities json-proxy soap wsappclient streamer web core ejb3 entities json-proxy soap wsappclient streamer web log log
  • 10. © IBM Corporation 2012 Nottingham & Charters  EclipseCon 2012: this deck  Approach Summary: 1. Replicate existing classloading in OSGi using bundle fragments 2. Incrementally separate out individual bundles 3. Adopt OSGi best practices  Considers Java EE classloading and component models  Surfaces OSGi early, and incrementally - a staged approach 10 beans core ejb3 entities json-proxy soap wsappclient streamer web app-host logcoreejb3 wab web app-host logcoreejb3 wab web log
  • 11. © IBM Corporation 2012 Stage 1: Understanding the starting point  Java EE prescribes a hierarchical classloading model  Assuming “parent first” and “multiple”: – Each Application has own classloader – Each WAR has own class loader – WAR has visibility to Application classes – WAR prefers Application classs, Application prefers System classes, etc...  OSGi modularity enforced through class visibility using classloaders  Migration strategies need to consider the impact of this change – e.g. replicate visibility relationships of existing application in OSGi 11 Bootstrap Extensions System Application Application WAR WAR WAR
  • 12. © IBM Corporation 2012 Replicating Java EE classloading: Classloaders  Preserve Application and WAR roles  Application -> Application Host Bundle – Add application modules to fragments of host bundle  Web App Archive -> Web Application Bundle – Add WEB-INF/classes to Bundle- Classpath – Extract WEB-INF/lib jars and add as fragments of Web Application Bundle  We now have two classloaders just as we did in Java EE   We also have full visibility of the modules 12 System Application WAR app-host logcoreejb3 wab web
  • 13. © IBM Corporation 2012 Maven-bundle-plugin - Application Host Bundle Example 13 ... <parent> ... </parent> <packaging>bundle</packaging> <groupId>org.apache.geronimo.daytrader.modules</groupId> <artifactId>app-host</artifactId> <version>0.1</version> <name>DayTrader :: Modules – Application</name> <description>DayTrader Application Module</description> <dependencies> ... </dependencies> <build> <plugins> <plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-bundle-plugin</artifactId> <configuration> <instructions> ... </instructions> </configuration> </plugin> </plugins> </build> </project> bundle artefact type to be built plugin uses this as default bundle metadata the dependencies to build against extra bundle configuration (e.g. exports, imports, etc)
  • 14. © IBM Corporation 2012 Maven-bundle-plugin - Fragment Bundle Example 14 <plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-bundle-plugin</artifactId> <configuration> <instructions> <Fragment-Host>org.apache.geronimo.daytrader.modules.daytrader-app-host</Fragment-Host> </instructions> </configuration> </plugin> Fragment-Host: org.apache.geronimo.daytrader.modules.daytrader-app-host
  • 15. © IBM Corporation 2012 Replicating Java EE classloading: Delegation  App and wab can‟t see the container apis from the System Classloader  Wab can‟t see app classes  Solution: – Add package imports for container packages to app and wab – Add package exports to app-host fragments required by wab – Add require bundle from wab to app  Note: delegation semantics are not identical to Java EE – WAS provides all imported packages (close to “parent-first”) – Bundle provides everything else – Now have control over what wab & app-host see from the System classloader 15 System app-host wab X X X
  • 16. © IBM Corporation 2012 Determining the Container APIs (System Classloader) Warning: This step will vary depending on target server  <was_install>/dev contains the APIs in was_public.jar and JavaEE/jee.jar  Take Export-Package entries and add as Import-Package entries on app and wab bundles  If using BND-based tools then can wildcard values (e.g. com.ibm.*, javax.*)  <was_install>/dev includes a pom for WAS API for maven development (available since v8.0)  Applications should not rely on packages not defined in <was_install>/dev 16
  • 17. © IBM Corporation 2012 Maven-bundle-plugin: Container delegation 17 <Import-Package> <!-- from was_public.jar --> com.ibm.*, ... <!-- from jdk & jee.jar --> javax.* </Import-Package> Import-Package: com.ibm.websphere.ActivitySession;version="1.1.0", ... javax.xml.rpc.server;version="1.1.0", javax.xml.rpc.soap;version="1.1.0" maven-bundle-plugin (pom.xml) daytrader-app.jar META-INF/MANIFEST.MF mvn install:install-file -DgroupId=com.ibm.websphere.appserver -DartifactId=was_public -Dversion=8.5 - Dpackaging=jar -Dfile=was_public-8.5.0.jar <dependency> <groupId>com.ibm.websphere.appserver</groupId> <artifactId>was_public</artifactId> <version>8.5</version> </dependency> maven dependency on WAS API
  • 18. © IBM Corporation 2012 Maven-bundle-plugin: WAB to App Delegation  Fragment exports (daytrader package naming allowed wildcarding)  Wab Require-Bundle 18 <instructions> <Fragment-Host>org.apache.geronimo.daytrader.modules.daytrader-app-host</Fragment-Host> <Export-Package>org.apache.geronimo.samples.daytrader.core*</Export-Package> </instructions> <instructions> <Require-Bundle>org.apache.geronimo.daytrader.modules.daytrader-app-host</Require-Bundle> </instructions> app-host wab Export-Package: ... Require-Bundle: app-host core log entities ejb3 logcoreejb3
  • 19. © IBM Corporation 2012 A Note on Require-Bundle  Uses – Merge split package – When there‟ll only ever be one provider (e.g. extension points)  Considered bad practice because: – The required bundle can change what it provides - brittle in the face of refactoring 19
  • 20. © IBM Corporation 2012 Extenders: Enabling Component Models  Web Components, EJBs, Persistence Contexts, Blueprint Beans all handled by extenders  Extenders look inside bundles for code/metadata to process  Extenders typically require a bundle to „opt in‟ using a manifest header – host must opt-in  JPA entities not permitted to come from fragments: “...any entity classes must originate in the bundle’s JAR, it cannot come from a fragment.” 20 <!-- maven-bundle-plugin configuration snippet--> <instructions> <!-- Opt in for Web Extender --> <Web-ContextPath>/daytrader</Web-ContextPath> </instructions> Tip: <<EMPTY>> allows empty header in BND (needs a recent version of maven-bundle-plugin) app-host wab Web-ContextPath: /daytrader Export-EJB: <!-- maven-bundle-plugin configuration snippet--> <instructions> ... <!-- Opt in for EJB Extender --> <Export-EJB>&lt;&lt;EMPTY&gt;&gt;</Export-EJB> </instructions>
  • 21. © IBM Corporation 2012 daytrader.eba OSGi Application Warning: this step will vary depending on target server  Servers typically enable a deployment artefact and build tools for an application  Example was targeting WebSphere, so used a .eba (a zip file with an application manifest) – RAD/WDT tools make development simple – Ant zip task and eba-maven- plugin (Apache Aries) can also be used in builds wab app-host Application-Name: DayTrader Application Application-SymbolicName: org.apache.aries.samples.daytrader Application-ManifestVersion: 1 Application-Version: 0.1 Manifest-Version: 1.0 Application-Content: daytrader.app;version="[0.1,1.0)", daytrader.wab;version="[0.1,1.0)" <plugin> <groupId>org.apache.aries</groupId> <artifactId>eba-maven-plugin</artifactId> <version>0.4-SNAPSHOT</version> <extensions>true</extensions> <configuration> <generateManifest>true</generateManifest> <instructions> <Application-SymbolicName> ${project.artifactId} </Application-SymbolicName> </instructions> </configuration> </plugin>
  • 22. © IBM Corporation 2012 Stage 2: Factoring out Bundles  Now the application‟s running in OSGi we can start to split out the fragments as independent, re-usable bundles  Strategy: – Do one fragment at a time – Start with the leaf dependencies • Wab bundle contents first, then the app bundle • Project build dependencies help with identification • Third-party libraries • “shared libraries” (if runtime supports this concept) – Detach from host and calculate the package imports & exports 22 wab web wab web Fragment-Host: wab Export-Package: daytrader.web Import-Package: daytrader.web
  • 23. © IBM Corporation 2012 Split Package Strategies  A split package is a package exported by more than one provider where the contents differ – Sub-set/superset relationship - e.g. javax.transactions – Intersecting or non-intersecting subsets – Not different releases  Split packages hint at poor modularity or naming  Consumers often need access to all providers, but OSGi Import-Package will only wire to one  Solution: – Combine jars with split packages into a single bundle • Multiple jars on single Bundle-Classpath or • Fragment Bundles attached to a single host  This approach is tactical and is addressed in Stage 3 23 log Bundle-Classpath: ., A.jar. B.jar Export-Package: p A B p p
  • 24. © IBM Corporation 2012 Converting Jars to Bundles  Using RAD/WDT? – Convert Java projects to OSGi Bundle Projects (also works for EJB and WAR) – Or import “Java Archive into OSGi Bundle” • Wraps Jar in a Bundle  Using maven or ant? – Modify build to produce bundles (e.g. maven-bundle-plugin or bnd in ant task) – Use wild-cards to generate initial imports/exports then refine... 24 <packaging>bundle</packaging> <plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-bundle-plugin</artifactId> <configuration> <instructions> ... </instructions> </configuration> </plugin>
  • 25. © IBM Corporation 2012 Third-party Libraries  Applications often use third-party libraries, such as open source – DayTrader uses commons.logging  Many now come with OSGi metadata  Most others have been bundlized by repository projects – Eclipse Orbit - bundlized, pedigree reviewed for Eclipse projects – Apache Felix Commons – SpringSource Enterprise Bundle Repository  or by other OSGi-based projects – Apache Tuscany – Apache ServiceMix – Ops4J Pax *  Use these if available  But what if you can‟t find a bundlized library...? 25
  • 26. © IBM Corporation 2012 Bundlizing third-party libraries  Use tools to calculate manifest – RAD/WDT - Import -> Java Archive into an OSGi Bundle – BND – Refine Imports/Exports  If library required to work inside and outside OSGi? – inject OSGi manifest into existing jar – Doesn‟t work for signed Jars – Can‟t aggregate multiple Jars  If library only required to work in OSGi – Wrap jar in bundle (add jar to Bundle- Classpath) – Works for signed jars – Can aggregate multiple jars, if necessary 26 log log Export-Package: org.c... log log Bundle-Classpath: ., log.jar Export-Package: org.c... log org/apache/commons/... inject wrap
  • 27. © IBM Corporation 2012 The story so far...  The first two stages have: – Taken Java EE application and run in OSGi – Decomposed single deployment artefact into multiple bundles  Now have the potential to: – Understand the application architecture; modules used and their relationships (OSGi Application Console) – Remove duplicate deployment binaries (single bundle in repository) – Remove duplicate runtime binaries (share bundle in server) – Reduce operational costs and errors - deploy shared binaries based on application needs – Determine which binaries are in use (e.g. to apply critical fix)  But there‟s more... 27
  • 28. © IBM Corporation 2012 Stage 3: Incrementally Adopt Best Practices  Stage 2 documents the „as-is‟ architecture, warts-„n‟-all  OSGi Best Practices show how to make the most of OSGi – Hopefully you attended Emily Jiang‟s session – http://www.ibm.com/developerworks/websphere/techjournal/1007_charters/1007_charters.html  Adopting best practices leads to: – High cohesion - bundles with clear and distinct roles in the architecture – Loose coupling - flexible, but necessary, dependencies  ...which all leads to greater agility, flexibility and re-use – Development teams can understand and explain the architecture and are no longer afraid to change the code – Applications can evolve and new application can be created at a pace that enables, rather than inhibits, the business 28
  • 29. © IBM Corporation 2012 Summary  Moving enterprise applications to OSGi helps: – increase understanding of application architecture – increase module cohesiveness – reduce module coupling  Leads to greater application agility through re-use and understanding of impact of change  A staged approach to adoption delivers value sooner and in-line with investment  With the wealth of tools, runtimes, and existing assets, it‟s never been easier to adopt OSGi  What OSGi could do to better: – Enable „fragments‟ to define everything except a classloader – Enable JPA entities in fragments 29
  • 30. © IBM Corporation 2012 Questions 30
  • 31. © IBM Corporation 2012 Trademarks  Eclipse and the Eclipse logo are trademarks of Eclipse Foundation, Inc.  Apache, Apache Felix, Felix, the Apache Felix project logo, Apache Tuscany and the Apache Tuscany project logo are trademarks of The Apache Software Foundation.  Java and all Java-based trademarks and logos are trademarks or registered trademarks of Oracle and/or its affiliates.  IBM and the IBM logo are trademarks of International Business Machines Corporation, registered in many jurisdictions.  Other marks may be trademarks or registered trademarks of their respective owners. 31