Author: gertv
Date: Fri Jun 25 01:11:16 2010
New Revision: 957773

URL: http://svn.apache.org/viewvc?rev=957773&view=rev
Log:
Finishing Camel deployment options, adding tech selection guide and some NMR 
info

Added:
    servicemix/documentation/trunk/docs/manual/src/confluence/getting_started/
    
servicemix/documentation/trunk/docs/manual/src/confluence/getting_started/technology_selection.wiki
    servicemix/documentation/trunk/docs/manual/src/confluence/nmr/
    servicemix/documentation/trunk/docs/manual/src/confluence/nmr/camel-nmr.wiki
    
servicemix/documentation/trunk/docs/manual/src/confluence/nmr/event-listeners.wiki
Modified:
    
servicemix/documentation/trunk/docs/manual/src/confluence/camel/deployment.wiki
    servicemix/documentation/trunk/docs/manual/src/docbkx/manual.xml

Modified: 
servicemix/documentation/trunk/docs/manual/src/confluence/camel/deployment.wiki
URL: 
http://svn.apache.org/viewvc/servicemix/documentation/trunk/docs/manual/src/confluence/camel/deployment.wiki?rev=957773&r1=957772&r2=957773&view=diff
==============================================================================
--- 
servicemix/documentation/trunk/docs/manual/src/confluence/camel/deployment.wiki 
(original)
+++ 
servicemix/documentation/trunk/docs/manual/src/confluence/camel/deployment.wiki 
Fri Jun 25 01:11:16 2010
@@ -1,8 +1,114 @@
-h1. Deploying Camel routes
-There are a few different ways to deploy Camel routes on ServiceMix 4:
+h1. Deployment options
+There are a few different ways to deploy Camel routes on ServiceMix 
${servicemx.version}:
 * deploy routes in a plain Spring XML file
 * deploy a bundle containing
 *# routes defined in a Spring XML file
 *# routes defined in the Java or Scala DSL
 
-  
\ No newline at end of file
+Camel routes can also be deployed as part of a JBI SA, allowing you use Camel 
for routing between JBI endpoints - this option will be discussed later when we 
are talking about using JBI inside ServiceMix 4.
+
+h2. Deploy as a plain Spring XML file
+ServiceMix ${servicemix.version} supports the deployment of plain Spring XML 
files, automatically creating and starting the Spring ApplicationContext from 
the XML file.
+
+In order to leverage this feature to create and start Camel routes, drop a 
file with this syntax in the {{$SERVICEMIX_HOME/deploy}} folder:
+{code:lang=xml}
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans";
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+       xmlns:camel="http://camel.apache.org/schema/spring";
+       xsi:schemaLocation="
+          http://www.springframework.org/schema/beans
+            http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
+          http://camel.apache.org/schema/spring
+            
http://camel.apache.org/schema/spring/camel-spring-${camel-version}.xsd";>
+
+  <camelContext xmlns="http://camel.apache.org/schema/spring";>
+    <!-- add Camel routes, interceptors,... here --> 
+  </camelContext>
+
+</beans>
+{code}
+
+h3. An example
+Just create a new XML file in the deploy folder with the code below to start a 
route to copy files from one directory to another.
+{code:lang=xml}
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans";
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+       xmlns:camel="http://camel.apache.org/schema/spring";
+       xsi:schemaLocation="
+          http://www.springframework.org/schema/beans
+            http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
+          http://camel.apache.org/schema/spring
+            
http://camel.apache.org/schema/spring/camel-spring-${camel-version}.xsd";>
+
+  <camelContext xmlns="http://camel.apache.org/schema/spring";>
+    <route>
+      <from uri="file:input"/>
+      <log message="Copying ${file:name} to the output directory"/>
+      <to uri="file:output"/>
+    </route>
+  </camelContext>
+
+</beans>
+{code}
+
+h2. Deploy as an OSGi bundle
+The Spring XML file can also be deployed as part of a bundle by adding it to 
the {{META-INF/spring}} folder.  When the bundle is being started, the Spring 
ApplicationContext is created and started as well.  This kind of deployment 
also allows using Java or Scala Routebuilders for defining the routes.
+
+h3. Using the XML file to define the routes
+The route can be defined directly in the XML file you add to 
{{META-INF/spring}}, similar to the example shown before.
+
+h3. Using a Java or Scala RouteBuilder
+When using a Java (or Scala) RouteBuilder to define your Camel routes, the 
Spring XML file refers to the packages containing the RouteBuilder classes:
+{code:lang=xml}
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans";
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+       xmlns:camel="http://camel.apache.org/schema/spring";
+       xsi:schemaLocation="
+          http://www.springframework.org/schema/beans
+            http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
+          http://camel.apache.org/schema/spring
+            
http://camel.apache.org/schema/spring/camel-spring-${camel-version}.xsd";>
+
+  <camelContext xmlns="http://camel.apache.org/schema/spring";>
+    <package>org.apache.servicemix.manual.camel</package>
+  </camelContext>
+
+</beans>
+{code}
+
+The matching Java RouteBuilder class could look like this
+{code:lang=java}
+package org.apache.servicemix.manual.camel;
+
+import org.apache.camel.builder.RouteBuilder;
+
+public class MyRouteBuilder extends RouteBuilder {
+
+  public void configure() {
+    from("file:input")
+      .log("Copying ${file:name} to the output directory")
+      .to("file:output");
+  }
+
+}
+{code}
+
+A similar Scala RouteBuilder could look like
+{code:lang=scala}
+package org.apache.servicemix.manual.camel;
+
+import org.apache.camel.scala.dsl.builder.RouteBuilder;
+
+class MyRouteBuilder extends RouteBuilder {
+
+  "file:input" ==> {
+    log("Copying ${file:name} to the output directory")
+    to("file:output")
+  }
+
+}
+{code}
+

Added: 
servicemix/documentation/trunk/docs/manual/src/confluence/getting_started/technology_selection.wiki
URL: 
http://svn.apache.org/viewvc/servicemix/documentation/trunk/docs/manual/src/confluence/getting_started/technology_selection.wiki?rev=957773&view=auto
==============================================================================
--- 
servicemix/documentation/trunk/docs/manual/src/confluence/getting_started/technology_selection.wiki
 (added)
+++ 
servicemix/documentation/trunk/docs/manual/src/confluence/getting_started/technology_selection.wiki
 Fri Jun 25 01:11:16 2010
@@ -0,0 +1,34 @@
+h1. Technology selection guide
+ServiceMix 4 offers a set of different messaging and integration technologies:
+* ActiveMQ
+* Camel
+* CXF
+* JBI
+* NMR
+
+Depending on the solution you're building, you want to select one or more of 
these technologies.  Below are some guidelines to help you pick the right mix 
for your problem.
+
+h2. When to use Camel?
+For any integration scenario, we recommend to start as simple as possible.  
Camel allows you to build routes for integration scenario's quickly and 
efficiently.  You can deploy these routes directly on ServiceMix by deploying 
the plain Spring XML route or by packaging the route in an OSGi bundle.
+
+As you need more (advanced) features, start combining Camel with ActiveMQ, CXF 
and/or the NMR
+
+h2. When to use ActiveMQ?
+ActiveMQ is a JMS message broker, featuring support for clustering, pluggable 
persistence mechanism, master-slave configuration for failover, ...
+
+ServiceMix 4 includes an instance of the ActiveMQ broker, which can be 
combined with Camel to provide easy-to-use message persistence and reliable 
messaging.
+
+After setting up multiple instances of ActiveMQ (or ServiceMix 4) on the 
network, you can configure ActiveMQ clustering or master-slave mode to allow 
for a more reliable and scalable set-up.
+
+h2. When to use CXF?
+CXF is an open-source services framework that you can use to suit your WS-* 
standards integration needs.  It allows you to use common programming APIs like 
JAX-RS or JAX-WS for building your own services and to expose them to the 
outside world.
+
+You can use CXF from within your Camel routes with the Camel CXF component.
+
+h2. When to use NMR?
+The NMR provides the basic ESB features for ServiceMix 4.  You can use it to 
connect multiple camel routes in a lightweight way.  It can also be used as a 
common transport on which you can add container-level auditing by registering 
your own ExchangeListener implementation.
+
+h2. When to use JBI?
+If you want to build a full-blown SOA solution using BPEL, ServiceMix includes 
a version of Apache ODE that integrates well with JBI messaging.  Because we 
still support JBI 1.0 on ServiceMix, you can also move your existing JBI 
artifacts from ServiceMix 3 to the new container with no/minimal changes.
+
+

Added: 
servicemix/documentation/trunk/docs/manual/src/confluence/nmr/camel-nmr.wiki
URL: 
http://svn.apache.org/viewvc/servicemix/documentation/trunk/docs/manual/src/confluence/nmr/camel-nmr.wiki?rev=957773&view=auto
==============================================================================
--- 
servicemix/documentation/trunk/docs/manual/src/confluence/nmr/camel-nmr.wiki 
(added)
+++ 
servicemix/documentation/trunk/docs/manual/src/confluence/nmr/camel-nmr.wiki 
Fri Jun 25 01:11:16 2010
@@ -0,0 +1,54 @@
+h1. Camel NMR Component
+
+The Camel NMR component is an adapter to the Normalized Message Router (NMR) 
in ServiceMix, which is intended for use by Camel applications deployed 
directly into the OSGi container.
+
+h2. Installing
+
+In order to be able to use this component, you first have to define it in  
your Spring configuration file ({{META-INF/spring/*.xml}}) by adding the 
following {{bean}}:
+
+{code}
+<beans xmlns:osgi="http://www.springframework.org/schema/osgi"; ... >
+    ...
+    <bean id="nmr" class="org.apache.servicemix.camel.nmr.ServiceMixComponent">
+        <property name="nmr">
+            <osgi:reference interface="org.apache.servicemix.nmr.api.NMR" />
+        </property>
+    </bean>
+    ...
+</beans>
+{code}
+
+h2. NMR consumer and producer endpoints
+
+The following code:
+
+{code}
+from("nmr:MyServiceEndpoint")
+{code}
+
+Automatically exposes a new endpoint to the bus with endpoint name 
{{MyServiceEndpoint}} (see [#URI-format]).
+
+When an NMR endpoint appears at the end of a route, for example:
+
+{code}
+to("nmr:MyServiceEndpoint")
+{code}
+
+The messages sent by this producer endpoint are sent to the already deployed 
JBI endpoint.
+
+h2. URI format
+
+{code}
+nmr:endpointName
+{code}
+
+h4. URI Options
+- *{{synchronous}}* (defaults to {{false}}) ::  When this is set to {{true}} 
on a consumer endpoint, an incoming, synchronous NMR Exchange will be handled 
on the sender's thread instead of being handled on a new thread of the NMR 
endpoint's thread pool |
+
+
+h3. Examples
+
+{code}
+from("nmr:MyServiceEndpoint")
+from("nmr:MyServiceEndpoint?synchronous=true").to("nmr:AnotherEndpoint")
+{code}

Added: 
servicemix/documentation/trunk/docs/manual/src/confluence/nmr/event-listeners.wiki
URL: 
http://svn.apache.org/viewvc/servicemix/documentation/trunk/docs/manual/src/confluence/nmr/event-listeners.wiki?rev=957773&view=auto
==============================================================================
--- 
servicemix/documentation/trunk/docs/manual/src/confluence/nmr/event-listeners.wiki
 (added)
+++ 
servicemix/documentation/trunk/docs/manual/src/confluence/nmr/event-listeners.wiki
 Fri Jun 25 01:11:16 2010
@@ -0,0 +1,89 @@
+h1. Event listeners
+
+The NMR has a rich event API that can be used to receive all sort of 
notifications about what's happening in the NMR.
+Currently, two types of listeners are defined:
+- {{org.apache.servicemix.nmr.api.event.EndpointListener}}
+- {{org.apache.servicemix.nmr.api.event.ExchangeListener}}
+
+h2. Endpoint Listener
+
+h3. API
+The {{EndpointListener}} defined two methods:
+- {{endpointRegistered}} is called whenever a new endpoint is registered with 
the NMR
+- {{endpointUnregistered}} is called whenever an existing endpoint is 
unregistered
+
+{code:lang=java}
+public interface EndpointListener {
+    void endpointRegistered(InternalEndpoint endpoint);
+    void endpointUnregistered(InternalEndpoint endpoint);
+}
+{code}
+
+h3. Registering {{EndpointListener}}
+An {{EndpointListener}} can be registered directly with the NMR:
+{code:lang=java}
+nmr.getListenerRegistry().register(listener, null);
+{code}
+
+The recommended way of registering an {{EndpointListener}} is by adding it to 
the OSGi Service Registry, e.g. using a Blueprint XML file:
+{code:lang=xml}
+<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0";
+           
xmlns:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.0.0";>
+
+    <bean id="myListener" class="..."/>
+
+    <service ref="myListener">
+      <interfaces>
+        <value>org.apache.servicemix.nmr.api.event.EndpointListener</value>
+        <value>org.apache.servicemix.nmr.api.event.Listener</value>
+      </interfaces>
+    </service>
+
+</blueprint>
+{code}
+
+h3. Example
+An example of using an endpoint listener is shipped as part of the ServiceMix 
distribution.  It can be found in the {{examples/interceptors/endpoint}} 
directory.
+
+h2. ExchangeListener
+
+h3. API
+The {{ExchangeListener}} defined two methods:
+- {{exchangeSent}} is called whenever an exchange is sent to the NMR for 
delivery
+- {{exchangeDelivered}} is called whenever an exchange is being delivered to 
an endpoint
+- {{exchangeFailed}} is called when a failure occurs while handling an exchange
+
+
+{code:lang=java}
+public interface ExchangeListener {
+    void exchangeSent(Exchange exchange);
+    void exchangeDelivered(Exchange exchange);
+    void exchangeFailed(Exchange exchange);
+}
+{code}
+
+h3. Registering {{ExchangeListener}}
+An {{ExchangeListener}} can be registered directly with the NMR:
+{code:lang=java}
+nmr.getListenerRegistry().register(listener, null);
+{code}
+
+The recommended way of registering an {{ExchangeListener}} is by adding it to 
the OSGi Service Registry, e.g. using a Blueprint XML file:
+{code:lang=xml}
+<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0";
+           
xmlns:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.0.0";>
+
+    <bean id="myListener" class="..."/>
+
+    <service ref="myListener">
+      <interfaces>
+        <value>org.apache.servicemix.nmr.api.event.ExchangeListener</value>
+        <value>org.apache.servicemix.nmr.api.event.Listener</value>
+      </interfaces>
+    </service>
+
+</blueprint>
+{code}
+
+h3. Example
+An example of using an exchange listener is shipped as part of the ServiceMix 
distribution.  It can be found in the {{examples/interceptors/exchange}} 
directory.
\ No newline at end of file

Modified: servicemix/documentation/trunk/docs/manual/src/docbkx/manual.xml
URL: 
http://svn.apache.org/viewvc/servicemix/documentation/trunk/docs/manual/src/docbkx/manual.xml?rev=957773&r1=957772&r2=957773&view=diff
==============================================================================
--- servicemix/documentation/trunk/docs/manual/src/docbkx/manual.xml (original)
+++ servicemix/documentation/trunk/docs/manual/src/docbkx/manual.xml Fri Jun 25 
01:11:16 2010
@@ -101,6 +101,8 @@
 
         <!-- Chapter on installation and build -->
         <xi:include href="installation.xml"/>
+
+        <xi:include href="getting_started/technology_selection.wiki.xml"/>
     </part>
 
     <part>
@@ -119,6 +121,9 @@
 
     <part>
         <title>NMR</title>
+
+        <xi:include href="nmr/camel-nmr.wiki.xml"/>
+        <xi:include href="nmr/event-listeners.wiki.xml"/>
     </part>
 
     <part>


Reply via email to