SlideShare a Scribd company logo
© 2018 Software AG. All rights reserved. For internal use only
OSGi AND JPMS (JIGSAW)
Todor Boev
Common Runtime Project
APPLICATION MODULARITY
© 2018 Software AG. All rights reserved. For internal use only2
AGENDA
• Use Case
• Module Layer
• Runtime Layer
• JPMS (Jigsaw)
• OSGi
• Conclusion
• Q & A
© 2018 Software AG. All rights reserved. For internal use only3


TRIED HARD TO BE UNBIASED
• Requirements
1. Defined generic use case
2. Defined common sense measure of quality
3. Requirements maximize quality
• Evaluation
– Implemented the same simple greenfield applications on both
– No frameworks
– But evaluated how well frameworks can be supported
• JPMS / Jigsaw
– Applied the best practices recommended by Oracle
| © 2018 Software AG. All rights reserved. For internal use only4
USE CASE
© 2018 Software AG. All rights reserved. For internal use only5
• Modules are consumed
– In large numbers
– From multiple release streams
– The release streams are uncoordinated
– The release streams are independent
USE CASE
COMPOSE APPLICATIONS FROM MODULES
© 2018 Software AG. All rights reserved. For internal use only6
USE CASE
COORDINATED RELEASE
Lib 1.0 Lib 1.1 Lib 2.0
Log4j 2.0 Log4J 2.1 Log4J 3.0
App 1.1App 1.0 App 2.0
© 2018 Software AG. All rights reserved. For internal use only7
USE CASE
UNCOORDINATED RELEASE
Lib 1.0 Lib 1.1 Lib 2.0
Log4j 2.0 Log4J 2.1 Log4J 3.0 Log4J 3.1
App 1.2App1.0 App 1.3
© 2018 Software AG. All rights reserved. For internal use only8


USE CASE
• Measures resilience to change
• Where change are the differences between
– The environment at compile time
– VS the environment at runtime
MEASURE MODULARITY
A module’s usefulness increases
- with the number of environments where it can run
- without requiring a rebuild
© 2018 Software AG. All rights reserved. For internal use only9
USE CASE
• Resilience to change over time (current modules)
– Functionality
– Refactoring
• Resilience to change of scale (add modules)
– Complexity
REQUIREMENTS
© 2018 Software AG. All rights reserved. For internal use only10
USE CASE
• Module Layer
– Handles time
– Module artifact
– Dependency model (sharing of classes)
• Runtime Layer
– Handles scale
– Module lifecycle (runtime state)
– Service Model (sharing of objects)
MODULAR SYSTEM STRUCTURE
Modular Layer
(Classes)
Runtime Layer
(Objects)
| © 2018 Software AG. All rights reserved. For internal use only11
MODULE LAYER
© 2018 Software AG. All rights reserved. For internal use only12
MODULE LAYER
VERSION CHANGES
Modules that execute the application meet for the first time at runtime
Lib 1.0 Lib 1.1 Lib 2.0
Log4j 2.0 Log4J 2.1 Log4J 3.0 Log4J 3.1
App 1.2App1.0
compile
run
© 2018 Software AG. All rights reserved. For internal use only13
MODULE LAYER
VERSION CHANGES
Lib 1.0 Lib 1.1 Lib 2.0
Log4j 2.0 Log4J 2.1 Log4J 3.0 Log4J 3.1
App 1.2App1.0 App 1.3
compile
run
Tolerate functionality changes
- for as long as possible (1.1.0 → 1.2.0 → 1.3.0)
- and then no more (2.0.0)
© 2018 Software AG. All rights reserved. For internal use only14
MODULE LAYER
• Refactoring
- Improves quality of implementation
- Does not affect consumers
• Modules should tolerate changes to dependency
– IDs
• Improve structure: add, remove, rename, merge, split modules
– Dependencies
• Internal: improve structure
• Transitive: e.g. reduce codebase
VERSION CHANGES
Tolerate refactoring forever (1.0.0 → 1.0.1 → 1.0.2 → 1.0.3 …)
| © 2018 Software AG. All rights reserved. For internal use only15
RUNTIME LAYER
© 2018 Software AG. All rights reserved. For internal use only16
RUNTIME LAYER
Consumer API Provider
compile
run
compile
• A shared API module exports the interface
• A consumer module imports the API in order to call it
• A provider module imports the API in order to implement it
DISTRIBUTE COMPLEXITY
Modules should bind to interfaces not to other modules
© 2018 Software AG. All rights reserved. For internal use only17
RUNTIME LAYER
• The Consumer has to obtain objects
• … that implement the interface
• ... without importing the implementation classes from the Provider
Consumer API Provider
load interface load interface
get impl object?
DISTRIBUTE COMPLEXITY
© 2018 Software AG. All rights reserved. For internal use only18
RUNTIME LAYER
1. Publish: provider advertises implementation
2. Find: consumer selects implementation
3. Bind: consumer gets implementation object
Consumer ProviderService
(1) publish(3) bind
(2) find
DISTRIBUTE COMPLEXITY
Service – communication mechanism provided by the modular system
© 2018 Software AG. All rights reserved. For internal use only19
RUNTIME LAYER
DISTRIBUTE COMPLEXITY
Library
Library
Library
Application
Library
factory
factory
factory
factory
object
object
object
• At the end of the exchange who owns the object?
• Consumer
– Complexity is Concentrated
– Libraries
© 2018 Software AG. All rights reserved. For internal use only20
• At the end of the exchange who owns the object?
• Provider
– Complexity is Distributed
– Dependency Injection
– Services
Module
Module
Module
Module
Module
object
object
object
object
RUNTIME LAYER
DISTRIBUTE COMPLEXITY
| © 2018 Software AG. All rights reserved. For internal use only21
JPMS / JIGSAW
© 2018 Software AG. All rights reserved. For internal use only22
JPMS
• Minimal
– Define features required to boot
• Familiar
– Quickly transition to Java Code
– Use traditional patterns
PHILOSOPHY - SIMPLICITY
| © 2018 Software AG. All rights reserved. For internal use only23
JPMS

MODULE LAYER
© 2018 Software AG. All rights reserved. For internal use only24
JPMS MODULE LAYER
• A module is
– A jar
– That contains additional metadata
– And an optional main() method
• The metadata is binary
– /module-info.class
• The metadata is authored by humans
– Compiled from source: /module-info.java
– Compiler options: --module-version 1.2.3
ARTIFACT
© 2018 Software AG. All rights reserved. For internal use only25
JPMS MODULE LAYER
ARTIFACT
import org.example.hello.HelloFactory;
import
org.example.hello.provider.en.EnJsonHelloFactory;
module org.example.hello.provider.en {
requires org.example.hello.api;
provides HelloFactory with EnJsonHelloFactory;
}
• /module-info.java
© 2018 Software AG. All rights reserved. For internal use only26
JPMS MODULE LAYER
• Modules provide java packages
• Modules can be versioned at compile time
– Versions are ordered
– Version number tokens have no assigned meaning: 

3.14.159.256.358+irrational-pi
MODULES PROVIDE
// May pass --module-version 1.2.3 to javac
module org.example.hello.api {
exports org.example.hello;
}
© 2018 Software AG. All rights reserved. For internal use only27
JPMS MODULE LAYER
• Modules require other modules by their ID
– The ID becomes part of the module API
• Require a module only as a compile dependency
• Runtime dependencies must be handled by the build
MODULES REQUIRE
module org.example.hello.consumer {
// May capture 1.2.3
// Can’t declare that max acceptable is 2.0.0
requires org.example.hello.api;
// Can’t say I want an impl of the API
//requires org.example.hello.provider.en;
// Can’t say a want a framework, not packages
//requires dependency.injection.fw;
}
© 2018 Software AG. All rights reserved. For internal use only28
JPMS MODULE LAYER
• Build:
– Resolve dependency graph: compile, runtime
– Select compatible versions
• Runtime:
– Check dependency graph: compile
– Trust versions are compatible
• Module metadata is the build script
– Of arbitrary quality, artifact repository, versioning policy:
• ant + /lib, make, maven + pom.xml, gradle + ivy.xml
• JPMS does not enforce nor define compatibility
– Nothing for builds to coordinate on
FUNCTIONALITY CHANGES
/module-
info.java
pom.xml build.gradle
© 2018 Software AG. All rights reserved. For internal use only29
JPMS MODULE LAYER
• Improving modular structure
– Adding a module is a minor change: 1.0 -> 1.1
– Removing a module is a major change: 1.0 -> 2.0
– Even if the functionality is only redistributed
• Offsetting via façade is a minor change: 1.0 -> 1.1
REFACTORING CHANGES
module org.example.hello.api {
requires transitive refactored.one;
requires transitive refactored.two;
}
© 2018 Software AG. All rights reserved. For internal use only30
JPMS RUNTIME LAYER
• Minimal
– Define features required to boot
• Describes class isolation boundary to JVM:
• Familiar
– Quickly transition to Java Code
– Use traditional patterns
PHILOSOPHY - SIMPLICITY
requires
org.example.hello.api;
/module-info.java
/module-info.java
| © 2018 Software AG. All rights reserved. For internal use only31
JPMS

RUNTIME LAYER
© 2018 Software AG. All rights reserved. For internal use only32
JPMS RUNTIME LAYER
• Provider publishes:
• Best practice requires to publish a factory rather than the service class itself
SERVICES - PUBLISH
import org.example.hello.HelloFactory;
import org.example.hello.provider.en.EnJsonHelloFactory;
module org.example.greeter.provider.en {
requires org.example.hello.api;
provides HelloFactory with EnJsonHelloFactory;
}
(service factory interface, service factory
class)
© 2018 Software AG. All rights reserved. For internal use only33
JPMS RUNTIME LAYER
SERVICES - FIND
import org.example.hello.HelloFactory;
module org.example.hello.consumer {
requires org.example.hello.api;
uses HelloFactory;
}
// The factory must be very cheap to make
Iterable<HelloFactory> hellos = ServiceLoader.load(HelloFactory.class);
for (HelloFactory hf : hellos) {
// The factory must provide info methods
if ("en".equals(hf.getLanguage()) && "json".equals(hf.getFormat())) {
...
}
}
• Matching done by best practice
– Must be followed by both

provider and consumer
© 2018 Software AG. All rights reserved. For internal use only34
JPMS RUNTIME LAYER
SERVICES - BIND
• The consumer controls the service object lifecycle
HelloFactory hf = ...
// Bind: create, configure, start, stop, destroy
Hello greeter = hf.createHello();
greeter.setPrettyPrint(true);
// Use
String msg = greeter.message(“OSGi”);
System.out.println(msg);
© 2018 Software AG. All rights reserved. For internal use only35
JPMS RUNTIME LAYER
• One module can have a main() method
– Control flows from there
– Set by compiler option: 

--main-class org.example.hello.consumer.Greeting
LIFECYCLE
© 2018 Software AG. All rights reserved. For internal use only36
JPMS RUNTIME LAYER
• Minimal
– Define features required to boot:
• Start from:
• A map of interface-to-class:
• Familiar
– Quickly transition to Java Code
• Find, Bind done by arbitrary code
– Use traditional patterns
• Publish class
• Publish factory class
PHILOSOPHY - SIMPLICITY
void main(String[]
args)
provides HelloFactory with
EnJsonHelloFactory;
ServiceLoader.load(HelloFactory.clas
s);
| © 2018 Software AG. All rights reserved. For internal use only37
JPMS

SUMMARY
© 2018 Software AG. All rights reserved. For internal use only38
JPMS SUMMARY
PHILOSOPHY
Library
Library
Library
Application
Library
factory
factory
factory
factory
object
object
object
An application is composed of user code and libraries
• A library provides classes to applications
• The app code composes the

library classes
• As libraries are added 

the app code complexity

grows unchecked
© 2018 Software AG. All rights reserved. For internal use only39
JPMS SUMMARY
FRAMEWORKS
• Standardizes publish, half of find, no bind
– Hard to make code that
– … can access objects from another module
– … using a framework neutral mechanism
• Framework fragmentation/lock in
– Frameworks spread over multiple modules
– Can’t consume modules that don’t use your

framework
Guice
CDI
| © 2018 Software AG. All rights reserved. For internal use only40
OSGI
© 2018 Software AG. All rights reserved. For internal use only41
OSGI
• Simple textual protocols (HTTP headers)
– Closed format (REST verbs)
– Open semantics (REST message mime type)
• Public contracts (mime type registry)
• Self contained (REST self descriptive messages)
PHILOSOPHY – COMPOSABILITY
| © 2018 Software AG. All rights reserved. For internal use only42
OSGI

MODULE LAYER
© 2018 Software AG. All rights reserved. For internal use only43
OSGI MODULE LAYER
• A bundle (module) is
– A jar
– That contains additional metadata
– And an optional start/stop hook
• The metadata is textual
– /META-INF/MANIFEST.MF
• The metadata is generated (semi)automatically from the application code
ARTIFACT
© 2018 Software AG. All rights reserved. For internal use only44
• package-info.java
OSGI MODULE LAYER
ARTIFACT
package org.example.hello;
// Guides importers: [1.2, 2)
@ProviderType
public interface Hello {
String message(String who);
}
@Export
@Version("1.2.3")
package org.example.hello;
• Hello.java
© 2018 Software AG. All rights reserved. For internal use only45
• Extract Modular Pattern
– Namespace ←
– Capability ←
– Requirement ←
– Resolver ←
OSGI MODULE LAYER
• Identity (coupled, brittle)
–
• Capability (decoupled, modular)
–
–
–
IDENTITY VS CAPABILITY
provides HelloFactory with
EnJsonHelloFactory
uses HelloFactory
HelloFactory hf = new
EnJsonHelloFactory();
interface
HelloFactory
provides ... with
EnJsonHelloFactory
uses
HelloFactory
java.util.ServiceLoade
r
java.util.ServiceLoade
r
© 2018 Software AG. All rights reserved. For internal use only46
OSGI MODULE LAYER
• Bundles provide Capabilities
– Namespace
– Set of attributes (Fixed set of data types)
• The Version type is semantic:
– <major>.<minor>.<micro>-<qualifier>
• Java package capabilities have shorthand syntax:
MODULES PROVIDE
osgi.wiring.package
osgi.wiring.package:String = org.example.hello
version:Version = 1.2.3
Export-Package: org.example.hello; version=1.2.3
© 2018 Software AG. All rights reserved. For internal use only47
OSGI MODULE LAYER
• Bundles declare Requirements
– Namespace
– A filter to match the attributes of a Capability
• Java package requirements have shorthand syntax:
MODULES REQUIRE
osgi.wiring.package
(&(osgi.wiring.package = org.example.hello)
(version >= 1.2)
(!(version >= 2)))
Import-Package: org.example.hello; version=“[1.2, 2)”
© 2018 Software AG. All rights reserved. For internal use only48
OSGI MODULE LAYER
• Semantic version range
FUNCTIONALITY CHANGES
Import-Package: org.example.hello; version=“[1.2, 2)”
[1.2, 2)
Hello 1.2 Hello 1.5 Hello 1.9
Consumer Consumer Consumer
Hello 2.0
run
compile
© 2018 Software AG. All rights reserved. For internal use only49
OSGI MODULE LAYER
• Capabilities have open semantics
• Resolver resolves symbolically any dependency you care to invent
• (Your) Bundles introspect the dependency graph and act
– The core does the same for packages
REFACTORING CHANGES
Provide-Capability: osgi.service;
objectClass:List<String> = "org.example.hello.Hello"
Provide-Capability:
osgi.extender;
osgi.extender = "osgi.jpa";
version:Version = "1.1"
© 2018 Software AG. All rights reserved. For internal use only50
OSGI MODULE LAYER
• Requirements have open semantics
REFACTORING CHANGES
Require-Capability: osgi.service;
filter := "(objectClass=org.example.hello.Hello)"
Require-Capability: osgi.extender;
filter := "(&(osgi.extender=osgi.jpa)(version>=1.1))"
Require-Capability: osgi.native;
filter := "(&
(osgi.native.osname ~= win32)
(osgi.native.processor ~= x86-64)
(osgi.native.language ~= en))"
© 2018 Software AG. All rights reserved. For internal use only51
OSGI MODULE LAYER
• Simple textual protocols
– Closed format
• Provide:
• Require:
– Open semantics
• references an external description
• Public contracts
– E.g the OSGi alliance maintains the osgi.wiring.package namespace
• Defines that capabilities have a package name and a version
• Defines how implementations (the OSGi core) use these to direct class loading
• Self contained
– A bundle describes everything it provides and everything it requires to run
PHILOSOPHY - COMPOSABILITY
(namespace,
attributes)
(namespace,
filter)
/META-INF/MANIFEST.MF
Semantic Versioning Semantic Dependencies
namespace
| © 2018 Software AG. All rights reserved. For internal use only52
OSGI

RUNTIME LAYER
© 2018 Software AG. All rights reserved. For internal use only53
OSGI RUNTIME LAYER
• Provider publishes:
• Provider manages the service object’s lifecycle
– I.e. this is a service architecture
SERVICES - PUBLISH
public void start(BundleContext bc) {
// Arbitrary code. Inject with other services and
configuration
Hello service = new HelloImpl();
// Impl description
Dictionary<String, Object> props = new Hashtable<>();
props.put("lang", "en");
props.put("format", "json");
// Publish under the service interface. Impl is private.
bc.registerService(Hello.class, service, props);
}
(service interface, service object,
attributes)
© 2018 Software AG. All rights reserved. For internal use only54
OSGI RUNTIME LAYER
• Consumer searches by:
SERVICES - FIND
// Ask directly for a business object
// Filter matched against business object publication attributes
// The ServiceLoader of OSGi
ServiceTracker<Hello,Hello> greeters = new ServiceTracker<>(
bc, Hello.class, "(&(lang=en)(format=json))");
(service interface,
filter)
© 2018 Software AG. All rights reserved. For internal use only55
OSGI RUNTIME LAYER
• Since the provider manages it’s published object
• The consumer binds directly to a business object
– I.e. this is a service architecture
SERVICES - BIND
// Find
ServiceTracker<Hello,Hello> greeters = new ServiceTracker<>(
bc, Hello.class, "(&(lang=en)(format=json))");
// Bind: No further setup needed
Hello greeter = greeters.getService();
// Use
String msg = greeter.message(“OSGi”);
System.out.println(msg);
© 2018 Software AG. All rights reserved. For internal use only56
OSGI RUNTIME LAYER
• Each bundle has an independent lifecycle
– Creates, configures, activates, deactivates, destroys
– … it’s own internal structure
– … so it can publish objects rather than classes
• The application behavior emerges from the combined activity of peer bundles
LIFECYCLE
© 2018 Software AG. All rights reserved. For internal use only57
OSGI RUNTIME LAYER
• Simple (semi)textual protocols
– Closed format
• Publish (Provide):
• Find (Require):
– Open semantics
• The (namespace) can represent anything
• Public contracts
– The provider defines the API: packages, classes, allowed attributes
• Self contained
– Each bundle has a dedicated lifecycle
PHILOSOPHY - COMPOSABILITY
(service interface, service object,
attributes)
(service interface,
filter)
service interface
| © 2018 Software AG. All rights reserved. For internal use only58
OSGI

SUMMARY
© 2018 Software AG. All rights reserved. For internal use only59
OSGI SUMMARY
• Each bundle manages part of the

total state and lifecycle
• Initial bundle complexity is higher

then a library
• As bundles are added the

individual bundle complexity remains

constant
PHILOSOPHY
A complex application is composed of simple collaborating applications
Module
Module
Module
Module
Module
object
object
object
object
© 2018 Software AG. All rights reserved. For internal use only60
OSGI SUMMARY
FRAMEWORKS
• Standardizes publish, find, bind
– Possible to make code that
– … can access objects from another module
– … using a framework neutral mechanism
• Enables framework interoperation
– Multiple frameworks within one application
– Even multiple JVM languages
CDI
CDI
Guice
© 2018 Software AG. All rights reserved. For internal use only61
OSGI SUMMARY
FRAMEWORKS – DECLARATIVE SERVICES
// Publish
@Lang("en") // Part of hello API
@Format("text") // Part of hello API
@Component
public class HelloImpl implements Hello
{
@Override
public String message(String who) {
return "Hello " + who;
}
}
// Find + Bind
@Component(immediate = true)
public class Greeter {
@Activate
public void activate(@Reference Hello hello)
{
System.out.println(hello.message("OSGi"));
}
}
• Frameworks dramatically lower bundle complexity
| © 2018 Software AG. All rights reserved. For internal use only62
CONCLUSION
© 2018 Software AG. All rights reserved. For internal use only63
CONCLUSION
PIVOTAL DECISIONS
Decision OSGi JPMS
Philosophy Composability Simplicity
Module Style Self-Contained Library
Module Layer
Compatibility Semantic Versions
Require Capability Identity
Runtime Layer
Share Services / Objects Factories / Classes
Lifecycle Module Application
© 2018 Software AG. All rights reserved. For internal use only64
Module
(Dependency Injection)
object
object
object
object
Process
(OSGi)
module
module
module
module
System
(Micro Services)
process
process
process
process
CONCLUSION
SERVICES ALL THE WAY DOWN
© 2018 Software AG. All rights reserved. For internal use only65
CONCLUSION
GOING FORWARD
• Both can be a powerful combination
– OSGi: efficient modular application
– JPMS: efficient JRE to match the application
• OSGi R7
– Enable jars to work as either a Bundle or a JPMS module
– Detect the modules of the underlying JRE at runtime
• Next Step
– Provisioning: automatically assemble an OSGi + JPMS runtime
© 2018 Software AG. All rights reserved. For internal use only66
RESOURCES
• OSGi
– Architecture: https://www.osgi.org/developer/architecture/
– Service Layer: http://enroute.osgi.org/doc/215-sos.html
• JPMS
– Module Layer (Alex Buckley): https://youtu.be/gtcTftvj0d0
– Service Layer (Alex Buckley): https://youtu.be/RjVjm4uuMvc
• OSGi interop with JPMS
– http://blog.osgi.org/2018/02/osgi-r7-highlights-java-9-support.html
– http://blog.osgi.org/2017/09/letter-to-our-osgi-user-community-re.html
• JPrime on Modularity
– https://youtu.be/NKS5VU_r7Bo
| © 2018 Software AG. All rights reserved. For internal use only67
Q & A

More Related Content

What's hot

Taking agile development to enterprise scale in a mixed tool environment with...
Taking agile development to enterprise scale in a mixed tool environment with...Taking agile development to enterprise scale in a mixed tool environment with...
Taking agile development to enterprise scale in a mixed tool environment with...
IBM Rational software
 
GDG Cloud meetup november 2019 - kubeflow pipelines
GDG Cloud meetup november 2019 -  kubeflow pipelinesGDG Cloud meetup november 2019 -  kubeflow pipelines
GDG Cloud meetup november 2019 - kubeflow pipelines
Sven Degroote
 
IBM Rhapsody Code Generation Customization
IBM Rhapsody Code Generation CustomizationIBM Rhapsody Code Generation Customization
IBM Rhapsody Code Generation Customization
gjuljo
 
Installing Installing IBM Rational Rhapsody Designer and Architect for MBSE
Installing Installing IBM Rational Rhapsody Designer and Architect for MBSEInstalling Installing IBM Rational Rhapsody Designer and Architect for MBSE
Installing Installing IBM Rational Rhapsody Designer and Architect for MBSE
Fraser Chadburn
 
Optimica Compiler Toolkit - Overview
Optimica Compiler Toolkit - OverviewOptimica Compiler Toolkit - Overview
Optimica Compiler Toolkit - Overview
Modelon
 
Component-Based and Model-Driven Engineering: what is the difference? A CBSE ...
Component-Based and Model-Driven Engineering: what is the difference? A CBSE ...Component-Based and Model-Driven Engineering: what is the difference? A CBSE ...
Component-Based and Model-Driven Engineering: what is the difference? A CBSE ...
Ivica Crnkovic
 
Modelon FMI Tutorial NAMUG 2016
Modelon FMI Tutorial NAMUG 2016Modelon FMI Tutorial NAMUG 2016
Modelon FMI Tutorial NAMUG 2016
Modelon
 
Steer at the Team Level with Rational Team Concert
Steer at the Team Level with Rational Team ConcertSteer at the Team Level with Rational Team Concert
Steer at the Team Level with Rational Team Concert
IBM Rational software
 
One model, many use cases
One model, many use casesOne model, many use cases
One model, many use cases
Modelon
 
Aerospace Project Integration at OPAL-RT
Aerospace Project Integration at OPAL-RT Aerospace Project Integration at OPAL-RT
Aerospace Project Integration at OPAL-RT
OPAL-RT TECHNOLOGIES
 
Rhapsody Software
Rhapsody SoftwareRhapsody Software
Rhapsody SoftwareBill Duncan
 
Deployment module slides
Deployment module slidesDeployment module slides
Deployment module slides
IBM Rational software
 
UCD components
UCD components UCD components
UCD components
IBM Rational software
 
200923 01en
200923 01en200923 01en
200923 01en
openrtm
 
Java Webinar #9: “Raspberry Pi Platform for Java Programmers”
Java Webinar #9: “Raspberry Pi Platform for Java Programmers”Java Webinar #9: “Raspberry Pi Platform for Java Programmers”
Java Webinar #9: “Raspberry Pi Platform for Java Programmers”
GlobalLogic Ukraine
 
Rhapsody reverseengineering
Rhapsody reverseengineeringRhapsody reverseengineering
Rhapsody reverseengineering
Scott Althouse
 
Model-Driven Development for Safety-Critical Software
Model-Driven Development for Safety-Critical SoftwareModel-Driven Development for Safety-Critical Software
Model-Driven Development for Safety-Critical Software
gjuljo
 

What's hot (17)

Taking agile development to enterprise scale in a mixed tool environment with...
Taking agile development to enterprise scale in a mixed tool environment with...Taking agile development to enterprise scale in a mixed tool environment with...
Taking agile development to enterprise scale in a mixed tool environment with...
 
GDG Cloud meetup november 2019 - kubeflow pipelines
GDG Cloud meetup november 2019 -  kubeflow pipelinesGDG Cloud meetup november 2019 -  kubeflow pipelines
GDG Cloud meetup november 2019 - kubeflow pipelines
 
IBM Rhapsody Code Generation Customization
IBM Rhapsody Code Generation CustomizationIBM Rhapsody Code Generation Customization
IBM Rhapsody Code Generation Customization
 
Installing Installing IBM Rational Rhapsody Designer and Architect for MBSE
Installing Installing IBM Rational Rhapsody Designer and Architect for MBSEInstalling Installing IBM Rational Rhapsody Designer and Architect for MBSE
Installing Installing IBM Rational Rhapsody Designer and Architect for MBSE
 
Optimica Compiler Toolkit - Overview
Optimica Compiler Toolkit - OverviewOptimica Compiler Toolkit - Overview
Optimica Compiler Toolkit - Overview
 
Component-Based and Model-Driven Engineering: what is the difference? A CBSE ...
Component-Based and Model-Driven Engineering: what is the difference? A CBSE ...Component-Based and Model-Driven Engineering: what is the difference? A CBSE ...
Component-Based and Model-Driven Engineering: what is the difference? A CBSE ...
 
Modelon FMI Tutorial NAMUG 2016
Modelon FMI Tutorial NAMUG 2016Modelon FMI Tutorial NAMUG 2016
Modelon FMI Tutorial NAMUG 2016
 
Steer at the Team Level with Rational Team Concert
Steer at the Team Level with Rational Team ConcertSteer at the Team Level with Rational Team Concert
Steer at the Team Level with Rational Team Concert
 
One model, many use cases
One model, many use casesOne model, many use cases
One model, many use cases
 
Aerospace Project Integration at OPAL-RT
Aerospace Project Integration at OPAL-RT Aerospace Project Integration at OPAL-RT
Aerospace Project Integration at OPAL-RT
 
Rhapsody Software
Rhapsody SoftwareRhapsody Software
Rhapsody Software
 
Deployment module slides
Deployment module slidesDeployment module slides
Deployment module slides
 
UCD components
UCD components UCD components
UCD components
 
200923 01en
200923 01en200923 01en
200923 01en
 
Java Webinar #9: “Raspberry Pi Platform for Java Programmers”
Java Webinar #9: “Raspberry Pi Platform for Java Programmers”Java Webinar #9: “Raspberry Pi Platform for Java Programmers”
Java Webinar #9: “Raspberry Pi Platform for Java Programmers”
 
Rhapsody reverseengineering
Rhapsody reverseengineeringRhapsody reverseengineering
Rhapsody reverseengineering
 
Model-Driven Development for Safety-Critical Software
Model-Driven Development for Safety-Critical SoftwareModel-Driven Development for Safety-Critical Software
Model-Driven Development for Safety-Critical Software
 

Similar to Software AG Application Modularity - OSGi and JPMS (Jigsaw)

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
 
Framework Modularity Layer - Glyn Normington, IBM
Framework Modularity Layer - Glyn Normington, IBMFramework Modularity Layer - Glyn Normington, IBM
Framework Modularity Layer - Glyn Normington, IBM
mfrancis
 
OSGi Architecture for Mobile Device Software - Peter Kriens, aQute
OSGi Architecture for Mobile Device Software - Peter Kriens, aQuteOSGi Architecture for Mobile Device Software - Peter Kriens, aQute
OSGi Architecture for Mobile Device Software - Peter Kriens, aQute
mfrancis
 
Java and Serverless - A Match Made In Heaven, Part 1
Java and Serverless - A Match Made In Heaven, Part 1Java and Serverless - A Match Made In Heaven, Part 1
Java and Serverless - A Match Made In Heaven, Part 1
Curity
 
Shrinking the container_zurich_july_2018
Shrinking the container_zurich_july_2018Shrinking the container_zurich_july_2018
Shrinking the container_zurich_july_2018
Ewan Slater
 
API-driven Legacy Migration: Results from Project Winterfell
API-driven Legacy Migration: Results from Project WinterfellAPI-driven Legacy Migration: Results from Project Winterfell
API-driven Legacy Migration: Results from Project WinterfellKeith McFarlane
 
Advanced angular
Advanced angularAdvanced angular
Advanced angular
Sumit Kumar Rakshit
 
JIT Compiler
JIT CompilerJIT Compiler
PHP Rewrite: Do the right thing (IPC Berlin 2024)
PHP Rewrite: Do the right thing (IPC Berlin 2024)PHP Rewrite: Do the right thing (IPC Berlin 2024)
PHP Rewrite: Do the right thing (IPC Berlin 2024)
Ralf Eggert
 
Angular 2
Angular 2Angular 2
Using LLVM to accelerate processing of data in Apache Arrow
Using LLVM to accelerate processing of data in Apache ArrowUsing LLVM to accelerate processing of data in Apache Arrow
Using LLVM to accelerate processing of data in Apache Arrow
DataWorks Summit
 
Angular.ppt
Angular.pptAngular.ppt
Angular.ppt
Mytrux1
 
How to prepare a project for automated deployment?
How to prepare a project for automated deployment?How to prepare a project for automated deployment?
How to prepare a project for automated deployment?
ONE BCG
 
Understand the Trade-offs Using Compilers for Java Applications
Understand the Trade-offs Using Compilers for Java ApplicationsUnderstand the Trade-offs Using Compilers for Java Applications
Understand the Trade-offs Using Compilers for Java Applications
C4Media
 
Solving the Automation Puzzle - how to select the right automation framework ...
Solving the Automation Puzzle - how to select the right automation framework ...Solving the Automation Puzzle - how to select the right automation framework ...
Solving the Automation Puzzle - how to select the right automation framework ...
Ori Bendet
 
History and Future of the Downloadable Mobile Marketplace - Jon Bostrom, Nokia
History and Future of the Downloadable Mobile Marketplace - Jon Bostrom, NokiaHistory and Future of the Downloadable Mobile Marketplace - Jon Bostrom, Nokia
History and Future of the Downloadable Mobile Marketplace - Jon Bostrom, Nokia
mfrancis
 
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
 
Symfony Under Control by Maxim Romanovsky
Symfony Under Control by Maxim RomanovskySymfony Under Control by Maxim Romanovsky
Symfony Under Control by Maxim Romanovsky
php-user-group-minsk
 
Symfony under control. Continuous Integration and Automated Deployments in Sy...
Symfony under control. Continuous Integration and Automated Deployments in Sy...Symfony under control. Continuous Integration and Automated Deployments in Sy...
Symfony under control. Continuous Integration and Automated Deployments in Sy...
Max Romanovsky
 
Oracle ADF Architecture TV - Development - Version Control
Oracle ADF Architecture TV - Development - Version ControlOracle ADF Architecture TV - Development - Version Control
Oracle ADF Architecture TV - Development - Version Control
Chris Muir
 

Similar to Software AG Application Modularity - OSGi and JPMS (Jigsaw) (20)

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...
 
Framework Modularity Layer - Glyn Normington, IBM
Framework Modularity Layer - Glyn Normington, IBMFramework Modularity Layer - Glyn Normington, IBM
Framework Modularity Layer - Glyn Normington, IBM
 
OSGi Architecture for Mobile Device Software - Peter Kriens, aQute
OSGi Architecture for Mobile Device Software - Peter Kriens, aQuteOSGi Architecture for Mobile Device Software - Peter Kriens, aQute
OSGi Architecture for Mobile Device Software - Peter Kriens, aQute
 
Java and Serverless - A Match Made In Heaven, Part 1
Java and Serverless - A Match Made In Heaven, Part 1Java and Serverless - A Match Made In Heaven, Part 1
Java and Serverless - A Match Made In Heaven, Part 1
 
Shrinking the container_zurich_july_2018
Shrinking the container_zurich_july_2018Shrinking the container_zurich_july_2018
Shrinking the container_zurich_july_2018
 
API-driven Legacy Migration: Results from Project Winterfell
API-driven Legacy Migration: Results from Project WinterfellAPI-driven Legacy Migration: Results from Project Winterfell
API-driven Legacy Migration: Results from Project Winterfell
 
Advanced angular
Advanced angularAdvanced angular
Advanced angular
 
JIT Compiler
JIT CompilerJIT Compiler
JIT Compiler
 
PHP Rewrite: Do the right thing (IPC Berlin 2024)
PHP Rewrite: Do the right thing (IPC Berlin 2024)PHP Rewrite: Do the right thing (IPC Berlin 2024)
PHP Rewrite: Do the right thing (IPC Berlin 2024)
 
Angular 2
Angular 2Angular 2
Angular 2
 
Using LLVM to accelerate processing of data in Apache Arrow
Using LLVM to accelerate processing of data in Apache ArrowUsing LLVM to accelerate processing of data in Apache Arrow
Using LLVM to accelerate processing of data in Apache Arrow
 
Angular.ppt
Angular.pptAngular.ppt
Angular.ppt
 
How to prepare a project for automated deployment?
How to prepare a project for automated deployment?How to prepare a project for automated deployment?
How to prepare a project for automated deployment?
 
Understand the Trade-offs Using Compilers for Java Applications
Understand the Trade-offs Using Compilers for Java ApplicationsUnderstand the Trade-offs Using Compilers for Java Applications
Understand the Trade-offs Using Compilers for Java Applications
 
Solving the Automation Puzzle - how to select the right automation framework ...
Solving the Automation Puzzle - how to select the right automation framework ...Solving the Automation Puzzle - how to select the right automation framework ...
Solving the Automation Puzzle - how to select the right automation framework ...
 
History and Future of the Downloadable Mobile Marketplace - Jon Bostrom, Nokia
History and Future of the Downloadable Mobile Marketplace - Jon Bostrom, NokiaHistory and Future of the Downloadable Mobile Marketplace - Jon Bostrom, Nokia
History and Future of the Downloadable Mobile Marketplace - Jon Bostrom, Nokia
 
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
 
Symfony Under Control by Maxim Romanovsky
Symfony Under Control by Maxim RomanovskySymfony Under Control by Maxim Romanovsky
Symfony Under Control by Maxim Romanovsky
 
Symfony under control. Continuous Integration and Automated Deployments in Sy...
Symfony under control. Continuous Integration and Automated Deployments in Sy...Symfony under control. Continuous Integration and Automated Deployments in Sy...
Symfony under control. Continuous Integration and Automated Deployments in Sy...
 
Oracle ADF Architecture TV - Development - Version Control
Oracle ADF Architecture TV - Development - Version ControlOracle ADF Architecture TV - Development - Version Control
Oracle ADF Architecture TV - Development - Version Control
 

More from 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 Lyaruu
mfrancis
 
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
 
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
 
Visualization of OSGi based Software Architectures in Virtual Reality - Lisa ...
Visualization of OSGi based Software Architectures in Virtual Reality - Lisa ...Visualization of OSGi based Software Architectures in Virtual Reality - Lisa ...
Visualization of OSGi based Software Architectures in Virtual Reality - Lisa ...
mfrancis
 

More from 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...
 
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)
 
Visualization of OSGi based Software Architectures in Virtual Reality - Lisa ...
Visualization of OSGi based Software Architectures in Virtual Reality - Lisa ...Visualization of OSGi based Software Architectures in Virtual Reality - Lisa ...
Visualization of OSGi based Software Architectures in Virtual Reality - Lisa ...
 

Recently uploaded

The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
Laura Byrne
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
DianaGray10
 
Welocme to ViralQR, your best QR code generator.
Welocme to ViralQR, your best QR code generator.Welocme to ViralQR, your best QR code generator.
Welocme to ViralQR, your best QR code generator.
ViralQR
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
ControlCase
 
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Nexer Digital
 
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Ramesh Iyer
 
When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...
Elena Simperl
 
Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
Thijs Feryn
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
Guy Korland
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Albert Hoitingh
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
Cheryl Hung
 
Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
Dorra BARTAGUIZ
 
Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........
Alison B. Lowndes
 
Assure Contact Center Experiences for Your Customers With ThousandEyes
Assure Contact Center Experiences for Your Customers With ThousandEyesAssure Contact Center Experiences for Your Customers With ThousandEyes
Assure Contact Center Experiences for Your Customers With ThousandEyes
ThousandEyes
 
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionGenerative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Aggregage
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
KatiaHIMEUR1
 
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
Product School
 
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Paige Cruz
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
Ana-Maria Mihalceanu
 
By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024
Pierluigi Pugliese
 

Recently uploaded (20)

The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
 
Welocme to ViralQR, your best QR code generator.
Welocme to ViralQR, your best QR code generator.Welocme to ViralQR, your best QR code generator.
Welocme to ViralQR, your best QR code generator.
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
 
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?
 
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
 
When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...
 
Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
 
Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
 
Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........
 
Assure Contact Center Experiences for Your Customers With ThousandEyes
Assure Contact Center Experiences for Your Customers With ThousandEyesAssure Contact Center Experiences for Your Customers With ThousandEyes
Assure Contact Center Experiences for Your Customers With ThousandEyes
 
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionGenerative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to Production
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
 
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
 
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
 
By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024
 

Software AG Application Modularity - OSGi and JPMS (Jigsaw)

  • 1. © 2018 Software AG. All rights reserved. For internal use only OSGi AND JPMS (JIGSAW) Todor Boev Common Runtime Project APPLICATION MODULARITY
  • 2. © 2018 Software AG. All rights reserved. For internal use only2 AGENDA • Use Case • Module Layer • Runtime Layer • JPMS (Jigsaw) • OSGi • Conclusion • Q & A
  • 3. © 2018 Software AG. All rights reserved. For internal use only3 
 TRIED HARD TO BE UNBIASED • Requirements 1. Defined generic use case 2. Defined common sense measure of quality 3. Requirements maximize quality • Evaluation – Implemented the same simple greenfield applications on both – No frameworks – But evaluated how well frameworks can be supported • JPMS / Jigsaw – Applied the best practices recommended by Oracle
  • 4. | © 2018 Software AG. All rights reserved. For internal use only4 USE CASE
  • 5. © 2018 Software AG. All rights reserved. For internal use only5 • Modules are consumed – In large numbers – From multiple release streams – The release streams are uncoordinated – The release streams are independent USE CASE COMPOSE APPLICATIONS FROM MODULES
  • 6. © 2018 Software AG. All rights reserved. For internal use only6 USE CASE COORDINATED RELEASE Lib 1.0 Lib 1.1 Lib 2.0 Log4j 2.0 Log4J 2.1 Log4J 3.0 App 1.1App 1.0 App 2.0
  • 7. © 2018 Software AG. All rights reserved. For internal use only7 USE CASE UNCOORDINATED RELEASE Lib 1.0 Lib 1.1 Lib 2.0 Log4j 2.0 Log4J 2.1 Log4J 3.0 Log4J 3.1 App 1.2App1.0 App 1.3
  • 8. © 2018 Software AG. All rights reserved. For internal use only8 
 USE CASE • Measures resilience to change • Where change are the differences between – The environment at compile time – VS the environment at runtime MEASURE MODULARITY A module’s usefulness increases - with the number of environments where it can run - without requiring a rebuild
  • 9. © 2018 Software AG. All rights reserved. For internal use only9 USE CASE • Resilience to change over time (current modules) – Functionality – Refactoring • Resilience to change of scale (add modules) – Complexity REQUIREMENTS
  • 10. © 2018 Software AG. All rights reserved. For internal use only10 USE CASE • Module Layer – Handles time – Module artifact – Dependency model (sharing of classes) • Runtime Layer – Handles scale – Module lifecycle (runtime state) – Service Model (sharing of objects) MODULAR SYSTEM STRUCTURE Modular Layer (Classes) Runtime Layer (Objects)
  • 11. | © 2018 Software AG. All rights reserved. For internal use only11 MODULE LAYER
  • 12. © 2018 Software AG. All rights reserved. For internal use only12 MODULE LAYER VERSION CHANGES Modules that execute the application meet for the first time at runtime Lib 1.0 Lib 1.1 Lib 2.0 Log4j 2.0 Log4J 2.1 Log4J 3.0 Log4J 3.1 App 1.2App1.0 compile run
  • 13. © 2018 Software AG. All rights reserved. For internal use only13 MODULE LAYER VERSION CHANGES Lib 1.0 Lib 1.1 Lib 2.0 Log4j 2.0 Log4J 2.1 Log4J 3.0 Log4J 3.1 App 1.2App1.0 App 1.3 compile run Tolerate functionality changes - for as long as possible (1.1.0 → 1.2.0 → 1.3.0) - and then no more (2.0.0)
  • 14. © 2018 Software AG. All rights reserved. For internal use only14 MODULE LAYER • Refactoring - Improves quality of implementation - Does not affect consumers • Modules should tolerate changes to dependency – IDs • Improve structure: add, remove, rename, merge, split modules – Dependencies • Internal: improve structure • Transitive: e.g. reduce codebase VERSION CHANGES Tolerate refactoring forever (1.0.0 → 1.0.1 → 1.0.2 → 1.0.3 …)
  • 15. | © 2018 Software AG. All rights reserved. For internal use only15 RUNTIME LAYER
  • 16. © 2018 Software AG. All rights reserved. For internal use only16 RUNTIME LAYER Consumer API Provider compile run compile • A shared API module exports the interface • A consumer module imports the API in order to call it • A provider module imports the API in order to implement it DISTRIBUTE COMPLEXITY Modules should bind to interfaces not to other modules
  • 17. © 2018 Software AG. All rights reserved. For internal use only17 RUNTIME LAYER • The Consumer has to obtain objects • … that implement the interface • ... without importing the implementation classes from the Provider Consumer API Provider load interface load interface get impl object? DISTRIBUTE COMPLEXITY
  • 18. © 2018 Software AG. All rights reserved. For internal use only18 RUNTIME LAYER 1. Publish: provider advertises implementation 2. Find: consumer selects implementation 3. Bind: consumer gets implementation object Consumer ProviderService (1) publish(3) bind (2) find DISTRIBUTE COMPLEXITY Service – communication mechanism provided by the modular system
  • 19. © 2018 Software AG. All rights reserved. For internal use only19 RUNTIME LAYER DISTRIBUTE COMPLEXITY Library Library Library Application Library factory factory factory factory object object object • At the end of the exchange who owns the object? • Consumer – Complexity is Concentrated – Libraries
  • 20. © 2018 Software AG. All rights reserved. For internal use only20 • At the end of the exchange who owns the object? • Provider – Complexity is Distributed – Dependency Injection – Services Module Module Module Module Module object object object object RUNTIME LAYER DISTRIBUTE COMPLEXITY
  • 21. | © 2018 Software AG. All rights reserved. For internal use only21 JPMS / JIGSAW
  • 22. © 2018 Software AG. All rights reserved. For internal use only22 JPMS • Minimal – Define features required to boot • Familiar – Quickly transition to Java Code – Use traditional patterns PHILOSOPHY - SIMPLICITY
  • 23. | © 2018 Software AG. All rights reserved. For internal use only23 JPMS
 MODULE LAYER
  • 24. © 2018 Software AG. All rights reserved. For internal use only24 JPMS MODULE LAYER • A module is – A jar – That contains additional metadata – And an optional main() method • The metadata is binary – /module-info.class • The metadata is authored by humans – Compiled from source: /module-info.java – Compiler options: --module-version 1.2.3 ARTIFACT
  • 25. © 2018 Software AG. All rights reserved. For internal use only25 JPMS MODULE LAYER ARTIFACT import org.example.hello.HelloFactory; import org.example.hello.provider.en.EnJsonHelloFactory; module org.example.hello.provider.en { requires org.example.hello.api; provides HelloFactory with EnJsonHelloFactory; } • /module-info.java
  • 26. © 2018 Software AG. All rights reserved. For internal use only26 JPMS MODULE LAYER • Modules provide java packages • Modules can be versioned at compile time – Versions are ordered – Version number tokens have no assigned meaning: 
 3.14.159.256.358+irrational-pi MODULES PROVIDE // May pass --module-version 1.2.3 to javac module org.example.hello.api { exports org.example.hello; }
  • 27. © 2018 Software AG. All rights reserved. For internal use only27 JPMS MODULE LAYER • Modules require other modules by their ID – The ID becomes part of the module API • Require a module only as a compile dependency • Runtime dependencies must be handled by the build MODULES REQUIRE module org.example.hello.consumer { // May capture 1.2.3 // Can’t declare that max acceptable is 2.0.0 requires org.example.hello.api; // Can’t say I want an impl of the API //requires org.example.hello.provider.en; // Can’t say a want a framework, not packages //requires dependency.injection.fw; }
  • 28. © 2018 Software AG. All rights reserved. For internal use only28 JPMS MODULE LAYER • Build: – Resolve dependency graph: compile, runtime – Select compatible versions • Runtime: – Check dependency graph: compile – Trust versions are compatible • Module metadata is the build script – Of arbitrary quality, artifact repository, versioning policy: • ant + /lib, make, maven + pom.xml, gradle + ivy.xml • JPMS does not enforce nor define compatibility – Nothing for builds to coordinate on FUNCTIONALITY CHANGES /module- info.java pom.xml build.gradle
  • 29. © 2018 Software AG. All rights reserved. For internal use only29 JPMS MODULE LAYER • Improving modular structure – Adding a module is a minor change: 1.0 -> 1.1 – Removing a module is a major change: 1.0 -> 2.0 – Even if the functionality is only redistributed • Offsetting via façade is a minor change: 1.0 -> 1.1 REFACTORING CHANGES module org.example.hello.api { requires transitive refactored.one; requires transitive refactored.two; }
  • 30. © 2018 Software AG. All rights reserved. For internal use only30 JPMS RUNTIME LAYER • Minimal – Define features required to boot • Describes class isolation boundary to JVM: • Familiar – Quickly transition to Java Code – Use traditional patterns PHILOSOPHY - SIMPLICITY requires org.example.hello.api; /module-info.java /module-info.java
  • 31. | © 2018 Software AG. All rights reserved. For internal use only31 JPMS
 RUNTIME LAYER
  • 32. © 2018 Software AG. All rights reserved. For internal use only32 JPMS RUNTIME LAYER • Provider publishes: • Best practice requires to publish a factory rather than the service class itself SERVICES - PUBLISH import org.example.hello.HelloFactory; import org.example.hello.provider.en.EnJsonHelloFactory; module org.example.greeter.provider.en { requires org.example.hello.api; provides HelloFactory with EnJsonHelloFactory; } (service factory interface, service factory class)
  • 33. © 2018 Software AG. All rights reserved. For internal use only33 JPMS RUNTIME LAYER SERVICES - FIND import org.example.hello.HelloFactory; module org.example.hello.consumer { requires org.example.hello.api; uses HelloFactory; } // The factory must be very cheap to make Iterable<HelloFactory> hellos = ServiceLoader.load(HelloFactory.class); for (HelloFactory hf : hellos) { // The factory must provide info methods if ("en".equals(hf.getLanguage()) && "json".equals(hf.getFormat())) { ... } } • Matching done by best practice – Must be followed by both
 provider and consumer
  • 34. © 2018 Software AG. All rights reserved. For internal use only34 JPMS RUNTIME LAYER SERVICES - BIND • The consumer controls the service object lifecycle HelloFactory hf = ... // Bind: create, configure, start, stop, destroy Hello greeter = hf.createHello(); greeter.setPrettyPrint(true); // Use String msg = greeter.message(“OSGi”); System.out.println(msg);
  • 35. © 2018 Software AG. All rights reserved. For internal use only35 JPMS RUNTIME LAYER • One module can have a main() method – Control flows from there – Set by compiler option: 
 --main-class org.example.hello.consumer.Greeting LIFECYCLE
  • 36. © 2018 Software AG. All rights reserved. For internal use only36 JPMS RUNTIME LAYER • Minimal – Define features required to boot: • Start from: • A map of interface-to-class: • Familiar – Quickly transition to Java Code • Find, Bind done by arbitrary code – Use traditional patterns • Publish class • Publish factory class PHILOSOPHY - SIMPLICITY void main(String[] args) provides HelloFactory with EnJsonHelloFactory; ServiceLoader.load(HelloFactory.clas s);
  • 37. | © 2018 Software AG. All rights reserved. For internal use only37 JPMS
 SUMMARY
  • 38. © 2018 Software AG. All rights reserved. For internal use only38 JPMS SUMMARY PHILOSOPHY Library Library Library Application Library factory factory factory factory object object object An application is composed of user code and libraries • A library provides classes to applications • The app code composes the
 library classes • As libraries are added 
 the app code complexity
 grows unchecked
  • 39. © 2018 Software AG. All rights reserved. For internal use only39 JPMS SUMMARY FRAMEWORKS • Standardizes publish, half of find, no bind – Hard to make code that – … can access objects from another module – … using a framework neutral mechanism • Framework fragmentation/lock in – Frameworks spread over multiple modules – Can’t consume modules that don’t use your
 framework Guice CDI
  • 40. | © 2018 Software AG. All rights reserved. For internal use only40 OSGI
  • 41. © 2018 Software AG. All rights reserved. For internal use only41 OSGI • Simple textual protocols (HTTP headers) – Closed format (REST verbs) – Open semantics (REST message mime type) • Public contracts (mime type registry) • Self contained (REST self descriptive messages) PHILOSOPHY – COMPOSABILITY
  • 42. | © 2018 Software AG. All rights reserved. For internal use only42 OSGI
 MODULE LAYER
  • 43. © 2018 Software AG. All rights reserved. For internal use only43 OSGI MODULE LAYER • A bundle (module) is – A jar – That contains additional metadata – And an optional start/stop hook • The metadata is textual – /META-INF/MANIFEST.MF • The metadata is generated (semi)automatically from the application code ARTIFACT
  • 44. © 2018 Software AG. All rights reserved. For internal use only44 • package-info.java OSGI MODULE LAYER ARTIFACT package org.example.hello; // Guides importers: [1.2, 2) @ProviderType public interface Hello { String message(String who); } @Export @Version("1.2.3") package org.example.hello; • Hello.java
  • 45. © 2018 Software AG. All rights reserved. For internal use only45 • Extract Modular Pattern – Namespace ← – Capability ← – Requirement ← – Resolver ← OSGI MODULE LAYER • Identity (coupled, brittle) – • Capability (decoupled, modular) – – – IDENTITY VS CAPABILITY provides HelloFactory with EnJsonHelloFactory uses HelloFactory HelloFactory hf = new EnJsonHelloFactory(); interface HelloFactory provides ... with EnJsonHelloFactory uses HelloFactory java.util.ServiceLoade r java.util.ServiceLoade r
  • 46. © 2018 Software AG. All rights reserved. For internal use only46 OSGI MODULE LAYER • Bundles provide Capabilities – Namespace – Set of attributes (Fixed set of data types) • The Version type is semantic: – <major>.<minor>.<micro>-<qualifier> • Java package capabilities have shorthand syntax: MODULES PROVIDE osgi.wiring.package osgi.wiring.package:String = org.example.hello version:Version = 1.2.3 Export-Package: org.example.hello; version=1.2.3
  • 47. © 2018 Software AG. All rights reserved. For internal use only47 OSGI MODULE LAYER • Bundles declare Requirements – Namespace – A filter to match the attributes of a Capability • Java package requirements have shorthand syntax: MODULES REQUIRE osgi.wiring.package (&(osgi.wiring.package = org.example.hello) (version >= 1.2) (!(version >= 2))) Import-Package: org.example.hello; version=“[1.2, 2)”
  • 48. © 2018 Software AG. All rights reserved. For internal use only48 OSGI MODULE LAYER • Semantic version range FUNCTIONALITY CHANGES Import-Package: org.example.hello; version=“[1.2, 2)” [1.2, 2) Hello 1.2 Hello 1.5 Hello 1.9 Consumer Consumer Consumer Hello 2.0 run compile
  • 49. © 2018 Software AG. All rights reserved. For internal use only49 OSGI MODULE LAYER • Capabilities have open semantics • Resolver resolves symbolically any dependency you care to invent • (Your) Bundles introspect the dependency graph and act – The core does the same for packages REFACTORING CHANGES Provide-Capability: osgi.service; objectClass:List<String> = "org.example.hello.Hello" Provide-Capability: osgi.extender; osgi.extender = "osgi.jpa"; version:Version = "1.1"
  • 50. © 2018 Software AG. All rights reserved. For internal use only50 OSGI MODULE LAYER • Requirements have open semantics REFACTORING CHANGES Require-Capability: osgi.service; filter := "(objectClass=org.example.hello.Hello)" Require-Capability: osgi.extender; filter := "(&(osgi.extender=osgi.jpa)(version>=1.1))" Require-Capability: osgi.native; filter := "(& (osgi.native.osname ~= win32) (osgi.native.processor ~= x86-64) (osgi.native.language ~= en))"
  • 51. © 2018 Software AG. All rights reserved. For internal use only51 OSGI MODULE LAYER • Simple textual protocols – Closed format • Provide: • Require: – Open semantics • references an external description • Public contracts – E.g the OSGi alliance maintains the osgi.wiring.package namespace • Defines that capabilities have a package name and a version • Defines how implementations (the OSGi core) use these to direct class loading • Self contained – A bundle describes everything it provides and everything it requires to run PHILOSOPHY - COMPOSABILITY (namespace, attributes) (namespace, filter) /META-INF/MANIFEST.MF Semantic Versioning Semantic Dependencies namespace
  • 52. | © 2018 Software AG. All rights reserved. For internal use only52 OSGI
 RUNTIME LAYER
  • 53. © 2018 Software AG. All rights reserved. For internal use only53 OSGI RUNTIME LAYER • Provider publishes: • Provider manages the service object’s lifecycle – I.e. this is a service architecture SERVICES - PUBLISH public void start(BundleContext bc) { // Arbitrary code. Inject with other services and configuration Hello service = new HelloImpl(); // Impl description Dictionary<String, Object> props = new Hashtable<>(); props.put("lang", "en"); props.put("format", "json"); // Publish under the service interface. Impl is private. bc.registerService(Hello.class, service, props); } (service interface, service object, attributes)
  • 54. © 2018 Software AG. All rights reserved. For internal use only54 OSGI RUNTIME LAYER • Consumer searches by: SERVICES - FIND // Ask directly for a business object // Filter matched against business object publication attributes // The ServiceLoader of OSGi ServiceTracker<Hello,Hello> greeters = new ServiceTracker<>( bc, Hello.class, "(&(lang=en)(format=json))"); (service interface, filter)
  • 55. © 2018 Software AG. All rights reserved. For internal use only55 OSGI RUNTIME LAYER • Since the provider manages it’s published object • The consumer binds directly to a business object – I.e. this is a service architecture SERVICES - BIND // Find ServiceTracker<Hello,Hello> greeters = new ServiceTracker<>( bc, Hello.class, "(&(lang=en)(format=json))"); // Bind: No further setup needed Hello greeter = greeters.getService(); // Use String msg = greeter.message(“OSGi”); System.out.println(msg);
  • 56. © 2018 Software AG. All rights reserved. For internal use only56 OSGI RUNTIME LAYER • Each bundle has an independent lifecycle – Creates, configures, activates, deactivates, destroys – … it’s own internal structure – … so it can publish objects rather than classes • The application behavior emerges from the combined activity of peer bundles LIFECYCLE
  • 57. © 2018 Software AG. All rights reserved. For internal use only57 OSGI RUNTIME LAYER • Simple (semi)textual protocols – Closed format • Publish (Provide): • Find (Require): – Open semantics • The (namespace) can represent anything • Public contracts – The provider defines the API: packages, classes, allowed attributes • Self contained – Each bundle has a dedicated lifecycle PHILOSOPHY - COMPOSABILITY (service interface, service object, attributes) (service interface, filter) service interface
  • 58. | © 2018 Software AG. All rights reserved. For internal use only58 OSGI
 SUMMARY
  • 59. © 2018 Software AG. All rights reserved. For internal use only59 OSGI SUMMARY • Each bundle manages part of the
 total state and lifecycle • Initial bundle complexity is higher
 then a library • As bundles are added the
 individual bundle complexity remains
 constant PHILOSOPHY A complex application is composed of simple collaborating applications Module Module Module Module Module object object object object
  • 60. © 2018 Software AG. All rights reserved. For internal use only60 OSGI SUMMARY FRAMEWORKS • Standardizes publish, find, bind – Possible to make code that – … can access objects from another module – … using a framework neutral mechanism • Enables framework interoperation – Multiple frameworks within one application – Even multiple JVM languages CDI CDI Guice
  • 61. © 2018 Software AG. All rights reserved. For internal use only61 OSGI SUMMARY FRAMEWORKS – DECLARATIVE SERVICES // Publish @Lang("en") // Part of hello API @Format("text") // Part of hello API @Component public class HelloImpl implements Hello { @Override public String message(String who) { return "Hello " + who; } } // Find + Bind @Component(immediate = true) public class Greeter { @Activate public void activate(@Reference Hello hello) { System.out.println(hello.message("OSGi")); } } • Frameworks dramatically lower bundle complexity
  • 62. | © 2018 Software AG. All rights reserved. For internal use only62 CONCLUSION
  • 63. © 2018 Software AG. All rights reserved. For internal use only63 CONCLUSION PIVOTAL DECISIONS Decision OSGi JPMS Philosophy Composability Simplicity Module Style Self-Contained Library Module Layer Compatibility Semantic Versions Require Capability Identity Runtime Layer Share Services / Objects Factories / Classes Lifecycle Module Application
  • 64. © 2018 Software AG. All rights reserved. For internal use only64 Module (Dependency Injection) object object object object Process (OSGi) module module module module System (Micro Services) process process process process CONCLUSION SERVICES ALL THE WAY DOWN
  • 65. © 2018 Software AG. All rights reserved. For internal use only65 CONCLUSION GOING FORWARD • Both can be a powerful combination – OSGi: efficient modular application – JPMS: efficient JRE to match the application • OSGi R7 – Enable jars to work as either a Bundle or a JPMS module – Detect the modules of the underlying JRE at runtime • Next Step – Provisioning: automatically assemble an OSGi + JPMS runtime
  • 66. © 2018 Software AG. All rights reserved. For internal use only66 RESOURCES • OSGi – Architecture: https://www.osgi.org/developer/architecture/ – Service Layer: http://enroute.osgi.org/doc/215-sos.html • JPMS – Module Layer (Alex Buckley): https://youtu.be/gtcTftvj0d0 – Service Layer (Alex Buckley): https://youtu.be/RjVjm4uuMvc • OSGi interop with JPMS – http://blog.osgi.org/2018/02/osgi-r7-highlights-java-9-support.html – http://blog.osgi.org/2017/09/letter-to-our-osgi-user-community-re.html • JPrime on Modularity – https://youtu.be/NKS5VU_r7Bo
  • 67. | © 2018 Software AG. All rights reserved. For internal use only67 Q & A