ServiceMix future Jean-Baptiste Onofré, Talend
Summary SMX versions Current state: architecture and NMR features Short term: SMX 4.4 Middle term: SMX 5
My Background Jean-Baptiste Onofré Software Architect at Talend ASF member PMC for Karaf and ServiceMix Committer for ACE, Camel, Kalumet
ServiceMix ? Apache ESB Reliable messaging Routing/messaging/EIP WS/REST WS-BPEL Production ready feature (provisioning, cluster, etc)
SMX 3: old stable Spring ActiveMQ ServiceMix JBI Components CamelCXF Very popular in production Powered by Spring, and JBI oriented
SMX 4: current stable Karaf ActiveMQ OSGi/Karaf powered NMR layer JBI backward compatible CamelCXF NMR JBI ServiceMix JBI Components CamelCXF
Pro/Cons ServiceMix 3ServoceMix 4 + Great adoption+ Very stable + Documentation- Poor documentation/website - Only JBI and Spring+OSGi/Karaf, highly extendable - Production tooling/features+ Provisioning, failover, enterprise feature
Short term SMX JBI Components : dependencies upgrade (ActiveMQ 5.5.0, Camel 2.8.3, CXF 2.5.0) SMX Specs SMX Utils SMX 3.4: last SMX3 release, just dependencies upgrade
Short term: SMX 4.4 Dependencies upgrade: Karaf 2.2.4, ActiveMQ 5.5.0, Camel 2.8.3, CXF Documentation/website Improvement on build and remove the JBI layer by default Focus on the NMR features
Current NMR status NMR is a feature: core bus of SMX4 NMR is highly plug and play JBI is just a subset of the NMR
NMR security Users authentication Endpoint access authorization Exposed as OSGi services: org.apache.servicemix.nmr.api.security.AuthenticationService org.apache.servicemix.nmr.api.security.AuthorizationService Configured as service properties: endpoint, operation, type, roles, rank
NMR JNDI Provide a JNDI context factory Expose OSGi service as JNDI using osgi:services/ [/filter] InitialContext context = new InitialContext(); ExampleService = (ExampleService) context.lookup("osgi:services/com.example.ExampleService");
NMR Interceptors Intercept messages between NMR endpoints using: – NMR events (global) – Wires (specific from/to)
NMR Events API receiving notifications EndpointListener public interface EndpointListener { void endpointRegistered(InternalEndpoint endpoint); void endpointUnregistered(InternalEndpoint endpoint); } ExchangeListener public interface ExchangeListener { void exchangeSent(Exchange exchange); void exchangeDelivered(Exchange exchange); void exchangeFailed(Exchange exchange); } Registration as OSGi services
NMR Audit File or JBDC auditor Store all exchanges including mep, status, role, properties, in (content and properties), out (content and properties), fault (content and properties) Shell commands to manipulate the audit log: audit/find “status: error”
SMX5, Karaf Karaf 3 with profiles, OSGi subsystem, etc Karaf Cellar cluster support (especially around DOSGi) Karaf Cave as default repository/registry Provide a complete pro console (leveraging the new Karaf WebConsole sub-project)
SMX5, from NMR to Camel Promote Camel as the premium solution for routing (replacement of the NMR) Refactor most interesting NMR features to be Camel oriented (audit, events, tracing, etc) Leverage Camel new features: support of async transactions, unified statistics, improvement of the ThreadPoolProfile for thread management, etc
SMX5, CXF Leverage new CXF features: Better OSGi/Karaf integration (new shell commands, etc), including config admin to configure CXF workqueues Better management capabilities Better performance especially around WS-Security Security: STS, WS-Trust support, JAX-RS security (OAuth 2, SAML, etc) Update to WS-RM 1.1 Update to use CXF WS-Notification
Sources Links – servicemix.apache.org – karaf.apache.org – camel.apache.org – cxf.apache.org – activemq.apache.org
Contact Jean-Baptiste (JB) Onofré Q&A