100
Enterprise Development with …

ApacheCon EU 2014: Enterprise Development with Apache Karaf

Embed Size (px)

DESCRIPTION

Enterprise Development with Apache Karaf, or what needs to be done to run JEE like applications in Apache Karaf

Citation preview

Page 1: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Enterprise Developmentwith …

Page 2: ApacheCon EU 2014: Enterprise Development with Apache Karaf

What needs to be done to run JEE like applications inside Karaf?

Page 3: ApacheCon EU 2014: Enterprise Development with Apache Karaf

2014-­‐10-­‐233

@anierbeck- Karaf PMC, Apache Member - OPS4j Pax Web Project Lead

- Senior IT Consultant @codecentric

- co-Author of Apache Karaf Cookbook

Page 4: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Agenda

• Enterprise Requirements • OSGi with Karaf • Enterprise Requirements on Karaf • Specialties • Http Service • Cellar - or how to cluster Karaf • Summary

2014-­‐10-­‐234

Page 5: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Enterprise Requirements

Page 6: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Enterprise Java

2014-­‐10-­‐236

Servlet 3

JSF 2

JSP

JPA 2

JTA

CDIEJB 3.1

Bean Validation

JAX-WS JAX-RS

JAXR

JAXB

JMS

JAAS

JASPIC

JACC

JSR-88

JCA

JavaMail

JSR-77

RMI

JNDI

JAX-RPC

SAAJ

Page 7: ApacheCon EU 2014: Enterprise Development with Apache Karaf

OSGi with Karaf

Page 8: ApacheCon EU 2014: Enterprise Development with Apache Karaf

OSGi - a very brief introduction

• Modular

• OSGi Bundles:

• High Cohesion (One classloader/bundle)

• Low Coupling (Package Import/Export)

• Versioning per bundle ( [1.0,2,0) )

• Service Registry

2014-­‐10-­‐238

Page 9: ApacheCon EU 2014: Enterprise Development with Apache Karaf

What is Karaf

• Container

• OSGi Applications

• Ligthtweight

• expandable to Full Enterprise support

• Covers all major needs

• Logging

• Deployment

• Configuration

2014-­‐10-­‐239

Page 10: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Karaf - Overview

2014-­‐10-­‐2310

Console Admin

OSGi Framework - Felix / Equinox

Logging DeployerConfig

JMX

SSHBlueprint

Page 11: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Enterprise requirements on Karaf

Page 12: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Karaf

2014-­‐10-­‐2312

Servlet 3

JSF 2

JSP

JPA 2

JTA

CDIEJB 3.1

Bean Validation

JAX-WS JAX-RS

JAXR

JAXB

JMS

JAAS

JASPIC

JACC

JSR-88

JCA

JavaMail

JSR-77

RMI

JNDI

JAX-RPC

SAAJ

Page 13: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Enterprise - Pax Web

2014-­‐10-­‐2313

Servlet 3

JSF 2

JSP

JPA 2

JTA

CDIEJB 3.1

Bean Validation

JAX-WS JAX-RS

JAXR

JAXB

JMS

JAAS

JASPIC

JACC

JSR-88

JCA

JavaMail

JSR-77

RMI

JNDI

JAX-RPC

SAAJ

Page 14: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Enterprise - Pax CDI

2014-­‐10-­‐2314

Servlet 3

JSF 2

JSP

JPA 2

JTA

CDIEJB 3.1

Bean Validation

JAX-WS JAX-RS

JAXR

JAXB

JMS

JAAS

JASPIC

JACC

JSR-88

JCA

JavaMail

JSR-77

RMI

JNDI

JAX-RPC

SAAJ

Page 15: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Enterprise - Aries

2014-­‐10-­‐2315

Servlet 3

JSF 2

JSP

JPA 2

JTA

CDIEJB 3.1

Bean Validation

JAX-WS JAX-RS

JAXR

JAXB

JMS

JAAS

JASPIC

JACC

JSR-88

JCA

JavaMail

JSR-77

RMI

JNDI

JAX-RPC

SAAJ

Page 16: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Enterprise - Tomee aka OpenEJB

2014-­‐10-­‐2316

Servlet 3

JSF 2

JSP

JPA 2

JTA

CDIEJB 3.1

Bean Validation

JAX-WS

JAX-RPC

JAX-RS

JAXR

JAXB

JMS

JAAS

JASPIC

JACC

JSR-88

JCA

JavaMail

JSR-77

RMI

JNDISAAJ

Page 17: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Enterprise - CXF

2014-­‐10-­‐2317

Servlet 3

JSF 2

JSP

JPA 2

JTA

CDIEJB 3.1

Bean Validation

JAX-WS

JAX-RPC

JAX-RS

JAXR

JAXB

JMS

JAAS

JASPIC

JACC

JSR-88

JCA

JavaMail

JSR-77

RMI

JNDISAAJ

Page 18: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Enterprise - ActiveMQ

2014-­‐10-­‐2318

Servlet 3

JSF 2

JSP

JPA 2

JTA

CDIEJB 3.1

Bean Validation

JAX-WS

JAX-RPC

JAX-RS

JAXR

JAXB

JMS

JAAS

JASPIC

JACC

JSR-88

JCA

JavaMail

JSR-77

RMI

JNDISAAJ

Page 19: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Enterprise - Cellar

2014-­‐10-­‐2319

Servlet 3

JSF 2

JSP

JPA 2

JTA

CDIEJB 3.1

Bean Validation

JAX-WS

JAX-RPC

JAX-RS

JAXR

JAXB

JMS

JAAS

JASPIC

JACC

JSR-88

JCA

JavaMail

JSR-77

RMI

JNDISAAJ

Page 20: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Enterprise - Karaf with features

2014-­‐10-­‐2320

Servlet 3

JSF 2

JSP

JPA 2

JTA

CDIEJB 3.1

Bean Validation

JAX-WS

JAX-RPC

JAX-RS

JAXR

SAAJ

JAXB

JMS

JAAS

JASPIC

JACC

JSR-88

JCA

JavaMail

JSR-77

RMI

JNDI

Page 21: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Specialties

Page 22: ApacheCon EU 2014: Enterprise Development with Apache Karaf

JPA - Karaf

2014-­‐10-­‐2322

<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" version="2.0" > <persistence-unit name="cookbook" transaction-type="JTA"> <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider> <jta-data-source> osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=jdbc/cookbook) </jta-data-source> <class>de.nierbeck.apachecon.persistence.entity.Book</class> <class>de.nierbeck.apachecon.persistence.entity.Recipe</class> <exclude-unlisted-classes>true</exclude-unlisted-classes> <properties> <property name="openjpa.Log" value="slf4j" /> <property name="openjpa.RuntimeUnenhancedClasses" value="supported" /> <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema"/> </properties> </persistence-unit> </persistence>

Page 23: ApacheCon EU 2014: Enterprise Development with Apache Karaf

JPA - Karaf

2014-­‐10-­‐2322

<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" version="2.0" > <persistence-unit name="cookbook" transaction-type="JTA"> <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider> <jta-data-source> osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=jdbc/cookbook) </jta-data-source> <class>de.nierbeck.apachecon.persistence.entity.Book</class> <class>de.nierbeck.apachecon.persistence.entity.Recipe</class> <exclude-unlisted-classes>true</exclude-unlisted-classes> <properties> <property name="openjpa.Log" value="slf4j" /> <property name="openjpa.RuntimeUnenhancedClasses" value="supported" /> <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema"/> </properties> </persistence-unit> </persistence>

To have this blueprint JNDI is needed

Page 24: ApacheCon EU 2014: Enterprise Development with Apache Karaf

JTA - Karaf

2014-­‐10-­‐2323

<blueprint default-activation=„eager" xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jpa="http://aries.apache.org/xmlns/jpa/v1.0.0" xmlns:tx="http://aries.apache.org/xmlns/transactions/v1.0.0" xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd">

<bean id="cookBookServiceImpl" class="de.nierbeck.apachecon.persistence.dao.CookBookServiceImpl"> <jpa:context property="em" unitname="cookbook" /> <tx:transaction method="*" value="Required" /> </bean>

<service id="cookBookService" ref="cookBookServiceImpl" interface="de.nierbeck.apachecon.persistence.api.CookBookService" /> </blueprint>

Page 25: ApacheCon EU 2014: Enterprise Development with Apache Karaf

JTA - Karaf

2014-­‐10-­‐2323

<blueprint default-activation=„eager" xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jpa="http://aries.apache.org/xmlns/jpa/v1.0.0" xmlns:tx="http://aries.apache.org/xmlns/transactions/v1.0.0" xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd">

<bean id="cookBookServiceImpl" class="de.nierbeck.apachecon.persistence.dao.CookBookServiceImpl"> <jpa:context property="em" unitname="cookbook" /> <tx:transaction method="*" value="Required" /> </bean>

<service id="cookBookService" ref="cookBookServiceImpl" interface="de.nierbeck.apachecon.persistence.api.CookBookService" /> </blueprint>

To have this blueprint JPA and JTA is needed

Page 26: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Client - Karaf

2014-­‐10-­‐2324

<?xml version="1.0" encoding="UTF-8"?><blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"

default-activation="lazy">

<reference id="cookBookService"interface="de.nierbeck.apachecon.persistence.api.CookBookService" />

<command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.1.0"> <command>

<action class="de.nierbeck.apachecon.commands.CreateBook"><property name="bookService" ref="cookBookService" />

</action></command>...

</command-bundle></blueprint>

Page 27: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Demo

Page 28: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Persistence

2014-­‐10-­‐2326

Page 29: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Client

2014-­‐10-­‐2327

Page 30: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Client Shell

2014-­‐10-­‐2328

Page 31: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Client - Shell

2014-­‐10-­‐2329

Page 32: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Client Shell

2014-­‐10-­‐2330

Page 33: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Client - Shell

2014-­‐10-­‐2331

Page 34: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Http Service with …

Page 35: ApacheCon EU 2014: Enterprise Development with Apache Karaf

HTTP Service

2014-­‐10-­‐2333

• Using an Activator: final HttpContext httpContext = httpService

.createDefaultHttpContext();// register the BookServlet

// first wait for the DAO-ServiceCookBookService cookBookService;ServiceReference<CookBookService> serviceReference = bundleContext

.getServiceReference(CookBookService.class);cookBookService = bundleContext.getService(serviceReference);

//now create the servletViewBookServlet viewBookServlet = new ViewBookServlet();

//set the DAO to the ServletviewBookServlet.setCookBookService(cookBookService);

final Dictionary<String, Object> initParams = new Hashtable<String, Object>();try {

httpService.registerServlet("/book", // aliasviewBookServlet,initParams, httpContext);

Page 36: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Whiteboard

2014-­‐10-­‐2334

• Using the whiteboard approach via Activatorpublic void start(BundleContext bc) throws Exception {

bundleContext = bc;

// first wait for the DAO-ServiceCookBookService cookBookService;ServiceReference<CookBookService> serviceReference = bundleContext

.getServiceReference(CookBookService.class);cookBookService = bundleContext.getService(serviceReference);

// create new ServletViewBookServlet cookBookViewServlet = new ViewBookServlet();cookBookViewServlet.setCookBookService(cookBookService);

registerServiced = bundleContext.registerService(Servlet.class,cookBookViewServlet, null);

}

Page 37: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Whiteboard

2014-­‐10-­‐2335

• Using the whiteboard approach via Blueprint

<blueprint default-activation="eager">

<reference id="cookBookService"interface="de.nierbeck.apachecon.persistence.api.CookBookService" />

<bean id="viewBookServlet" class="de.nierbeck.apachecon.view.ViewBookServlet" >

<property name="cookBookService" ref="cookBookService"/></bean>

<service id="servletService" interface="javax.servlet.Servlet" ref="viewBookServlet" /></blueprint>

Page 38: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Servlet 3.0 - Just annotation

2014-­‐10-­‐2336

@WebServlet(urlPatterns = "/book")public class ViewBookServlet extends HttpServlet {

/** * */private static final long serialVersionUID = 1L;

@Inject@OsgiServiceCookBookService cookBookService;

@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException { ...

}}

Page 39: ApacheCon EU 2014: Enterprise Development with Apache Karaf

LOST?

Page 40: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Registering - Servlet

2014-­‐10-­‐2338

Pax-Web HTTP Service

Service-Registry

Servlet

Page 41: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Registering - Servlet

2014-­‐10-­‐2338

Pax-Web HTTP Service

Service-Registry

Servlet

Registerd

Page 42: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Registering - Servlet

2014-­‐10-­‐2338

Pax-Web HTTP Service

Service-Registry

ServletRegisterd

Registerd

Page 43: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Registering - Whiteboard

2014-­‐10-­‐2339

Pax-Web WebContainer

Service-Tracker

Service-Registry

Servlet

Page 44: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Registering - Whiteboard

2014-­‐10-­‐2339

Pax-Web WebContainer

Service-Tracker

Service-Registry

Servlet

Registerd

Page 45: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Registering - Whiteboard

2014-­‐10-­‐2339

Pax-Web WebContainer

Service-Tracker

Service-Registry

Servlet

Registerd

Registerd

Page 46: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Registering - Whiteboard

2014-­‐10-­‐2339

Pax-Web WebContainer

Service-Tracker

Service-Registry

Servlet

Registerd

Registerd

Page 47: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Registering - WAR

2014-­‐10-­‐2340

Pax-Web WebContainer

Pax-Web WAR Extender

Service-Registry

WAB-Bundle

Servlet

Page 48: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Registering - WAR

2014-­‐10-­‐2340

Pax-Web WebContainer

Pax-Web WAR Extender

Service-Registry

WAB-Bundle

Servlet

Registerd

Page 49: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Registering - WAR

2014-­‐10-­‐2340

Pax-Web WebContainer

Pax-Web WAR Extender

Service-Registry

WAB-Bundle

Servlet

RegisterdRegisterd

Page 50: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Registering - WAR

2014-­‐10-­‐2340

Pax-Web WebContainer

Pax-Web WAR Extender

Service-Registry

WAB-Bundle

Servlet

RegisterdRegisterd

Page 51: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Servlet + JPA / Service

2014-­‐10-­‐2341

Blueprint Extender

Pax-Web WAR Extender

JPA-Bundle

Service-Registry

JPA - Service

WEB-Bundle

Servlet

Page 52: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Servlet + JPA / Service

2014-­‐10-­‐2341

Blueprint Extender

Pax-Web WAR Extender

JPA-Bundle

Service-Registry

JPA - Service

WEB-Bundle

Servlet

Registerd

Page 53: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Servlet + JPA / Service

2014-­‐10-­‐2341

Blueprint Extender

Pax-Web WAR Extender

JPA-Bundle

Service-Registry

JPA - Service

WEB-Bundle

Servlet

Registerd

Injected

Page 54: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Servlet + JPA / Service

2014-­‐10-­‐2341

Blueprint Extender

Pax-Web WAR Extender

JPA-Bundle

Service-Registry

JPA - Service

WEB-Bundle

Servlet

RegisterdRegisterd

Injected

Page 55: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Demo

Page 56: ApacheCon EU 2014: Enterprise Development with Apache Karaf

View

2014-­‐10-­‐2343

Page 57: ApacheCon EU 2014: Enterprise Development with Apache Karaf

View

2014-­‐10-­‐2344

Page 58: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Cluster provided by Apache Karaf Cellar

Page 59: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Cellar - Cluster Communication

2014-­‐10-­‐2346

Page 60: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Cellar - Cluster Communication

2014-­‐10-­‐2347

Hazelcast

Page 61: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Cellar - Events

2014-­‐10-­‐2348

Page 62: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Cellar - Distributing Bundles

2014-­‐10-­‐2349

Node A

Node B

Node C

Maven Repository

Hazelcast

Page 63: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Cellar - Distributing Bundles

2014-­‐10-­‐2349

Node A

Node B

Node C

Maven Repository

osgi:install mvn:groupId/artifactId/version

Hazelcast

Page 64: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Cellar - Distributing Bundles

2014-­‐10-­‐2349

Node A

Node B

Node C

Maven Repository

Hazelcast

Page 65: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Cellar - Distributing Bundles

2014-­‐10-­‐2349

Node A

Node B

Node C

Maven Repository

Hazelcast

Page 66: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Cellar - Distributing Bundles

2014-­‐10-­‐2349

Node A

Node B

Node C

Maven Repository

Hazelcast

Page 67: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Cellar - Distributing Bundles

2014-­‐10-­‐2349

Node A

Node B

Node C

Maven Repository

Hazelcast

Page 68: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Cellar - Distributing Bundles

2014-­‐10-­‐2349

Node A

Node B

Node C

Maven Repository

Hazelcast

Page 69: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Cellar - Distributing Bundles

2014-­‐10-­‐2349

Node A

Node B

Node C

Maven Repository

Hazelcast

Page 70: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Cellar - Distributing Bundles

2014-­‐10-­‐2349

Node A

Node B

Node C

Maven Repository

Hazelcast

DEPRECATED

Page 71: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Cellar - Distributing Bundles

2014-­‐10-­‐2349

Node A

Node B

Node C

Maven Repository

Hazelcast

DEPRECATED

cluster:install mvn:groupId/artifactId/version

Page 72: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Cellar - RMI

2014-­‐10-­‐2350

Group 1

Node A Consumes OSGi-Service

Group 2

Node B Consumes OSGi-Service

Node C Consumes OSGi-Service

Node A Provides OSGi-Service

Node B Provides OSGi-ServiceHazelcast

Page 73: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Cellar - Web session failover

2014-­‐10-­‐2351

Node A

Hazelcast

DataBase

Client

ServletFilter

Node B

ServletFilter

Page 74: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Cellar - Web session failover

2014-­‐10-­‐2351

Node A

Hazelcast

DataBase

Client

ServletFilter

Node B

ServletFilter

Page 75: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Cellar - Web session failover

2014-­‐10-­‐2351

Node A

Hazelcast

DataBase

Client

ServletFilter

Node B

ServletFilter

Page 76: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Cellar - Web session failover

2014-­‐10-­‐2351

Node A

Hazelcast

DataBase

Client

ServletFilter

Node B

ServletFilter

Page 77: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Cellar - Web session failover

2014-­‐10-­‐2351

Node A

Hazelcast

DataBase

Client

ServletFilter

Node B

ServletFilter

Page 78: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Cellar - Web session failover

2014-­‐10-­‐2351

Node A

Hazelcast

DataBase

Client

ServletFilter

Node B

ServletFilter

Page 79: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Cellar - Web session failover

2014-­‐10-­‐2351

Node A

Hazelcast

DataBase

Client

ServletFilter

Node B

ServletFilter

Page 80: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Cellar - Web session failover

2014-­‐10-­‐2351

Node A

Hazelcast

DataBase

Client

ServletFilter

Node B

ServletFilter

Page 81: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Cellar - Web session failover

2014-­‐10-­‐2351

Node A

Hazelcast

DataBase

Client

ServletFilter

Node B

ServletFilter

Page 82: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Cellar - Web session failover

2014-­‐10-­‐2351

Node A

Hazelcast

DataBase

Client

ServletFilter

Node B

ServletFilter

Page 83: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Cellar - Web session failover

2014-­‐10-­‐2351

Node A

Hazelcast

DataBase

Client

ServletFilter

Node B

ServletFilter

Page 84: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Cellar - Web session failover

2014-­‐10-­‐2351

Node A

Hazelcast

DataBase

Client

ServletFilter

Node B

ServletFilter

Page 85: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Cellar - Web session failover

2014-­‐10-­‐2351

Node A

Hazelcast

DataBase

Client

ServletFilter

Node B

ServletFilter

Page 86: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Cluster - Demo

Page 87: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Presentation Layer

2014-­‐10-­‐2353

Page 88: ApacheCon EU 2014: Enterprise Development with Apache Karaf

web.xml - Hazelcast

2014-­‐10-­‐2354

• Hazelcast for Session Replication<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"version="3.0">

<filter><filter-name>hazelcast-filter</filter-name><filter-class>com.hazelcast.web.WebFilter</filter-class>

<!-- Name of the distributed map storing your web session objects -->

<init-param><param-name>map-name</param-name><param-value>my-sessions</param-value>

</init-param><init-param>

<param-name>sticky-session</param-name><param-value>false</param-value>

</init-param></filter><filter-mapping>

<filter-name>hazelcast-filter</filter-name><url-pattern>/*</url-pattern><dispatcher>FORWARD</dispatcher><dispatcher>INCLUDE</dispatcher><dispatcher>REQUEST</dispatcher>

</filter-mapping><listener>

<listener-class>com.hazelcast.web.SessionListener</listener-class></listener>

</web-app>

Page 89: ApacheCon EU 2014: Enterprise Development with Apache Karaf

View

2014-­‐10-­‐2355

Page 90: ApacheCon EU 2014: Enterprise Development with Apache Karaf

View

2014-­‐10-­‐2356

Page 91: ApacheCon EU 2014: Enterprise Development with Apache Karaf

View

2014-­‐10-­‐2357

Page 92: ApacheCon EU 2014: Enterprise Development with Apache Karaf

SUMMARY

Page 93: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Enterprise - Karaf

2014-­‐10-­‐2359

Servlet 3

JSF 2

JSP

JPA 2

JTA

CDIEJB 3.1

JAX-WS

JAX-RPC

JAX-RS

JAXR

SAAJ

JAXB

JMS

JAAS RMIJNDI

Page 94: ApacheCon EU 2014: Enterprise Development with Apache Karaf

JEE with Karaf?

• Adoptions needed? YES

• Minor on Persistence - JNDI lookup

• Minor on transaction - Blueprint JTA

• Wiring of Services:

• Use Blueprint

• Use Servlet 3.0 with CDI - @OsgiService

• Session Replication throughout cluster, it’s still standard Hazelcast

2014-­‐10-­‐2360

Page 95: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Resources

• @anierbeck

• notitzblog.nierbeck.de

• https://github.com/ANierbeck/karaf-enterprise-sample

• www.codecentric.de

• karaf.apache.org

• https://ops4j1.jira.com/wiki/display/paxweb/Pax+Web

• #karaf at irc.codehaus.org

• https://www.packtpub.com/application-development/apache-karaf-cookbook

• Pictures, mainly from flickr

2014-­‐10-­‐2361

Page 96: ApacheCon EU 2014: Enterprise Development with Apache Karaf
Page 97: ApacheCon EU 2014: Enterprise Development with Apache Karaf

THANKS FOR LISTENING

Page 98: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Thanks to the Apache Community

Page 99: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Questions

Page 100: ApacheCon EU 2014: Enterprise Development with Apache Karaf

Thanks