Author: chirino
Date: Thu Jan 4 15:12:53 2007
New Revision: 492807
URL: http://svn.apache.org/viewvc?view=rev&rev=492807
Log:
Latest export from confluence
Modified:
incubator/servicemix/site/hello-world-se.html
Modified: incubator/servicemix/site/hello-world-se.html
URL:
http://svn.apache.org/viewvc/incubator/servicemix/site/hello-world-se.html?view=diff&rev=492807&r1=492806&r2=492807
==============================================================================
--- incubator/servicemix/site/hello-world-se.html (original)
+++ incubator/servicemix/site/hello-world-se.html Thu Jan 4 15:12:53 2007
@@ -203,9 +203,6 @@
<P>The focus of this section is on the creation of a JBI component. For this
task, a <SPAN class="nobr"><A
href="http://maven.apache.org/guides/introduction/introduction-to-archetypes.html"
title="Visit page outside Confluence" rel="nofollow">Maven archetype<SUP><IMG
class="rendericon" src="http://goopen.org/confluence/images/icons/linkext7.gif"
height="0" width="0" align="absmiddle" alt="" border="0"></SUP></A></SPAN> will
be used to create a Maven project skeleton to house the component. Maven
archetypes are templates for Maven projects that jumpstart project creation via
the automation of repetitive tasks by following standard conventions. The
result of using an archetype to create a Maven project is a directory
structure, a <SPAN class="nobr"><A
href="http://maven.apache.org/guides/introduction/introduction-to-the-pom.html"
title="Visit page outside Confluence" rel="nofollow">Maven POM<SUP><IMG
class="rendericon" src="http://goopen.org/confluence/images/icons/linkext7.gi
f" height="0" width="0" align="absmiddle" alt="" border="0"></SUP></A></SPAN>
file and, depending on the archetype being used, sometimes Java objects and
JUnit tests. </P>
-<TABLE cellpadding="5" width="85%" cellspacing="8px" class="noteMacro"
border="0" align="center"><COLGROUP><COL width="24"><COL></COLGROUP><TR><TD
valign="top"><IMG
src="http://goopen.org/confluence/images/icons/emoticons/warning.gif"
width="16" height="16" align="absmiddle" alt="" border="0"></TD><TD>
-<P>As this text describes how to create a Hello World service engine and pack
it into a SU and SA, the project name is <TT>hello-world-se</TT> and each piece
of the SA puzzle are named using a similar pattern. For a given project, the
IDs and names shall be altered such that they describe the purpose or function
of the given piece of the SA.</P></TD></TR></TABLE>
-
<P>1) Create a directory named <TT>hello-world-smx</TT> and switch to that
directory: </P>
<DIV class="code"><DIV class="codeContent">
@@ -250,7 +247,7 @@
[INFO]
------------------------------------------------------------------------</P>
</DIV></DIV>
-<P>Again, Maven creates a directory using the <TT>artifactId</TT> provided
(printed in <FONT color="#009900">green</FONT> in the command and output).
Inside this directory resides the <TT>pom.xml</TT> and the <TT>src</TT>
directory. </P>
+<P>Again, Maven creates a directory using the <TT>artifactId</TT> provided
(printed in <FONT color="#009900">green</FONT> in the command and output) as
the directory name. Inside this directory resides the <TT>pom.xml</TT> and the
<TT>src</TT> directory. </P>
<TABLE cellpadding="5" width="85%" cellspacing="8px" class="noteMacro"
border="0" align="center"><COLGROUP><COL width="24"><COL></COLGROUP><TR><TD
valign="top"><IMG
src="http://goopen.org/confluence/images/icons/emoticons/warning.gif"
width="16" height="16" align="absmiddle" alt="" border="0"></TD><TD><B
class="strong">In case of a BUILD ERROR: Maven plugin version
requirement</B><BR>
<P>The maven-archetype-plugin <B>1.0-alpha4</B> or above is required for this
tutorial. When an older version is installed, a build error will occur. The
version of this plugin can be checked by verifying the name of the following
directories: </P>
@@ -377,11 +374,14 @@
}</PRE>
</DIV></DIV>
-<P>The implementation of this method was provided by the
servicemix-service-engine Maven archetype and is shown in the code snippet
above. Because the archetype can be used to create a consumer or a provider,
this method is very generic and contains a conditional block for handling
either a consumer or a provider role. But this method will still require us to
make the decision of which style of <SPAN class="nobr"><A
href="http://servicemix.org/site/5-jbi.html#5.JBI-ServiceinvocationandMEP"
title="Visit page outside Confluence" rel="nofollow">Message Exchange Pattern
(MEP)<SUP><IMG class="rendericon"
src="http://goopen.org/confluence/images/icons/linkext7.gif" height="0"
width="0" align="absmiddle" alt="" border="0"></SUP></A></SPAN> to handle as
well. In the case of the Hello World SE, we know that it is a provider so it
will need to send a return message. Therefore it will need to handle an In-Out
MEP. </P>
+<P>The implementation of this method was provided by the
servicemix-service-engine Maven archetype and is shown in the code snippet
above. Because the archetype can be used to create a consumer or a provider
service engine, this method is very generic and contains a conditional block
for handling either a consumer or a provider role. But this method will still
require us to make the decision of which style of <SPAN class="nobr"><A
href="http://servicemix.org/site/5-jbi.html#5.JBI-ServiceinvocationandMEP"
title="Visit page outside Confluence" rel="nofollow">Message Exchange Pattern
(MEP)<SUP><IMG class="rendericon"
src="http://goopen.org/confluence/images/icons/linkext7.gif" height="0"
width="0" align="absmiddle" alt="" border="0"></SUP></A></SPAN> to handle as
well. In the case of the Hello World SE, we know that it is a provider so it
will need to send a return message. Therefore it will need to handle an In-Out
MEP. </P>
+
+<P>So instead of having <TT>MyEndpoint</TT> extend the very basic
<TT>Endpoint</TT> class, we're going to extend a different class that is
specifically for provider endpoints named <BR>
+<SPAN class="nobr"><A
href="http://fisheye3.cenqua.com/browse/servicemix/trunk/common/servicemix-common/src/main/java/org/apache/servicemix/common/endpoints/ProviderEndpoint.java?r=trunk"
title="Visit page outside Confluence"
rel="nofollow"><TT>ProviderEndpoint</TT><SUP><IMG class="rendericon"
src="http://goopen.org/confluence/images/icons/linkext7.gif" height="0"
width="0" align="absmiddle" alt="" border="0"></SUP></A></SPAN>. </P>
<P><IMG src="hello-world-se.data/simple_endpoint_hierarchy.png"
align="absmiddle" border="0"></P>
-<P>Instead of having <TT>MyEndpoint</TT> extend the very basic
<TT>Endpoint</TT> class, we're going to extend a different class that is
specifically for provider endpoints named <SPAN class="nobr"><A
href="http://fisheye3.cenqua.com/browse/servicemix/trunk/common/servicemix-common/src/main/java/org/apache/servicemix/common/endpoints/ProviderEndpoint.java?r=trunk"
title="Visit page outside Confluence"
rel="nofollow"><TT>ProviderEndpoint</TT><SUP><IMG class="rendericon"
src="http://goopen.org/confluence/images/icons/linkext7.gif" height="0"
width="0" align="absmiddle" alt="" border="0"></SUP></A></SPAN>. Notice the
diagram above showing the class hierarchy of <TT>Endpoint</TT>. The
<TT>ProviderEndpoint</TT> supplies some additional conveniences for provider
components and will make the job of implementing <TT>MyEndpoint</TT> as a
provider much easier. So change the definition of <TT>MyEndpoint</TT> from
this: </P>
+<P>Notice the diagram above showing the class hierarchy of <TT>Endpoint</TT>.
The <TT>ProviderEndpoint</TT> supplies some additional conveniences for
provider components and will make the job of implementing <TT>MyEndpoint</TT>
as a provider much easier. So change the definition of <TT>MyEndpoint</TT> from
this: </P>
<DIV class="code"><DIV class="codeContent">
<PRE class="code-java"><SPAN class="code-keyword">public</SPAN> class
MyEndpoint <SPAN class="code-keyword">extends</SPAN> Endpoint <SPAN
class="code-keyword">implements</SPAN> ExchangeProcessor</PRE>
@@ -393,7 +393,7 @@
<PRE class="code-java"><SPAN class="code-keyword">public</SPAN> class
MyEndpoint <SPAN class="code-keyword">extends</SPAN> ProviderEndpoint <SPAN
class="code-keyword">implements</SPAN> ExchangeProcessor</PRE>
</DIV></DIV>
-<P>Because the <TT>ProviderEndpoint.process()</TT> method already handles an
In-Out MEP, <TT>MyEndpoint</TT> will simply need to override the
<TT>ProviderEndpoint.processInOut()</TT> method. Below is the content for this
method: </P>
+<P>Because the <TT>ProviderEndpoint.process()</TT> method already handles an
In-Out MEP, <TT>MyEndpoint</TT> will simply need to override the
<TT>ProviderEndpoint.processInOut()</TT> method. Below is the content for
implementing this method: </P>
<DIV class="code"><DIV class="codeContent">
<PRE class="code-java"><SPAN class="code-keyword">protected</SPAN> void
processInOut(MessageExchange exchange, NormalizedMessage in, NormalizedMessage
out) <SPAN class="code-keyword">throws</SPAN> Exception {
@@ -403,9 +403,11 @@
}</PRE>
</DIV></DIV>
+<P>This method is the logic for the Hello World SE. We're not doing
anything complex here at all in order to keep this tutorial very simple. Now
it's time to test the component. </P>
+
<H3><A name="HelloWorld-SE-TestingtheHelloWorldSE"></A>Testing the Hello World
SE</H3>
-<P>Thanks to the archetype, testing the component is very easy because it
already created a test. All that is necessary is to change the string being
sent by the client code. In the <TT>src/test/java</TT> directory is the
<TT>org.apache.servicemix.samples.helloworld.se.MySpringComponentTest</TT>
test. Simple open this test and change line #36 from this: </P>
+<P>Thanks to the archetype, testing the component is very easy because it
already created a test. The only change we'll make is to the string being
sent by the client code. In the <TT>src/test/java</TT> directory is the
<TT>org.apache.servicemix.samples.helloworld.se.MySpringComponentTest</TT>
test. Simply open this test and change line #36 from this: </P>
<DIV class="code"><DIV class="codeContent">
<PRE class="code-java">me.getInMessage().setContent(<SPAN
class="code-keyword">new</SPAN> StringSource(<SPAN
class="code-quote">"<hello>world</hello>"</SPAN>));</PRE>
@@ -488,7 +490,7 @@
[INFO]
------------------------------------------------------------------------</P>
</DIV></DIV>
-<P>Notice that not only do we see that the build was successful, but notice
the bold text of the message that was printed. If you see this, you just wrote
your a JBI component and tested it successfully. </P>
+<P>Notice that not only do we see that the build was successful, but also note
the bold text of the message that was printed (<B><hello>Hello World!
Message [<hello>Ski Colorado!</hello>] contains [28]
bytes.</hello></B>). This is the message we were expecting to be output.
If you see this, you just wrote a JBI service engine component and tested it
successfully. </P>
<HR>
@@ -838,7 +840,7 @@
<DIV id="site-footer">
Added by <A
href="http://goopen.org/confluence/users/viewuserprofile.action?username=georg_dembowski">Georg
Dembowski</A>,
last edited by <A
href="http://goopen.org/confluence/users/viewuserprofile.action?username=bsnyder">Bruce
Snyder</A> on Jan 06, 2007
- (<A
href="http://goopen.org/confluence/pages/diffpages.action?pageId=13823&originalId=15249">view
change</A>)
+ (<A
href="http://goopen.org/confluence/pages/diffpages.action?pageId=13823&originalId=15250">view
change</A>)
(<A
href="http://goopen.org/confluence/pages/editpage.action?pageId=13823">edit
page</A>)
</DIV>