OSGi Community Event 2017 Presentation by Carlos Sierra [Liferay]
Functional programming has arrived in Java language and it has plans to stay. In this talk I will introduce Apache Aries Component DSL, a proof of concept functional library that aims to ease the way in which we can interact with OSGi in a composable and safe way.
If you come to this talk you will learn new approaches of reusing your existing java classes inside the OSGi framework without the need to use annotations or even XML, just lambdas in a stream like API. This library is currently being used to develop the reference implementation of JAX-RS OSGi specification. This can open OSGi to other JVM targeted languages, such as Scala or Eta, that provide specific syntax to functional type classes such as Monads or Applicatives.
From Big to Fast Data. How #kafka and #kafka-connect can redefine you ETL and...Landoop Ltd
Presentation on "Big Data and Kafka, Kafka-Connect and the modern days of stream processing" For @Argos - @Accenture Development Technology Conference - London Science Museum (IMAX)
From Big to Fast Data. How #kafka and #kafka-connect can redefine you ETL and...Landoop Ltd
Presentation on "Big Data and Kafka, Kafka-Connect and the modern days of stream processing" For @Argos - @Accenture Development Technology Conference - London Science Museum (IMAX)
A dive into the world of Lambda expressions in JDK 8, covering the fundamental ideas, some gotchas and a discussion of performance. Finally, just how far can you take Lambdas in Java?
by Rohan Dubal, Software Development Engineer, AWS
One of the biggest time sinks and challenges for mobile application developers is developing, accessing, and managing all of the disparate data sources that are involved in delivering delightful, collaborative, and real-time mobile experiences for users while also enabling offline capabilities for when a user is not connected, but still wants to use the app. In this session, you be introduced to the new AWS AppSync service that speed and simplifies these tasks for developers using GraphQL to provide a data abstraction layer and easy query and update statements without having to know the details of the underlying data sources.
New and cool in OSGi R7 - David Bosschaert & Carsten Ziegelermfrancis
OSGi Community Event 2016 Presentation by David Bosschaert (Adobe) & Carsten Ziegeler (Adobe)
The OSGi expert groups are working on the next big release. Learn in this session about the various new specification efforts going on and how they will make your developer life easier. The new specifications range from configuration handling, object conversion, JAX-RS, distributed eventing, to cloud and IoT.
NEW LAUNCH! Realtime and Offline application development using GraphQL with A...Amazon Web Services
All application developers today need to be concerned with offline access, realtime communications and efficient data fetching. These techniques are no longer optional for great user experiences yet are difficult to engineer and scale from scratch. In this session you’ll get a deep dive on using AWS AppSync to enable your applications for offline access, including optimistic updates on lossy connections, with just a few lines of code. You’ll learn how application data synchronization takes place with the cloud, how you can control the process, programming interfaces for native applications such as iOS and JavaScript based applications across the web, React Native, and Ionic. Additionally you’ll see how using GraphQL enables your application to efficiently leverage the network for queries and mutations while still having a scalable and fast connection for realtime updates when using subscriptions to data changes.
NEW LAUNCH! Realtime and Offline application development using GraphQL with A...Amazon Web Services
All application developers today need to be concerned with offline access, realtime communications and efficient data fetching. These techniques are no longer optional for great user experiences yet are difficult to engineer and scale from scratch. In this session you’ll get a deep dive on using AWS AppSync to enable your applications for offline access, including optimistic updates on lossy connections, with just a few lines of code. You’ll learn how application data synchronization takes place with the cloud, how you can control the process, programming interfaces for native applications such as iOS and JavaScript based applications across the web, React Native, and Ionic. Additionally you’ll see how using GraphQL enables your application to efficiently leverage the network for queries and mutations while still having a scalable and fast connection for realtime updates when using subscriptions to data changes.
One of the biggest time sinks and challenges for mobile application developers is developing, accessing, and managing all of the disparate data sources that are involved in delivering delightful, collaborative, and real-time mobile experiences for users while also enabling offline capabilities for when a user is not connected, but still wants to use the app. In this session, you be introduced to the new AWS AppSync service that speed and simplifies these tasks for developers using GraphQL to provide a data abstraction layer and easy query and update statements without having to know the details of the underlying data sources.
Lambda expressions were introduced in JDK 8 as a simpler way to represent behaviour. This session looks at usage details and performance compared to anonymous inner classes before diving into Lambda calculus
OSGi R7 - Microservices never looked simplermfrancis
OSGi Community Event 2017 Presentation by Tim Ward [Paremus]
REST microservices are a powerful tool for composing large-scale systems, and now, with the new features of OSGi R7, it has never been simpler to create a modular microservice. Combining the new features in Declarative Services, the JAX-RS Whiteboard, Transaction Control and PushStreams we can create a simple, transactional, persistent, streaming microservice with a minimum of code and a maximum of function.
This talk will use practical code examples to show how new OSGi R7 features can save you time and effort when building microservices, letting you focus on business logic, not boilerplate.
Over the last decade there has been a significant shift in the way that many computer programs are written. The focus has changed from building larger, more monolithic applications that provide a single high-level function, to composing these high-level behaviours from groups of smaller, distributed services. This is generally known as a “microservice” architecture, indicating that the services are smaller and lighter weight than typical web services. With the new features in Release 7 OSGi is a better platform for building your microservices than ever before.
The Declarative Services specification is the ultimate in OSGi injection containers. It supports simple, flexible dependency injection using OSGi services; automatic lifecycle management based upon the availability of configuration and dependencies; and a concise, type-safe set of annotations to define your components. The latest round of Declarative Services updates includes new support for constructor injection, activation fields, and a host of other usability improvements designed to make your components even leaner.
The standard for REST microservices in Java is known as JAX-RS. JAX-RS provides a simple annotation-based model in which POJOs can have their methods mapped to RESTful service invocations. Ideal JAX-RS resources share many features with OSGi services, in that they provide a way for machines (or processes within a machine) to interact with one another through a defined contract. This synergy between JAX-RS resources and OSGi services is the driver for the OSGi JAX-RS whiteboard service, allowing OSGi services to be transparently exposed using JAX-RS.
Transaction management is a delicate balance between trying to take away error-prone boilerplate without replacing it entirely with magic. The problem with relying on magic is that the resulting system ends up being more complex to understand, not less. OSGi Transaction Control uses Java’s new functional APIs to simplify and minimise transaction management code, providing generic resource and transaction management in a concise, type-safe way.
OSGi Push Streams are a powerful new take on asynchronous event processing pipelines based on the Java Stream API. ....
OSGi Community Event 2013 (http://www.osgi.org/CommunityEvent2013/Schedule)
ABSTRACT
There are a number component models available to OSGi developers; Declarative Services (DS), Blueprint (BP), Enterprise JavaBeans (EJB), Contexts and Dependency Injection (CDI). Some have their roots in Java EE, some in open source projects such as the Spring Framework, others are standards at the OSGi Alliance, and some have DNA from all three. As is often the case where there are options available, there's rarely a one-size-fits-all. The 'right' choice may depend on the type of project you're working on, the existing assets, tools and skills at your disposal, and the runtime you're looking to deploy to. This talk will provide a brief overview of the four component models listed, describe their capabilities, standards coverage, tools support, and available implementations, and will show working examples of each, all in an effort to help OSGi users find a path to a component model best suited to their particular task.
SPEAKER BIO
Graham Charters is a Senior Technical Staff Member in the IBM WebSphere Application Server development organization. He is responsible for the OSGi Applications feature of the Application Server and a committer and PMC member of the Apache Aries OSGi programming model project. He is also the IBM technical lead in the OSGi Alliance Enterprise Expert Group.
What's cool in the new and updated OSGi Specs (2013)David Bosschaert
Presentation given at EclipseCon Europe 2013 in Ludwigsburg (Germany) about ongoing specification work in OSGi, covering the Core Platform Expert Group (CPEG) and the Enterprise Expert Group (EEG)
JAX-RS and CDI Bike the (Reactive) BridgeJosé Paumard
This session explains how JAX-RS and CDI became reactive capable in Java EE 8. We put some new features of JAX-RS 2.1 and CDI 2.0 into perspective and show some reactive patterns to improve your application. Add Java 8 CompletionStage to the mix and this API trio becomes your best bet to easily go reactive without leaving the Java EE train.
Presentation on the new features introduced in JDK 8, presented on the 26.02.2013 in Sofia University in front of students and members of the Bulgarian java user group.
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.
A dive into the world of Lambda expressions in JDK 8, covering the fundamental ideas, some gotchas and a discussion of performance. Finally, just how far can you take Lambdas in Java?
by Rohan Dubal, Software Development Engineer, AWS
One of the biggest time sinks and challenges for mobile application developers is developing, accessing, and managing all of the disparate data sources that are involved in delivering delightful, collaborative, and real-time mobile experiences for users while also enabling offline capabilities for when a user is not connected, but still wants to use the app. In this session, you be introduced to the new AWS AppSync service that speed and simplifies these tasks for developers using GraphQL to provide a data abstraction layer and easy query and update statements without having to know the details of the underlying data sources.
New and cool in OSGi R7 - David Bosschaert & Carsten Ziegelermfrancis
OSGi Community Event 2016 Presentation by David Bosschaert (Adobe) & Carsten Ziegeler (Adobe)
The OSGi expert groups are working on the next big release. Learn in this session about the various new specification efforts going on and how they will make your developer life easier. The new specifications range from configuration handling, object conversion, JAX-RS, distributed eventing, to cloud and IoT.
NEW LAUNCH! Realtime and Offline application development using GraphQL with A...Amazon Web Services
All application developers today need to be concerned with offline access, realtime communications and efficient data fetching. These techniques are no longer optional for great user experiences yet are difficult to engineer and scale from scratch. In this session you’ll get a deep dive on using AWS AppSync to enable your applications for offline access, including optimistic updates on lossy connections, with just a few lines of code. You’ll learn how application data synchronization takes place with the cloud, how you can control the process, programming interfaces for native applications such as iOS and JavaScript based applications across the web, React Native, and Ionic. Additionally you’ll see how using GraphQL enables your application to efficiently leverage the network for queries and mutations while still having a scalable and fast connection for realtime updates when using subscriptions to data changes.
NEW LAUNCH! Realtime and Offline application development using GraphQL with A...Amazon Web Services
All application developers today need to be concerned with offline access, realtime communications and efficient data fetching. These techniques are no longer optional for great user experiences yet are difficult to engineer and scale from scratch. In this session you’ll get a deep dive on using AWS AppSync to enable your applications for offline access, including optimistic updates on lossy connections, with just a few lines of code. You’ll learn how application data synchronization takes place with the cloud, how you can control the process, programming interfaces for native applications such as iOS and JavaScript based applications across the web, React Native, and Ionic. Additionally you’ll see how using GraphQL enables your application to efficiently leverage the network for queries and mutations while still having a scalable and fast connection for realtime updates when using subscriptions to data changes.
One of the biggest time sinks and challenges for mobile application developers is developing, accessing, and managing all of the disparate data sources that are involved in delivering delightful, collaborative, and real-time mobile experiences for users while also enabling offline capabilities for when a user is not connected, but still wants to use the app. In this session, you be introduced to the new AWS AppSync service that speed and simplifies these tasks for developers using GraphQL to provide a data abstraction layer and easy query and update statements without having to know the details of the underlying data sources.
Lambda expressions were introduced in JDK 8 as a simpler way to represent behaviour. This session looks at usage details and performance compared to anonymous inner classes before diving into Lambda calculus
OSGi R7 - Microservices never looked simplermfrancis
OSGi Community Event 2017 Presentation by Tim Ward [Paremus]
REST microservices are a powerful tool for composing large-scale systems, and now, with the new features of OSGi R7, it has never been simpler to create a modular microservice. Combining the new features in Declarative Services, the JAX-RS Whiteboard, Transaction Control and PushStreams we can create a simple, transactional, persistent, streaming microservice with a minimum of code and a maximum of function.
This talk will use practical code examples to show how new OSGi R7 features can save you time and effort when building microservices, letting you focus on business logic, not boilerplate.
Over the last decade there has been a significant shift in the way that many computer programs are written. The focus has changed from building larger, more monolithic applications that provide a single high-level function, to composing these high-level behaviours from groups of smaller, distributed services. This is generally known as a “microservice” architecture, indicating that the services are smaller and lighter weight than typical web services. With the new features in Release 7 OSGi is a better platform for building your microservices than ever before.
The Declarative Services specification is the ultimate in OSGi injection containers. It supports simple, flexible dependency injection using OSGi services; automatic lifecycle management based upon the availability of configuration and dependencies; and a concise, type-safe set of annotations to define your components. The latest round of Declarative Services updates includes new support for constructor injection, activation fields, and a host of other usability improvements designed to make your components even leaner.
The standard for REST microservices in Java is known as JAX-RS. JAX-RS provides a simple annotation-based model in which POJOs can have their methods mapped to RESTful service invocations. Ideal JAX-RS resources share many features with OSGi services, in that they provide a way for machines (or processes within a machine) to interact with one another through a defined contract. This synergy between JAX-RS resources and OSGi services is the driver for the OSGi JAX-RS whiteboard service, allowing OSGi services to be transparently exposed using JAX-RS.
Transaction management is a delicate balance between trying to take away error-prone boilerplate without replacing it entirely with magic. The problem with relying on magic is that the resulting system ends up being more complex to understand, not less. OSGi Transaction Control uses Java’s new functional APIs to simplify and minimise transaction management code, providing generic resource and transaction management in a concise, type-safe way.
OSGi Push Streams are a powerful new take on asynchronous event processing pipelines based on the Java Stream API. ....
OSGi Community Event 2013 (http://www.osgi.org/CommunityEvent2013/Schedule)
ABSTRACT
There are a number component models available to OSGi developers; Declarative Services (DS), Blueprint (BP), Enterprise JavaBeans (EJB), Contexts and Dependency Injection (CDI). Some have their roots in Java EE, some in open source projects such as the Spring Framework, others are standards at the OSGi Alliance, and some have DNA from all three. As is often the case where there are options available, there's rarely a one-size-fits-all. The 'right' choice may depend on the type of project you're working on, the existing assets, tools and skills at your disposal, and the runtime you're looking to deploy to. This talk will provide a brief overview of the four component models listed, describe their capabilities, standards coverage, tools support, and available implementations, and will show working examples of each, all in an effort to help OSGi users find a path to a component model best suited to their particular task.
SPEAKER BIO
Graham Charters is a Senior Technical Staff Member in the IBM WebSphere Application Server development organization. He is responsible for the OSGi Applications feature of the Application Server and a committer and PMC member of the Apache Aries OSGi programming model project. He is also the IBM technical lead in the OSGi Alliance Enterprise Expert Group.
What's cool in the new and updated OSGi Specs (2013)David Bosschaert
Presentation given at EclipseCon Europe 2013 in Ludwigsburg (Germany) about ongoing specification work in OSGi, covering the Core Platform Expert Group (CPEG) and the Enterprise Expert Group (EEG)
JAX-RS and CDI Bike the (Reactive) BridgeJosé Paumard
This session explains how JAX-RS and CDI became reactive capable in Java EE 8. We put some new features of JAX-RS 2.1 and CDI 2.0 into perspective and show some reactive patterns to improve your application. Add Java 8 CompletionStage to the mix and this API trio becomes your best bet to easily go reactive without leaving the Java EE train.
Presentation on the new features introduced in JDK 8, presented on the 26.02.2013 in Sofia University in front of students and members of the Bulgarian java user group.
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.
Securing your Kubernetes cluster_ a step-by-step guide to success !KatiaHIMEUR1
Today, after several years of existence, an extremely active community and an ultra-dynamic ecosystem, Kubernetes has established itself as the de facto standard in container orchestration. Thanks to a wide range of managed services, it has never been so easy to set up a ready-to-use Kubernetes cluster.
However, this ease of use means that the subject of security in Kubernetes is often left for later, or even neglected. This exposes companies to significant risks.
In this talk, I'll show you step-by-step how to secure your Kubernetes cluster for greater peace of mind and reliability.
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.
State of ICS and IoT Cyber Threat Landscape Report 2024 previewPrayukth K V
The IoT and OT threat landscape report has been prepared by the Threat Research Team at Sectrio using data from Sectrio, cyber threat intelligence farming facilities spread across over 85 cities around the world. In addition, Sectrio also runs AI-based advanced threat and payload engagement facilities that serve as sinks to attract and engage sophisticated threat actors, and newer malware including new variants and latent threats that are at an earlier stage of development.
The latest edition of the OT/ICS and IoT security Threat Landscape Report 2024 also covers:
State of global ICS asset and network exposure
Sectoral targets and attacks as well as the cost of ransom
Global APT activity, AI usage, actor and tactic profiles, and implications
Rise in volumes of AI-powered cyberattacks
Major cyber events in 2024
Malware and malicious payload trends
Cyberattack types and targets
Vulnerability exploit attempts on CVEs
Attacks on counties – USA
Expansion of bot farms – how, where, and why
In-depth analysis of the cyber threat landscape across North America, South America, Europe, APAC, and the Middle East
Why are attacks on smart factories rising?
Cyber risk predictions
Axis of attacks – Europe
Systemic attacks in the Middle East
Download the full report from here:
https://sectrio.com/resources/ot-threat-landscape-reports/sectrio-releases-ot-ics-and-iot-security-threat-landscape-report-2024/
Generating a custom Ruby SDK for your web service or Rails API using Smithyg2nightmarescribd
Have you ever wanted a Ruby client API to communicate with your web service? Smithy is a protocol-agnostic language for defining services and SDKs. Smithy Ruby is an implementation of Smithy that generates a Ruby SDK using a Smithy model. In this talk, we will explore Smithy and Smithy Ruby to learn how to generate custom feature-rich SDKs that can communicate with any web service, such as a Rails JSON API.
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.
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...James Anderson
Effective Application Security in Software Delivery lifecycle using Deployment Firewall and DBOM
The modern software delivery process (or the CI/CD process) includes many tools, distributed teams, open-source code, and cloud platforms. Constant focus on speed to release software to market, along with the traditional slow and manual security checks has caused gaps in continuous security as an important piece in the software supply chain. Today organizations feel more susceptible to external and internal cyber threats due to the vast attack surface in their applications supply chain and the lack of end-to-end governance and risk management.
The software team must secure its software delivery process to avoid vulnerability and security breaches. This needs to be achieved with existing tool chains and without extensive rework of the delivery processes. This talk will present strategies and techniques for providing visibility into the true risk of the existing vulnerabilities, preventing the introduction of security issues in the software, resolving vulnerabilities in production environments quickly, and capturing the deployment bill of materials (DBOM).
Speakers:
Bob Boule
Robert Boule is a technology enthusiast with PASSION for technology and making things work along with a knack for helping others understand how things work. He comes with around 20 years of solution engineering experience in application security, software continuous delivery, and SaaS platforms. He is known for his dynamic presentations in CI/CD and application security integrated in software delivery lifecycle.
Gopinath Rebala
Gopinath Rebala is the CTO of OpsMx, where he has overall responsibility for the machine learning and data processing architectures for Secure Software Delivery. Gopi also has a strong connection with our customers, leading design and architecture for strategic implementations. Gopi is a frequent speaker and well-known leader in continuous delivery and integrating security into software delivery.
Elevating Tactical DDD Patterns Through Object CalisthenicsDorra BARTAGUIZ
After immersing yourself in the blue book and its red counterpart, attending DDD-focused conferences, and applying tactical patterns, you're left with a crucial question: How do I ensure my design is effective? Tactical patterns within Domain-Driven Design (DDD) serve as guiding principles for creating clear and manageable domain models. However, achieving success with these patterns requires additional guidance. Interestingly, we've observed that a set of constraints initially designed for training purposes remarkably aligns with effective pattern implementation, offering a more ‘mechanical’ approach. Let's explore together how Object Calisthenics can elevate the design of your tactical DDD patterns, offering concrete help for those venturing into DDD for the first time!
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualityInflectra
In this insightful webinar, Inflectra explores how artificial intelligence (AI) is transforming software development and testing. Discover how AI-powered tools are revolutionizing every stage of the software development lifecycle (SDLC), from design and prototyping to testing, deployment, and monitoring.
Learn about:
• The Future of Testing: How AI is shifting testing towards verification, analysis, and higher-level skills, while reducing repetitive tasks.
• Test Automation: How AI-powered test case generation, optimization, and self-healing tests are making testing more efficient and effective.
• Visual Testing: Explore the emerging capabilities of AI in visual testing and how it's set to revolutionize UI verification.
• Inflectra's AI Solutions: See demonstrations of Inflectra's cutting-edge AI tools like the ChatGPT plugin and Azure Open AI platform, designed to streamline your testing process.
Whether you're a developer, tester, or QA professional, this webinar will give you valuable insights into how AI is shaping the future of software delivery.
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...UiPathCommunity
💥 Speed, accuracy, and scaling – discover the superpowers of GenAI in action with UiPath Document Understanding and Communications Mining™:
See how to accelerate model training and optimize model performance with active learning
Learn about the latest enhancements to out-of-the-box document processing – with little to no training required
Get an exclusive demo of the new family of UiPath LLMs – GenAI models specialized for processing different types of documents and messages
This is a hands-on session specifically designed for automation developers and AI enthusiasts seeking to enhance their knowledge in leveraging the latest intelligent document processing capabilities offered by UiPath.
Speakers:
👨🏫 Andras Palfi, Senior Product Manager, UiPath
👩🏫 Lenka Dulovicova, Product Program Manager, UiPath
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.
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.
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Tobias Schneck
As AI technology is pushing into IT I was wondering myself, as an “infrastructure container kubernetes guy”, how get this fancy AI technology get managed from an infrastructure operational view? Is it possible to apply our lovely cloud native principals as well? What benefit’s both technologies could bring to each other?
Let me take this questions and provide you a short journey through existing deployment models and use cases for AI software. On practical examples, we discuss what cloud/on-premise strategy we may need for applying it to our own infrastructure to get it to work from an enterprise perspective. I want to give an overview about infrastructure requirements and technologies, what could be beneficial or limiting your AI use cases in an enterprise environment. An interactive Demo will give you some insides, what approaches I got already working for real.
GraphRAG is All You need? LLM & Knowledge GraphGuy Korland
Guy Korland, CEO and Co-founder of FalkorDB, will review two articles on the integration of language models with knowledge graphs.
1. Unifying Large Language Models and Knowledge Graphs: A Roadmap.
https://arxiv.org/abs/2306.08302
2. Microsoft Research's GraphRAG paper and a review paper on various uses of knowledge graphs:
https://www.microsoft.com/en-us/research/blog/graphrag-unlocking-llm-discovery-on-narrative-private-data/
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Ramesh Iyer
In today's fast-changing business world, Companies that adapt and embrace new ideas often need help to keep up with the competition. However, fostering a culture of innovation takes much work. It takes vision, leadership and willingness to take risks in the right proportion. Sachin Dev Duggal, co-founder of Builder.ai, has perfected the art of this balance, creating a company culture where creativity and growth are nurtured at each stage.
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
OSGi meets Lambdas - C Sierra
1. OSGi meets Lambdas
Safe and powerful interaction with OSGi registry
Carlos Sierra Andrés
Liferay, Inc.
October 2017
Carlos Sierra Andrés (Liferay, Inc.) OSGi meets Lambdas October 2017 1 / 36
2. What are we going to talk about?
We are going to discuss Aries Component DSL, a PoC library for
interacting with OSGi registry in a functional way.
https://github.com/apache/aries/tree/trunk/component-dsl
Carlos Sierra Andrés (Liferay, Inc.) OSGi meets Lambdas October 2017 2 / 36
3. Motivation
When creating JAX-RS reference implementation Whiteboard
Dependencies filter depend on configuration.
Dependencies filter depend on incoming services.
Incoming services can specify any number of dependencies on their
properties.
In OSGi this dependencies can come and go at any time.
Also dependencies can be overwritten with higher ranked services at
any time.
Carlos Sierra Andrés (Liferay, Inc.) OSGi meets Lambdas October 2017 3 / 36
6. Possible implementations
Component Frameworks:
Big runtimes
Difficult to express dependencies programatically based on incoming
services
Plain OSGi API:
ManagedServiceFactories + nested trackers.
Cumbersome to write.
Difficult to reason about.
Difficult to compose and reuse.
Difficult to modify.
Carlos Sierra Andrés (Liferay, Inc.) OSGi meets Lambdas October 2017 6 / 36
7. bundleContext.registerService(
ManagedServiceFactory.class,
new ManagedServiceFactory() {
public void updated(...) {
new ServiceTracker<>() {
public Object addingService() {
return new ServiceTracker<>() {...}
}
public void removedService() { close }
}
}
public void deleted(String s) { close }
},
new Hashtable<>() {{
put(”service.pid”, ”configuration.pid”);
}}
);
Carlos Sierra Andrés (Liferay, Inc.) OSGi meets Lambdas October 2017 7 / 36
8. What I would like to have
So I want:
to declare the services and resources I need from the OSGi registry.
to use them when they are ready, and only when they are ready.
the services to clean up their mess when they go away.
to be able to combine them with existing third party classes.
to register new services.
I want dynamism but I DON’T want to deal with it!
Carlos Sierra Andrés (Liferay, Inc.) OSGi meets Lambdas October 2017 8 / 36
9. Functional Programming to the rescue
Functors: describe computations inside a context.
Monads: express dependency between operations.
Applicative Functors: combine functors with existing functions.
OSGi<T>
Carlos Sierra Andrés (Liferay, Inc.) OSGi meets Lambdas October 2017 9 / 36
10. Some Primitives
import static OSGi.*;
OSGi<Foo> service = services(Foo.class);
OSGi<ServiceReference<Foo>> sr =
serviceReferences(Foo.class)
OSGi<ServiceRegistration<Foo>> registration =
register(Foo.class, new Foo(), new HashMap<>());
OSGi<Dictionary<String, ?>> c = configurations(”myPid”);
Carlos Sierra Andrés (Liferay, Inc.) OSGi meets Lambdas October 2017 10 / 36
11. As a functor
Functors allow to express computations in a context
Optional<Object> opt; opt.map(o -> o.toString());
Stream<Integer> numbers; numbers.map(x -> x * 2);
CompletableFuture<String> future; future.map(s -> s + ”; Done!”);
OSGi<Property> p = services.map(s -> s.getProperty());
Carlos Sierra Andrés (Liferay, Inc.) OSGi meets Lambdas October 2017 11 / 36
12. Prominent Monads (Optional)
Monads allow to express dependent computations
Map<String, String> bigMap1;
Map<String, String> bigMap2;
Map<String, String> bigMap3;
Optional<String> final = Optional.ofNullable(
bigMap.get(”optional1”)
).flatMap(
s1 -> Optional.ofNullable(bigMap2.get(s1))
).flatMap(
s2 -> Optional.ofNullable(bigMap3.get(s2))
)
Carlos Sierra Andrés (Liferay, Inc.) OSGi meets Lambdas October 2017 12 / 36
14. As a monad
Monads allow to express dependent computations
OSGi<ServiceRegistration<POJO>> program =
configurations(”somePid”).flatMap(
cfg ->
services(ServiceA.class, ”(scope=” + cfg.get(”scope”) + ”)”).
flatMap(
sa ->
services(ServiceB.class, sa.getBFilter()).flatMap(
sb ->
register(POJO.class, new POJO(sa, sb), new HashMap<>());
)));
Carlos Sierra Andrés (Liferay, Inc.) OSGi meets Lambdas October 2017 14 / 36
15. As a monad (normal indentation)
OSGi<ServiceA> serviceAFromConfig(Dictionary<String, ?> cfg) {
return services(
ServiceA.class, ”(scope=” + cfg.get(”scope”) + ”)”);
}
OSGi<ServiceB> serviceBFromServiceA(ServiceA sa) {
return services(ServiceB.class, sa.getBFilter());
}
OSGi<ServiceRegistration<POJO>> program =
configurations(”somePid”).flatMap(
cfg -> serviceAFromConfig(cfg).flatMap(
sa -> serviceBFromServiceA(sa).flatMap(
sb -> register(
POJO.class, new POJO(sa, sb), new HashMap<>())
)));
Carlos Sierra Andrés (Liferay, Inc.) OSGi meets Lambdas October 2017 15 / 36
16. Prominent Applicatives (CompletableFuture)
Applicatives allow to express computations that don’t depend on
each other
CompletableFuture<String> heavyTask1() {...};
CompletableFuture<String> heavyTask2() {...};
heavyTask1().thenCombine(heavyTask2(), String::concat);
NOTE
We can see that Applicative express that there is no dependency
between heavyTask1 and heavyTask2.
Carlos Sierra Andrés (Liferay, Inc.) OSGi meets Lambdas October 2017 16 / 36
17. As an Applicative
Applicatives allow to express computations that don’t depend on
each other
public class POJO {
public POJO(ServiceA a, ServiceB b, ServiceC c) {
...
}
}
OSGi<ServiceA> sa = services(ServiceA.class);
OSGi<ServiceB> sb = services(ServiceB.class);
OSGi<ServiceC> sc = services(ServiceC.class);
OSGi<POJO> pojo = OSGi.combine(POJO::new, sa, sb, sc);
it produces the cartesian product of the parameters.
Carlos Sierra Andrés (Liferay, Inc.) OSGi meets Lambdas October 2017 17 / 36
18. Syntax is a problem
Carlos Sierra Andrés (Liferay, Inc.) OSGi meets Lambdas October 2017 18 / 36
19. On the bright side
Each step is only executed when there are services or configurations
available.
Effects produced by an instance (service, configuration, etc.) are
associated to it.
When the service or configuration goes away, all the actions triggered
by it are undone by the library.
Carlos Sierra Andrés (Liferay, Inc.) OSGi meets Lambdas October 2017 19 / 36
20. So in our program
OSGi<ServiceRegistration<POJO>> program =
configurations(”somePid”).flatMap(
cfg -> serviceAFromConfig(cfg).flatMap(
sa -> serviceBFromServiceA(sa).flatMap(
sb -> register(
POJO.class, new Pojo(sa, sb), new HashMap<>())
)));
If any goes away:
Configuration instance
ServiceA instance
ServiceB instance
The corresponding POJO will be unregistered from the OSGi framework
and trackers will be closed.
Carlos Sierra Andrés (Liferay, Inc.) OSGi meets Lambdas October 2017 20 / 36
21. On the bright side
The expressions in our OSGi language are values in Java. We can
manipulate the values to extend the program:
prepending or appending steps:
public OSGi<?> prependDependency(OSGi<?> program) {
return service(UndisclosedDep.class).then(program);
}
Carlos Sierra Andrés (Liferay, Inc.) OSGi meets Lambdas October 2017 21 / 36
22. On the bright side
creating conditionals:
public OSGi<ServiceB> chooseService(ServiceReference<?> sr) {
Object filter = sr.getProperty(”filter”);
if (filterProperty != null) {
return services(ServiceB.class, filter.toString());
}
else {
return just(() -> new ServiceB());
}
}
Carlos Sierra Andrés (Liferay, Inc.) OSGi meets Lambdas October 2017 22 / 36
23. On the bright side
or simply reusing them:
OSGi<ServiceA> sa = services(ServiceA.class);
OSGi<ServiceB> sb = services(ServiceB.class);
OSGi<POJO> pojo = combine(POJO::new, sa, sb);
pojo = prependDependency(pojo);
OSGi<?> program = sa.flatMap(...)
Carlos Sierra Andrés (Liferay, Inc.) OSGi meets Lambdas October 2017 23 / 36
24. Filtering and replaying
The language also allows to filter and replay already produced events. This
is useful to implement, for instance, highest service filters or highest
service per property filters.
OSGi<ServiceA> sa = service(ServiceA.class).filter(
ServiceA::isEnabled);
OSGi<ServiceReference<ServiceA>> hsa = highest(
serviceReference(ServiceA.class));
OSGi<ServiceReference<ServiceA>> hsProp = highestPer(
serviceReference(ServiceA.class),
sr -> sr.getProperty(”key”));
hsa.flatMap(...)
hsProp.flatMap(...)
Carlos Sierra Andrés (Liferay, Inc.) OSGi meets Lambdas October 2017 24 / 36
25. Effects handling
The builtin commands make sure they get cleaned when services go away.
But when composing our own commands we might need to interleave
effects when some services are available.
OSGi<ServiceA> program = services(ServiceA.class).effects(
sa -> doSomething(sa),
sa -> undoSomething(sa)
)
OSGi<Void> program = onClose(() -> doSomeCleaning());
Carlos Sierra Andrés (Liferay, Inc.) OSGi meets Lambdas October 2017 25 / 36
26. Concurrency
The language will make sure that, if an effect has been executed, the
counter effect is also executed. If the effect is never executed the
counter effect is discarded. Althoug effects order is guaranteed by the
monad implementation, counter effects order of execution can’t be
guaranteed.
The implementation is lock free and should be safe to use
concurrently.
Carlos Sierra Andrés (Liferay, Inc.) OSGi meets Lambdas October 2017 26 / 36
27. Component frameworks
private class MyComponent {
private final Dictionary<String, ?> configuration;
private final Foo mandatory;
private final ArrayList<ServiceForList> servicesForLists;
private ServiceOptional optional = null;
public MyComponent(
Dictionary<String, ?> configuration, Foo mandatory) {
this.configuration = configuration;
this.mandatory = mandatory;
servicesForLists = new ArrayList<>();
}
Carlos Sierra Andrés (Liferay, Inc.) OSGi meets Lambdas October 2017 27 / 36
28. Component Framework
public Dictionary<String, ?> getConfiguration() {
return configuration;
}
public Foo getMandatory() {
return mandatory;
}
public ServiceOptional getOptional() {
return optional;
}
public ArrayList<ServiceForList> getServiceForLists() {
return _serviceForLists;
}
Carlos Sierra Andrés (Liferay, Inc.) OSGi meets Lambdas October 2017 28 / 36
29. Component Framework
public void setOptional(ServiceOptional optional) {
this.optional = optional;
}
public void addService(ServiceForList serviceForList) {
_serviceForLists.add(serviceForList);
}
public void removeService(ServiceForList serviceForList) {
_serviceForLists.remove(serviceForList);
}
}
Carlos Sierra Andrés (Liferay, Inc.) OSGi meets Lambdas October 2017 29 / 36
30. OOP dependency management
Static dependencies are requested in the constructor.
Multiple cardinality dependencies are added and removed through
add/remove methods.
Dynamic dependencies can be added and removed using setters.
Optional properties can be signaled with Optional or null.
No need for @PostConstruct or other lifecycle annotations, when the
class is instantiated it is ready to use.
Carlos Sierra Andrés (Liferay, Inc.) OSGi meets Lambdas October 2017 30 / 36
31. Component Framework
OSGi<MyComponent> components = combine(
MyComponent::new,
configurations(”org.components.MyComponent”),
services(Foo.class));
OSGi<?> program =
components.flatMap(comp ->
all(
dynamic(
highestService(ServiceOptional.class),
comp::setOptional, c -> comp.setOptional(null)),
dynamic(
services(ServiceForList.class),
comp::addService, comp::removeService),
ignore(register(Component.class, comp, new HashMap<>()))
));
Carlos Sierra Andrés (Liferay, Inc.) OSGi meets Lambdas October 2017 31 / 36
32. Component Framework
OSGi<MyComponent> components = combine(
MyComponent::new,
configurations(”org.components.MyComponent”),
highestService(services(Foo.class)));
OSGi<?> program =
components.effects(
comp -> comp.setOptional(new ServiceOptional()),
comp -> comp.setOptional(null)
).flatMap(comp -> all(
dynamic(
services(ServiceForList.class),
comp::addService, comp::removeService),
ignore(
register(
Component.class, comp, new HashMap<>()))
));
Carlos Sierra Andrés (Liferay, Inc.) OSGi meets Lambdas October 2017 32 / 36
33. On the dark side
Did I say syntax is a
problem?!?
Carlos Sierra Andrés (Liferay, Inc.) OSGi meets Lambdas October 2017 33 / 36
34. On the bright side
It is a thin layer on top of OSGi services API. We have almost all the
power with much fewer code.
Cartesian products and dependent trackers with Stream like API.
Syntax aside, the DSL allows to structure your code like steps of a
script.
No annotations:
So you can reuse existing business classes or use third party classes
directly.
No lifecycle annotation (@PostConstruct) misinteractions
It is embedded in Java:
we get help from the compiler unlike XML based frameworks.
we can create macros or define new functions composing the language
primitives using plain Java functions.
Statements are treated as values, so we can manipulate them and
improve reusability.
Carlos Sierra Andrés (Liferay, Inc.) OSGi meets Lambdas October 2017 34 / 36
35. Running
OSGi<MyComponent> components = ...
OSGiResult result = components.run(bundleContext);
...
result.close();
To run the described program we only need to provide a valid
bundleContext.
Beware of effects and sharing mutable structures!
Carlos Sierra Andrés (Liferay, Inc.) OSGi meets Lambdas October 2017 35 / 36