SlideShare ist ein Scribd-Unternehmen logo
1 von 35
Downloaden Sie, um offline zu lesen
A	
  Progress	
  So*ware	
  Company
OSGi for real in enterprise integration
with Apache Karaf
Dr. Adrian Trenaman, Sr. Principal Solution Architect,
FuseSource
trenaman@fusesource.com
twitter: adrian_trenaman | linked-in adrian.trenaman
http://trenaman.blogspot.com http://slideshare.net/trenaman
A	
  Progress	
  So*ware	
  Company
Adrian Trenaman - credentials
•15 years IT consulting experience
- IONA Technologies, Progress
Software Corp, FuseSource
- SOA, ESB, Open Source, BPM,
Web Services, CORBA, …
- Solution focused: architecting,
mentoring, speaking, engineering,
doing…
• Committer, Apache Karaf
• PhD Artificial Intelligence, Dip.
Business Development
Ade’s consultancy map
A	
  Progress	
  So*ware	
  Company
Why are people adopting OSGi for
enterprise integration?
• Lead to the stream by ServiceMix, Karaf and other OSGi-based runtimes.
• ‘Green’ programming - reduce, reuse, recycle
– Reduce - the amount of code you write and deploy
– Reuse (modularity) -
• Separation of interface from implementation
• Versioning and multi-generational cohabitation
• Explicit dependency resolution - fail early, fail loud.
– Recycle - use existing legacy code if possible
• Agile deployment
– Dynamic deployment and hot redeploy
– Smaller artifacts
A	
  Progress	
  So*ware	
  Company
Motivating example
<<karaf>>
:ServiceMix
<<cxf-bundle>>
customer-rest
<<cxf-bundle>>
customer-soap-ws
<<camel-bundle>>
customer-batch-eip
<<blueprint-bundle>>
customer-logic
<<pojo>>
CustomerService
<<bundle>>
customer-jaxb
HTTP
SOAP/
HTTP
FILE
• Modular design
• Dynamic wiring
• POJO-driven
• Dependency Injection
• Standards based
class reuse
A	
  Progress	
  So*ware	
  Company
Aside: parsimonious, trim bundles…
• It’s so modular; no fat deployment artifacts!
• customer-batch-eip-1.0.0.jar - 5.5k
• customer-jaxb-1.0.0.jar - 4.4k
• customer-rest-1.0.0.jar - 4.9k
• customer-soap-ws-1.0.0.jar - 9.6k
• customer-logic-1.0.0.jar - 4.6k
A	
  Progress	
  So*ware	
  Company
Roadmap for this presentation
• Overview of Apache Karaf
• Discussion: Spring DM vs. Blueprint
• Implementing ‘motivating’ use-case
– OSGi POJO service
– RESTful, SOAP and EIP-based reuse of service
• Apache CXF JAX-RS
• Apache CXF JAX-WS
• Apache Camel
– Dynamic update of components
• Concluding thoughts
A	
  Progress	
  So*ware	
  Company
Apache Karaf - an overview
A	
  Progress	
  So*ware	
  Company
Apache Karaf
• A powerful OSGi-based container, originally ‘ServiceMix
Kernel’
– Supports Equinox and Felix OSGi runtimes
– Supports any component that can be wrapped as a jar file
(POJOs, HTTP servlets, Camel routes, JBI endpoints &
services, etc.)
• http://karaf.apache.org
Karaf
OSGI
Logging Deployment Provisioning Admin ConfigAdmin
Console
A	
  Progress	
  So*ware	
  Company
Apache Karaf - deployment
• Karaf hot-deploys any artifacts found in the deploy directory
– OSGi bundles (incl. Spring DM and OSGi Blueprint)
– Raw Spring/Blueprint files
– Karaf Archives (coming soon!)
• It provides additional deployment capabilities through different
URL handlers
– mvn: | file: | http: | wrap: | jbi: | etc...
• Extensible architecture means Karaf can support deployment
of different kinds of artifacts
– Used by ServiceMix 4 to deploy JBI artifacts
A	
  Progress	
  So*ware	
  Company
Apache Karaf - Deployment
• OSGi bundles
• JBI artifacts
• WARs
• Spring / Blueprint
XML configs
• Exploded archives
• Monitor
configuration files
A	
  Progress	
  So*ware	
  Company
Apache Karaf - logging
• The logging subsystem combines output from various loggers
to provide a standard OSGi Log service
– Based on OPS4j Pax Logging
(http://www.ops4j.org/projects/pax/logging)
– Supports API for Apache Commons Logging, SLF4J, Log4j, Java
Util Logging
– Combines all output into one synchronized log
– Uses Log4j configuration for easy management
• Karaf also provides a set of console commands to display,
view and change the log levels at runtime
A	
  Progress	
  So*ware	
  Company
Apache Karaf - Console
• The console provides a command line interface, with which
users can perform administrative tasks
• Commands take the form
{subshell}:{command} [options]
– A sub-shell is a group of related commands
– e.g. commands related to the OSGi framework begin with “osgi:”
• The console provides an SSH port for connecting to and
issuing commands in a remote instance of the kernel
– The ssh connection can be made secure
A	
  Progress	
  So*ware	
  Company
Apache Karaf - Configuration
• Configure bundles from multiple sources - properties files in
the /etc directory, JDBC, …
• Edit configuration values via the console
– These changes are propagated immediately to all bundles
• Can design bundles to dynamically detect configuration
changes and auto-reconfigure
• … all done through the OSGi ConfigAdmin service.
A	
  Progress	
  So*ware	
  Company
Modular deployment with
‘features’
• You can deploy almost anything into
Karaf
– War, Jar, bundle, spring, …
• Prefer OSGi bundles for your routing
/ integration / business logic
– More modular design, explicit
versioning, classpath control.
– Can share classes or objects
(OSGi services)
– Dynamic wiring of OSGi services
allows live hot deployment of
patches without impacting your
production deployment.
• Use the ‘feature’ mechanism to group
and co-deploy bundles.
<<jvm>>
:ServiceMix4
a:bundle
b:bundle
c:bundle
f1 f2
x:bundle
y:bundle
common
smx:> features:addUrl file:my-features.xml
smx:> features:install f1
my-features.xml
A	
  Progress	
  So*ware	
  Company
Spring DM vs. OSGi Blueprint
A	
  Progress	
  So*ware	
  Company
Spring DM and OSGi Blueprints
• Spring-DM is an OSGi extension to Spring
– First attempt at creating an easy dependency injection
programming model for OSGi.
– Now contributed to Eclipse (2009) as Gemini Blueprint project.
• ‘OSGi Blueprint’ is the standardized version of Spring-DM
– Implemented by Spring DM 2.x
– Apache Aries Blueprint used within Karaf
• Better support for namespace resolution and lifecycle
• Lightweight - smaller than Spring DM
A	
  Progress	
  So*ware	
  Company
Spring DM - Concept
<<karaf>>
META-INF/MANIFEST.MF
META-INF/spring/foo.xml
META-INF/spring/bar.xml
...
...
my-bundle.jar
All XML files in the META-
INF/spring directory are
interpreted as the same ‘Spring
Context’, and all beans are initiated
on bundle start and destroyed on
bundle stop.
A	
  Progress	
  So*ware	
  Company
OSGi Blueprint - concept
<<karaf>>
META-INF/MANIFEST.MF
OSGI-INF/blueprint/foo.xml
OSGI-INF/blueprint/bar.xml
...
...
my-bundle.jar
All XML files in the OSGI-
INF/blueprint directory are
interpreted as the same ‘Context’,
and all beans are initiated on bundle
start and destroyed on bundle stop.
A	
  Progress	
  So*ware	
  Company
Deploying POJO OSGi services
A	
  Progress	
  So*ware	
  Company
POJO OSGi Service
public interface CustomerService {
Customer lookupCustomer(String customerId);
}
public class CustomerServiceImpl implements CustomerService {
public Customer lookupCustomer(String customerId) {
Customer c = new Customer();
c.setFirstName("Ade");
c.setLastName("Trenaman");
c.setPhoneNumber("+1234567890");
c.setId(customerId);
return c;
}
}
Blah.xml
A	
  Progress	
  So*ware	
  Company
POJO OSGi Service
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
<bean id="customerServiceImpl"
class="com.fusesource.customer.impl.CustomerServiceImpl"
init-method="init" destroy-method="destroy">
<property name="dbUrl" value="somedb://" />
</bean>
<service ref="customerServiceImpl"
interface="com.fusesource.customer.CustomerService" />
</blueprint>
OSGI-INF/blueprint/customer-service.xml
A	
  Progress	
  So*ware	
  Company
‘bnd’ magic within Maven handles the
OSGi packaging…
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>${maven-bundle-plugin.version}</version>
<extensions>true</extensions>
<configuration>
<instructions>
<Export-Package>
com.fusesource.customer
</Export-Package>
<Private-Package>
com.fusesource.customer.impl
</Private-Package>
<Include-Resource>src/main/resources</Include-Resource>
</instructions>
</configuration>
</plugin>
pom.xml
A	
  Progress	
  So*ware	
  Company
Using a Karaf ‘features’ file to deploy
A	
  Progress	
  So*ware	
  Company
Using a Karaf features file
<?xml version="1.0" encoding="UTF-8"?>
<features>
<!-- import other features files -->
<repository>mvn:org.apache.servicemix/apache-
servicemix/${servicemix.version}/xml/features</repository>
<feature name="customer-jaxb" version="1.0.0">
<bundle>mvn:${pom.groupId}/customer-jaxb/1.0.0</bundle>
</feature>
<feature name="customer-logic" version="1.0.0">
<feature version="1.0.0">customer-jaxb</feature>
<bundle>mvn:${pom.groupId}/customer-logic/1.0.0</bundle>
</feature>
. . .
</features>
src/main/filtere-resources/features.xml
A	
  Progress	
  So*ware	
  Company
• Use the features:addUrl command to register the features
file.
• Use the features:install / features:uninstall
commands to start and stop each feature.
A	
  Progress	
  So*ware	
  Company
Deploying REST and Web Services with
Apache CXF
A	
  Progress	
  So*ware	
  Company
REST Service
private static Logger logger
= LoggerFactory.getLogger(RESTfulCustomerService.class);
private CustomerService customerServiceLogic;
@GET
@Path("/customers/{id}/")
@Produces("application/xml")
public Customer getCustomer(@PathParam("id") String id) {
logger.info("Invoking getCustomer, Customer id is: " + id);
// Make use of the backend customer service logic!
//
return customerServiceLogic.lookupCustomer(id);
}
RESTfulCustomerService.java
A	
  Progress	
  So*ware	
  Company
REST Service
<jaxrs:server id="customerService"
address="http://0.0.0.0:8182/crm">
<jaxrs:serviceBeans>
<ref bean="customerSvc"/>
</jaxrs:serviceBeans>
</jaxrs:server>
<bean id="customerSvc"
class="com.fusesource.customer.rest.RESTfulCustomerService"
init-method="init" destroy-method="destroy">
<property name="customerServiceLogic" ref="customerLogic"/>
</bean>
<osgi:reference id="customerLogic"
interface="com.fusesource.customer.CustomerService"/>
META-INF/spring/customer-rest.xml
A	
  Progress	
  So*ware	
  Company
SOAP Service
@WebService(
targetNamespace =
"http://demo.fusesource.com/wsdl/CustomerService/",
portName = "SOAPOverHTTP",
serviceName = "CustomerService", name = "CustomerService"
)
public class CustomerServiceImpl implements CustomerService {
public LookupCustomerResponse lookupCustomer(LookupCustomer
parameters) {
// Invoke on the OSGi POJO
Customer customer =
customerServiceLogic.lookupCustomer(parameters.getCustomerId());
...
return response;
}
}
CustomerServiceImpl.java
A	
  Progress	
  So*ware	
  Company
SOAP Service
<jaxws:endpoint id="customerServiceJaxWSEndpoint"
implementor="#customerServiceImpl"
address="http://localhost:8083/soap/CustomerService"
/>
<bean id="customerServiceImpl"
class="com.fusesource.demo.soap.customer.CustomerServiceImpl">
<property name="customerServiceLogic" ref="customerLogic"/>
</bean>
<osgi:reference id="customerLogic”
interface="com.fusesource.customer.CustomerService"/>
META-INF/spring/customer-soap.xml
A	
  Progress	
  So*ware	
  Company
Deploying EIP flows with Apache Camel
A	
  Progress	
  So*ware	
  Company
Camel Route
from("file:/tmp/customerIds")
.routeId("batchCustomerProcessor")
.split(body(String.class).tokenize("n"))
.to("bean:customerServiceLogic?method=lookupCustomer")
.process(new Processor() {
public void process(Exchange exchange) throws Exception {
Customer c = exchange.getIn().getBody(Customer.class);
logger.info("Processed customer " + c.getId() + ", name is "
+ c.getFirstName() + " " + c.getLastName());
}
});
CustomerBatchProcessor.java
A	
  Progress	
  So*ware	
  Company
Camel Route
<camelContext xmlns="http://camel.apache.org/schema/spring">
<routeBuilder ref="batchProcessor" />
</camelContext>
<bean name="batchProcessor"
class="com.fusesource.demo.batch.customer.CustomerBatchProcessor"/>
<osgi:reference id="customerServiceLogic"
interface="com.fusesource.customer.CustomerService"/>
META-INF/spring/camel-route.xml
A	
  Progress	
  So*ware	
  Company
Summing up
• OSGi provides goodness in terms of modularity.
• Versioning, dependency management, classpath isolation, dynamic
wiring
• Apache Karaf augments core OSGi runtime with cross-
functional-concerns
• Logging, shell, configuration, security, …
• Karaf is a good home for Camel EIPs, CXF services…
• Apache ServiceMix pulls it all together.
• All the code from this presentation is available from the author!
A	
  Progress	
  So*ware	
  Company
OSGi for real in enterprise integration with
Apache Karaf
Dr. Adrian Trenaman, Sr. Principal Solution Architect,
FuseSource
trenaman@fusesource.com
twitter: adrian_trenaman | linked-in adrian.trenaman
http://trenaman.blogspot.com http://slideshare.net/trenaman

Weitere ähnliche Inhalte

Was ist angesagt?

Build bundles in the cloud - How Cloudyle PaaS+ helps creating OSGi applicati...
Build bundles in the cloud - How Cloudyle PaaS+ helps creating OSGi applicati...Build bundles in the cloud - How Cloudyle PaaS+ helps creating OSGi applicati...
Build bundles in the cloud - How Cloudyle PaaS+ helps creating OSGi applicati...mfrancis
 
Cloud Foundry Open Tour India 2012 , Keynote
Cloud Foundry Open Tour India 2012 , KeynoteCloud Foundry Open Tour India 2012 , Keynote
Cloud Foundry Open Tour India 2012 , Keynoterajdeep
 
Java EE 7 Soup to Nuts at JavaOne 2014
Java EE 7 Soup to Nuts at JavaOne 2014Java EE 7 Soup to Nuts at JavaOne 2014
Java EE 7 Soup to Nuts at JavaOne 2014Arun Gupta
 
Best Practices - PHP and the Oracle Database
Best Practices - PHP and the Oracle DatabaseBest Practices - PHP and the Oracle Database
Best Practices - PHP and the Oracle DatabaseChristopher Jones
 
Camel Desing Patterns Learned Through Blood, Sweat, and Tears
Camel Desing Patterns Learned Through Blood, Sweat, and TearsCamel Desing Patterns Learned Through Blood, Sweat, and Tears
Camel Desing Patterns Learned Through Blood, Sweat, and TearsBilgin Ibryam
 
Moving From Actions & Behaviors to Microservices
Moving From Actions & Behaviors to MicroservicesMoving From Actions & Behaviors to Microservices
Moving From Actions & Behaviors to MicroservicesJeff Potts
 
Connecting Apache Kafka With Mule ESB
Connecting Apache Kafka With Mule ESBConnecting Apache Kafka With Mule ESB
Connecting Apache Kafka With Mule ESBJitendra Bafna
 
ActiveMQ Performance Tuning
ActiveMQ Performance TuningActiveMQ Performance Tuning
ActiveMQ Performance TuningChristian Posta
 
Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...
Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...
Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...Martin Bergljung
 
Javaeeconf 2016 how to cook apache kafka with camel and spring boot
Javaeeconf 2016 how to cook apache kafka with camel and spring bootJavaeeconf 2016 how to cook apache kafka with camel and spring boot
Javaeeconf 2016 how to cook apache kafka with camel and spring bootIvan Vasyliev
 
Serverless Java Challenges & Triumphs
Serverless Java Challenges & TriumphsServerless Java Challenges & Triumphs
Serverless Java Challenges & TriumphsDavid Delabassee
 
201511 - Alfresco Day - Platform Update and Roadmap - Gabriele Columbro - Bo...
201511 -  Alfresco Day - Platform Update and Roadmap - Gabriele Columbro - Bo...201511 -  Alfresco Day - Platform Update and Roadmap - Gabriele Columbro - Bo...
201511 - Alfresco Day - Platform Update and Roadmap - Gabriele Columbro - Bo...Symphony Software Foundation
 
Configuration Management Tools on NX-OS
Configuration Management Tools on NX-OSConfiguration Management Tools on NX-OS
Configuration Management Tools on NX-OSCisco DevNet
 
Moving Gigantic Files Into and Out of the Alfresco Repository
Moving Gigantic Files Into and Out of the Alfresco RepositoryMoving Gigantic Files Into and Out of the Alfresco Repository
Moving Gigantic Files Into and Out of the Alfresco RepositoryJeff Potts
 
컨테이너 기술 소개 - Warden, Garden, Docker
컨테이너 기술 소개 - Warden, Garden, Docker컨테이너 기술 소개 - Warden, Garden, Docker
컨테이너 기술 소개 - Warden, Garden, Dockerseungdon Choi
 
So I Wrote a Manifest
So I Wrote a ManifestSo I Wrote a Manifest
So I Wrote a ManifestPuppet
 

Was ist angesagt? (20)

Build bundles in the cloud - How Cloudyle PaaS+ helps creating OSGi applicati...
Build bundles in the cloud - How Cloudyle PaaS+ helps creating OSGi applicati...Build bundles in the cloud - How Cloudyle PaaS+ helps creating OSGi applicati...
Build bundles in the cloud - How Cloudyle PaaS+ helps creating OSGi applicati...
 
Cloud Foundry Open Tour India 2012 , Keynote
Cloud Foundry Open Tour India 2012 , KeynoteCloud Foundry Open Tour India 2012 , Keynote
Cloud Foundry Open Tour India 2012 , Keynote
 
How Flipkart scales PHP
How Flipkart scales PHPHow Flipkart scales PHP
How Flipkart scales PHP
 
Java EE 7 Soup to Nuts at JavaOne 2014
Java EE 7 Soup to Nuts at JavaOne 2014Java EE 7 Soup to Nuts at JavaOne 2014
Java EE 7 Soup to Nuts at JavaOne 2014
 
What's New in WildFly 9?
What's New in WildFly 9?What's New in WildFly 9?
What's New in WildFly 9?
 
MySQL Replication
MySQL ReplicationMySQL Replication
MySQL Replication
 
Command box
Command boxCommand box
Command box
 
Best Practices - PHP and the Oracle Database
Best Practices - PHP and the Oracle DatabaseBest Practices - PHP and the Oracle Database
Best Practices - PHP and the Oracle Database
 
Camel Desing Patterns Learned Through Blood, Sweat, and Tears
Camel Desing Patterns Learned Through Blood, Sweat, and TearsCamel Desing Patterns Learned Through Blood, Sweat, and Tears
Camel Desing Patterns Learned Through Blood, Sweat, and Tears
 
Moving From Actions & Behaviors to Microservices
Moving From Actions & Behaviors to MicroservicesMoving From Actions & Behaviors to Microservices
Moving From Actions & Behaviors to Microservices
 
Connecting Apache Kafka With Mule ESB
Connecting Apache Kafka With Mule ESBConnecting Apache Kafka With Mule ESB
Connecting Apache Kafka With Mule ESB
 
ActiveMQ Performance Tuning
ActiveMQ Performance TuningActiveMQ Performance Tuning
ActiveMQ Performance Tuning
 
Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...
Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...
Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...
 
Javaeeconf 2016 how to cook apache kafka with camel and spring boot
Javaeeconf 2016 how to cook apache kafka with camel and spring bootJavaeeconf 2016 how to cook apache kafka with camel and spring boot
Javaeeconf 2016 how to cook apache kafka with camel and spring boot
 
Serverless Java Challenges & Triumphs
Serverless Java Challenges & TriumphsServerless Java Challenges & Triumphs
Serverless Java Challenges & Triumphs
 
201511 - Alfresco Day - Platform Update and Roadmap - Gabriele Columbro - Bo...
201511 -  Alfresco Day - Platform Update and Roadmap - Gabriele Columbro - Bo...201511 -  Alfresco Day - Platform Update and Roadmap - Gabriele Columbro - Bo...
201511 - Alfresco Day - Platform Update and Roadmap - Gabriele Columbro - Bo...
 
Configuration Management Tools on NX-OS
Configuration Management Tools on NX-OSConfiguration Management Tools on NX-OS
Configuration Management Tools on NX-OS
 
Moving Gigantic Files Into and Out of the Alfresco Repository
Moving Gigantic Files Into and Out of the Alfresco RepositoryMoving Gigantic Files Into and Out of the Alfresco Repository
Moving Gigantic Files Into and Out of the Alfresco Repository
 
컨테이너 기술 소개 - Warden, Garden, Docker
컨테이너 기술 소개 - Warden, Garden, Docker컨테이너 기술 소개 - Warden, Garden, Docker
컨테이너 기술 소개 - Warden, Garden, Docker
 
So I Wrote a Manifest
So I Wrote a ManifestSo I Wrote a Manifest
So I Wrote a Manifest
 

Andere mochten auch

OSGi and Java EE: A Hybrid Approach to Enterprise Java Application Development
OSGi and Java EE: A Hybrid Approach to Enterprise Java Application DevelopmentOSGi and Java EE: A Hybrid Approach to Enterprise Java Application Development
OSGi and Java EE: A Hybrid Approach to Enterprise Java Application DevelopmentSanjeeb Sahoo
 
OSGi & Java EE in GlassFish
OSGi & Java EE in GlassFishOSGi & Java EE in GlassFish
OSGi & Java EE in GlassFishSanjeeb Sahoo
 
Distributed Services - OSGi 4.2 and possible future enhancements
Distributed Services - OSGi 4.2 and possible future enhancementsDistributed Services - OSGi 4.2 and possible future enhancements
Distributed Services - OSGi 4.2 and possible future enhancementsDavid Bosschaert
 
It's beautiful enRoute - Paul Fraser
It's beautiful enRoute - Paul FraserIt's beautiful enRoute - Paul Fraser
It's beautiful enRoute - Paul Frasermfrancis
 
Avoid the chaos - Handling 100+ OSGi Components - Balázs Zsoldos
Avoid the chaos - Handling 100+ OSGi Components - Balázs ZsoldosAvoid the chaos - Handling 100+ OSGi Components - Balázs Zsoldos
Avoid the chaos - Handling 100+ OSGi Components - Balázs Zsoldosmfrancis
 
OSGi in the Enterprise: Agility, Modularity, and Architecture's Paradox
OSGi in the Enterprise: Agility, Modularity, and Architecture's ParadoxOSGi in the Enterprise: Agility, Modularity, and Architecture's Paradox
OSGi in the Enterprise: Agility, Modularity, and Architecture's Paradoxpragkirk
 
Building LinkedIn's Next Generation Architecture with OSGi
Building LinkedIn's Next Generation  Architecture with OSGiBuilding LinkedIn's Next Generation  Architecture with OSGi
Building LinkedIn's Next Generation Architecture with OSGiLinkedIn
 

Andere mochten auch (8)

OSGi and Java EE: A Hybrid Approach to Enterprise Java Application Development
OSGi and Java EE: A Hybrid Approach to Enterprise Java Application DevelopmentOSGi and Java EE: A Hybrid Approach to Enterprise Java Application Development
OSGi and Java EE: A Hybrid Approach to Enterprise Java Application Development
 
OSGi & Java EE in GlassFish
OSGi & Java EE in GlassFishOSGi & Java EE in GlassFish
OSGi & Java EE in GlassFish
 
Karaf ee-apachecon eu-2012
Karaf ee-apachecon eu-2012Karaf ee-apachecon eu-2012
Karaf ee-apachecon eu-2012
 
Distributed Services - OSGi 4.2 and possible future enhancements
Distributed Services - OSGi 4.2 and possible future enhancementsDistributed Services - OSGi 4.2 and possible future enhancements
Distributed Services - OSGi 4.2 and possible future enhancements
 
It's beautiful enRoute - Paul Fraser
It's beautiful enRoute - Paul FraserIt's beautiful enRoute - Paul Fraser
It's beautiful enRoute - Paul Fraser
 
Avoid the chaos - Handling 100+ OSGi Components - Balázs Zsoldos
Avoid the chaos - Handling 100+ OSGi Components - Balázs ZsoldosAvoid the chaos - Handling 100+ OSGi Components - Balázs Zsoldos
Avoid the chaos - Handling 100+ OSGi Components - Balázs Zsoldos
 
OSGi in the Enterprise: Agility, Modularity, and Architecture's Paradox
OSGi in the Enterprise: Agility, Modularity, and Architecture's ParadoxOSGi in the Enterprise: Agility, Modularity, and Architecture's Paradox
OSGi in the Enterprise: Agility, Modularity, and Architecture's Paradox
 
Building LinkedIn's Next Generation Architecture with OSGi
Building LinkedIn's Next Generation  Architecture with OSGiBuilding LinkedIn's Next Generation  Architecture with OSGi
Building LinkedIn's Next Generation Architecture with OSGi
 

Ähnlich wie OSGi for real in the enterprise: Apache Karaf - NLJUG J-FALL 2010

Alfresco Coding mit dem Alfresco SDK (auf Englisch) - Julien Bruinaud, Techni...
Alfresco Coding mit dem Alfresco SDK (auf Englisch) - Julien Bruinaud, Techni...Alfresco Coding mit dem Alfresco SDK (auf Englisch) - Julien Bruinaud, Techni...
Alfresco Coding mit dem Alfresco SDK (auf Englisch) - Julien Bruinaud, Techni...Nicole Szigeti
 
Best Practices for Middleware and Integration Architecture Modernization with...
Best Practices for Middleware and Integration Architecture Modernization with...Best Practices for Middleware and Integration Architecture Modernization with...
Best Practices for Middleware and Integration Architecture Modernization with...Claus Ibsen
 
ApacheCon NA 2010 - Developing Composite Apps for the Cloud with Apache Tuscany
ApacheCon NA 2010 - Developing Composite Apps for the Cloud with Apache TuscanyApacheCon NA 2010 - Developing Composite Apps for the Cloud with Apache Tuscany
ApacheCon NA 2010 - Developing Composite Apps for the Cloud with Apache TuscanyJean-Sebastien Delfino
 
Integrate (Yourself) with the Apache Software Foundation - 33rd Degree 4charity
Integrate (Yourself) with the Apache Software Foundation - 33rd Degree 4charityIntegrate (Yourself) with the Apache Software Foundation - 33rd Degree 4charity
Integrate (Yourself) with the Apache Software Foundation - 33rd Degree 4charityKrzysztof Sobkowiak
 
20171122 aws usergrp_coretech-spn-cicd-aws-v01
20171122 aws usergrp_coretech-spn-cicd-aws-v0120171122 aws usergrp_coretech-spn-cicd-aws-v01
20171122 aws usergrp_coretech-spn-cicd-aws-v01Scott Miao
 
Intro to Alfresco for Developers
Intro to Alfresco for DevelopersIntro to Alfresco for Developers
Intro to Alfresco for DevelopersJeff Potts
 
Kick Start your Application Development and Management Strategy
Kick Start your Application Development and Management Strategy Kick Start your Application Development and Management Strategy
Kick Start your Application Development and Management Strategy WSO2
 
Nasdanika Foundation Server
Nasdanika Foundation ServerNasdanika Foundation Server
Nasdanika Foundation ServerPavel Vlasov
 
RESTful Services and Distributed OSGi - 04/2009
RESTful Services and Distributed OSGi - 04/2009RESTful Services and Distributed OSGi - 04/2009
RESTful Services and Distributed OSGi - 04/2009Roland Tritsch
 
IBM BP Session - Multiple CLoud Paks and Cloud Paks Foundational Services.pptx
IBM BP Session - Multiple CLoud Paks and Cloud Paks Foundational Services.pptxIBM BP Session - Multiple CLoud Paks and Cloud Paks Foundational Services.pptx
IBM BP Session - Multiple CLoud Paks and Cloud Paks Foundational Services.pptxGeorg Ember
 
Alfresco WCM For High Scalability
Alfresco WCM For High ScalabilityAlfresco WCM For High Scalability
Alfresco WCM For High ScalabilityAlfresco Software
 
Product Release Webinar- WSO2 Developer Studio 3.5
Product Release Webinar- WSO2 Developer Studio 3.5Product Release Webinar- WSO2 Developer Studio 3.5
Product Release Webinar- WSO2 Developer Studio 3.5WSO2
 
Cloud Foundry: Hands-on Deployment Workshop
Cloud Foundry: Hands-on Deployment WorkshopCloud Foundry: Hands-on Deployment Workshop
Cloud Foundry: Hands-on Deployment WorkshopManuel Garcia
 
Developer’s intro to the alfresco platform
Developer’s intro to the alfresco platformDeveloper’s intro to the alfresco platform
Developer’s intro to the alfresco platformAlfresco Software
 
JOnAS 5.1 Application Server Profiles
JOnAS 5.1 Application Server ProfilesJOnAS 5.1 Application Server Profiles
JOnAS 5.1 Application Server ProfilesGuillaume Sauthier
 
CICD with SharePoint SPFx A useful overview
CICD with SharePoint SPFx A useful overviewCICD with SharePoint SPFx A useful overview
CICD with SharePoint SPFx A useful overviewpdalian
 
OSGi enRoute Unveiled - P Kriens
OSGi enRoute Unveiled - P KriensOSGi enRoute Unveiled - P Kriens
OSGi enRoute Unveiled - P Kriensmfrancis
 

Ähnlich wie OSGi for real in the enterprise: Apache Karaf - NLJUG J-FALL 2010 (20)

Alfresco Coding mit dem Alfresco SDK (auf Englisch) - Julien Bruinaud, Techni...
Alfresco Coding mit dem Alfresco SDK (auf Englisch) - Julien Bruinaud, Techni...Alfresco Coding mit dem Alfresco SDK (auf Englisch) - Julien Bruinaud, Techni...
Alfresco Coding mit dem Alfresco SDK (auf Englisch) - Julien Bruinaud, Techni...
 
Best Practices for Middleware and Integration Architecture Modernization with...
Best Practices for Middleware and Integration Architecture Modernization with...Best Practices for Middleware and Integration Architecture Modernization with...
Best Practices for Middleware and Integration Architecture Modernization with...
 
ApacheCon NA 2010 - Developing Composite Apps for the Cloud with Apache Tuscany
ApacheCon NA 2010 - Developing Composite Apps for the Cloud with Apache TuscanyApacheCon NA 2010 - Developing Composite Apps for the Cloud with Apache Tuscany
ApacheCon NA 2010 - Developing Composite Apps for the Cloud with Apache Tuscany
 
Integrate (Yourself) with the Apache Software Foundation - 33rd Degree 4charity
Integrate (Yourself) with the Apache Software Foundation - 33rd Degree 4charityIntegrate (Yourself) with the Apache Software Foundation - 33rd Degree 4charity
Integrate (Yourself) with the Apache Software Foundation - 33rd Degree 4charity
 
Apache servicemix1
Apache servicemix1Apache servicemix1
Apache servicemix1
 
Servicemix4.5.0
Servicemix4.5.0Servicemix4.5.0
Servicemix4.5.0
 
20171122 aws usergrp_coretech-spn-cicd-aws-v01
20171122 aws usergrp_coretech-spn-cicd-aws-v0120171122 aws usergrp_coretech-spn-cicd-aws-v01
20171122 aws usergrp_coretech-spn-cicd-aws-v01
 
Intro to Alfresco for Developers
Intro to Alfresco for DevelopersIntro to Alfresco for Developers
Intro to Alfresco for Developers
 
Kick Start your Application Development and Management Strategy
Kick Start your Application Development and Management Strategy Kick Start your Application Development and Management Strategy
Kick Start your Application Development and Management Strategy
 
Nasdanika Foundation Server
Nasdanika Foundation ServerNasdanika Foundation Server
Nasdanika Foundation Server
 
RESTful Services and Distributed OSGi - 04/2009
RESTful Services and Distributed OSGi - 04/2009RESTful Services and Distributed OSGi - 04/2009
RESTful Services and Distributed OSGi - 04/2009
 
Cocoon OSGi CocoonGT2007
Cocoon OSGi CocoonGT2007Cocoon OSGi CocoonGT2007
Cocoon OSGi CocoonGT2007
 
IBM BP Session - Multiple CLoud Paks and Cloud Paks Foundational Services.pptx
IBM BP Session - Multiple CLoud Paks and Cloud Paks Foundational Services.pptxIBM BP Session - Multiple CLoud Paks and Cloud Paks Foundational Services.pptx
IBM BP Session - Multiple CLoud Paks and Cloud Paks Foundational Services.pptx
 
Alfresco WCM For High Scalability
Alfresco WCM For High ScalabilityAlfresco WCM For High Scalability
Alfresco WCM For High Scalability
 
Product Release Webinar- WSO2 Developer Studio 3.5
Product Release Webinar- WSO2 Developer Studio 3.5Product Release Webinar- WSO2 Developer Studio 3.5
Product Release Webinar- WSO2 Developer Studio 3.5
 
Cloud Foundry: Hands-on Deployment Workshop
Cloud Foundry: Hands-on Deployment WorkshopCloud Foundry: Hands-on Deployment Workshop
Cloud Foundry: Hands-on Deployment Workshop
 
Developer’s intro to the alfresco platform
Developer’s intro to the alfresco platformDeveloper’s intro to the alfresco platform
Developer’s intro to the alfresco platform
 
JOnAS 5.1 Application Server Profiles
JOnAS 5.1 Application Server ProfilesJOnAS 5.1 Application Server Profiles
JOnAS 5.1 Application Server Profiles
 
CICD with SharePoint SPFx A useful overview
CICD with SharePoint SPFx A useful overviewCICD with SharePoint SPFx A useful overview
CICD with SharePoint SPFx A useful overview
 
OSGi enRoute Unveiled - P Kriens
OSGi enRoute Unveiled - P KriensOSGi enRoute Unveiled - P Kriens
OSGi enRoute Unveiled - P Kriens
 

Mehr von Adrian Trenaman

Why i love computer science
Why i love computer scienceWhy i love computer science
Why i love computer scienceAdrian Trenaman
 
JavaOne 2015: Scaling micro services at Gilt
JavaOne 2015: Scaling micro services at GiltJavaOne 2015: Scaling micro services at Gilt
JavaOne 2015: Scaling micro services at GiltAdrian Trenaman
 
GeeCON Microservices 2015 scaling micro services at gilt
GeeCON Microservices 2015   scaling micro services at giltGeeCON Microservices 2015   scaling micro services at gilt
GeeCON Microservices 2015 scaling micro services at giltAdrian Trenaman
 
Solr nyc meetup - May 14 2015 - Adrian Trenaman
Solr nyc meetup - May 14 2015 - Adrian TrenamanSolr nyc meetup - May 14 2015 - Adrian Trenaman
Solr nyc meetup - May 14 2015 - Adrian TrenamanAdrian Trenaman
 
Scaling micro services at gilt
Scaling micro services at giltScaling micro services at gilt
Scaling micro services at giltAdrian Trenaman
 
Lucene revolution 2013 adrian trenaman
Lucene revolution 2013   adrian trenamanLucene revolution 2013   adrian trenaman
Lucene revolution 2013 adrian trenamanAdrian Trenaman
 
Personalized Search on the Largest Flash Sale Site in America
Personalized Search on the Largest Flash Sale Site in AmericaPersonalized Search on the Largest Flash Sale Site in America
Personalized Search on the Largest Flash Sale Site in AmericaAdrian Trenaman
 
Implementing WebServices with Camel and CXF in ServiceMix
Implementing WebServices with Camel and CXF in ServiceMixImplementing WebServices with Camel and CXF in ServiceMix
Implementing WebServices with Camel and CXF in ServiceMixAdrian Trenaman
 
WebServices in ServiceMix with CXF
WebServices in ServiceMix with CXFWebServices in ServiceMix with CXF
WebServices in ServiceMix with CXFAdrian Trenaman
 
Oop2008 RESTful services with GWT and Apache CXF
Oop2008 RESTful services with GWT and Apache CXFOop2008 RESTful services with GWT and Apache CXF
Oop2008 RESTful services with GWT and Apache CXFAdrian Trenaman
 
ApacheCon EU 2009 Tales from the front line - ActiveMQ ServiceMix and CXF
ApacheCon EU 2009 Tales from the front line - ActiveMQ ServiceMix and CXFApacheCon EU 2009 Tales from the front line - ActiveMQ ServiceMix and CXF
ApacheCon EU 2009 Tales from the front line - ActiveMQ ServiceMix and CXFAdrian Trenaman
 
Apache coneu 2009-adrian-trenaman-adopting-open-source-in-the-enterprise
Apache coneu 2009-adrian-trenaman-adopting-open-source-in-the-enterpriseApache coneu 2009-adrian-trenaman-adopting-open-source-in-the-enterprise
Apache coneu 2009-adrian-trenaman-adopting-open-source-in-the-enterpriseAdrian Trenaman
 
20100907 fuse-community-evening-adrian-trenaman-no-logo
20100907 fuse-community-evening-adrian-trenaman-no-logo20100907 fuse-community-evening-adrian-trenaman-no-logo
20100907 fuse-community-evening-adrian-trenaman-no-logoAdrian Trenaman
 
An Introduction to Apache ServiceMix 4 - FUSE ESB
An Introduction to Apache ServiceMix 4 - FUSE ESBAn Introduction to Apache ServiceMix 4 - FUSE ESB
An Introduction to Apache ServiceMix 4 - FUSE ESBAdrian Trenaman
 

Mehr von Adrian Trenaman (14)

Why i love computer science
Why i love computer scienceWhy i love computer science
Why i love computer science
 
JavaOne 2015: Scaling micro services at Gilt
JavaOne 2015: Scaling micro services at GiltJavaOne 2015: Scaling micro services at Gilt
JavaOne 2015: Scaling micro services at Gilt
 
GeeCON Microservices 2015 scaling micro services at gilt
GeeCON Microservices 2015   scaling micro services at giltGeeCON Microservices 2015   scaling micro services at gilt
GeeCON Microservices 2015 scaling micro services at gilt
 
Solr nyc meetup - May 14 2015 - Adrian Trenaman
Solr nyc meetup - May 14 2015 - Adrian TrenamanSolr nyc meetup - May 14 2015 - Adrian Trenaman
Solr nyc meetup - May 14 2015 - Adrian Trenaman
 
Scaling micro services at gilt
Scaling micro services at giltScaling micro services at gilt
Scaling micro services at gilt
 
Lucene revolution 2013 adrian trenaman
Lucene revolution 2013   adrian trenamanLucene revolution 2013   adrian trenaman
Lucene revolution 2013 adrian trenaman
 
Personalized Search on the Largest Flash Sale Site in America
Personalized Search on the Largest Flash Sale Site in AmericaPersonalized Search on the Largest Flash Sale Site in America
Personalized Search on the Largest Flash Sale Site in America
 
Implementing WebServices with Camel and CXF in ServiceMix
Implementing WebServices with Camel and CXF in ServiceMixImplementing WebServices with Camel and CXF in ServiceMix
Implementing WebServices with Camel and CXF in ServiceMix
 
WebServices in ServiceMix with CXF
WebServices in ServiceMix with CXFWebServices in ServiceMix with CXF
WebServices in ServiceMix with CXF
 
Oop2008 RESTful services with GWT and Apache CXF
Oop2008 RESTful services with GWT and Apache CXFOop2008 RESTful services with GWT and Apache CXF
Oop2008 RESTful services with GWT and Apache CXF
 
ApacheCon EU 2009 Tales from the front line - ActiveMQ ServiceMix and CXF
ApacheCon EU 2009 Tales from the front line - ActiveMQ ServiceMix and CXFApacheCon EU 2009 Tales from the front line - ActiveMQ ServiceMix and CXF
ApacheCon EU 2009 Tales from the front line - ActiveMQ ServiceMix and CXF
 
Apache coneu 2009-adrian-trenaman-adopting-open-source-in-the-enterprise
Apache coneu 2009-adrian-trenaman-adopting-open-source-in-the-enterpriseApache coneu 2009-adrian-trenaman-adopting-open-source-in-the-enterprise
Apache coneu 2009-adrian-trenaman-adopting-open-source-in-the-enterprise
 
20100907 fuse-community-evening-adrian-trenaman-no-logo
20100907 fuse-community-evening-adrian-trenaman-no-logo20100907 fuse-community-evening-adrian-trenaman-no-logo
20100907 fuse-community-evening-adrian-trenaman-no-logo
 
An Introduction to Apache ServiceMix 4 - FUSE ESB
An Introduction to Apache ServiceMix 4 - FUSE ESBAn Introduction to Apache ServiceMix 4 - FUSE ESB
An Introduction to Apache ServiceMix 4 - FUSE ESB
 

Kürzlich hochgeladen

Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfPrecisely
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 

Kürzlich hochgeladen (20)

Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 

OSGi for real in the enterprise: Apache Karaf - NLJUG J-FALL 2010

  • 1. A  Progress  So*ware  Company OSGi for real in enterprise integration with Apache Karaf Dr. Adrian Trenaman, Sr. Principal Solution Architect, FuseSource trenaman@fusesource.com twitter: adrian_trenaman | linked-in adrian.trenaman http://trenaman.blogspot.com http://slideshare.net/trenaman
  • 2. A  Progress  So*ware  Company Adrian Trenaman - credentials •15 years IT consulting experience - IONA Technologies, Progress Software Corp, FuseSource - SOA, ESB, Open Source, BPM, Web Services, CORBA, … - Solution focused: architecting, mentoring, speaking, engineering, doing… • Committer, Apache Karaf • PhD Artificial Intelligence, Dip. Business Development Ade’s consultancy map
  • 3. A  Progress  So*ware  Company Why are people adopting OSGi for enterprise integration? • Lead to the stream by ServiceMix, Karaf and other OSGi-based runtimes. • ‘Green’ programming - reduce, reuse, recycle – Reduce - the amount of code you write and deploy – Reuse (modularity) - • Separation of interface from implementation • Versioning and multi-generational cohabitation • Explicit dependency resolution - fail early, fail loud. – Recycle - use existing legacy code if possible • Agile deployment – Dynamic deployment and hot redeploy – Smaller artifacts
  • 4. A  Progress  So*ware  Company Motivating example <<karaf>> :ServiceMix <<cxf-bundle>> customer-rest <<cxf-bundle>> customer-soap-ws <<camel-bundle>> customer-batch-eip <<blueprint-bundle>> customer-logic <<pojo>> CustomerService <<bundle>> customer-jaxb HTTP SOAP/ HTTP FILE • Modular design • Dynamic wiring • POJO-driven • Dependency Injection • Standards based class reuse
  • 5. A  Progress  So*ware  Company Aside: parsimonious, trim bundles… • It’s so modular; no fat deployment artifacts! • customer-batch-eip-1.0.0.jar - 5.5k • customer-jaxb-1.0.0.jar - 4.4k • customer-rest-1.0.0.jar - 4.9k • customer-soap-ws-1.0.0.jar - 9.6k • customer-logic-1.0.0.jar - 4.6k
  • 6. A  Progress  So*ware  Company Roadmap for this presentation • Overview of Apache Karaf • Discussion: Spring DM vs. Blueprint • Implementing ‘motivating’ use-case – OSGi POJO service – RESTful, SOAP and EIP-based reuse of service • Apache CXF JAX-RS • Apache CXF JAX-WS • Apache Camel – Dynamic update of components • Concluding thoughts
  • 7. A  Progress  So*ware  Company Apache Karaf - an overview
  • 8. A  Progress  So*ware  Company Apache Karaf • A powerful OSGi-based container, originally ‘ServiceMix Kernel’ – Supports Equinox and Felix OSGi runtimes – Supports any component that can be wrapped as a jar file (POJOs, HTTP servlets, Camel routes, JBI endpoints & services, etc.) • http://karaf.apache.org Karaf OSGI Logging Deployment Provisioning Admin ConfigAdmin Console
  • 9. A  Progress  So*ware  Company Apache Karaf - deployment • Karaf hot-deploys any artifacts found in the deploy directory – OSGi bundles (incl. Spring DM and OSGi Blueprint) – Raw Spring/Blueprint files – Karaf Archives (coming soon!) • It provides additional deployment capabilities through different URL handlers – mvn: | file: | http: | wrap: | jbi: | etc... • Extensible architecture means Karaf can support deployment of different kinds of artifacts – Used by ServiceMix 4 to deploy JBI artifacts
  • 10. A  Progress  So*ware  Company Apache Karaf - Deployment • OSGi bundles • JBI artifacts • WARs • Spring / Blueprint XML configs • Exploded archives • Monitor configuration files
  • 11. A  Progress  So*ware  Company Apache Karaf - logging • The logging subsystem combines output from various loggers to provide a standard OSGi Log service – Based on OPS4j Pax Logging (http://www.ops4j.org/projects/pax/logging) – Supports API for Apache Commons Logging, SLF4J, Log4j, Java Util Logging – Combines all output into one synchronized log – Uses Log4j configuration for easy management • Karaf also provides a set of console commands to display, view and change the log levels at runtime
  • 12. A  Progress  So*ware  Company Apache Karaf - Console • The console provides a command line interface, with which users can perform administrative tasks • Commands take the form {subshell}:{command} [options] – A sub-shell is a group of related commands – e.g. commands related to the OSGi framework begin with “osgi:” • The console provides an SSH port for connecting to and issuing commands in a remote instance of the kernel – The ssh connection can be made secure
  • 13. A  Progress  So*ware  Company Apache Karaf - Configuration • Configure bundles from multiple sources - properties files in the /etc directory, JDBC, … • Edit configuration values via the console – These changes are propagated immediately to all bundles • Can design bundles to dynamically detect configuration changes and auto-reconfigure • … all done through the OSGi ConfigAdmin service.
  • 14. A  Progress  So*ware  Company Modular deployment with ‘features’ • You can deploy almost anything into Karaf – War, Jar, bundle, spring, … • Prefer OSGi bundles for your routing / integration / business logic – More modular design, explicit versioning, classpath control. – Can share classes or objects (OSGi services) – Dynamic wiring of OSGi services allows live hot deployment of patches without impacting your production deployment. • Use the ‘feature’ mechanism to group and co-deploy bundles. <<jvm>> :ServiceMix4 a:bundle b:bundle c:bundle f1 f2 x:bundle y:bundle common smx:> features:addUrl file:my-features.xml smx:> features:install f1 my-features.xml
  • 15. A  Progress  So*ware  Company Spring DM vs. OSGi Blueprint
  • 16. A  Progress  So*ware  Company Spring DM and OSGi Blueprints • Spring-DM is an OSGi extension to Spring – First attempt at creating an easy dependency injection programming model for OSGi. – Now contributed to Eclipse (2009) as Gemini Blueprint project. • ‘OSGi Blueprint’ is the standardized version of Spring-DM – Implemented by Spring DM 2.x – Apache Aries Blueprint used within Karaf • Better support for namespace resolution and lifecycle • Lightweight - smaller than Spring DM
  • 17. A  Progress  So*ware  Company Spring DM - Concept <<karaf>> META-INF/MANIFEST.MF META-INF/spring/foo.xml META-INF/spring/bar.xml ... ... my-bundle.jar All XML files in the META- INF/spring directory are interpreted as the same ‘Spring Context’, and all beans are initiated on bundle start and destroyed on bundle stop.
  • 18. A  Progress  So*ware  Company OSGi Blueprint - concept <<karaf>> META-INF/MANIFEST.MF OSGI-INF/blueprint/foo.xml OSGI-INF/blueprint/bar.xml ... ... my-bundle.jar All XML files in the OSGI- INF/blueprint directory are interpreted as the same ‘Context’, and all beans are initiated on bundle start and destroyed on bundle stop.
  • 19. A  Progress  So*ware  Company Deploying POJO OSGi services
  • 20. A  Progress  So*ware  Company POJO OSGi Service public interface CustomerService { Customer lookupCustomer(String customerId); } public class CustomerServiceImpl implements CustomerService { public Customer lookupCustomer(String customerId) { Customer c = new Customer(); c.setFirstName("Ade"); c.setLastName("Trenaman"); c.setPhoneNumber("+1234567890"); c.setId(customerId); return c; } } Blah.xml
  • 21. A  Progress  So*ware  Company POJO OSGi Service <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"> <bean id="customerServiceImpl" class="com.fusesource.customer.impl.CustomerServiceImpl" init-method="init" destroy-method="destroy"> <property name="dbUrl" value="somedb://" /> </bean> <service ref="customerServiceImpl" interface="com.fusesource.customer.CustomerService" /> </blueprint> OSGI-INF/blueprint/customer-service.xml
  • 22. A  Progress  So*ware  Company ‘bnd’ magic within Maven handles the OSGi packaging… <plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-bundle-plugin</artifactId> <version>${maven-bundle-plugin.version}</version> <extensions>true</extensions> <configuration> <instructions> <Export-Package> com.fusesource.customer </Export-Package> <Private-Package> com.fusesource.customer.impl </Private-Package> <Include-Resource>src/main/resources</Include-Resource> </instructions> </configuration> </plugin> pom.xml
  • 23. A  Progress  So*ware  Company Using a Karaf ‘features’ file to deploy
  • 24. A  Progress  So*ware  Company Using a Karaf features file <?xml version="1.0" encoding="UTF-8"?> <features> <!-- import other features files --> <repository>mvn:org.apache.servicemix/apache- servicemix/${servicemix.version}/xml/features</repository> <feature name="customer-jaxb" version="1.0.0"> <bundle>mvn:${pom.groupId}/customer-jaxb/1.0.0</bundle> </feature> <feature name="customer-logic" version="1.0.0"> <feature version="1.0.0">customer-jaxb</feature> <bundle>mvn:${pom.groupId}/customer-logic/1.0.0</bundle> </feature> . . . </features> src/main/filtere-resources/features.xml
  • 25. A  Progress  So*ware  Company • Use the features:addUrl command to register the features file. • Use the features:install / features:uninstall commands to start and stop each feature.
  • 26. A  Progress  So*ware  Company Deploying REST and Web Services with Apache CXF
  • 27. A  Progress  So*ware  Company REST Service private static Logger logger = LoggerFactory.getLogger(RESTfulCustomerService.class); private CustomerService customerServiceLogic; @GET @Path("/customers/{id}/") @Produces("application/xml") public Customer getCustomer(@PathParam("id") String id) { logger.info("Invoking getCustomer, Customer id is: " + id); // Make use of the backend customer service logic! // return customerServiceLogic.lookupCustomer(id); } RESTfulCustomerService.java
  • 28. A  Progress  So*ware  Company REST Service <jaxrs:server id="customerService" address="http://0.0.0.0:8182/crm"> <jaxrs:serviceBeans> <ref bean="customerSvc"/> </jaxrs:serviceBeans> </jaxrs:server> <bean id="customerSvc" class="com.fusesource.customer.rest.RESTfulCustomerService" init-method="init" destroy-method="destroy"> <property name="customerServiceLogic" ref="customerLogic"/> </bean> <osgi:reference id="customerLogic" interface="com.fusesource.customer.CustomerService"/> META-INF/spring/customer-rest.xml
  • 29. A  Progress  So*ware  Company SOAP Service @WebService( targetNamespace = "http://demo.fusesource.com/wsdl/CustomerService/", portName = "SOAPOverHTTP", serviceName = "CustomerService", name = "CustomerService" ) public class CustomerServiceImpl implements CustomerService { public LookupCustomerResponse lookupCustomer(LookupCustomer parameters) { // Invoke on the OSGi POJO Customer customer = customerServiceLogic.lookupCustomer(parameters.getCustomerId()); ... return response; } } CustomerServiceImpl.java
  • 30. A  Progress  So*ware  Company SOAP Service <jaxws:endpoint id="customerServiceJaxWSEndpoint" implementor="#customerServiceImpl" address="http://localhost:8083/soap/CustomerService" /> <bean id="customerServiceImpl" class="com.fusesource.demo.soap.customer.CustomerServiceImpl"> <property name="customerServiceLogic" ref="customerLogic"/> </bean> <osgi:reference id="customerLogic” interface="com.fusesource.customer.CustomerService"/> META-INF/spring/customer-soap.xml
  • 31. A  Progress  So*ware  Company Deploying EIP flows with Apache Camel
  • 32. A  Progress  So*ware  Company Camel Route from("file:/tmp/customerIds") .routeId("batchCustomerProcessor") .split(body(String.class).tokenize("n")) .to("bean:customerServiceLogic?method=lookupCustomer") .process(new Processor() { public void process(Exchange exchange) throws Exception { Customer c = exchange.getIn().getBody(Customer.class); logger.info("Processed customer " + c.getId() + ", name is " + c.getFirstName() + " " + c.getLastName()); } }); CustomerBatchProcessor.java
  • 33. A  Progress  So*ware  Company Camel Route <camelContext xmlns="http://camel.apache.org/schema/spring"> <routeBuilder ref="batchProcessor" /> </camelContext> <bean name="batchProcessor" class="com.fusesource.demo.batch.customer.CustomerBatchProcessor"/> <osgi:reference id="customerServiceLogic" interface="com.fusesource.customer.CustomerService"/> META-INF/spring/camel-route.xml
  • 34. A  Progress  So*ware  Company Summing up • OSGi provides goodness in terms of modularity. • Versioning, dependency management, classpath isolation, dynamic wiring • Apache Karaf augments core OSGi runtime with cross- functional-concerns • Logging, shell, configuration, security, … • Karaf is a good home for Camel EIPs, CXF services… • Apache ServiceMix pulls it all together. • All the code from this presentation is available from the author!
  • 35. A  Progress  So*ware  Company OSGi for real in enterprise integration with Apache Karaf Dr. Adrian Trenaman, Sr. Principal Solution Architect, FuseSource trenaman@fusesource.com twitter: adrian_trenaman | linked-in adrian.trenaman http://trenaman.blogspot.com http://slideshare.net/trenaman