OSGi Community Event 2014
Abstract:
OSGi is complicated, complex and requires too much coding? Whether you think that's true or whether you are interested in seeing live how easy it is to develop a web application with OSGi, this session is the place to go to.
During the talk a web application based on OSGi services will be developed leveraging the latest OSGi specifications, the Http Whiteboard Service (RFC 189) and updates to Declarative Services (RFC 190, RFC 208 and RFC 212). The used implementations are well known projects from The Apache Software Foundation. Learn how to leverage the annotation based development which is very easy to use but also very powerful. Apart from developing the application, open source tooling based on the Eclipse IDE will be demonstrated making the life of a developer much easier. Of course, important topics like configuration and management of the web application are covered as well.
Speaker Bio:
Carsten Ziegeler is senior developer at Adobe Research Switzerland and spends most of his time on architectural and infrastructure topics. Working for over 25 years in open source projects, Carsten is a member of the Apache Software Foundation and heavily participates in several Apache communities including Sling, Felix and ACE. He is a frequent speaker on technology and open source conferences and participates in the OSGi Core Platform and Enterprise expert groups.
Service Oriented Web Development with OSGi - C Ziegeler
1. Service Oriented Web Development with OSGi
Carsten Ziegeler | cziegeler@apache.org
1
OSGi Community Event 2014
2. About
cziegeler@apache.org @cziegeler
• RnD Team at Adobe Research Switzerland
• Member of the Apache Software Foundation
• Apache Felix and Apache Sling (PMC and committer)
• And other Apache projects
• OSGi Core Platform and Enterprise Expert Groups
• Member of the OSGi Board
• Book / article author, technical reviewer, conference speaker
2
3. OSGi Preconceptions
No tooling ?!?
3
No POJOs
Too slow
Not suitable for
the enterprise
No dependency injection
7. Game Design
public enum Level {
EASY,
MEDIUM,
HARD
}
public interface GameController {
Game startGame(final String name,
final Level level);
int nextGuess(final Game status,
final int guess);
int getMax(final Level level);
7
}
11. public int getMax(final Level level) {
11
int max = 0;
switch (level) {
case EASY : max = configuration.easy_max(); break;
case MEDIUM : max = configuration.medium_max(); break;
case HARD : max = configuration.hard_max(); break;
}
return max;
}
12. Web?
@Component( service = Servlet.class ,
property="osgi.http.whiteboard.servlet.pattern=/game")
public class GameServlet extends HttpServlet {
12
13. public class GameServlet extends HttpServlet {
@FieldReference
private GameController controller;
13
18. Metatype
18
@ObjectClassDefinition(
name = "Game Configuration",
description = "The configuration for the guessing game.")
public @interface Config {
@AttributeDefinition(name="Easy",
description="Maximum value for easy")
int easy_max() default 10;
22. Servlets
@Component( service = Servlet.class ,
scope=ServiceScope.PROTOTYPE,
property="osgi.http.whiteboard.servlet.pattern=/game")
public class GameServlet extends HttpServlet {
public void init() {...}
public void destroy() {...}
22
28. Web Contexts
28
Servlet Context
/play
Authentication
Servlet B
/foo
Servlet A
/game
Servlet C
/bar
Servlet Filter
Servlet Context
/fooapp
Authentication
Servlet X
/foo
29. Web Contexts
@Component( service = Servlet.class ,
property={"osgi.http.whiteboard.servlet.pattern=/foo",
"osgi.http.whiteboard.context.select=mygame"}
public class ServletB extends HttpServlet {
@Component( service = Servlet.class ,
property={"osgi.http.whiteboard.servlet.pattern=/bar",
"osgi.http.whiteboard.context.select=game"}
public class ServletC extends HttpServlet {
29
30. Try it out today!
§ HTTP Whiteboard Service
§ Servlet contexts (grouping, authentication)
§ Servlets
§ Filters
§ Listeners
30
31. Try it out today!
§ Declarative Services
§ Easy too use
§ Pojos
§ DI with handling dynamics
§ Tooling
§ Open Source Solutions
§ Building large scale enterprise apps
31