Avoid the chaos
Handling 100+ OSGi components
Balázs Zsoldos
Everit Component Model (ECM)
since 2014
Source: Inglourious Basterds
Why another Component Model?
Blueprint
Declarative Services
OSGi Service
Component
Reference
DS
DataSource
Business
Log C
Cache
Declarative Services
UserDataServlet
Servlet
Context
ErrorServletLoginServlet
Not Supported
Declarative Services
UserDataServlet
Whiteboard
extender
ErrorServletLoginServlet
Whiteboard
Declarative Services
Whiteboard
extender
Whiteboard
extender
Aries JPA
Extender
Blueprint
Source: Reservoir dogs movie
Whiteboard extender ServletContextComponent
Authentication Filter
URL Redirect Filter
User Mgmt Servlet
Login Servlet
Authentication Filter
URL Redirect Filter
User Mgmt Servlet
Login Servlet
TestComponent
Source: Home Alone movie
Declarative Services
Everit Component Model
UserDataServlet
Servlet
Context
ErrorServletLoginServlet
Not Supported
Declarative Services
Package 2
Bundle B
Bundle A
Package 1 Capability
Bundle BBundle B
UserDataServlet
Servlet
Context
ErrorServletLoginServlet
AuthFilter
Servlet
Context
Whatever
Filter
URLRewriteFilter
AuthFilter
Servlet
Context
Whatever
Filter
URLRewriteFilter
0. 1. 2.
XML Transform
Camel
Route
XML
Digital Signature
XML Validator
0. 1. 2.
Authentication
Servlet
Servlet
Context
Authorization
Servlet
LoginServlet
/login /auth /auth
/a /authrConfigAdmin /authn
logService.target: (implementation=felix)
servlet.clause: loginServlet;filter:=(service.pid=...)
servlet.clause: ...;init_param1=value1;init_param2=value2
Targeting references
public enum ComponentState {
STOPPED,
UNSATISFIED,
STARTING,
ACTIVE,
STOPPING,
FAILED,
FAILED_PERMANENT
}
// Throwable, restart on configuration change
// Throwable, never restart
ecm-extender-ri
ecm-component-ri
ecm-component-api
ecm-metadata
ecm-util-method
linkage-api
capabilitycollector
ecm-annotation-metadatabuilder
ecm-annotation
ecm-extender-api
@StringAttribute
private String stringAttribute;
public void setStringAttribute(String stringAttribute) {
this.stringAttribute = stringAttribute;
}
private Integer integerAttribute;
@IntegerAttribute
public void setIntAttribute(Integer integerAttribute) {
this.integerAttribute = integerAttribute;
}
private String[] names;
@StringAttribute(dynamic = true)
public void setStringAttribute(String[] names) {
this.names = names;
}
OSGi
service Bundle Capability
ECM Component
Demo
http://everit.org/ecm/index.html
Source: Inglourious Basterds
Source: Inglourious Basterds
ecm-extender-ri
ecm-component-ri
ecm-component-api
ecm-metadata
ecm-util-method
linkage-api
capabilitycollector
ecm-annotation-metadatabuilder
ecm-annotation
ecm-extender-api
OSGi
service Bundle Capability
ECM Component
Twitter: @EveritOrg

Avoid the chaos - Handling 100+ OSGi Components - Balázs Zsoldos