SlideShare une entreprise Scribd logo
1  sur  32
Télécharger pour lire hors ligne
HOW TO CONNECT
YOUR
OSGI APPLICATION
Automotive Service Solutions | AA-AS/EIS2-EU | 23.10.2018
© Robert Bosch GmbH 2018. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen.
2
How to connect your OSGi application
Speaker
Dirk Fauth
System-Architect
Eclipse Committer
Robert Bosch GmbH
Franz-Oechsle-Straße 4
73207 Plochingen
dirk.fauth@de.bosch.com
www.bosch.com
blog.vogella.com/author/fipro/
Twitter: fipro78
INTRODUCTION
How to connect your OSGi application
Automotive Service Solutions | AA-AS/EIS2-EU | 23.10.2018
© Robert Bosch GmbH 2018. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen.
4
Introduction
Application A Application B
S
S
S
S
Communication Protocol,
e.g. JSON via HTTP
What does OSGi provide to realize this szenario?
How to connect your OSGi application
Automotive Service Solutions | AA-AS/EIS2-EU | 23.10.2018
© Robert Bosch GmbH 2018. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen.
5
Setup
JVM
OSGi Framework
JSON Converter
Servlet Container
???
e.g. Equinox or Felix
SCR Felix SCR
e.g. Jetty
Application / Services
e.g. Jackson
How to connect your OSGi application
Automotive Service Solutions | AA-AS/EIS2-EU | 23.10.2018
© Robert Bosch GmbH 2018. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen.
6
Setup - Service
public interface StringModifier {
String modify(String input);
}
@Component
public class StringInverter implements StringModifier {
@Override
public String modify(String input) {
return new StringBuilder(input).reverse().toString();
}
}
M(ost) U(seless) S(ervice) E(ver)
HTTP SERVICE
HTTP WHITEBOARD
How to connect your OSGi application
Automotive Service Solutions | AA-AS/EIS2-EU | 23.10.2018
© Robert Bosch GmbH 2018. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen.
8
HTTP Service / HTTP Whiteboard
JVM
OSGi Framework
JSON Converter
Servlet Container
HTTP Service / HTTP Whiteboard
SCR
Application / Services
Servlet
How to connect your OSGi application
Automotive Service Solutions | AA-AS/EIS2-EU | 23.10.2018
© Robert Bosch GmbH 2018. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen.
9
HTTP Service / HTTP Whiteboard
@Component(
service=Servlet.class,
property= "osgi.http.whiteboard.servlet.pattern=/modify",
scope=ServiceScope.PROTOTYPE)
public class ModifierServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Reference private volatile List<StringModifier> modifier;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setContentType(MediaType.APPLICATION_JSON);
ObjectMapper objectMapper = new ObjectMapper();
try {
String json = objectMapper.writeValueAsString(
modifier.stream().map(x -> x.modify(input)).collect(toList()));
resp.getWriter().write(json);
} catch (JsonProcessingException e) { ... }
}
}
@Component(
service=Servlet.class,
property= "osgi.http.whiteboard.servlet.pattern=/modify",
scope=ServiceScope.PROTOTYPE)
public class ModifierServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Reference private volatile List<StringModifier> modifier;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setContentType(MediaType.APPLICATION_JSON);
ObjectMapper objectMapper = new ObjectMapper();
try {
String json = objectMapper.writeValueAsString(
modifier.stream().map(x -> x.modify(input)).collect(toList()));
resp.getWriter().write(json);
} catch (JsonProcessingException e) { ... }
}
}
@Component(
service=Servlet.class,
property= "osgi.http.whiteboard.servlet.pattern=/modify",
scope=ServiceScope.PROTOTYPE)
public class ModifierServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Reference private volatile List<StringModifier> modifier;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setContentType(MediaType.APPLICATION_JSON);
ObjectMapper objectMapper = new ObjectMapper();
try {
String json = objectMapper.writeValueAsString(
modifier.stream().map(x -> x.modify(input)).collect(toList()));
resp.getWriter().write(json);
} catch (JsonProcessingException e) { ... }
}
}
How to connect your OSGi application
Automotive Service Solutions | AA-AS/EIS2-EU | 23.10.2018
© Robert Bosch GmbH 2018. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen.
10
HTTP Service / HTTP Whiteboard
Service URL: http://localhost:8080/modify?value=Eclipse
How to connect your OSGi application
Automotive Service Solutions | AA-AS/EIS2-EU | 23.10.2018
© Robert Bosch GmbH 2018. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen.
11
 Cons
 Dependency to Servlet API
 Conversion done in the service
 Pros
 Very simple
 Small number of bundles
HTTP Service / HTTP Whiteboard
REMOTE
SERVICES
How to connect your OSGi application
Automotive Service Solutions | AA-AS/EIS2-EU | 23.10.2018
© Robert Bosch GmbH 2018. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen.
13
Remote Services
Service
Producer
Remote Service
Implementation
endpoint
created by RSA
announced by Discovery
Service
Consumer
endpoint
discovered by Discovery
proxied by RSA
Remote Service
Implementation
How to connect your OSGi application
Automotive Service Solutions | AA-AS/EIS2-EU | 23.10.2018
© Robert Bosch GmbH 2018. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen.
15
Remote Services
JVM
OSGi Framework
JSON Converter
Servlet Container
HTTP Service / HTTP Whiteboard
SCR
Application / Services
Remote Service / RSA
How to connect your OSGi application
Automotive Service Solutions | AA-AS/EIS2-EU | 23.10.2018
© Robert Bosch GmbH 2018. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen.
16
Remote Services
@Component(property= {
"service.exported.interfaces=*",
"service.exported.configs=ecf.generic.server"
})
public class StringInverter implements StringModifier {
@Override
public String modify(String input) {
return new StringBuilder(input).reverse().toString();
}
}
How to connect your OSGi application
Automotive Service Solutions | AA-AS/EIS2-EU | 23.10.2018
© Robert Bosch GmbH 2018. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen.
17
Remote Services
@Path("/modify")
@Component(
immediate = true,
property = { "service.exported.interfaces=*",
"service.intents=osgi.async",
"service.intents=jaxrs",
"osgi.basic.timeout=50000" })
public class ModifierServiceImpl implements ModifierService {
@Reference private volatile List<StringModifier> modifier;
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("/{value}")
@Override
public List<String> getModifications(@PathParam("value") String value) {
return modifier.stream().map(x -> x.modify(value)).collect(Collectors.toList());
}
}
@Path("/modify")
@Component(
immediate = true,
property = { "service.exported.interfaces=*",
"service.intents=osgi.async",
"service.intents=jaxrs",
"osgi.basic.timeout=50000" })
public class ModifierServiceImpl implements ModifierService {
@Reference private volatile List<StringModifier> modifier;
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("/{value}")
@Override
public List<String> getModifications(@PathParam("value") String value) {
return modifier.stream().map(x -> x.modify(value)).collect(Collectors.toList());
}
}
@Path("/modify")
@Component(
immediate = true,
property = { "service.exported.interfaces=*",
"service.intents=osgi.async",
"service.intents=jaxrs",
"osgi.basic.timeout=50000" })
public class ModifierServiceImpl implements ModifierService {
@Reference private volatile List<StringModifier> modifier;
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("/{value}")
@Override
public List<String> getModifications(@PathParam("value") String value) {
return modifier.stream().map(x -> x.modify(value)).collect(Collectors.toList());
}
}
How to connect your OSGi application
Automotive Service Solutions | AA-AS/EIS2-EU | 23.10.2018
© Robert Bosch GmbH 2018. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen.
14
 Various protocols available (e.g. via ECF)
 Discovery
‒ Zeroconf/aka Bonjour/Rendevous (JmDNS)
‒ jSLP aka SLP/RFC2608
 Distribution Provider
‒ Generic Provider
‒ r-OSGi Provider
‒ Jax-RS Distribution Provider
Remote Services
How to connect your OSGi application
Automotive Service Solutions | AA-AS/EIS2-EU | 23.10.2018
© Robert Bosch GmbH 2018. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen.
18
Remote Services
Service URL: http://localhost:8080/1/modify/Eclipse
How to connect your OSGi application
Automotive Service Solutions | AA-AS/EIS2-EU | 23.10.2018
© Robert Bosch GmbH 2018. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen.
19
 Cons
 Complicated bundle composition
 High risk with networking issues
 Client side is an OSGi application
 URL contains dynamic containerID
 Pros
 Simple definition via component
properties
 Usage of default JAX-RS
annotations
 Importing remote services without
efforts in programming
Remote Services
JAX-RS
WHITEBOARD
How to connect your OSGi application
Automotive Service Solutions | AA-AS/EIS2-EU | 23.10.2018
© Robert Bosch GmbH 2018. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen.
21
JAX-RS Whiteboard
JVM
OSGi Framework
JSON Converter
Servlet Container
HTTP Service / HTTP Whiteboard
SCR
Application / Services
JAX-RS Whiteboard
How to connect your OSGi application
Automotive Service Solutions | AA-AS/EIS2-EU | 23.10.2018
© Robert Bosch GmbH 2018. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen.
22
JAX-RS Whiteboard
@Path("/modify")
@Produces(MediaType.APPLICATION_JSON)
@Component(service=ModifierServiceImpl.class)
@JaxrsResource
@JSONRequired
public class ModifierServiceImpl {
@Reference
private volatile List<StringModifier> modifier;
@GET
@Path("/{value}")
public List<String> getModifications(@PathParam("value") String value) {
return modifier.stream().map(x -> x.modify(value)).collect(toList());
}
}
@Path("/modify")
@Produces(MediaType.APPLICATION_JSON)
@Component(service=ModifierServiceImpl.class)
@JaxrsResource
@JSONRequired
public class ModifierServiceImpl {
@Reference
private volatile List<StringModifier> modifier;
@GET
@Path("/{value}")
public List<String> getModifications(@PathParam("value") String value) {
return modifier.stream().map(x -> x.modify(value)).collect(toList());
}
}
How to connect your OSGi application
Automotive Service Solutions | AA-AS/EIS2-EU | 23.10.2018
© Robert Bosch GmbH 2018. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen.
23
JAX-RS Whiteboard
@Component(scope = PROTOTYPE)
@JaxrsExtension
@JaxrsMediaType(APPLICATION_JSON)
public class JacksonJsonConverter<T>
implements MessageBodyReader<T>, MessageBodyWriter<T> {
@Reference(service=LoggerFactory.class)
private Logger logger;
private final Converter converter = Converters.newConverterBuilder()
.rule(String.class, this::toJson)
.rule(this::toObject)
.build();
private ObjectMapper mapper = new ObjectMapper();
...
@Component(scope = PROTOTYPE)
@JaxrsExtension
@JaxrsMediaType(APPLICATION_JSON)
public class JacksonJsonConverter<T>
implements MessageBodyReader<T>, MessageBodyWriter<T> {
@Reference(service=LoggerFactory.class)
private Logger logger;
private final Converter converter = Converters.newConverterBuilder()
.rule(String.class, this::toJson)
.rule(this::toObject)
.build();
private ObjectMapper mapper = new ObjectMapper();
...
How to connect your OSGi application
Automotive Service Solutions | AA-AS/EIS2-EU | 23.10.2018
© Robert Bosch GmbH 2018. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen.
24
JAX-RS Whiteboard
Service URL: http://localhost:8080/modify/Eclipse
How to connect your OSGi application
Automotive Service Solutions | AA-AS/EIS2-EU | 23.10.2018
© Robert Bosch GmbH 2018. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen.
26
 Cons
 Only CXF based reference
implementation from Aries
available
 osgi.contract capabilities not
widely integrated yet
 Pros
 Simple definition via Component
Property Types
 Usage of default JAX-RS
annotations
 Easy combination of different
OSGi R7 specifications
 Runtime requirements resolved
via osgi.contract capabilities
JAX-RS Whiteboard
ALTERNATIVES
How to connect your OSGi application
Automotive Service Solutions | AA-AS/EIS2-EU | 23.10.2018
© Robert Bosch GmbH 2018. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen.
28
 OSGi JAX-RS Connector
https://github.com/hstaudacher/osgi-jax-rs-connector
 Inactive for > 3 years
 With R7 actually no use anymore
 enRoute
https://enroute.osgi.org
 Basic guidance for using R7 specifications
 Maven based toolchain
 Custom communication implementations
Alternatives
REFERENCES
How to connect your OSGi application
Automotive Service Solutions | AA-AS/EIS2-EU | 23.10.2018
© Robert Bosch GmbH 2018. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen.
30
 OSGi Core Release 7 Specification
https://osgi.org/specification/osgi.core/7.0.0/
 OSGi Compendium Release 7 Specification
https://osgi.org/specification/osgi.cmpn/7.0.0/
 Eclipse Communication Framework Wiki
https://wiki.eclipse.org/Eclipse_Communication_Framework_Project#OS
Gi_Remote_Services
References
How to connect your OSGi application
Automotive Service Solutions | AA-AS/EIS2-EU | 23.10.2018
© Robert Bosch GmbH 2018. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen.
31
 HTTP Service Specification
https://osgi.org/specification/osgi.cmpn/7.0.0/service.http.html
 HTTP Whiteboard Specification
https://osgi.org/specification/osgi.cmpn/7.0.0/service.http.whiteboard.html
 Remote Services
https://osgi.org/specification/osgi.cmpn/7.0.0/service.remoteservices.html
 Remote Service Admin Service Specification
https://osgi.org/specification/osgi.cmpn/7.0.0/service.remoteserviceadmin
.html
 JAX-RS Whiteboard Specification
https://osgi.org/specification/osgi.cmpn/7.0.0/service.jaxrs.html
References
How to connect your OSGi application
Automotive Service Solutions | AA-AS/EIS2-EU | 23.10.2018
© Robert Bosch GmbH 2018. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen.
32
 ECF JAX-RS Distribution Provider
https://github.com/ECF/JaxRSProviders
https://wiki.eclipse.org/Tutorial:_Exposing_a_Jax_REST_service_as_an_
OSGi_Remote_Service
 Access OSGi services via web interface
http://blog.vogella.com/2017/04/20/access-osgi-services-via-web-
interface/
 Microservices with OSGi
https://www.eclipsecon.org/europe2017/session/microservices-osgi
https://www.youtube.com/watch?v=IOusIWAziFE
 Example sources
https://github.com/fipro78/access_osgi_services
References
How to connect your OSGi application - Dirk Fauth (Bosch)

Contenu connexe

Tendances

Introduction to Spring Boot!
Introduction to Spring Boot!Introduction to Spring Boot!
Introduction to Spring Boot!
Jakub Kubrynski
 
클라우드 여정을 성공적으로 수행하기 위한 AWS IAM 활용 전략::최원근:: AWS Summit Seoul 2018
클라우드 여정을 성공적으로 수행하기 위한 AWS IAM 활용 전략::최원근:: AWS Summit Seoul 2018 클라우드 여정을 성공적으로 수행하기 위한 AWS IAM 활용 전략::최원근:: AWS Summit Seoul 2018
클라우드 여정을 성공적으로 수행하기 위한 AWS IAM 활용 전략::최원근:: AWS Summit Seoul 2018
Amazon Web Services Korea
 

Tendances (20)

Introduction to Spring Boot!
Introduction to Spring Boot!Introduction to Spring Boot!
Introduction to Spring Boot!
 
(DVO201) Scaling Your Web Applications with AWS Elastic Beanstalk
(DVO201) Scaling Your Web Applications with AWS Elastic Beanstalk(DVO201) Scaling Your Web Applications with AWS Elastic Beanstalk
(DVO201) Scaling Your Web Applications with AWS Elastic Beanstalk
 
OWASP WTE - Now in the Cloud!
OWASP WTE - Now in the Cloud!OWASP WTE - Now in the Cloud!
OWASP WTE - Now in the Cloud!
 
Spring boot
Spring bootSpring boot
Spring boot
 
CI/CD for Modern Applications
CI/CD for Modern ApplicationsCI/CD for Modern Applications
CI/CD for Modern Applications
 
클라우드 여정을 성공적으로 수행하기 위한 AWS IAM 활용 전략::최원근:: AWS Summit Seoul 2018
클라우드 여정을 성공적으로 수행하기 위한 AWS IAM 활용 전략::최원근:: AWS Summit Seoul 2018 클라우드 여정을 성공적으로 수행하기 위한 AWS IAM 활용 전략::최원근:: AWS Summit Seoul 2018
클라우드 여정을 성공적으로 수행하기 위한 AWS IAM 활용 전략::최원근:: AWS Summit Seoul 2018
 
Introduction to Spring Framework
Introduction to Spring FrameworkIntroduction to Spring Framework
Introduction to Spring Framework
 
Spring Certification Questions
Spring Certification QuestionsSpring Certification Questions
Spring Certification Questions
 
Building APIs with Amazon API Gateway
Building APIs with Amazon API GatewayBuilding APIs with Amazon API Gateway
Building APIs with Amazon API Gateway
 
AWS DirectConnect 구성 가이드 (김용우) - 파트너 웨비나 시리즈
AWS DirectConnect 구성 가이드 (김용우) -  파트너 웨비나 시리즈AWS DirectConnect 구성 가이드 (김용우) -  파트너 웨비나 시리즈
AWS DirectConnect 구성 가이드 (김용우) - 파트너 웨비나 시리즈
 
Amazon API Gateway
Amazon API GatewayAmazon API Gateway
Amazon API Gateway
 
PUC SE Day 2019 - SpringBoot
PUC SE Day 2019 - SpringBootPUC SE Day 2019 - SpringBoot
PUC SE Day 2019 - SpringBoot
 
DevSecOps: Minimizing Risk, Improving Security
DevSecOps: Minimizing Risk, Improving SecurityDevSecOps: Minimizing Risk, Improving Security
DevSecOps: Minimizing Risk, Improving Security
 
API Monetization: Unlock the Value of Your Data
API Monetization: Unlock the Value of Your DataAPI Monetization: Unlock the Value of Your Data
API Monetization: Unlock the Value of Your Data
 
Spring - Part 1 - IoC, Di and Beans
Spring - Part 1 - IoC, Di and Beans Spring - Part 1 - IoC, Di and Beans
Spring - Part 1 - IoC, Di and Beans
 
Introduction to Java 8
Introduction to Java 8Introduction to Java 8
Introduction to Java 8
 
ReST API Security
ReST API SecurityReST API Security
ReST API Security
 
쉽게 알아보는 AWS 클라우드 보안 :: 임기성 & 신용녀 :: AWS Summit Seoul 2016
쉽게 알아보는 AWS 클라우드 보안 :: 임기성 & 신용녀 :: AWS Summit Seoul 2016쉽게 알아보는 AWS 클라우드 보안 :: 임기성 & 신용녀 :: AWS Summit Seoul 2016
쉽게 알아보는 AWS 클라우드 보안 :: 임기성 & 신용녀 :: AWS Summit Seoul 2016
 
Introduction to Spring Framework
Introduction to Spring FrameworkIntroduction to Spring Framework
Introduction to Spring Framework
 
Spring boot
Spring bootSpring boot
Spring boot
 

Similaire à How to connect your OSGi application - Dirk Fauth (Bosch)

Plattformunabhängige Anwendungen mit Python, PHP und JavaScript lizenzieren
Plattformunabhängige Anwendungen mit Python, PHP und JavaScript lizenzierenPlattformunabhängige Anwendungen mit Python, PHP und JavaScript lizenzieren
Plattformunabhängige Anwendungen mit Python, PHP und JavaScript lizenzieren
team-WIBU
 
Hosting Provider Summit Mai 2012
Hosting Provider Summit Mai 2012Hosting Provider Summit Mai 2012
Hosting Provider Summit Mai 2012
Thomas Uhl
 
Li So G Osci
Li So G OsciLi So G Osci
Li So G Osci
Cloudcamp
 
Die Open eHealth Integration Platform
Die Open eHealth Integration PlatformDie Open eHealth Integration Platform
Die Open eHealth Integration Platform
krasserm
 

Similaire à How to connect your OSGi application - Dirk Fauth (Bosch) (20)

Microservices with OSGi - D Fauth
Microservices with OSGi - D FauthMicroservices with OSGi - D Fauth
Microservices with OSGi - D Fauth
 
Eclipse RCP with Bndtools - P Kirschners & D Fauth
Eclipse RCP with Bndtools - P Kirschners & D FauthEclipse RCP with Bndtools - P Kirschners & D Fauth
Eclipse RCP with Bndtools - P Kirschners & D Fauth
 
Plattformunabhängige Anwendungen mit Python, PHP und JavaScript lizenzieren
Plattformunabhängige Anwendungen mit Python, PHP und JavaScript lizenzierenPlattformunabhängige Anwendungen mit Python, PHP und JavaScript lizenzieren
Plattformunabhängige Anwendungen mit Python, PHP und JavaScript lizenzieren
 
Von der Dokumentationserstellung zum topic-basierten Content Management bei B...
Von der Dokumentationserstellung zum topic-basierten Content Management bei B...Von der Dokumentationserstellung zum topic-basierten Content Management bei B...
Von der Dokumentationserstellung zum topic-basierten Content Management bei B...
 
Deutsche Wolke
Deutsche WolkeDeutsche Wolke
Deutsche Wolke
 
Sbs unternehmenspräsentation v14.3.8
Sbs unternehmenspräsentation v14.3.8Sbs unternehmenspräsentation v14.3.8
Sbs unternehmenspräsentation v14.3.8
 
WS: Uhl, Lisog - Deutsche Wolke
WS: Uhl, Lisog - Deutsche WolkeWS: Uhl, Lisog - Deutsche Wolke
WS: Uhl, Lisog - Deutsche Wolke
 
Entwicklung mit Volt MX und Co. | Teil 1
Entwicklung mit Volt MX und Co. | Teil 1Entwicklung mit Volt MX und Co. | Teil 1
Entwicklung mit Volt MX und Co. | Teil 1
 
Gewinnung von OPEN SOURCE Techniken für junge Unternehmen
Gewinnung von OPEN SOURCE Techniken für junge UnternehmenGewinnung von OPEN SOURCE Techniken für junge Unternehmen
Gewinnung von OPEN SOURCE Techniken für junge Unternehmen
 
Hosting Provider Summit Mai 2012
Hosting Provider Summit Mai 2012Hosting Provider Summit Mai 2012
Hosting Provider Summit Mai 2012
 
Back to the Frontend – aber nun mit Microservices
Back to the Frontend – aber nun mit MicroservicesBack to the Frontend – aber nun mit Microservices
Back to the Frontend – aber nun mit Microservices
 
Oracle Mobile Cloud Service im Einsatz
Oracle Mobile Cloud Service im EinsatzOracle Mobile Cloud Service im Einsatz
Oracle Mobile Cloud Service im Einsatz
 
Top 10 Internet Trends 2006
Top 10 Internet Trends 2006Top 10 Internet Trends 2006
Top 10 Internet Trends 2006
 
Li So G Osci
Li So G OsciLi So G Osci
Li So G Osci
 
Die Open eHealth Integration Platform
Die Open eHealth Integration PlatformDie Open eHealth Integration Platform
Die Open eHealth Integration Platform
 
Industrie 4.0: Symposium an der RFH Köln
Industrie 4.0: Symposium an der RFH KölnIndustrie 4.0: Symposium an der RFH Köln
Industrie 4.0: Symposium an der RFH Köln
 
Webinar: Kollaborative Plattform für den Digitalen Zwilling - SAP Asset Intel...
Webinar: Kollaborative Plattform für den Digitalen Zwilling - SAP Asset Intel...Webinar: Kollaborative Plattform für den Digitalen Zwilling - SAP Asset Intel...
Webinar: Kollaborative Plattform für den Digitalen Zwilling - SAP Asset Intel...
 
Überblick zu MVC6 auf DevCon der Fox-Pro-Usergroup in Frankfurt, Nov 2015
Überblick zu MVC6 auf DevCon der Fox-Pro-Usergroup in Frankfurt, Nov 2015Überblick zu MVC6 auf DevCon der Fox-Pro-Usergroup in Frankfurt, Nov 2015
Überblick zu MVC6 auf DevCon der Fox-Pro-Usergroup in Frankfurt, Nov 2015
 
20040921 Serviceorientierte Architektur für WebSphere und WebSphere Portal
20040921 Serviceorientierte Architektur für WebSphere und WebSphere Portal20040921 Serviceorientierte Architektur für WebSphere und WebSphere Portal
20040921 Serviceorientierte Architektur für WebSphere und WebSphere Portal
 
OSMC 2023 | IGNITE: Honeypot Flavors: Open-Source Honeypots and their Use in ...
OSMC 2023 | IGNITE: Honeypot Flavors: Open-Source Honeypots and their Use in ...OSMC 2023 | IGNITE: Honeypot Flavors: Open-Source Honeypots and their Use in ...
OSMC 2023 | IGNITE: Honeypot Flavors: Open-Source Honeypots and their Use in ...
 

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

Plus de 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...
 
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 ...
 

How to connect your OSGi application - Dirk Fauth (Bosch)

  • 2. Automotive Service Solutions | AA-AS/EIS2-EU | 23.10.2018 © Robert Bosch GmbH 2018. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen. 2 How to connect your OSGi application Speaker Dirk Fauth System-Architect Eclipse Committer Robert Bosch GmbH Franz-Oechsle-Straße 4 73207 Plochingen dirk.fauth@de.bosch.com www.bosch.com blog.vogella.com/author/fipro/ Twitter: fipro78
  • 4. How to connect your OSGi application Automotive Service Solutions | AA-AS/EIS2-EU | 23.10.2018 © Robert Bosch GmbH 2018. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen. 4 Introduction Application A Application B S S S S Communication Protocol, e.g. JSON via HTTP What does OSGi provide to realize this szenario?
  • 5. How to connect your OSGi application Automotive Service Solutions | AA-AS/EIS2-EU | 23.10.2018 © Robert Bosch GmbH 2018. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen. 5 Setup JVM OSGi Framework JSON Converter Servlet Container ??? e.g. Equinox or Felix SCR Felix SCR e.g. Jetty Application / Services e.g. Jackson
  • 6. How to connect your OSGi application Automotive Service Solutions | AA-AS/EIS2-EU | 23.10.2018 © Robert Bosch GmbH 2018. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen. 6 Setup - Service public interface StringModifier { String modify(String input); } @Component public class StringInverter implements StringModifier { @Override public String modify(String input) { return new StringBuilder(input).reverse().toString(); } } M(ost) U(seless) S(ervice) E(ver)
  • 8. How to connect your OSGi application Automotive Service Solutions | AA-AS/EIS2-EU | 23.10.2018 © Robert Bosch GmbH 2018. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen. 8 HTTP Service / HTTP Whiteboard JVM OSGi Framework JSON Converter Servlet Container HTTP Service / HTTP Whiteboard SCR Application / Services Servlet
  • 9. How to connect your OSGi application Automotive Service Solutions | AA-AS/EIS2-EU | 23.10.2018 © Robert Bosch GmbH 2018. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen. 9 HTTP Service / HTTP Whiteboard @Component( service=Servlet.class, property= "osgi.http.whiteboard.servlet.pattern=/modify", scope=ServiceScope.PROTOTYPE) public class ModifierServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Reference private volatile List<StringModifier> modifier; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType(MediaType.APPLICATION_JSON); ObjectMapper objectMapper = new ObjectMapper(); try { String json = objectMapper.writeValueAsString( modifier.stream().map(x -> x.modify(input)).collect(toList())); resp.getWriter().write(json); } catch (JsonProcessingException e) { ... } } } @Component( service=Servlet.class, property= "osgi.http.whiteboard.servlet.pattern=/modify", scope=ServiceScope.PROTOTYPE) public class ModifierServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Reference private volatile List<StringModifier> modifier; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType(MediaType.APPLICATION_JSON); ObjectMapper objectMapper = new ObjectMapper(); try { String json = objectMapper.writeValueAsString( modifier.stream().map(x -> x.modify(input)).collect(toList())); resp.getWriter().write(json); } catch (JsonProcessingException e) { ... } } } @Component( service=Servlet.class, property= "osgi.http.whiteboard.servlet.pattern=/modify", scope=ServiceScope.PROTOTYPE) public class ModifierServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Reference private volatile List<StringModifier> modifier; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType(MediaType.APPLICATION_JSON); ObjectMapper objectMapper = new ObjectMapper(); try { String json = objectMapper.writeValueAsString( modifier.stream().map(x -> x.modify(input)).collect(toList())); resp.getWriter().write(json); } catch (JsonProcessingException e) { ... } } }
  • 10. How to connect your OSGi application Automotive Service Solutions | AA-AS/EIS2-EU | 23.10.2018 © Robert Bosch GmbH 2018. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen. 10 HTTP Service / HTTP Whiteboard Service URL: http://localhost:8080/modify?value=Eclipse
  • 11. How to connect your OSGi application Automotive Service Solutions | AA-AS/EIS2-EU | 23.10.2018 © Robert Bosch GmbH 2018. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen. 11  Cons  Dependency to Servlet API  Conversion done in the service  Pros  Very simple  Small number of bundles HTTP Service / HTTP Whiteboard
  • 13. How to connect your OSGi application Automotive Service Solutions | AA-AS/EIS2-EU | 23.10.2018 © Robert Bosch GmbH 2018. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen. 13 Remote Services Service Producer Remote Service Implementation endpoint created by RSA announced by Discovery Service Consumer endpoint discovered by Discovery proxied by RSA Remote Service Implementation
  • 14. How to connect your OSGi application Automotive Service Solutions | AA-AS/EIS2-EU | 23.10.2018 © Robert Bosch GmbH 2018. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen. 15 Remote Services JVM OSGi Framework JSON Converter Servlet Container HTTP Service / HTTP Whiteboard SCR Application / Services Remote Service / RSA
  • 15. How to connect your OSGi application Automotive Service Solutions | AA-AS/EIS2-EU | 23.10.2018 © Robert Bosch GmbH 2018. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen. 16 Remote Services @Component(property= { "service.exported.interfaces=*", "service.exported.configs=ecf.generic.server" }) public class StringInverter implements StringModifier { @Override public String modify(String input) { return new StringBuilder(input).reverse().toString(); } }
  • 16. How to connect your OSGi application Automotive Service Solutions | AA-AS/EIS2-EU | 23.10.2018 © Robert Bosch GmbH 2018. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen. 17 Remote Services @Path("/modify") @Component( immediate = true, property = { "service.exported.interfaces=*", "service.intents=osgi.async", "service.intents=jaxrs", "osgi.basic.timeout=50000" }) public class ModifierServiceImpl implements ModifierService { @Reference private volatile List<StringModifier> modifier; @GET @Produces(MediaType.APPLICATION_JSON) @Path("/{value}") @Override public List<String> getModifications(@PathParam("value") String value) { return modifier.stream().map(x -> x.modify(value)).collect(Collectors.toList()); } } @Path("/modify") @Component( immediate = true, property = { "service.exported.interfaces=*", "service.intents=osgi.async", "service.intents=jaxrs", "osgi.basic.timeout=50000" }) public class ModifierServiceImpl implements ModifierService { @Reference private volatile List<StringModifier> modifier; @GET @Produces(MediaType.APPLICATION_JSON) @Path("/{value}") @Override public List<String> getModifications(@PathParam("value") String value) { return modifier.stream().map(x -> x.modify(value)).collect(Collectors.toList()); } } @Path("/modify") @Component( immediate = true, property = { "service.exported.interfaces=*", "service.intents=osgi.async", "service.intents=jaxrs", "osgi.basic.timeout=50000" }) public class ModifierServiceImpl implements ModifierService { @Reference private volatile List<StringModifier> modifier; @GET @Produces(MediaType.APPLICATION_JSON) @Path("/{value}") @Override public List<String> getModifications(@PathParam("value") String value) { return modifier.stream().map(x -> x.modify(value)).collect(Collectors.toList()); } }
  • 17. How to connect your OSGi application Automotive Service Solutions | AA-AS/EIS2-EU | 23.10.2018 © Robert Bosch GmbH 2018. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen. 14  Various protocols available (e.g. via ECF)  Discovery ‒ Zeroconf/aka Bonjour/Rendevous (JmDNS) ‒ jSLP aka SLP/RFC2608  Distribution Provider ‒ Generic Provider ‒ r-OSGi Provider ‒ Jax-RS Distribution Provider Remote Services
  • 18. How to connect your OSGi application Automotive Service Solutions | AA-AS/EIS2-EU | 23.10.2018 © Robert Bosch GmbH 2018. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen. 18 Remote Services Service URL: http://localhost:8080/1/modify/Eclipse
  • 19. How to connect your OSGi application Automotive Service Solutions | AA-AS/EIS2-EU | 23.10.2018 © Robert Bosch GmbH 2018. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen. 19  Cons  Complicated bundle composition  High risk with networking issues  Client side is an OSGi application  URL contains dynamic containerID  Pros  Simple definition via component properties  Usage of default JAX-RS annotations  Importing remote services without efforts in programming Remote Services
  • 21. How to connect your OSGi application Automotive Service Solutions | AA-AS/EIS2-EU | 23.10.2018 © Robert Bosch GmbH 2018. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen. 21 JAX-RS Whiteboard JVM OSGi Framework JSON Converter Servlet Container HTTP Service / HTTP Whiteboard SCR Application / Services JAX-RS Whiteboard
  • 22. How to connect your OSGi application Automotive Service Solutions | AA-AS/EIS2-EU | 23.10.2018 © Robert Bosch GmbH 2018. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen. 22 JAX-RS Whiteboard @Path("/modify") @Produces(MediaType.APPLICATION_JSON) @Component(service=ModifierServiceImpl.class) @JaxrsResource @JSONRequired public class ModifierServiceImpl { @Reference private volatile List<StringModifier> modifier; @GET @Path("/{value}") public List<String> getModifications(@PathParam("value") String value) { return modifier.stream().map(x -> x.modify(value)).collect(toList()); } } @Path("/modify") @Produces(MediaType.APPLICATION_JSON) @Component(service=ModifierServiceImpl.class) @JaxrsResource @JSONRequired public class ModifierServiceImpl { @Reference private volatile List<StringModifier> modifier; @GET @Path("/{value}") public List<String> getModifications(@PathParam("value") String value) { return modifier.stream().map(x -> x.modify(value)).collect(toList()); } }
  • 23. How to connect your OSGi application Automotive Service Solutions | AA-AS/EIS2-EU | 23.10.2018 © Robert Bosch GmbH 2018. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen. 23 JAX-RS Whiteboard @Component(scope = PROTOTYPE) @JaxrsExtension @JaxrsMediaType(APPLICATION_JSON) public class JacksonJsonConverter<T> implements MessageBodyReader<T>, MessageBodyWriter<T> { @Reference(service=LoggerFactory.class) private Logger logger; private final Converter converter = Converters.newConverterBuilder() .rule(String.class, this::toJson) .rule(this::toObject) .build(); private ObjectMapper mapper = new ObjectMapper(); ... @Component(scope = PROTOTYPE) @JaxrsExtension @JaxrsMediaType(APPLICATION_JSON) public class JacksonJsonConverter<T> implements MessageBodyReader<T>, MessageBodyWriter<T> { @Reference(service=LoggerFactory.class) private Logger logger; private final Converter converter = Converters.newConverterBuilder() .rule(String.class, this::toJson) .rule(this::toObject) .build(); private ObjectMapper mapper = new ObjectMapper(); ...
  • 24. How to connect your OSGi application Automotive Service Solutions | AA-AS/EIS2-EU | 23.10.2018 © Robert Bosch GmbH 2018. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen. 24 JAX-RS Whiteboard Service URL: http://localhost:8080/modify/Eclipse
  • 25. How to connect your OSGi application Automotive Service Solutions | AA-AS/EIS2-EU | 23.10.2018 © Robert Bosch GmbH 2018. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen. 26  Cons  Only CXF based reference implementation from Aries available  osgi.contract capabilities not widely integrated yet  Pros  Simple definition via Component Property Types  Usage of default JAX-RS annotations  Easy combination of different OSGi R7 specifications  Runtime requirements resolved via osgi.contract capabilities JAX-RS Whiteboard
  • 27. How to connect your OSGi application Automotive Service Solutions | AA-AS/EIS2-EU | 23.10.2018 © Robert Bosch GmbH 2018. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen. 28  OSGi JAX-RS Connector https://github.com/hstaudacher/osgi-jax-rs-connector  Inactive for > 3 years  With R7 actually no use anymore  enRoute https://enroute.osgi.org  Basic guidance for using R7 specifications  Maven based toolchain  Custom communication implementations Alternatives
  • 29. How to connect your OSGi application Automotive Service Solutions | AA-AS/EIS2-EU | 23.10.2018 © Robert Bosch GmbH 2018. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen. 30  OSGi Core Release 7 Specification https://osgi.org/specification/osgi.core/7.0.0/  OSGi Compendium Release 7 Specification https://osgi.org/specification/osgi.cmpn/7.0.0/  Eclipse Communication Framework Wiki https://wiki.eclipse.org/Eclipse_Communication_Framework_Project#OS Gi_Remote_Services References
  • 30. How to connect your OSGi application Automotive Service Solutions | AA-AS/EIS2-EU | 23.10.2018 © Robert Bosch GmbH 2018. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen. 31  HTTP Service Specification https://osgi.org/specification/osgi.cmpn/7.0.0/service.http.html  HTTP Whiteboard Specification https://osgi.org/specification/osgi.cmpn/7.0.0/service.http.whiteboard.html  Remote Services https://osgi.org/specification/osgi.cmpn/7.0.0/service.remoteservices.html  Remote Service Admin Service Specification https://osgi.org/specification/osgi.cmpn/7.0.0/service.remoteserviceadmin .html  JAX-RS Whiteboard Specification https://osgi.org/specification/osgi.cmpn/7.0.0/service.jaxrs.html References
  • 31. How to connect your OSGi application Automotive Service Solutions | AA-AS/EIS2-EU | 23.10.2018 © Robert Bosch GmbH 2018. Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung, Weitergabe sowie für den Fall von Schutzrechtsanmeldungen. 32  ECF JAX-RS Distribution Provider https://github.com/ECF/JaxRSProviders https://wiki.eclipse.org/Tutorial:_Exposing_a_Jax_REST_service_as_an_ OSGi_Remote_Service  Access OSGi services via web interface http://blog.vogella.com/2017/04/20/access-osgi-services-via-web- interface/  Microservices with OSGi https://www.eclipsecon.org/europe2017/session/microservices-osgi https://www.youtube.com/watch?v=IOusIWAziFE  Example sources https://github.com/fipro78/access_osgi_services References