service oriented web development with osgi - c ziegeler

Post on 04-Jul-2015

222 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

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.

TRANSCRIPT

Service Oriented Web Development with OSGi Carsten Ziegeler | cziegeler@apache.org

1

OSGi Community Event 2014

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

OSGi Preconceptions

3

No POJOs

Too slow

No dependency injection

Not suitable for the enterprise

No

tool

ing ?!?

4

The Next Big Thing

5

Building Blocks

§  Module aka Bundle

§  Services

§  Components

6

Game Design

7

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);}

Implementation

8

@Componentpublic class GameControllerImpl implements GameController { ...

Configuration

9

public @interface Config { int easy_max() default 10; int medium_max() default 50; int hard_max() default 100;

}

10

private Config configuration;@Activateprotected void activate(final Config config) {

this.configuration = config;}

11

public int getMax(final Level level) {

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; }

Web?

12

@Component( service = Servlet.class , property="osgi.http.whiteboard.servlet.pattern=/game")public class GameServlet extends HttpServlet {

13

public class GameServlet extends HttpServlet {@FieldReferenceprivate GameController controller;

14

15

No POJOs

Too slow

No dependency injection

Not suitable for the enterprise

No

tool

ing ✔

Recipe

§  OSGi Declarative Services (Compendium Chapter 112) §  + RFC 190 Declarative Services Enhancements (OSGi R6) §  + RFC 212 Field Injection for Declarative Services (OSGi R6)

§  OSGi Whiteboard Service §  + RFC 189 (OSGi R6)

§  OSGi Configuration Admin (Compendium Chapter 104) §  OSGi Metatype Service (Compendium Chapter 105)

§  + RFC 208 Metatype Annotations

16

Management

17

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;

Metatype

19

@Component@Designate( ocd = Config.class )public class GameControllerImpl implements GameController {

Component Container Interaction

20

OSGi Service Registry

Declarative Services Blueprint

iPojo, Dependency

Manager, ….

Framework API

Service Scopes

•  Singleton •  Bundle

•  Prototype

21

Servlets

22

@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() {...}

Dynamics

§  Lazy instantiation

§  Reference policy and cardinality

§  Reconfiguration

23

Unary References

24

@FieldReferenceprivate GameController controller;

@FieldReference(

cardinality=ReferenceCardinality.OPTIONAL policy=ReferencePolicy.DYNAMIC)private volatile GameStatistics stats;

Multiple References

25

@FieldReference( cardinality=ReferenceCardinality.MULTIPLE)private volatile List<Highscore> highscores;

Multiple References

26

@FieldReferenceprivate final Set<Highscore> highscores = new ConcurrentSkipListSet<Highscore>();

Reconfiguration

27

private volatile Config configuration;

@Activate@Modifiedprotected void activate(final Config config) {

this.configuration = config;}

Web Contexts

28

Servlet B /foo

Servlet A /game

Servlet C /bar

Servlet Filter

Servlet Context /play

Authentication

Servlet X /foo

Servlet Context /fooapp

Authentication

Web Contexts

29

@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 {

Try it out today!

§  HTTP Whiteboard Service

§  Servlet contexts (grouping, authentication)

§  Servlets

§  Filters

§  Listeners

30

Try it out today!

§  Declarative Services

§  Easy too use

§  Pojos

§  DI with handling dynamics

§  Tooling

§  Open Source Solutions

§  Building large scale enterprise apps

31

QnA

32

top related