Transcript
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


Recommended