OSGi was adopted to enable dynamic installation and updating of components in a telecommunications system. The system was gradually modularized using OSGi services and bundles over time. This improved extensibility, reduced coupling between layers, and made the code base significantly cleaner and easier to maintain. OSGi enforces better modular design and the use of services improves loose coupling between components.
The OSGi Subsystems specification is now published. Subsystems provide a way of structuring large systems comprising many OSGi bundles - a "no brainer" for architects who want to build a modular system. But what are the practical considerations when using Subsystems? We'll look at the trade-offs involved and indicate some patterns and anti-patterns.
Eclipse Virgo was one of the technologies that provided input to the Subsystem specification. We'll use Virgo as a source of examples in discussing the practical trade-offs in the use of Subsystems.
This presentation was given at the OSGi DevCon at EclipseCon Europe 2012.
Subsystems: For those occasions where bundles are just too small... - Graham ...mfrancis
Enterprise OSGi 4.2 standardized the use of a number of component models for developing Enterprise OSGi applications: Servlet, JSP, Blueprint, and JPA. Implementations of these specifications have since become available in many open source projects and products such as Apache Aries, Eclipse Gemini/Virgo, GlassFish, JBoss Application Server and WebSphere Application Server. Looking at a number of these environments, it's clear that when it comes to assembly and deployment there's still something missing, namely something to represent a collection of bundles (e.g. an Application). Eclipse Virgo has "PARs" and "Plans", Apache Aries has "Applications", and WebSphere Application Server has “Applications” and “Composites”. Looking further afield to kernel projects, other bundle collection concepts exist, such as Apache Karaf "Features". Each model has concepts in common, such as identity, versioning and content, but also differences like isolation and format. It is clear that this is an area of Enterprise OSGi that could benefit from standardization and hence the Subsystems specification is being created. Subsystems is currently a draft specification which is standardizing artefacts representing collections of bundles, such as an Application. This presentation will introduce the current Subsystems design. It will describe how Subsystems can be used for development and deployment of bundle collections with different isolation semantics, to address the application, composite and feature use cases seen in the OSGi community today.
After almost a year of slow but steady development, the time is soon approaching when you will be able to start writing Jenkins plugins armed with nothing but a simple JRuby environment.
To illustrate exactly what this means, we'll study the anatomy of a Ruby plugin, how it works at runtime, and walk through the creation, testing and deploying of an example using nothing put 100% pure Ruby.
Finally, beyond the mechanical, we'll discuss why this effort is important for the entire Jenkins community, not just the part of the community that uses Ruby.
Java script nirvana in netbeans [con5679]Ryan Cuprak
JavaOne 2016
NetBeans is not just a Java IDE. It supports JavaScript as a first-class citizen and provides a complete integrated development environment. It also provides project types for server-side JavaScript (Node.js) as well as web browsers and mobile (Apache Cordova). In addition, it supports Grunt, Mocha and Selenium, Angular and Knockout, and more. This session provides an update on NetBeans 8.1 and demonstrates the top new JavaScript features. You will see a Node.js application in action, look at the support for JavaScript unit testing, and also see how easy it is to debug an Apache Cordova application running on a tethered iPhone.
The OSGi Subsystems specification is now published. Subsystems provide a way of structuring large systems comprising many OSGi bundles - a "no brainer" for architects who want to build a modular system. But what are the practical considerations when using Subsystems? We'll look at the trade-offs involved and indicate some patterns and anti-patterns.
Eclipse Virgo was one of the technologies that provided input to the Subsystem specification. We'll use Virgo as a source of examples in discussing the practical trade-offs in the use of Subsystems.
This presentation was given at the OSGi DevCon at EclipseCon Europe 2012.
Subsystems: For those occasions where bundles are just too small... - Graham ...mfrancis
Enterprise OSGi 4.2 standardized the use of a number of component models for developing Enterprise OSGi applications: Servlet, JSP, Blueprint, and JPA. Implementations of these specifications have since become available in many open source projects and products such as Apache Aries, Eclipse Gemini/Virgo, GlassFish, JBoss Application Server and WebSphere Application Server. Looking at a number of these environments, it's clear that when it comes to assembly and deployment there's still something missing, namely something to represent a collection of bundles (e.g. an Application). Eclipse Virgo has "PARs" and "Plans", Apache Aries has "Applications", and WebSphere Application Server has “Applications” and “Composites”. Looking further afield to kernel projects, other bundle collection concepts exist, such as Apache Karaf "Features". Each model has concepts in common, such as identity, versioning and content, but also differences like isolation and format. It is clear that this is an area of Enterprise OSGi that could benefit from standardization and hence the Subsystems specification is being created. Subsystems is currently a draft specification which is standardizing artefacts representing collections of bundles, such as an Application. This presentation will introduce the current Subsystems design. It will describe how Subsystems can be used for development and deployment of bundle collections with different isolation semantics, to address the application, composite and feature use cases seen in the OSGi community today.
After almost a year of slow but steady development, the time is soon approaching when you will be able to start writing Jenkins plugins armed with nothing but a simple JRuby environment.
To illustrate exactly what this means, we'll study the anatomy of a Ruby plugin, how it works at runtime, and walk through the creation, testing and deploying of an example using nothing put 100% pure Ruby.
Finally, beyond the mechanical, we'll discuss why this effort is important for the entire Jenkins community, not just the part of the community that uses Ruby.
Java script nirvana in netbeans [con5679]Ryan Cuprak
JavaOne 2016
NetBeans is not just a Java IDE. It supports JavaScript as a first-class citizen and provides a complete integrated development environment. It also provides project types for server-side JavaScript (Node.js) as well as web browsers and mobile (Apache Cordova). In addition, it supports Grunt, Mocha and Selenium, Angular and Knockout, and more. This session provides an update on NetBeans 8.1 and demonstrates the top new JavaScript features. You will see a Node.js application in action, look at the support for JavaScript unit testing, and also see how easy it is to debug an Apache Cordova application running on a tethered iPhone.
Configuring and maintaining a continuous integration environment is quite a bit of work. It requires ongoing resources both in terms of manpower and hardware infrastructure. As an application evolves so does the number of ongoing projects. The challenge is creating a scalable continuous integration environment which does not impede development and can handle the complexities of Java EE testing. This session covers how to setup and configure a cloud-based continuous integration environment for Java EE applications.
The presentation will focus on demonstrating how to use Atlassian Bamboo running on AWS to build and test a Maven/Gradle Java EE project that uses Arquillian for testing. Topics that will be covered include creating a custom AWS VM for use with Bamboo, creating an Amazon VPC (Virtual Private Cloud) along with test database using Amazon RDS. The presentation will delve into the specifics of testing EJBs, WebSocket endpoints, RESTful web services, as well as performing load testing in this environment. Security, cost control, and build monitoring will be covered as well.
Scalable Object Storage with Apache CloudStack and Apache HadoopChiradeep Vittal
Object Storage (like AWS S3) in the cloud is a key enabler of scalability and reliability in Cloud Computing. We will discuss how Apache CloudStack integrates Object Storage solutions and discuss specifically how HDFS (a part of Apache Hadoop) can provide the storage engine for the Object Storage component
The Xen Hypervisor was built for the Cloud from the outset: when Xen was designed, we anticipated a world, which today is known as cloud computing. Today, Xen powers the largest clouds in production.
This talk explores success criteria, architecture, trade-offs and challenges for cloudy hypervisors. It is intended for users and developers and starts with a brief introduction to Xen and XCP, their architecture and on common challenges for KVM and Xen.
I will introduce the concept of domain disaggregation as an approach to increase security, robustness and scalability: all important factors for building clouds at scale and show how advanced security features suchas Xen Security Modules and SELinux can help secure your cloud further.
The talk will conclude with exciting developments in the Xen community, such as Xen for ARM servers, a new virtualization mode for Xen, running applications without OS in a Xen guest and point out their implications for building open source clouds.
Introduction to Apache CloudStack by David Nalleybuildacloud
Apache CloudStack is a mature, easy to deploy IaaS platform. That doesn't mean that it can be done without thought or preparation. Learn how CloudStack can be most efficiently deployed, and the problems to avoid in the process.
About David Nalley
David is a recovering sysadmin with a decade of experience. He’s a committer on the Apache CloudStack (incubating) project, a contributor to the Fedora Project and the Vice President of Infrastructure at the Apache Software Foundation.
The Kubernetes WebLogic revival (part 2)Simon Haslam
The second of two sessions Martien & I presented at UKOUG Techfest19 in Brighton, UK about:
(a) Running WebLogic in containers, managed by Kubernetes
(b) Oracle's Container Engine for Kubernetes (OKE) - Oracle Cloud's managed k8s service
Microservices and functional programmingMichael Neale
A talk I did recently on microservices and functional programming. Microservices are small, single purpose apps that are run as a service, which are usually composed together to provide the real app.
This webinar introduces Apache Camel's large range of components for connectivity and protocol support, and how the 50+ patterns create a powerful toolbox that lets you build integration solutions "Lego style". This webinar will introduce you to the Camel community and why it is so important for any serious open source project to have a thriving community.
Speaker: Claus Ibsen - Camel PMC member and top committer
When Google released the first SDK for Android, which was way before the first mobile phones running it were released, Karl and Marcel decided to try and see what it would take to get Apache Felix running OSGi on Android.
This presentation introduces the Android platform, OSGi, and demonstrates how to run Apache Felix on Android. It builds on an earlier blog article that was published on this subject, an article that inspired many other OSGi implementations to try the same.
Configuring and maintaining a continuous integration environment is quite a bit of work. It requires ongoing resources both in terms of manpower and hardware infrastructure. As an application evolves so does the number of ongoing projects. The challenge is creating a scalable continuous integration environment which does not impede development and can handle the complexities of Java EE testing. This session covers how to setup and configure a cloud-based continuous integration environment for Java EE applications.
The presentation will focus on demonstrating how to use Atlassian Bamboo running on AWS to build and test a Maven/Gradle Java EE project that uses Arquillian for testing. Topics that will be covered include creating a custom AWS VM for use with Bamboo, creating an Amazon VPC (Virtual Private Cloud) along with test database using Amazon RDS. The presentation will delve into the specifics of testing EJBs, WebSocket endpoints, RESTful web services, as well as performing load testing in this environment. Security, cost control, and build monitoring will be covered as well.
Scalable Object Storage with Apache CloudStack and Apache HadoopChiradeep Vittal
Object Storage (like AWS S3) in the cloud is a key enabler of scalability and reliability in Cloud Computing. We will discuss how Apache CloudStack integrates Object Storage solutions and discuss specifically how HDFS (a part of Apache Hadoop) can provide the storage engine for the Object Storage component
The Xen Hypervisor was built for the Cloud from the outset: when Xen was designed, we anticipated a world, which today is known as cloud computing. Today, Xen powers the largest clouds in production.
This talk explores success criteria, architecture, trade-offs and challenges for cloudy hypervisors. It is intended for users and developers and starts with a brief introduction to Xen and XCP, their architecture and on common challenges for KVM and Xen.
I will introduce the concept of domain disaggregation as an approach to increase security, robustness and scalability: all important factors for building clouds at scale and show how advanced security features suchas Xen Security Modules and SELinux can help secure your cloud further.
The talk will conclude with exciting developments in the Xen community, such as Xen for ARM servers, a new virtualization mode for Xen, running applications without OS in a Xen guest and point out their implications for building open source clouds.
Introduction to Apache CloudStack by David Nalleybuildacloud
Apache CloudStack is a mature, easy to deploy IaaS platform. That doesn't mean that it can be done without thought or preparation. Learn how CloudStack can be most efficiently deployed, and the problems to avoid in the process.
About David Nalley
David is a recovering sysadmin with a decade of experience. He’s a committer on the Apache CloudStack (incubating) project, a contributor to the Fedora Project and the Vice President of Infrastructure at the Apache Software Foundation.
The Kubernetes WebLogic revival (part 2)Simon Haslam
The second of two sessions Martien & I presented at UKOUG Techfest19 in Brighton, UK about:
(a) Running WebLogic in containers, managed by Kubernetes
(b) Oracle's Container Engine for Kubernetes (OKE) - Oracle Cloud's managed k8s service
Microservices and functional programmingMichael Neale
A talk I did recently on microservices and functional programming. Microservices are small, single purpose apps that are run as a service, which are usually composed together to provide the real app.
This webinar introduces Apache Camel's large range of components for connectivity and protocol support, and how the 50+ patterns create a powerful toolbox that lets you build integration solutions "Lego style". This webinar will introduce you to the Camel community and why it is so important for any serious open source project to have a thriving community.
Speaker: Claus Ibsen - Camel PMC member and top committer
When Google released the first SDK for Android, which was way before the first mobile phones running it were released, Karl and Marcel decided to try and see what it would take to get Apache Felix running OSGi on Android.
This presentation introduces the Android platform, OSGi, and demonstrates how to run Apache Felix on Android. It builds on an earlier blog article that was published on this subject, an article that inspired many other OSGi implementations to try the same.
Presentation on OSGi and the Cloud from OSGi Community Event 2010 and JAX London by David Savage (Paremus).
Commentary on slides part 1 available from https://blogs.paremus.com/2010/10/osgi-the-cloud-part-1/
Following simple patterns of good application design can allow you to scale your application for your customers easily. This presentation dives into the 12 factor application design and demo how this applies to containers and deployments on Amazon ECS and Fargate. We'll take a look at tooling that can be used to simplify your workflow and help you adopt the principles of the 12 factor application.
Stackato presentation done at the Nordic Perl Workshop 2012 in Stockholm, Sweden
More information available at: https://logiclab.jira.com/wiki/display/OPEN/Stackato
Microservices created quite a buzz in software development. Those are finally being adopted, and a lot of project suffer from that... microservices bring a lot of infrastructure and distributed programming complexity not all organisations can cope with. Question is – is it possible to gradually migrate to microservices architecture without Big Bang/Rewrite From Scratch approach? I would say it is possible, and is a much better idea compared to installing Kubernetes on AWS on day one. This talk is based on practical experience of architecting business applications to scale out and grow up to become micro services one day.
Latest (storage IO) patterns for cloud-native applications OpenEBS
Applying micro service patterns to storage giving each workload its own Container Attached Storage (CAS) system. This puts the DevOps persona within full control of the storage requirements and brings data agility to k8s persistent workloads. We will go over the concept and the implementation of CAS, as well as its orchestration.
Eclipse Modeling Framework and plain OSGi the easy way - Mark Hoffman (Data I...mfrancis
OSGi Community Event 2018 Presentation by Mark Hoffmann (Data In Motion)
Abstract: This talk will show you how the EMF framework can be used in pure OSGi environments other than Equinox. We will introduce you into free configurable ResourceSets and the principle of a ResourceSetFactory. This enables your application to have multiple tenants with different model visibillity. The profit of OSGi services provides a behavior where even models can come and go all the time.
We will also give you look inside, how easy it is to extend the default code generation process of EMF to generate OSGi service component that handle the model registration in an OSGi way.
OSGi Community Event 2018 Presentation by BJ Hargrave (IBM)
Abstract: Java 9 introduced the Java Platform Module System (JPMS) as a way to modularize the Java platform and it can be also be used by developers to modularize their own applications, although JPMS lack a number of important features for software running on the Java platform.
As people look to support the latest versions of the Java platform, changes introduced in Java 9 related to JPMS led to the needs for some features in the OSGi Core specification. OSGi framework implementations like Eclipse Equinox and Apache Felix and tools like Bnd were updated to support these new features.
This session will explore the Java 9+ support added to OSGi Core R7 and Bnd and help you learn how to navigate the world of Java 9+ and OSGi.
Simplify Web UX Coding using OSGi Modularity Magic - Paul Fraser (A2Z Living)mfrancis
OSGi Community Event 2018 Presentation by Paul Fraser (A2Z Living)
Abstract: This talk will demonstrate how easy it is to create great web user interfaces using the OSGi Service registry and Declarative Services.
OSGi has developed to the point that much can be achieved with much reduced code complexity. Forget all the past OSGi techniques and see how it can be done now.
A short introduction will introduce OSGi in general and even if beginners do not fully understand the finer details of the talk, they will be amazed at what can be achieved using the OSGi service registry.
Do not be frightened by the terminology, come along and experience the magic of OSGi modularity.
User interfaces do not seem to get much attention in the OSGi community, it is time for a change.
OSGi for the data centre - Connecting OSGi to Kubernetes - Frank Lyaruumfrancis
OSGi Community Event 2018 Presentation by Frank Lyaruu
Abstract: OSGi offers an excellent service discovery mechanism, it is limited to services inside the JVM. That limits us in two ways: It limits us to Java services, and it limits us to one single machine, and neither are acceptable in this day and age. Can we connect our OSGi runtime to a cluster orchestration manager like Kubernetes so our runtime can interact with the cluster and allow us to respond to changes in the cluster as dynamically as we are used to in OSGi itself. I think we can.
Notes:
I will show how to discover Kubernetes services (and their pods) in a cluster, and inject those as configuration objects into an OSGi runtime. That allows us to monitor the Kubernetes cluster and dynamically have our OSGi services respond to (Kubernetes) service changes.
In general I hope to nudge the OSGi community to be more focused on connecting to other technologies rather than trying to stay in the OSGi walled garden. A well engineered OSGi application is perfectly suited to the dynamic nature of the cloud native world, but if we can't easily integrate with other services, well, nobody will care.
Remote Management and Monitoring of Distributed OSGi Applications - Tim Verbe...mfrancis
OSGi Community Event 2018 Presentation by Tim Verbelen (imec) & Jan S. Rellermeyer (TU Delft)
Abstract: With the proliferation of cloud computing and more recently mobile and edge computing, there is a increasing demand to build flexible and robust distributed applications. The OSGi service and module technology is a key enabler for such deployment. Recent additions to the OSGi standards provide a set of services that provide interfaces for managing distributed instances of OSGi frameworks. The REST Service (added in R6 compendium) offers an easy and language-independent way to manage bundes and introspect services from outside the network. The Cluster Information specifications (added in R7 compendium) provide means for applications to manage and monitor the deployment intrinsically, building on top of the Remote Service specifications. In the Eclipse Concierge project, we have provided the reference implementations of both specifications. In this talk, we will show how the services can be used to build distributed applications that benefit from the OSGi modularity.
OSGi with Docker - a powerful way to develop Java systems - Udo Hafermann (So...mfrancis
OSGi Community Event 2018 Presentation by Udo Hafermann (Software AG)
Abstract: In this talk we will share our experiences in developing a tool chain from classes, to bundles, to containers, to systems.
OSGi and Docker come together in a compelling way where the former provides modularity "in the small" and the latter "modularity in the large". We discover how the unique characteristics of OSGi enable a smooth transition from small to large.
The resulting environment enables developers to grow distributed systems on their local machine and test them with plain JUnit at all levels of granularity - classes to systems. During development OSGi enables the tool chain to update the system without container rebuilds.
While an increase in productivity is one benefit of such an environment, an arguably more important benefit is the way it empowers developers to gain new insights.
A real world use case with OSGi R7 - Jurgen Albert (Data In Motion Consulting...mfrancis
OSGi Community Event 2018 Presentation by Jurgen Albert (Data In Motion Consulting GmbH)
Abstract: OSGi is often conceived as a tool to write efficient Java Applications for resource limited Devices or If resources are a real issue in complex applications. On the other hand Microservices became the buzzword of the cloud and is often implemented using Spring or other Programming languages. OSGi carries the concept of microservices in its core and is therefore much better suited to the task then most other approaches. This talk will show you how a service can be built with a real-worldish use case, leveraging the power of OSGi R7. It will show the combined usage of PushsStreams, the JaxRS Whiteboard, the configurator, remote deployment and a lot of the other cool things OSGi has to offer.
OSGi Feature Model - Where Art Thou - David Bosschaert (Adobe)mfrancis
OSGi Community Event 2018 Presentation by David Bosschaert (Adobe)
Abstract: OSGi lends itself well to develop extensible applications assembled from reusable modules, where a set of bundles together with a set of configurations deployed to a provisioned OSGi framework is the application.
While this works very well for the originally intended use-cases, maintaining and building large applications developed by multiple teams often requires to assemble multiple larger components for which there is limited support in OSGi as of today. This is especially true in cases where multiple groups of bundles, configuration, metadata, and other artifacts need to be combined.
In this talk we will introduce you to OSGi RFP-188, named OSGi Features, which defines the requirements on providing a solution. We'll establish a shared understanding of the problem space and how it relates to already available mechanisms in OSGi (like e.g. subsystems, deploymentadmin, startlevels, etc.) and will subsequently, review it in the context of some of the current (open source) solutions like Apache Karaf Features and Apache Sling Features and Bnd.
Migrating from PDE to Bndtools in Practice - Amit Kumar Mondal (Deutsche Tele...mfrancis
OSGi Community Event 2018 Presentation by Amit Kumar Mondal (Deutsche Telekom AG) & Jochen Hiller (Deutsche Telekom AG)
Abstract: QIVICON is an Eclipse SmartHome based solution from Deutsche Telekom AG. It utilises OSGi to provide a modular Java runtime.
Since the beginning, QIVICON leveraged Eclipse PDE with Maven & Eclipse Tycho as its build technology but over the time, the complexity increased. It became hard to get an overview and manage the runtime and build dependencies. Especially maintaining target configurations for IDE and CI/CD build, having different embedded gateways for installation increased complexity significantly.
Bndtools is the 'swiss army knife' in the context of OSGi development since it takes the nitty-gritty pains and loads off the developer's chest. And that's why we decided to avail the benefits of Bndtools.
But, many other OSGi-based projects still cannot avail the benefits as they are very tightly coupled with Eclipse PDE. Want to make a switch from your existing PDE source base to Bndtools? This talk would give you an overview to proceed towards this.
We would like to further demonstrate in this talk how to set up a Bndtools workspace from an existing PDE workspace, convert all current projects to Bnd projects and embrace the OSGi-way of developing bundles.
Since QIVICON containing more than 350 projects utilised this solution to move to a higher modularity maturity level, this talk would, therefore, outline the pros, cons and the learnings using Bndtools in such a big OSGi project for embedded development.
OSGi CDI Integration Specification - Ray Augé (Liferay)mfrancis
OSGi Community Event 2018 Presentation by Ray Augé (Liferay)
Abstract: This talk discusses the upcoming OSGi CDI Integration Specification and demonstrates common usage patterns and its component model that brings OSGi dynamics; like services and configuration, to CDI and provides for an ecosystem of CDI portable extentions.
How OSGi drives cross-sector energy management - Jörn Tümmler (SMA Solar Tech...mfrancis
OSGi Community Event 2018 Presentation by Jörn Tümmler (SMA Solar Technology)
Abstract: SMA is a leading global specialist in photovoltaic system technology with more than 3,000 SMA employees in 20 countries.
In 2015 SMA decided to develop the ennexOS platform - a cross-sector platform for holistic, intelligent energy management. An important part of this platform is the data-manager - an IoT gateway that acquires information from various energy generators, storages and loads and performs commissioning and management tasks.
This new generation of data-managers demanded for new approaches in software-architecture to:
run on a broad range of hardware platforms, and
be extendible e.g. to support different protocols for easy integration, and
to enable a broad range of applications in the energy-management field that may be customized by apps installed during runtime
After an exhaustive investigation on existing solutions, OSGi was chosen as the key technology for this new generation of devices - a quite challenging decision, because at this point there was only limited experience in Java and OSGi development in the company.
This talk will present the key factors that lead to this decision, how we very carefully build up Java and OSGi knowledge, and started with an initial design. OSGi enRoute and the support of OSGi experts helped us to accelerate our development and become familiar with OSGi - although we also had times when we were struggling because of the new technology.
The talk will demonstrate what we have reached until now and we will tell you if OSGi has kept it's promise ...
Improved developer productivity thanks to Maven and OSGi - Lukasz Dywicki (Co...mfrancis
OSGi Community Event 2018 Presentation by Lukasz Dywicki (Code-House)
Abstract: During this short presentation I will revisit existing mechanisms and approach towards OSGi and JEE development. I will show how many manual steps can be avoided and how to maintain project in effective manner. I will try to find a balance between execution environment requirements and programmer happines at same time.
I believe that OSGi and Eclipse ecosystem experience troubles gaining people from outside for few reasons. Beside overall impression of OSGi complexity there is equally old and invalid complain about quaility of developer tooling. Since invention of BND development experience can be really pleasant and independent of text editor/IDE preferences. Sadly lots of people still rely on former experiences spreading black/bad PR. I would like to clarify their point.
After this presentation attendees will learn:
How to use Maven to build OSGi projects (without Tycho).
How to automate manual tasks.
How to build custom software distributions with Maven artifacts and run it with Apache Karaf.
That OSGi development doesn't differ much from regular day-to-day usage of application servers or microservice runtimes.
This talk is intended for people who know basics of OSGi as it will show few basic technics towards better developer productivity.
It Was Twenty Years Ago Today - Building an OSGi based Smart Home System - Ch...mfrancis
OSGi Community Event 2018 Presentation by Christer Larsson (Makewave)
Abstract: OSGi was originally designed for Smart Homes and Residential Gateways almost 20 years ago.
This talk will present how the OSGi specifications have evolved over the years, and how you today, in 2018, design an OSGi based Smart Home System.
A real world use case of a Swedish Smart Home start-up company will be used to illustrate different design principles and how OSGi remains as relevant today as it was when it started.
Popular patterns revisited on OSGi - Christian Schneider (Adobe)mfrancis
OSGi Community Event 2018 Presentation by Christian Schneider (Adobe)
Abstract: We will look at common cloud and design patterns and see how the special properties of the OSGi environment allows us to rethink these patterns. The talk shows some well known patterns like the service registry and the whiteboard but also some unique patterns like out of band circuit breaker or graceful degregation.
The patterns are shown with some examples using declarative services(DS). So some basic OSGi and DS knowledge is of advantage but not required.
For OSGi beginners the well established OSGi patterns will help getting started the right way. Experienced OSGi developers will find some new patterns to think about. Cloud or enterprise developers will get a new approach to some patterns they are used to which hopefully inspires them to take another look at the current state of OSGi.
Integrating SLF4J and the new OSGi LogService 1.4 - BJ Hargrave (IBM)mfrancis
OSGi Community Event 2018 Presentation by BJ Hargrave (IBM)
Abstract: OSGi Compendium R7 provides a major update to the OSGi LogService specification. A new logging API is added which supports logging levels and dynamic logging administration. A new Push Stream-based means of receiving log entries is also added. But it is quite often the case you need to use other code such as open source projects which are using slf4j for their logging API. This session will explore the new OSGi LogService changes and how you can integrate code using both slf4j logging and OSGi LogService logging.
OSG(a)i: because AI needs a runtime - Tim Verbelen (imec)mfrancis
OSGi Community Event 2018 Presentation by Tim Verbelen (imec)
Abstract: Nowadays AI is reaching new heights on the hype cycle, especially due to recent advances in deep learning techniques. A lot of deep learning frameworks exist for creating and training deep neural networks, the most popular ones being PyTorch and TensorFlow. However, how to integrate, deploy and manage these neural networks in complex software systems is often overlooked. In this talk we show how OSGi can be used as a modular runtime for deep learning models. We embed those models inside OSGi bundles, and use the extender pattern to make these available as OSGi services. You can then use your favorite OSGi specs such as DS and PushStreams to integrate these into your application.
Flying to Jupiter with OSGi - Tony Walsh (ESA) & Hristo Indzhov (Telespazio V...mfrancis
OSGi Community Event 2018 Presentation by Tony Walsh (ESA) & Hristo Indzhov (Telespazio Vega)
Abstract: The European Space Operations Centre (ESOC) is the main operations center for the European Space Agency (ESA), operating a number of earth observation and scientific missions. Monitoring and control functions needed by spacecraft operators are provided by software systems which are reused across missions, but tailored and extended for mission specific needs. The current generation of monitoring and control systems are becoming obsolete and a European wide initiative called the European Ground Systems Common Core (EGS-CC) (http://www.egscc.esa.int) has been started to develop the next generation.
This talk will explain why OSGi was chosen and how it is used in the development of next generation of monitoring and control software. It will describe how OSGi provides the necessary framework that enables the software to be extended for the different space systems it is expected to support. The overall software architecture will be discussed, some of the challenges faced and the benefits gained by using OSGi. The first target mission for the system is JUICE (http://sci.esa.int/juice) which will explore the moons of Jupiter and which is scheduled for launch in 2022.
MicroProfile, OSGi was meant for this - Ray Auge (Liferay)mfrancis
OSGi Community Event 2018 Presentation by Ray Augé (Liferay)
Abstract: The craze is fully on. The past couple of years have seem micro services grow from next _flava_ to fully consuming of the software industry. The Eclipse micorprofile.io project is tackling the issue putting common usage patterns together over a foundation of CDI. What better assembly driver is there than OSGi to put it all together. This talk will demonstrate building your own MicroProfile using OSGi and the OSGi enRoute packaging model.
Prototyping IoT systems with a hybrid OSGi & Node-RED platform - Bruce Jackso...mfrancis
OSGi Community Event 2018 Presentation by Bruce Jackson (Myriad)
Abstract: Node-RED is often used as a protyping tool for IoT systems. However, there are also a large number of OSGi components that have already been built to interface to devices, sensors and systems. In this talk I will show how two completely different runtime environments (OSGi and Node-RED) can be combined into a single platform for prototyping (and more) combining the strengths of both languages and systems.
Being able to quickly and simply prototype IoT application is extremely useful, and to this end many people have adopted Node-Red, a Node.js based runtime with extensive support for plugins to interface to various IoT hardware and protocols. However, this requires these services/protocols to be developed in Javascript, and there is already a significant body of code developed in Java/OSGi that it would be desirable to re-use.
The talk will explain how it is possible to:
Create and manage a Node-Red runtime from within an OSGi bundle
Share OSGi components and object into the Node-Red runtime
Interact and build Node-Red flows that exchange data and call methods between Node.js and OSGi
This is obviously useful for the original purpose: prototyping IoT systems, but also demonstrates some interesting techniques for bridging between different languages and runtimes.
How to connect your OSGi application - Dirk Fauth (Bosch)mfrancis
OSGi Community Event 2018 Presentation by Dirk Fauth (Bosch)
Abstract: In todays connected world the requirement to connect applications across network boundaries has become a common requirement. With OSGi there are several ways to accomplish this, as there are different specifications to achieve this. In this talk we will look at some of these specifications to show what options there are and which might fit your requirements. Starting from an architecture that makes use of the HTTP Whiteboard pattern, over Remote Services to finally showing the usage of the JAX-RS Whiteboard specification introduced with R7. We will show the general usage of these specifications and explaining the advantages and disadvantages of each solution.
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf91mobiles
91mobiles recently conducted a Smart TV Buyer Insights Survey in which we asked over 3,000 respondents about the TV they own, aspects they look at on a new TV, and their TV buying preferences.
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Jeffrey Haguewood
Sidekick Solutions uses Bonterra Impact Management (fka Social Solutions Apricot) and automation solutions to integrate data for business workflows.
We believe integration and automation are essential to user experience and the promise of efficient work through technology. Automation is the critical ingredient to realizing that full vision. We develop integration products and services for Bonterra Case Management software to support the deployment of automations for a variety of use cases.
This video focuses on the notifications, alerts, and approval requests using Slack for Bonterra Impact Management. The solutions covered in this webinar can also be deployed for Microsoft Teams.
Interested in deploying notification automations for Bonterra Impact Management? Contact us at sales@sidekicksolutionsllc.com to discuss next steps.
Transcript: Selling digital books in 2024: Insights from industry leaders - T...BookNet Canada
The publishing industry has been selling digital audiobooks and ebooks for over a decade and has found its groove. What’s changed? What has stayed the same? Where do we go from here? Join a group of leading sales peers from across the industry for a conversation about the lessons learned since the popularization of digital books, best practices, digital book supply chain management, and more.
Link to video recording: https://bnctechforum.ca/sessions/selling-digital-books-in-2024-insights-from-industry-leaders/
Presented by BookNet Canada on May 28, 2024, with support from the Department of Canadian Heritage.
Essentials of Automations: Optimizing FME Workflows with ParametersSafe Software
Are you looking to streamline your workflows and boost your projects’ efficiency? Do you find yourself searching for ways to add flexibility and control over your FME workflows? If so, you’re in the right place.
Join us for an insightful dive into the world of FME parameters, a critical element in optimizing workflow efficiency. This webinar marks the beginning of our three-part “Essentials of Automation” series. This first webinar is designed to equip you with the knowledge and skills to utilize parameters effectively: enhancing the flexibility, maintainability, and user control of your FME projects.
Here’s what you’ll gain:
- Essentials of FME Parameters: Understand the pivotal role of parameters, including Reader/Writer, Transformer, User, and FME Flow categories. Discover how they are the key to unlocking automation and optimization within your workflows.
- Practical Applications in FME Form: Delve into key user parameter types including choice, connections, and file URLs. Allow users to control how a workflow runs, making your workflows more reusable. Learn to import values and deliver the best user experience for your workflows while enhancing accuracy.
- Optimization Strategies in FME Flow: Explore the creation and strategic deployment of parameters in FME Flow, including the use of deployment and geometry parameters, to maximize workflow efficiency.
- Pro Tips for Success: Gain insights on parameterizing connections and leveraging new features like Conditional Visibility for clarity and simplicity.
We’ll wrap up with a glimpse into future webinars, followed by a Q&A session to address your specific questions surrounding this topic.
Don’t miss this opportunity to elevate your FME expertise and drive your projects to new heights of efficiency.
The Art of the Pitch: WordPress Relationships and SalesLaura Byrne
Clients don’t know what they don’t know. What web solutions are right for them? How does WordPress come into the picture? How do you make sure you understand scope and timeline? What do you do if sometime changes?
All these questions and more will be explored as we talk about matching clients’ needs with what your agency offers without pulling teeth or pulling your hair out. Practical tips, and strategies for successful relationship building that leads to closing the deal.
DevOps and Testing slides at DASA ConnectKari Kakkonen
My and Rik Marselis slides at 30.5.2024 DASA Connect conference. We discuss about what is testing, then what is agile testing and finally what is Testing in DevOps. Finally we had lovely workshop with the participants trying to find out different ways to think about quality and testing in different parts of the DevOps infinity loop.
UiPath Test Automation using UiPath Test Suite series, part 3DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 3. In this session, we will cover desktop automation along with UI automation.
Topics covered:
UI automation Introduction,
UI automation Sample
Desktop automation flow
Pradeep Chinnala, Senior Consultant Automation Developer @WonderBotz and UiPath MVP
Deepak Rai, Automation Practice Lead, Boundaryless Group and UiPath MVP
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...DanBrown980551
Do you want to learn how to model and simulate an electrical network from scratch in under an hour?
Then welcome to this PowSyBl workshop, hosted by Rte, the French Transmission System Operator (TSO)!
During the webinar, you will discover the PowSyBl ecosystem as well as handle and study an electrical network through an interactive Python notebook.
PowSyBl is an open source project hosted by LF Energy, which offers a comprehensive set of features for electrical grid modelling and simulation. Among other advanced features, PowSyBl provides:
- A fully editable and extendable library for grid component modelling;
- Visualization tools to display your network;
- Grid simulation tools, such as power flows, security analyses (with or without remedial actions) and sensitivity analyses;
The framework is mostly written in Java, with a Python binding so that Python developers can access PowSyBl functionalities as well.
What you will learn during the webinar:
- For beginners: discover PowSyBl's functionalities through a quick general presentation and the notebook, without needing any expert coding skills;
- For advanced developers: master the skills to efficiently apply PowSyBl functionalities to your real-world scenarios.
JMeter webinar - integration with InfluxDB and GrafanaRTTS
Watch this recorded webinar about real-time monitoring of application performance. See how to integrate Apache JMeter, the open-source leader in performance testing, with InfluxDB, the open-source time-series database, and Grafana, the open-source analytics and visualization application.
In this webinar, we will review the benefits of leveraging InfluxDB and Grafana when executing load tests and demonstrate how these tools are used to visualize performance metrics.
Length: 30 minutes
Session Overview
-------------------------------------------
During this webinar, we will cover the following topics while demonstrating the integrations of JMeter, InfluxDB and Grafana:
- What out-of-the-box solutions are available for real-time monitoring JMeter tests?
- What are the benefits of integrating InfluxDB and Grafana into the load testing stack?
- Which features are provided by Grafana?
- Demonstration of InfluxDB and Grafana using a practice web application
To view the webinar recording, go to:
https://www.rttsweb.com/jmeter-integration-webinar
Search and Society: Reimagining Information Access for Radical FuturesBhaskar Mitra
The field of Information retrieval (IR) is currently undergoing a transformative shift, at least partly due to the emerging applications of generative AI to information access. In this talk, we will deliberate on the sociotechnical implications of generative AI for information access. We will argue that there is both a critical necessity and an exciting opportunity for the IR community to re-center our research agendas on societal needs while dismantling the artificial separation between the work on fairness, accountability, transparency, and ethics in IR and the rest of IR research. Instead of adopting a reactionary strategy of trying to mitigate potential social harms from emerging technologies, the community should aim to proactively set the research agenda for the kinds of systems we should build inspired by diverse explicitly stated sociotechnical imaginaries. The sociotechnical imaginaries that underpin the design and development of information access technologies needs to be explicitly articulated, and we need to develop theories of change in context of these diverse perspectives. Our guiding future imaginaries must be informed by other academic fields, such as democratic theory and critical theory, and should be co-developed with social science scholars, legal scholars, civil rights and social justice activists, and artists, among others.
2. Aepona?
• Instil customer for 3 years
• Provider of products into Telco space
• Focus on ‘Network as a Service’
• Think abstractions over operator
capabilities
3. Telecom Web Services
(In a Nutshell)
• SOAP/REST web services offering
simplified APIs over SMS, MMS, Location,
Conference Calling, etc
• Endpoints provisioned on a per-partner
basis
• Endpoints backed by per-partner runtime
policy enforcement
4. And Much More
• Billing
• Reporting
• Alarms
• Fault Reporting
• System deployed with null implementations
of optional features
7. Runtime
• Equinox-based stack
• Initial bundles defined by config.ini
• Bundles can be remotely installed,
uninstalled, activated, etc
• Managed by Eclipse RCP plug-in or
command line (telnet & Command
Provider)
8. A Potted History
• Project started in late 2006
• Began life as Artix-based stack
• Fairly large, ~10000 unit tests
• Evolved to OSGi 2007
9. The OAM
• Operations, Administration and
Maintenance component spec’ed in 2007
• Used to create, delete, monitor & manage
a multi-container (JVM) environment
• Two key requirements: (a) 99.999% uptime
(b) ability to DYNAMICALLY install,
uninstall and patch components
10. A Leap of Faith
• But for the wrong(ish) reasons
• OAM provided compelling reason for OSGi
• OSGi chosen mainly because it enabled
hot-deploys
• Not because of enforced modularity or
service-oriented design
11. Perceived Downside
• OSGi insists on everything being made
‘modular’
• But aren’t we already modular?
• Don’t we partition our software effectively?
1000s of unit tests say we do!
12. Umm..NO!
• In retrospect, system far from modular
• Layers not partitioned cleanly
• Code not open for extension
• Free-for-all on code base
13. Life Before OSGi
• Single source tree
• Spring Configuration Hell
• Extensibility issues - PS work polluting core
product
• Build issues
14. Evolving to OSGi
• How do we develop? Tools?
• How do we build? Ant, Maven?
• What to do with Artix, Spring & Hibernate?
• How to modularise existing code stream?
• How much time ($) is this going to take?
• No prior OSGi experience
15. Eclipse PDE
• OSGi is first class citizen
• Single project defines ‘target platform’
• Per-customer PSF (Team Project Set) files
• Export bundles directly to TWS
• We like PDE - but we don’t know any
better!
16. Ant Build
• build.xml copies projects into launcher-
prescribed directory structure and then
kicks off launcher
• Heavy use of Eclipse features
• Considerable effort migrating projects
over, but minimal effort in maintaining
• 400+ projects, features, fragments
17. Baby Steps
• No big bang
• Artix converted to single bundle
• Common code refactored into core bundle
• Services deployed as mega-bundles, built
from single source tree
• Gradual migration to OSGi services
18. Hibernate
• Used bnd to create hibernate bundle
• Used DynamicImport-Package: * to find all
exported mapping files & pojos
• Added Antlr & all hibernate jar files to
internal classpath
• Works, but less than ideal
19. Spring DM
• Consistent programming model with
existing Spring infrastructure/knowledge
• No issues with proxy-based approach
• Outside of core, only use Spring DM
• Inside core, mixture of Spring DM and
direct OSGi, but only when necessary
20. Early Mistakes
• Failed to appreciate beauty of whiteboard
pattern: publish/subscribe really should be
replaced with export/track
• Modules not delineated using OSGi
services - services enable dynamism &
enforce better design
• Forgetting to unget services
21. Gradual Modularisation
• Services migrated one at a time
• Initially, layers broken into modules with
public and private parts
• Eventually, modules refactored to be
service oriented
• Code base significantly cleaner
22. Life Before OSGi
Service
ParlayX (e.g. SMS)
ICallback ISmsDao
SmsMessage
Adapter ISmsActivityFactory
SmsActivity
* ALL PUBLIC
Gateway/Network
23. Life With OSGi
Service
ParlayX (e.g. SMS)
Adapter - public ISmsSender
OSGi service
SmsMessage
POJO
SmsSender
Adapter - private ISmsDao
ISmsDao
ISmsDao
SmsActivity
Gateway
24. Note to Self
• OSGi did not make me this way!
• But it encouraged me to step back...
• And be even more clinical in my
separations
25. Reality Check
• Developers rarely have the good grace to
hide implementation details!
• Developers who struggle with partitioning
and layering will struggle even more
with OSGi
• OSGi requires that you think more & be
more disciplined
26. Today
• Extensive use of services & properties
• Heavy use of Spring DM
• Moderate use of the OSGi API
• Little use of compendium services
28. Overall Philosophy
• Avoid the API at all costs
• Necessarily complex and wonderfully
subtle - e.g. returning null from a tracker
• Well documented but good practice hard
to come by
• Hard to unit test - especially trackers
• Instead use Spring DM wherever possible
29. Using the OSGi API
• Only 1 activator across 150 production
bundles
• BundleContext injected via Spring DM
BundleContextAware
• Primarily used to track & register services
• Also used to track bundles e.g. update
property accessor when bundle installed,
signal OAM when bundle fails to install
30. Idiomatic OSGi
• What is good practice? A catalog of idioms/
patterns would be useful, very useful
/**
* Property accessor tracker that creates describer's associated
* policy description based on properties extracted from exported
* policy accessor service. Once created the service is immediately
* 'untracked'.
*/
private class PropertyAccessorTracker implements ServiceTrackerCustomizer {
public Object addingService(final ServiceReference serviceReference) {
final IPropertyAccessor propertyAccessor = (IPropertyAccessor) bundleContext.getService(serviceReference);
policyDescription = createPolicyDescription(propertyAccessor);
bundleContext.ungetService(serviceReference);
debug("Created policy description ", policyDescription);
return null;
}
public void modifiedService(final ServiceReference serviceReference, final Object service) {
// Do nothing
}
public void removedService(final ServiceReference serviceReference, final Object service) {
// Do nothing - no need for unget
}
}
31. Fragments
• Used extensively to configure bundles in
customer specific ways
• Used to house unit tests (10000+)
• One test fragment for every production
bundle
• Fragments containing code cannot be unit
tested. Therefore avoid.
32. Testing
• Focus mostly on behavioural & interaction-
based unit testing
• Unit tests live in fragments
• Dedicated team for end-to-end testing
• Many parts of API mockable, except for
trackers. Grumble.
33. Features
• Eclipse features describe pre-canned
applications/features
• Parsed into config.ini files at build time
• Deployed under <install-dir>/conf/
apps/<feature>/config.ini
• Each feature in conf/apps presented as a
deployable application on front-end
34. OSGi Services
• Modules (mostly) communicate through
services
• Services enable ALL extension points
• Lower layers define and export interfaces;
consumed by higher layers
• Lower layers define and track interfaces;
implemented & exported by higher layers
35. Dynamic Method
Interception
Exported OSGi service
With service properties:
order=1
targetMethods=sendSms
IMethodInterceptor IMethodInterceptor IMethodInterceptor
Method
web service Interceptor service
proxy Invoker
36. IMethodInterceptor
import org.aopalliance.intercept.MethodInterceptor;
/**
* Method interceptor that enables any bundle to intercept
* a service invocation. Implementations of this interface
* are expected to be exported as an OSGi, along with 2
* properties:
* <ul>
* <li>an 'order' property used to determine the order in which
* exported interceptors are invoked compared to each other</li>
* <li>an optional set of comma separated 'targetMethods' method
* names defining the method(s) that the interceptor should be
* applied to</li>
* </ul>
*
* Typically implementations will extend {@link AbstractMethodInterceptor}
* rather than implement this interface directly.
*
* @see AbstractMethodInterceptor
*/
public interface IMethodInterceptor extends MethodInterceptor {
}
37. Canned Method
Interceptors
• Address Normalisation: Enables white &
black listing
• Group Address Resolution: Send to
‘group:abc’ => send to many
• Reporting: On every system transaction
38. Policy Enforcement
Created using IPolicyDescriber
(an OSGi service)
EnforceablePolicy EnforceablePolicy EnforceablePolicy
web service Policy
Enforcer service
proxy
39. Tracking Lists
/**
* Provider of policy descriptions ({@link PolicyDescription}s), derived
* from their service policy description ({@link IPolicyDescriber})
* counterpart.
*/
public class PolicyProvider implements IPolicyProvider {
private List<IPolicyDescriber> describers;
/**
* Sets the list of policy describers being tracked.
* The supplied list is expected to be a Spring-backed
* list that automatically proxies and tracks the actual
* policy describers.
* @param describers a set of policy describers to be used
*/
@Required
public void setPolicyDescribers(final List<IPolicyDescriber> describers) {
this.describers = describers;
}
...
<bean id="policyProvider" class="com.aepona.tws.core.policy.support.PolicyProvider">
<property name="policyDescribers" ref="policyDescribers" />
</bean>
<osgi:list id="policyDescribers"
interface="com.aepona.tws.core.policy.IPolicyDescriber"
cardinality="0..N" />
40. Mobile Originated
Events
• How to publish asynchronous SMS
notifications and delivery receipts to third
party applications?
• More generally - how do we publish events
from lower layers to higher layers?
42. Back to the
Whiteboard
• Lower layer defines and tracks ‘publisher’
interface
• Higher layer implements and exports
publisher
43. Whiteboard
Exported as OSGi service
SmsNotificationPublisher to TPA
<<implements>>
from SmsNotificationHandler ISmsNotificationPublisher
network
Tracks ISmsNotificationPublisher
44. Lifecycle Events
• Web service endpoints come and go
• How do we inform interested parties of such
events?
• They may need to stop ongoing transactions
e.g. in the network layer
45. OSGi as an Event Bus
• Whiteboard pattern pervades system
• Core defines and tracks ‘listener’ services
• Bundles implement and export listener
implementations
• Layers are massively decoupled from one
another
46. Service Listener
/**
* Interface to be implemented classes interested in service events.
* Any instance of a type that implements this interface and that is
* exported as an OSGi service will be informed of service lifecycle
* events. Events are fired <i>asynchronously</i> but sequentially.
* <p>
* Implementations should not tie up the invoking thread. In other
* words the {@link #serviceChanged(ServiceEvent)} method should
* return as quickly as possible.
*/
public interface IServiceListener {
/**
* Receives notification that a service lifecycle event
* has occurred.
*
* @param serviceEvent the service event
*/
void serviceChanged(ServiceEvent serviceEvent);
}
47. Service Event
/**
* A service event describing a service lifecycle change.
* Service events are categorized as:
* <pre>
* create - signals that a service has been provisioned
* update - signals that a service has been updated
* dispose - signals that a service has been disposed
* destroy - signals that a service has been destroyed
* </pre>
* An 'update' event signals that a service has been updated
* without having to recreate the endpoint from scratch.
* If an update requires that a service is re-provisioned
* (because its service name has changed), then a 'destroy'
* followed by a 'create' event will be emitted.
*/
public final class ServiceEvent {
/**
* Returns a service create event.
* @param serviceName the newly created service name
* @return a create service event
*/
public static ServiceEvent createEvent(final ServiceName serviceName) {
return new ServiceEvent(CREATE, serviceName);
}
...
48. Handling Service Events
/**
* Purges expired location notification requests from the system.
* An expired notification is one that has sent the maximum number
* of notifications or has reached its duration limit - both limits
* are specified when the notification is created.
*/
public class LocationNotificationTerminator
implements ILocationNotificationTerminator, IServiceListener, InitializingBean, DisposableBean {
private ILocationNotificationCriteriaDao criteriaDao;
/**
* Deletes data associated with a destroyed service
*/
public void serviceChanged(final ServiceEvent serviceEvent) {
if (serviceEvent.isDestroyEvent()) {
logger.debug("Stopping all notifications for " + serviceEvent.getServiceName());
stopAll(criteriaDao.findByServiceName(serviceEvent.getServiceName()));
}
}
...
49. Service Adapters
• When deployed inside operator TWS talks
to single CORBA-based adapter
• When deployed outside operator TWS
proxies onto multiple operator APIs
• Goal is unified API - OneAPI
• Each operator has own service adapter
OSGi service
50. Service Adapters
• Need to support new operator, simply drop
new adapter bundle
Exported as OSGi Service
With ‘name’ property
name=orange
OneAPI Service IServiceAdapter
WebService orange
IServiceAdapter
vodafone
IServiceAdapter
sprint
51. Modularity Matters
• TWS is large - without OSGi it would, right
now, be a mess
• Modularity enforces better discipline
• Modular designs are more extensible
• Modular designs are easier to test
• Modular designs are cheaper
52. Personal Opinion
• First I couldn’t live without Design By
Contract
• Then I couldn’t live without BDD & DI
• Now I dread life without OSGi
• Enforced modularity and OSGi services are
indispensable design tools