SlideShare a Scribd company logo
1 of 47
Download to read offline
Copyright © 2017 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
October 2017
Neil Bartlett

neil.bartlett@paremus.com
Jigsaw and OSGi:
What the Heck Happens Now?
Copyright © 2017 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
October 2017
Jigsaw and OSGi:
WTF Happens Now?
Neil Bartlett

neil.bartlett@paremus.com
Copyright © 2017 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
October 2017
Agenda
• WTF is a Module System?
• How do OSGi and Jigsaw Compare?
• Is OSGi Still Useful?
• Can OSGi and Jigsaw Work Together?
Copyright © 2017 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
October 2017
WTF Is a Module System?
• Isolation of Module Internals
• Controlled & Scoped Dependencies
• Defined Modes of Interaction (Contracts)
• Lifecycle
Copyright © 2017 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
October 2017
ISOLATION
Copyright © 2017 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
October 2017
Isolation
• Prevent leakage of implementation details
• Enable public vs private distinction
• Avoid supporting private internals as API
Copyright © 2017 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
October 2017
Java Refresher: Visible vs Accessible
• Accessibility is checked by the compiler…
• Though not always accurately (“runtime packages”, JVM Spec
5.4.4)
package Foo;
public class A
class B
package Bar;
public class C
Visible, Accessible
Visible, NOT Accessible
Class Loader Class Loader
public class D
package Baz;
NOT
Visible
Copyright © 2017 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
October 2017
Jigsaw Isolation
• Jigsaw redefines the meaning of “public class” in Java.
Runtime Class Loader
package Foo;
public class A
package Baz;
public class C
Accessible
NOT Accessible
module A {
exports Foo;
}
package Bar;
public class B
module B {
requires A;
}
Copyright © 2017 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
October 2017
Audience Participation
• QUESTION: Can both of these modules be present together
on the module path?
module B {
exports bar;
}
module A {
exports foo;
}
Copyright © 2017 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
October 2017
Audience Participation
• ANSWER: Maybe! Not enough information.
• Modules cannot contain the same packages, even private
packages.
• Jigsaw isolation is incomplete: internal details exposed.
• module-info.java is incomplete as a module descriptor.
• Modules on the module path still exist in ONE class loader.
Copyright © 2017 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
October 2017
DEPENDENCIES
Copyright © 2017 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
October 2017
Dependencies
• Isolation is about building walls.
• Any damn fool can build a wall…
• *Almost any damn fool can build a wall.
Copyright © 2017 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
October 2017
Dependencies
• Much harder to actually work together.
• Punch holes in the wall.
• Control access to module features, i.e. API.
Copyright © 2017 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
October 2017
OSGi: Requirements & Capabilities
• Capability: What I can do. E.g.:
• Requirement: What I need. E.g.:
• Depend on what a bundle can do, not its identity.
• Different bundles can implement same idea differently.
Provide-Capability:
com.acme.display; width:Long=1920; height:Long=1080
Export-Package: org.example.foo; version=1.2.0
Require-Capability:
com.acme.display; filter:=“(width>=1024)"
Import-Package: org.example.foo; version='[1.2,2.0)'
Copyright © 2017 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
October 2017
Jigsaw Dependencies
• Jigsaw dependencies are entirely based on identity.
• No substitution possible.Same module identity for build & run.
• Module identity is API!
• Two artefacts providing the same API must have same module
identity.
module B {
exports bar;
requires A;
}
Copyright © 2017 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
October 2017
Versions
• Versions in Jigsaw are officially Somebody Else’s Problem.
• ¯_(ツ)_/¯
Copyright © 2017 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
October 2017
COMPARISON
Copyright © 2017 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
October 2017
Why is Jigsaw Like This
• It solves the problem it set out to solve: modularise the JDK.
• JDK is a single vendor, closely managed product.
• Not assembled from multiple 3rd party components.
• Released all-at-once, infrequently.
• An API used by 9 MILLION developers, BILLIONS of apps.
• Can’t just refactor into better modular structure!
Copyright © 2017 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
October 2017
“Typical” Java Applications
• Assembled from many sources, from many organisations.
• Multiple component release cycles.
• Frequent releases… time-to-market critical!
• OSGi has been addressing these challenges for 18 years.
• Versioning
• Requirement/Capability
• Resolving
• Services
• FLEXIBILITY
Copyright © 2017 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
October 2017
Ideal Scenario
• We want the best of all worlds.
• Use a modular JDK, provided by Jigsaw…
• … in a modular application, powered by OSGi.
• This will be great!
• Let’s just check it actually works…
Copyright © 2017 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
October 2017
COMPATIBILITY
Copyright © 2017 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
October 2017
Java 9 Migration
• Jigsaw implements strategies for compatibility and migration
to Java 9:
• Classpath & Unnamed Modules.
• Automatic Modules.
• Illegal access not yet enforced in Java 9.
Copyright © 2017 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
October 2017
Unnamed Modules
• The classpath still exists in Java 9. Types are loaded into an
unnamed module.
• Unnamed modules implicitly require (“read”) ALL named modules on
the modulepath.
• Named modules cannot read unnamed modules.
• In theory, running any standard Java app on Java 9 should
Just WorkTM.
• “In theory, there is no difference between theory and practice.
But in practice, there is.”
Copyright © 2017 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
October 2017
Automatic Modules
• A named module with an implicit definition.
• Drop a plain JAR on the modulepath, it’s now a module.
• Reads every other named module, exports all packages.
• Named modules can depend on automatic modules.
Copyright © 2017 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
October 2017
INTEROP

Level 0
Copyright © 2017 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
October 2017
Level 0: Running
• Felix, Equinox and Knopflerfish all run on Java 9.
• Classpath compatibility mode.
• OSGi runs in an unnamed module.
• Felix Framework requires only java.base module.
Copyright © 2017 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
October 2017
Level 0: Challenges
• Illegal reflective access warnings… can be ignored in Java 9
• Hard-coded package lists:
• System Bundle exports inter alia javax.swing
• javax.swing is exported by module java.desktop
• java.desktop module can now be removed from the platform. Oops!
Copyright © 2017 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
October 2017
Level 0: Challenges
• OSGi bundles cannot import java.*
• Therefore cannot have versioned Import-Package.
• How to check compatibility, e.g. can I call String.isEmpty?
• Execution Environment requirement (generated):
• Execution Environment describes a monolithic platform.
• java.* packages can now be removed! Oops.
Require-Capability:
osgi.ee; filter:=“(&(osgi.ee=JavaSE)(version=1.8))”
Copyright © 2017 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
October 2017
INTEROP

Level 1
Copyright © 2017 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
October 2017
Detect Platform Packages
• Calculate System Bundle exports using the JPMS Module API.
• Better… filter existing package list through calculated
platform packages.
• Runtime introspection does not show uses constraints.
• MANY more packages exported than Java SE.
• Working (experimentally) in Felix now.
Copyright © 2017 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
October 2017
DEMO
Copyright © 2017 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
October 2017
Analysis
• Fixes the problem of Java SE packages such as javax.*.
• Doesn’t fix the problem of java.* dependencies
• Exec Env is no longer sufficient.
• Bundles need to indicate their Jigsaw module dependencies.
• Invent a new capability namespace: jpms.module
• Get bnd to generate this obviously.
• Make sure OSGi Framework provides it.
Require-Capability:
jpms.module; filter:=“(jpms.module=java.sql)”
Copyright © 2017 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
October 2017
DEMO
Copyright © 2017 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
October 2017
JPMS Module Dependencies
• Effectively, OSGi bundles can now depend on JPMS modules.
• Considered for inclusion in OSGi Core Spec?
• However!
• Many legacy bundles… all existing bundles today…
• Without the jpms.module requirement, we don’t know whether a
bundle should resolve.
• With the jpms.module requirement, the bundle will never resolve on
Java 8 or below :-(
• Maybe run jdeps on-the-fly rather than build time?
Copyright © 2017 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
October 2017
INTEROP

Level 2+
Copyright © 2017 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
October 2017
Full Bidirectional Interop?
• Very unlikely ever to work.
• Jigsaw modules can only depend on Jigsaw modules.
• No dynamics…
• No split packages…
• No cycles…
• NB split packages are bad, and cycles are often bad.
• Unfortunately they are sometimes necessary.
• Backwards-incompatible to remove from OSGi.
Copyright © 2017 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
October 2017
Leverage Jigsaw Access Controls
• Non-exported types in OSGi can still be loaded w/ reflection.
• Use Java 2 Security to prevent this.
• Might be nice to use Jigsaw access control as an alternative?
• Can’t be done in Java 9. Have to go all-in on modules to use
this feature (not very modular…).
• Maybe possible in future Java?
Copyright © 2017 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
October 2017
Load OSGi in a Jigsaw Module?
• Run OSGi and all bundles inside a named module.
• Might allow more control over access to the platform.
• Can’t be done: module content is immutable.
• This class will always be the unnamed module, even if the above
code is running in a named module.
• We asked for but did not get an addPackages method on Module.
void loadBundle(URL[] bundleClasspath) throws Exception {
URLClassLoader loader = new URLClassLoader(bundleClasspath);
Class<?> clazz = loader.loadClass("org.example.MyBundleActivator");
Module module = clazz.getModule();
// ...
}
Copyright © 2017 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
October 2017
The Tom Watson Experiment
• IBM has App Server products written in OSGi.
• Future customers may need to deploy Jigsaw modules.
• Jigsaw modules can only depend on Jigsaw modules…
• … or Jigsaw Layers.
• Hierarchical groups of modules with inherited readability.
• Dynamically map OSGi Framework subgraphs to Layers.
• Not full bidirectional interop.
• Complex and computationally expensive.
• github.com/tjwatson/osgi-jpms-layer
Copyright © 2017 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
October 2017
The Tom Watson Experiment: Architecture*
java.base etc
mymodule mylibrary
JPMS
Boot Layer
App Layer
Dynamic
Generated
App Server
Layers
* Approximate, according to my understanding
Copyright © 2017 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
October 2017
Just Pretend It’s a Bundle
• Jigsaw metadata is (almost) a subset of OSGi.
• OSGi functionality is (almost) a superset of Jigsaw
• Load a Jigsaw module as if it were an OSGi bundle.
• Map requires to Require-Bundle, etc. Relatively simple to do.
• Huge loss of info:
• Goodbye Import-Package, Capabilities, Resolver…
• Goodbye Versions!
• ServiceLoader does not really work… limited value.
• Will discourage open source developers from including OSGi
metadata.
Copyright © 2017 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
October 2017
Move Up the Stack
• Much of OSGi’s value is in the Service Registry…
• … and the fantastic specs that build on top of Services.
• The registry can be factored out of the rest of the framework.
• “PojoSR” from Karl Pauls, now Felix Connect.
• For some people the module layer simply isn’t that interesting.
• App assembly and continuous deployment — enabled by
Capabilities & Requirements — are unparalleled.
• SAD.
Copyright © 2017 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
October 2017
The Good News
Copyright © 2017 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
October 2017
The Good News
• Jigsaw is fantastic for modularising the JDK.
• OSGi is fantastic for modularising applications.
• Already working together.
• Enhanced bnd tooling + jlink = tiny application images.
• Tens of megabytes.
Copyright © 2017 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
October 2017
The Future Does Not Have to be Scary
Copyright © 2017 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
October 2017
Jigsaw for JDK
OSGi for Apps
Copyright © 2017 Paremus Ltd.
May not be reproduced by any means without express permission. All rights reserved.
October 2017
Thank You!
Email: neil.bartlett@paremus.com
Twitter: @nbartlett

More Related Content

What's hot

React Native "A Bad Idea Or A Game Changer" at Code Mania 101
React Native "A Bad Idea Or A Game Changer" at Code Mania 101React Native "A Bad Idea Or A Game Changer" at Code Mania 101
React Native "A Bad Idea Or A Game Changer" at Code Mania 101Ranatchai Chernbamrung
 
Drag and Drop UI Development with React Native
Drag and Drop UI Development with React NativeDrag and Drop UI Development with React Native
Drag and Drop UI Development with React NativeDavid Kay
 
Application Deployment at UC Riverside
Application Deployment at UC RiversideApplication Deployment at UC Riverside
Application Deployment at UC RiversideMichael Kennedy
 
NativeScript: Cross-Platform Mobile Apps with JavaScript and Angular
NativeScript: Cross-Platform Mobile Apps with JavaScript and AngularNativeScript: Cross-Platform Mobile Apps with JavaScript and Angular
NativeScript: Cross-Platform Mobile Apps with JavaScript and AngularTodd Anglin
 
Reactive Microservices with Quarkus
Reactive Microservices with QuarkusReactive Microservices with Quarkus
Reactive Microservices with QuarkusNiklas Heidloff
 
Magic of web components
Magic of web componentsMagic of web components
Magic of web componentsHYS Enterprise
 
Scripted - Embracing Eclipse Orion
Scripted - Embracing Eclipse OrionScripted - Embracing Eclipse Orion
Scripted - Embracing Eclipse Orionmartinlippert
 
From Zero to Hero with REST and OAuth2 #jjug
From Zero to Hero with REST and OAuth2 #jjugFrom Zero to Hero with REST and OAuth2 #jjug
From Zero to Hero with REST and OAuth2 #jjugToshiaki Maki
 
GitHub Actions - using Free Oracle Cloud Infrastructure (OCI)
GitHub Actions - using Free Oracle Cloud Infrastructure (OCI)GitHub Actions - using Free Oracle Cloud Infrastructure (OCI)
GitHub Actions - using Free Oracle Cloud Infrastructure (OCI)Phil Wilkins
 
Front End Development for Back End Java Developers - Dublin JUG 2019
Front End Development for Back End Java Developers - Dublin JUG 2019Front End Development for Back End Java Developers - Dublin JUG 2019
Front End Development for Back End Java Developers - Dublin JUG 2019Matt Raible
 
Firebase - realtime backend for mobile app and IoT
Firebase - realtime backend for mobile app and IoTFirebase - realtime backend for mobile app and IoT
Firebase - realtime backend for mobile app and IoTAndri Yadi
 
End-to-end HTML5 APIs - The Geek Gathering 2013
End-to-end HTML5 APIs - The Geek Gathering 2013End-to-end HTML5 APIs - The Geek Gathering 2013
End-to-end HTML5 APIs - The Geek Gathering 2013Alexandre Morgaut
 
React Nativeアプリをリリースし続けるために、最初に行う8つの取り組み
React Nativeアプリをリリースし続けるために、最初に行う8つの取り組みReact Nativeアプリをリリースし続けるために、最初に行う8つの取り組み
React Nativeアプリをリリースし続けるために、最初に行う8つの取り組みYukiya Nakagawa
 

What's hot (14)

React Native "A Bad Idea Or A Game Changer" at Code Mania 101
React Native "A Bad Idea Or A Game Changer" at Code Mania 101React Native "A Bad Idea Or A Game Changer" at Code Mania 101
React Native "A Bad Idea Or A Game Changer" at Code Mania 101
 
Drag and Drop UI Development with React Native
Drag and Drop UI Development with React NativeDrag and Drop UI Development with React Native
Drag and Drop UI Development with React Native
 
Erica Cooksey Reactathon 2018
Erica Cooksey Reactathon 2018Erica Cooksey Reactathon 2018
Erica Cooksey Reactathon 2018
 
Application Deployment at UC Riverside
Application Deployment at UC RiversideApplication Deployment at UC Riverside
Application Deployment at UC Riverside
 
NativeScript: Cross-Platform Mobile Apps with JavaScript and Angular
NativeScript: Cross-Platform Mobile Apps with JavaScript and AngularNativeScript: Cross-Platform Mobile Apps with JavaScript and Angular
NativeScript: Cross-Platform Mobile Apps with JavaScript and Angular
 
Reactive Microservices with Quarkus
Reactive Microservices with QuarkusReactive Microservices with Quarkus
Reactive Microservices with Quarkus
 
Magic of web components
Magic of web componentsMagic of web components
Magic of web components
 
Scripted - Embracing Eclipse Orion
Scripted - Embracing Eclipse OrionScripted - Embracing Eclipse Orion
Scripted - Embracing Eclipse Orion
 
From Zero to Hero with REST and OAuth2 #jjug
From Zero to Hero with REST and OAuth2 #jjugFrom Zero to Hero with REST and OAuth2 #jjug
From Zero to Hero with REST and OAuth2 #jjug
 
GitHub Actions - using Free Oracle Cloud Infrastructure (OCI)
GitHub Actions - using Free Oracle Cloud Infrastructure (OCI)GitHub Actions - using Free Oracle Cloud Infrastructure (OCI)
GitHub Actions - using Free Oracle Cloud Infrastructure (OCI)
 
Front End Development for Back End Java Developers - Dublin JUG 2019
Front End Development for Back End Java Developers - Dublin JUG 2019Front End Development for Back End Java Developers - Dublin JUG 2019
Front End Development for Back End Java Developers - Dublin JUG 2019
 
Firebase - realtime backend for mobile app and IoT
Firebase - realtime backend for mobile app and IoTFirebase - realtime backend for mobile app and IoT
Firebase - realtime backend for mobile app and IoT
 
End-to-end HTML5 APIs - The Geek Gathering 2013
End-to-end HTML5 APIs - The Geek Gathering 2013End-to-end HTML5 APIs - The Geek Gathering 2013
End-to-end HTML5 APIs - The Geek Gathering 2013
 
React Nativeアプリをリリースし続けるために、最初に行う8つの取り組み
React Nativeアプリをリリースし続けるために、最初に行う8つの取り組みReact Nativeアプリをリリースし続けるために、最初に行う8つの取り組み
React Nativeアプリをリリースし続けるために、最初に行う8つの取り組み
 

Similar to Jigsaw what the Heck Happens Now - N Bartlett

Choosing a JVM Web Framework
Choosing a JVM Web FrameworkChoosing a JVM Web Framework
Choosing a JVM Web FrameworkMatt Raible
 
Sys ml helperprofile-rhapsody813-obtainandinstall-v1
Sys ml helperprofile-rhapsody813-obtainandinstall-v1Sys ml helperprofile-rhapsody813-obtainandinstall-v1
Sys ml helperprofile-rhapsody813-obtainandinstall-v1Fraser Chadburn
 
Java 8 - Gateway Drug or End of Line?
Java 8 - Gateway Drug or End of Line?Java 8 - Gateway Drug or End of Line?
Java 8 - Gateway Drug or End of Line?Garth Gilmour
 
Use Case: Building OSGi Enterprise Applications (QCon 14)
Use Case: Building OSGi Enterprise Applications (QCon 14)Use Case: Building OSGi Enterprise Applications (QCon 14)
Use Case: Building OSGi Enterprise Applications (QCon 14)Carsten Ziegeler
 
Building Modular Enterprise Applications - C Ziegeler
Building Modular Enterprise Applications - C ZiegelerBuilding Modular Enterprise Applications - C Ziegeler
Building Modular Enterprise Applications - C Ziegelermfrancis
 
React native - React(ive) Way To Build Native Mobile Apps
React native - React(ive) Way To Build Native Mobile AppsReact native - React(ive) Way To Build Native Mobile Apps
React native - React(ive) Way To Build Native Mobile AppsJimit Shah
 
Seminole County Teach In 2017: Crooms Acadamy of Information Technology
Seminole County Teach In 2017: Crooms Acadamy of Information TechnologySeminole County Teach In 2017: Crooms Acadamy of Information Technology
Seminole County Teach In 2017: Crooms Acadamy of Information TechnologyEd Burns
 
10 clues showing that you are doing OSGi in the wrong manner - Jerome Moliere
10 clues showing that you are doing OSGi in the wrong manner - Jerome Moliere10 clues showing that you are doing OSGi in the wrong manner - Jerome Moliere
10 clues showing that you are doing OSGi in the wrong manner - Jerome Molieremfrancis
 
LNUG: Having Your Node.js Cake and Eating It Too
LNUG: Having Your Node.js Cake and Eating It TooLNUG: Having Your Node.js Cake and Eating It Too
LNUG: Having Your Node.js Cake and Eating It TooRob Tweed
 
11 Live Node.js CMS Frameworks
11 Live Node.js CMS Frameworks11 Live Node.js CMS Frameworks
11 Live Node.js CMS FrameworksiScripts
 
Open Development - an Engineering Manager's Perspective
Open Development - an Engineering Manager's PerspectiveOpen Development - an Engineering Manager's Perspective
Open Development - an Engineering Manager's PerspectiveMichael Marth
 
DevQA: make your testers happier with Groovy, Spock and Geb (Greach 2014)
DevQA: make your testers happier with Groovy, Spock and Geb (Greach 2014)DevQA: make your testers happier with Groovy, Spock and Geb (Greach 2014)
DevQA: make your testers happier with Groovy, Spock and Geb (Greach 2014)Alvaro Sanchez-Mariscal
 
McAfee Open Source Insight - Aharon Robbins - OpenStack Day Israel 2017
McAfee Open Source Insight - Aharon Robbins - OpenStack Day Israel 2017McAfee Open Source Insight - Aharon Robbins - OpenStack Day Israel 2017
McAfee Open Source Insight - Aharon Robbins - OpenStack Day Israel 2017Cloud Native Day Tel Aviv
 
Advanced GitHub Enterprise Administration
Advanced GitHub Enterprise AdministrationAdvanced GitHub Enterprise Administration
Advanced GitHub Enterprise AdministrationLars Schneider
 
DevNetCreate Workshop - build a react app - React crash course
DevNetCreate Workshop - build a react app - React crash courseDevNetCreate Workshop - build a react app - React crash course
DevNetCreate Workshop - build a react app - React crash courseCisco DevNet
 
Move Your .NET Apps to AWS Without Betting the House - WIN303 - re:Invent 2017
Move Your .NET Apps to AWS Without Betting the House - WIN303 - re:Invent 2017Move Your .NET Apps to AWS Without Betting the House - WIN303 - re:Invent 2017
Move Your .NET Apps to AWS Without Betting the House - WIN303 - re:Invent 2017Amazon Web Services
 
DevQA: make your testers happier with Groovy, Spock and Geb
DevQA: make your testers happier with Groovy, Spock and GebDevQA: make your testers happier with Groovy, Spock and Geb
DevQA: make your testers happier with Groovy, Spock and GebAlvaro Sanchez-Mariscal
 
Node.Js: Basics Concepts and Introduction
Node.Js: Basics Concepts and Introduction Node.Js: Basics Concepts and Introduction
Node.Js: Basics Concepts and Introduction Kanika Gera
 
Just-in-time Java EE - provisioning runtimes for enterprise applications - Ja...
Just-in-time Java EE - provisioning runtimes for enterprise applications - Ja...Just-in-time Java EE - provisioning runtimes for enterprise applications - Ja...
Just-in-time Java EE - provisioning runtimes for enterprise applications - Ja...mfrancis
 
Building Large Sustainable Apps
Building Large Sustainable AppsBuilding Large Sustainable Apps
Building Large Sustainable AppsBuğra Oral
 

Similar to Jigsaw what the Heck Happens Now - N Bartlett (20)

Choosing a JVM Web Framework
Choosing a JVM Web FrameworkChoosing a JVM Web Framework
Choosing a JVM Web Framework
 
Sys ml helperprofile-rhapsody813-obtainandinstall-v1
Sys ml helperprofile-rhapsody813-obtainandinstall-v1Sys ml helperprofile-rhapsody813-obtainandinstall-v1
Sys ml helperprofile-rhapsody813-obtainandinstall-v1
 
Java 8 - Gateway Drug or End of Line?
Java 8 - Gateway Drug or End of Line?Java 8 - Gateway Drug or End of Line?
Java 8 - Gateway Drug or End of Line?
 
Use Case: Building OSGi Enterprise Applications (QCon 14)
Use Case: Building OSGi Enterprise Applications (QCon 14)Use Case: Building OSGi Enterprise Applications (QCon 14)
Use Case: Building OSGi Enterprise Applications (QCon 14)
 
Building Modular Enterprise Applications - C Ziegeler
Building Modular Enterprise Applications - C ZiegelerBuilding Modular Enterprise Applications - C Ziegeler
Building Modular Enterprise Applications - C Ziegeler
 
React native - React(ive) Way To Build Native Mobile Apps
React native - React(ive) Way To Build Native Mobile AppsReact native - React(ive) Way To Build Native Mobile Apps
React native - React(ive) Way To Build Native Mobile Apps
 
Seminole County Teach In 2017: Crooms Acadamy of Information Technology
Seminole County Teach In 2017: Crooms Acadamy of Information TechnologySeminole County Teach In 2017: Crooms Acadamy of Information Technology
Seminole County Teach In 2017: Crooms Acadamy of Information Technology
 
10 clues showing that you are doing OSGi in the wrong manner - Jerome Moliere
10 clues showing that you are doing OSGi in the wrong manner - Jerome Moliere10 clues showing that you are doing OSGi in the wrong manner - Jerome Moliere
10 clues showing that you are doing OSGi in the wrong manner - Jerome Moliere
 
LNUG: Having Your Node.js Cake and Eating It Too
LNUG: Having Your Node.js Cake and Eating It TooLNUG: Having Your Node.js Cake and Eating It Too
LNUG: Having Your Node.js Cake and Eating It Too
 
11 Live Node.js CMS Frameworks
11 Live Node.js CMS Frameworks11 Live Node.js CMS Frameworks
11 Live Node.js CMS Frameworks
 
Open Development - an Engineering Manager's Perspective
Open Development - an Engineering Manager's PerspectiveOpen Development - an Engineering Manager's Perspective
Open Development - an Engineering Manager's Perspective
 
DevQA: make your testers happier with Groovy, Spock and Geb (Greach 2014)
DevQA: make your testers happier with Groovy, Spock and Geb (Greach 2014)DevQA: make your testers happier with Groovy, Spock and Geb (Greach 2014)
DevQA: make your testers happier with Groovy, Spock and Geb (Greach 2014)
 
McAfee Open Source Insight - Aharon Robbins - OpenStack Day Israel 2017
McAfee Open Source Insight - Aharon Robbins - OpenStack Day Israel 2017McAfee Open Source Insight - Aharon Robbins - OpenStack Day Israel 2017
McAfee Open Source Insight - Aharon Robbins - OpenStack Day Israel 2017
 
Advanced GitHub Enterprise Administration
Advanced GitHub Enterprise AdministrationAdvanced GitHub Enterprise Administration
Advanced GitHub Enterprise Administration
 
DevNetCreate Workshop - build a react app - React crash course
DevNetCreate Workshop - build a react app - React crash courseDevNetCreate Workshop - build a react app - React crash course
DevNetCreate Workshop - build a react app - React crash course
 
Move Your .NET Apps to AWS Without Betting the House - WIN303 - re:Invent 2017
Move Your .NET Apps to AWS Without Betting the House - WIN303 - re:Invent 2017Move Your .NET Apps to AWS Without Betting the House - WIN303 - re:Invent 2017
Move Your .NET Apps to AWS Without Betting the House - WIN303 - re:Invent 2017
 
DevQA: make your testers happier with Groovy, Spock and Geb
DevQA: make your testers happier with Groovy, Spock and GebDevQA: make your testers happier with Groovy, Spock and Geb
DevQA: make your testers happier with Groovy, Spock and Geb
 
Node.Js: Basics Concepts and Introduction
Node.Js: Basics Concepts and Introduction Node.Js: Basics Concepts and Introduction
Node.Js: Basics Concepts and Introduction
 
Just-in-time Java EE - provisioning runtimes for enterprise applications - Ja...
Just-in-time Java EE - provisioning runtimes for enterprise applications - Ja...Just-in-time Java EE - provisioning runtimes for enterprise applications - Ja...
Just-in-time Java EE - provisioning runtimes for enterprise applications - Ja...
 
Building Large Sustainable Apps
Building Large Sustainable AppsBuilding Large Sustainable Apps
Building Large Sustainable Apps
 

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 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
 

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...
 
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)
 

Recently uploaded

Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions
 
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024BookNet Canada
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Bluetooth Controlled Car with Arduino.pdf
Bluetooth Controlled Car with Arduino.pdfBluetooth Controlled Car with Arduino.pdf
Bluetooth Controlled Car with Arduino.pdfngoud9212
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptxLBM Solutions
 
Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Neo4j
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 

Recently uploaded (20)

Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food Manufacturing
 
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping Elbows
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Bluetooth Controlled Car with Arduino.pdf
Bluetooth Controlled Car with Arduino.pdfBluetooth Controlled Car with Arduino.pdf
Bluetooth Controlled Car with Arduino.pdf
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptx
 
Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 

Jigsaw what the Heck Happens Now - N Bartlett

  • 1. Copyright © 2017 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. October 2017 Neil Bartlett
 neil.bartlett@paremus.com Jigsaw and OSGi: What the Heck Happens Now?
  • 2. Copyright © 2017 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. October 2017 Jigsaw and OSGi: WTF Happens Now? Neil Bartlett
 neil.bartlett@paremus.com
  • 3. Copyright © 2017 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. October 2017 Agenda • WTF is a Module System? • How do OSGi and Jigsaw Compare? • Is OSGi Still Useful? • Can OSGi and Jigsaw Work Together?
  • 4. Copyright © 2017 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. October 2017 WTF Is a Module System? • Isolation of Module Internals • Controlled & Scoped Dependencies • Defined Modes of Interaction (Contracts) • Lifecycle
  • 5. Copyright © 2017 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. October 2017 ISOLATION
  • 6. Copyright © 2017 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. October 2017 Isolation • Prevent leakage of implementation details • Enable public vs private distinction • Avoid supporting private internals as API
  • 7. Copyright © 2017 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. October 2017 Java Refresher: Visible vs Accessible • Accessibility is checked by the compiler… • Though not always accurately (“runtime packages”, JVM Spec 5.4.4) package Foo; public class A class B package Bar; public class C Visible, Accessible Visible, NOT Accessible Class Loader Class Loader public class D package Baz; NOT Visible
  • 8. Copyright © 2017 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. October 2017 Jigsaw Isolation • Jigsaw redefines the meaning of “public class” in Java. Runtime Class Loader package Foo; public class A package Baz; public class C Accessible NOT Accessible module A { exports Foo; } package Bar; public class B module B { requires A; }
  • 9. Copyright © 2017 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. October 2017 Audience Participation • QUESTION: Can both of these modules be present together on the module path? module B { exports bar; } module A { exports foo; }
  • 10. Copyright © 2017 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. October 2017 Audience Participation • ANSWER: Maybe! Not enough information. • Modules cannot contain the same packages, even private packages. • Jigsaw isolation is incomplete: internal details exposed. • module-info.java is incomplete as a module descriptor. • Modules on the module path still exist in ONE class loader.
  • 11. Copyright © 2017 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. October 2017 DEPENDENCIES
  • 12. Copyright © 2017 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. October 2017 Dependencies • Isolation is about building walls. • Any damn fool can build a wall… • *Almost any damn fool can build a wall.
  • 13. Copyright © 2017 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. October 2017 Dependencies • Much harder to actually work together. • Punch holes in the wall. • Control access to module features, i.e. API.
  • 14. Copyright © 2017 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. October 2017 OSGi: Requirements & Capabilities • Capability: What I can do. E.g.: • Requirement: What I need. E.g.: • Depend on what a bundle can do, not its identity. • Different bundles can implement same idea differently. Provide-Capability: com.acme.display; width:Long=1920; height:Long=1080 Export-Package: org.example.foo; version=1.2.0 Require-Capability: com.acme.display; filter:=“(width>=1024)" Import-Package: org.example.foo; version='[1.2,2.0)'
  • 15. Copyright © 2017 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. October 2017 Jigsaw Dependencies • Jigsaw dependencies are entirely based on identity. • No substitution possible.Same module identity for build & run. • Module identity is API! • Two artefacts providing the same API must have same module identity. module B { exports bar; requires A; }
  • 16. Copyright © 2017 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. October 2017 Versions • Versions in Jigsaw are officially Somebody Else’s Problem. • ¯_(ツ)_/¯
  • 17. Copyright © 2017 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. October 2017 COMPARISON
  • 18. Copyright © 2017 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. October 2017 Why is Jigsaw Like This • It solves the problem it set out to solve: modularise the JDK. • JDK is a single vendor, closely managed product. • Not assembled from multiple 3rd party components. • Released all-at-once, infrequently. • An API used by 9 MILLION developers, BILLIONS of apps. • Can’t just refactor into better modular structure!
  • 19. Copyright © 2017 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. October 2017 “Typical” Java Applications • Assembled from many sources, from many organisations. • Multiple component release cycles. • Frequent releases… time-to-market critical! • OSGi has been addressing these challenges for 18 years. • Versioning • Requirement/Capability • Resolving • Services • FLEXIBILITY
  • 20. Copyright © 2017 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. October 2017 Ideal Scenario • We want the best of all worlds. • Use a modular JDK, provided by Jigsaw… • … in a modular application, powered by OSGi. • This will be great! • Let’s just check it actually works…
  • 21. Copyright © 2017 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. October 2017 COMPATIBILITY
  • 22. Copyright © 2017 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. October 2017 Java 9 Migration • Jigsaw implements strategies for compatibility and migration to Java 9: • Classpath & Unnamed Modules. • Automatic Modules. • Illegal access not yet enforced in Java 9.
  • 23. Copyright © 2017 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. October 2017 Unnamed Modules • The classpath still exists in Java 9. Types are loaded into an unnamed module. • Unnamed modules implicitly require (“read”) ALL named modules on the modulepath. • Named modules cannot read unnamed modules. • In theory, running any standard Java app on Java 9 should Just WorkTM. • “In theory, there is no difference between theory and practice. But in practice, there is.”
  • 24. Copyright © 2017 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. October 2017 Automatic Modules • A named module with an implicit definition. • Drop a plain JAR on the modulepath, it’s now a module. • Reads every other named module, exports all packages. • Named modules can depend on automatic modules.
  • 25. Copyright © 2017 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. October 2017 INTEROP
 Level 0
  • 26. Copyright © 2017 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. October 2017 Level 0: Running • Felix, Equinox and Knopflerfish all run on Java 9. • Classpath compatibility mode. • OSGi runs in an unnamed module. • Felix Framework requires only java.base module.
  • 27. Copyright © 2017 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. October 2017 Level 0: Challenges • Illegal reflective access warnings… can be ignored in Java 9 • Hard-coded package lists: • System Bundle exports inter alia javax.swing • javax.swing is exported by module java.desktop • java.desktop module can now be removed from the platform. Oops!
  • 28. Copyright © 2017 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. October 2017 Level 0: Challenges • OSGi bundles cannot import java.* • Therefore cannot have versioned Import-Package. • How to check compatibility, e.g. can I call String.isEmpty? • Execution Environment requirement (generated): • Execution Environment describes a monolithic platform. • java.* packages can now be removed! Oops. Require-Capability: osgi.ee; filter:=“(&(osgi.ee=JavaSE)(version=1.8))”
  • 29. Copyright © 2017 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. October 2017 INTEROP
 Level 1
  • 30. Copyright © 2017 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. October 2017 Detect Platform Packages • Calculate System Bundle exports using the JPMS Module API. • Better… filter existing package list through calculated platform packages. • Runtime introspection does not show uses constraints. • MANY more packages exported than Java SE. • Working (experimentally) in Felix now.
  • 31. Copyright © 2017 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. October 2017 DEMO
  • 32. Copyright © 2017 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. October 2017 Analysis • Fixes the problem of Java SE packages such as javax.*. • Doesn’t fix the problem of java.* dependencies • Exec Env is no longer sufficient. • Bundles need to indicate their Jigsaw module dependencies. • Invent a new capability namespace: jpms.module • Get bnd to generate this obviously. • Make sure OSGi Framework provides it. Require-Capability: jpms.module; filter:=“(jpms.module=java.sql)”
  • 33. Copyright © 2017 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. October 2017 DEMO
  • 34. Copyright © 2017 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. October 2017 JPMS Module Dependencies • Effectively, OSGi bundles can now depend on JPMS modules. • Considered for inclusion in OSGi Core Spec? • However! • Many legacy bundles… all existing bundles today… • Without the jpms.module requirement, we don’t know whether a bundle should resolve. • With the jpms.module requirement, the bundle will never resolve on Java 8 or below :-( • Maybe run jdeps on-the-fly rather than build time?
  • 35. Copyright © 2017 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. October 2017 INTEROP
 Level 2+
  • 36. Copyright © 2017 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. October 2017 Full Bidirectional Interop? • Very unlikely ever to work. • Jigsaw modules can only depend on Jigsaw modules. • No dynamics… • No split packages… • No cycles… • NB split packages are bad, and cycles are often bad. • Unfortunately they are sometimes necessary. • Backwards-incompatible to remove from OSGi.
  • 37. Copyright © 2017 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. October 2017 Leverage Jigsaw Access Controls • Non-exported types in OSGi can still be loaded w/ reflection. • Use Java 2 Security to prevent this. • Might be nice to use Jigsaw access control as an alternative? • Can’t be done in Java 9. Have to go all-in on modules to use this feature (not very modular…). • Maybe possible in future Java?
  • 38. Copyright © 2017 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. October 2017 Load OSGi in a Jigsaw Module? • Run OSGi and all bundles inside a named module. • Might allow more control over access to the platform. • Can’t be done: module content is immutable. • This class will always be the unnamed module, even if the above code is running in a named module. • We asked for but did not get an addPackages method on Module. void loadBundle(URL[] bundleClasspath) throws Exception { URLClassLoader loader = new URLClassLoader(bundleClasspath); Class<?> clazz = loader.loadClass("org.example.MyBundleActivator"); Module module = clazz.getModule(); // ... }
  • 39. Copyright © 2017 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. October 2017 The Tom Watson Experiment • IBM has App Server products written in OSGi. • Future customers may need to deploy Jigsaw modules. • Jigsaw modules can only depend on Jigsaw modules… • … or Jigsaw Layers. • Hierarchical groups of modules with inherited readability. • Dynamically map OSGi Framework subgraphs to Layers. • Not full bidirectional interop. • Complex and computationally expensive. • github.com/tjwatson/osgi-jpms-layer
  • 40. Copyright © 2017 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. October 2017 The Tom Watson Experiment: Architecture* java.base etc mymodule mylibrary JPMS Boot Layer App Layer Dynamic Generated App Server Layers * Approximate, according to my understanding
  • 41. Copyright © 2017 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. October 2017 Just Pretend It’s a Bundle • Jigsaw metadata is (almost) a subset of OSGi. • OSGi functionality is (almost) a superset of Jigsaw • Load a Jigsaw module as if it were an OSGi bundle. • Map requires to Require-Bundle, etc. Relatively simple to do. • Huge loss of info: • Goodbye Import-Package, Capabilities, Resolver… • Goodbye Versions! • ServiceLoader does not really work… limited value. • Will discourage open source developers from including OSGi metadata.
  • 42. Copyright © 2017 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. October 2017 Move Up the Stack • Much of OSGi’s value is in the Service Registry… • … and the fantastic specs that build on top of Services. • The registry can be factored out of the rest of the framework. • “PojoSR” from Karl Pauls, now Felix Connect. • For some people the module layer simply isn’t that interesting. • App assembly and continuous deployment — enabled by Capabilities & Requirements — are unparalleled. • SAD.
  • 43. Copyright © 2017 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. October 2017 The Good News
  • 44. Copyright © 2017 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. October 2017 The Good News • Jigsaw is fantastic for modularising the JDK. • OSGi is fantastic for modularising applications. • Already working together. • Enhanced bnd tooling + jlink = tiny application images. • Tens of megabytes.
  • 45. Copyright © 2017 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. October 2017 The Future Does Not Have to be Scary
  • 46. Copyright © 2017 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. October 2017 Jigsaw for JDK OSGi for Apps
  • 47. Copyright © 2017 Paremus Ltd. May not be reproduced by any means without express permission. All rights reserved. October 2017 Thank You! Email: neil.bartlett@paremus.com Twitter: @nbartlett