<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US">
  <title>SOA In the City - Home</title>
  <id>tag:blog.pepperdust.org,2008:mephisto/</id>
  <generator version="0.7.3" uri="http://mephistoblog.com">Mephisto Noh-Varr</generator>
  
  <link href="http://blog.pepperdust.org/" rel="alternate" type="text/html" />
  <updated>2008-11-19T23:05:36Z</updated>
  <link rel="self" href="http://feeds.feedburner.com/SoaInTheCity" type="application/atom+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><entry xml:base="http://blog.pepperdust.org/">
    <author>
      <name>dave</name>
    </author>
    <id>tag:blog.pepperdust.org,2008-11-19:130</id>
    <published>2008-11-19T22:57:00Z</published>
    <updated>2008-11-19T23:05:36Z</updated>
    <link href="http://blog.pepperdust.org/2008/11/19/quick-fuse-tooling-tip-org-codehaus-plexus-util-fileutils-filterwrapper" rel="alternate" type="text/html" />
    <title>Quick Fuse Tooling Tip (org/codehaus/plexus/util/FileUtils$FilterWrapper)</title>
<content type="html">
            &lt;p&gt;
If your trying to create a ServiceMix CXF Service Unit using the &lt;a href="http://fusesource.com/wiki/display/ProdInfo/FUSE+Eclipse+Tools"&gt;Fuse 1.4.2 Tooling&lt;/a&gt; and you hit the following error trying to generate sources:
&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;11/19/08 5:22:23 PM EST: resources:resources
11/19/08 5:22:23 PM EST: ERROR reactor-execute : /home/davestanley/Work/eclipse/cxf-se/TestTwo : org/codehaus/plexus/util/FileUtils$FilterWrapper&lt;/code&gt;&lt;/pre&gt;

The workaround is to add  the maven-resources-plugin to your projects pom.xml. 

&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt; &lt;span class="ta"&gt;&amp;lt;plugin&amp;gt;&lt;/span&gt;                &lt;tt&gt;
&lt;/tt&gt;           &lt;span class="ta"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;maven-resources-plugin&lt;span class="ta"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;           &lt;span class="ta"&gt;&amp;lt;version&amp;gt;&lt;/span&gt;2.2&lt;span class="ta"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt; &lt;span class="ta"&gt;&amp;lt;/plugin&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
          </content>  </entry>
  <entry xml:base="http://blog.pepperdust.org/">
    <author>
      <name>dave</name>
    </author>
    <id>tag:blog.pepperdust.org,2008-09-03:95</id>
    <published>2008-09-03T22:29:00Z</published>
    <updated>2008-09-03T22:42:30Z</updated>
    <category term="Java" />
    <category term="Open Source" />
    <link href="http://blog.pepperdust.org/2008/9/3/camel-hibernate-now-has-a-mvn-repo" rel="alternate" type="text/html" />
    <title>camel-hibernate now has a mvn repo</title>
<content type="html">
            &lt;p&gt;
A maven repo has been added to the &lt;a href="http://code.google.com/p/camel-extra/wiki/AddingMavenRepo"&gt;camel-extra google code project&lt;/a&gt;, so its no longer necessary to build the camel-hibernate project from scratch. Yay!
&lt;/p&gt;

In order to add the camel-hibernate plugin as a dependency of your &lt;a href="http://activemq.apache.org/camel/"&gt;camel&lt;/a&gt; project you just need to add the repo:

&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;5&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;span class="ta"&gt;&amp;lt;repository&amp;gt;&lt;/span&gt;  &lt;tt&gt;
&lt;/tt&gt;  &lt;span class="ta"&gt;&amp;lt;id&amp;gt;&lt;/span&gt;camel-extra-release&lt;span class="ta"&gt;&amp;lt;/id&amp;gt;&lt;/span&gt;  &lt;tt&gt;
&lt;/tt&gt;  &lt;span class="ta"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;Camel Extra Maven repository of releases&lt;span class="ta"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;  &lt;tt&gt;
&lt;/tt&gt;  &lt;span class="ta"&gt;&amp;lt;url&amp;gt;&lt;/span&gt;http://camel-extra.googlecode.com/svn/maven2/releases&lt;span class="ta"&gt;&amp;lt;/url&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="ta"&gt;&amp;lt;/repository&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


Then add the dependency for the hibernate component:

&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;5&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;span class="ta"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;  &lt;tt&gt;
&lt;/tt&gt;   &lt;span class="ta"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.apache.camel.extra&lt;span class="ta"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;  &lt;tt&gt;
&lt;/tt&gt;   &lt;span class="ta"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;camel-hibernate&lt;span class="ta"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;  &lt;tt&gt;
&lt;/tt&gt;   &lt;span class="ta"&gt;&amp;lt;version&amp;gt;&lt;/span&gt;1.0&lt;span class="ta"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="ta"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


&lt;p&gt;
(Thanks Joe for the heads up)
&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.pepperdust.org/">
    <author>
      <name>dave</name>
    </author>
    <id>tag:blog.pepperdust.org,2008-05-22:63</id>
    <published>2008-05-22T02:21:00Z</published>
    <updated>2008-05-22T02:22:08Z</updated>
    <category term="Java" />
    <category term="Open Source" />
    <link href="http://blog.pepperdust.org/2008/5/22/tuning-message-bus-performance-in-servicemix" rel="alternate" type="text/html" />
    <title>Tuning Message Bus performance in Servicemix</title>
<content type="html">
            &lt;p&gt;
How fast you can send messages through ServiceMix is highly dependent on how the embedded ActiveMQ broker within ServiceMix is configured. This is because the ServiceMix NMR uses ActiveMQ as its messaging engine, so choosing the correct &lt;a href="http://blog.pepperdust.org/2008/5/14/using-the-spring-based-jms-endpoints-in-servicemix"&gt;connection factories&lt;/a&gt; and persistenceAdapter can give you easy gains in performance.
&lt;/p&gt;

&lt;b&gt;AMQ Message Store&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;

&lt;p&gt;
In ActiveMQ 5.0, a new high performance journaling persistence adapter was introduced called the &lt;a href="http://activemq.apache.org/amq-message-store.html"&gt;AMQ Message Store&lt;/a&gt;. 
&lt;/p&gt;
 
To enable it, edit &amp;lt;servicemix&gt;/conf/activemq.xml and modify the xbean config, adding the amq:persistenceAdapter element.&lt;br /&gt;

&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;5&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt; &lt;span class="ta"&gt;&amp;lt;amq:persistenceAdapter&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;         &lt;span class="c"&gt;&amp;lt;!-- Goodbye journaledJDBC --&amp;gt;&lt;/span&gt; &lt;tt&gt;
&lt;/tt&gt;         &lt;span class="c"&gt;&amp;lt;!--amq:journaledJDBC journalLogFiles=&amp;quot;5&amp;quot; dataDirectory=&amp;quot;./data/amq&amp;quot;/ --&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;         &lt;span class="c"&gt;&amp;lt;!-- Hello AMQ Message Store --&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;         &lt;span class="ta"&gt;&amp;lt;amq:amqPersistenceAdapter&lt;/span&gt; &lt;span class="an"&gt;directory&lt;/span&gt;=&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;file://./data/amq&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class="ta"&gt;/&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt; &lt;span class="ta"&gt;&amp;lt;/amq:persistenceAdapter&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;



&lt;p&gt;
And by the numbers .. &lt;br /&gt;&lt;br /&gt;
&lt;b&gt;Example Flow:&lt;/b&gt; Jms consumer -&gt; JMS provider(w/Marshaller) -&gt; EIP pipeline -&gt; Bean -&gt; JMS Provider
&lt;b&gt;MessageCount:&lt;/b&gt; 10000 &lt;br /&gt;
&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;   With JournaledJDBC:

   [java] Overall time: 137701 ms
   [java] Messages per sec: 7.262111386264443
   [java] 
   [java] Time: 139.603
   [java]
   [java] OK (1 test)&lt;/code&gt;&lt;/pre&gt;
   


&lt;pre&gt;&lt;code&gt;   With AMQ Message Store:

   [java] Overall time: 20511 ms
   [java] Messages per sec: 48.75432694651651
   [java]
   [java] Time: 23.556
   [java]
   [java] OK (1 test)&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;
&lt;b&gt;Two additional steps:&lt;/b&gt; &lt;br /&gt;&lt;br /&gt;

1) The current version of Servicemix trunk is using 4.1.1 of ActiveMQ, so if you want to build a ServiceMix distribution that contains ActiveMQ 5, you need to edit /trunk/pom.xml:
&lt;/p&gt;

&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;/trunk/pom.xml&lt;tt&gt;
&lt;/tt&gt;-        &lt;span class="ta"&gt;&amp;lt;activemq-version&amp;gt;&lt;/span&gt;4.1.1&lt;span class="ta"&gt;&amp;lt;/activemq-version&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;+        &lt;span class="ta"&gt;&amp;lt;activemq-version&amp;gt;&lt;/span&gt;5.1.0&lt;span class="ta"&gt;&amp;lt;/activemq-version&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


&lt;p&gt;
2) Once the activemq-version is updated,  the ra namespace in jndi.xml needs to be updated too - as this changed between AMQ versions.
&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;/distributions/apache-servicemix/src/main/release/conf/jndi.xml
-       xmlns:amqra="http://activemq.org/ra/1.0"
+       xmlns:amqra="http://activemq.apache.org/schema/ra"&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;
If your using &lt;a href="http://open.iona.com/downloads"&gt;Fuse ESB&lt;/a&gt;, it has a 5.x version of the Fuse Message Broker included, so the XML configuration change should be all thats required.
&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.pepperdust.org/">
    <author>
      <name>dave</name>
    </author>
    <id>tag:blog.pepperdust.org,2008-05-19:61</id>
    <published>2008-05-19T21:17:00Z</published>
    <updated>2008-05-19T21:27:44Z</updated>
    <link href="http://blog.pepperdust.org/2008/5/19/high-performance-integration-between-iphone-and-the-chumby" rel="alternate" type="text/html" />
    <title>High performance integration between an iPhone and the Chumby</title>
<content type="html">
            &amp;lt;object height="355" width="425"&gt;&amp;lt;param name="movie" value="http://www.youtube.com/v/rq9KEe6jhB0&amp;hl=en"&gt;&amp;lt;/param&gt;&amp;lt;param name="wmode" value="transparent"&gt;&amp;lt;/param&gt;&amp;lt;embed type="application/x-shockwave-flash" src="http://www.youtube.com/v/rq9KEe6jhB0&amp;hl=en" height="355" wmode="transparent" width="425"&gt;&amp;lt;/embed&gt;&amp;lt;/object&gt;

&lt;p&gt;
This &lt;a href="http://www.youtube.com/watch?v=rq9KEe6jhB0"&gt;Artix/E demo&lt;/a&gt; is pretty cool.  
&lt;/p&gt;

&lt;p&gt;
An iPhone is shown using &lt;a href="http://www.iona.com"&gt;Artix/E&lt;a&gt; to talk to a Chumby. The accelerometer data from the iPhone is streamed over the wire to the chumby's chumball widget. 
&lt;/p&gt;

&lt;p&gt;
Artix/E's job here was to provide the low level infrastructure that allows both devices to seamlessly talk to each other, the main highlights being:
&lt;/p&gt;

- Very lightweight/small footprint for embedded devices.&lt;br /&gt;
- Provides a contract based services framework.&lt;br /&gt; 
- High performance transport, so good for applications with time sensistive data.&lt;br /&gt;
- Cross platform &amp; portable.&lt;br /&gt;
          </content>  </entry>
  <entry xml:base="http://blog.pepperdust.org/">
    <author>
      <name>dave</name>
    </author>
    <id>tag:blog.pepperdust.org,2008-05-16:60</id>
    <published>2008-05-16T16:36:00Z</published>
    <updated>2008-05-16T16:37:31Z</updated>
    <category term="Java" />
    <category term="Open Source" />
    <link href="http://blog.pepperdust.org/2008/5/16/deciphering-a-servicemix-service-assembly-build-error" rel="alternate" type="text/html" />
    <title>Deciphering a Servicemix Service Assembly build error</title>
<content type="html">
            &lt;pre&gt;&lt;code&gt;[INFO] The service unit my-jms-consumer-su does not have a dependency which is packaged as a jbi-component or a project property 'componentName'&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;
If you see the above error when trying to build your servicemix service assembly, the
trick is to look at the pom.xml for the component with the problem. In this case the ServiceMix SU is'my-jms-consumer-su'. 
&lt;/p&gt;

In order to fix the Service Assembly build error I added the componentName to the SU's pom.xml below properties section, so

&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;        &lt;span class="ta"&gt;&amp;lt;properties&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;                &lt;span class="ta"&gt;&amp;lt;servicemix-version&amp;gt;&lt;/span&gt;3.3.1.0-fuse&lt;span class="ta"&gt;&amp;lt;/servicemix-version&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;        &lt;span class="ta"&gt;&amp;lt;/properties&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


became:

&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;        &lt;span class="ta"&gt;&amp;lt;properties&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;                &lt;span class="ta"&gt;&amp;lt;servicemix-version&amp;gt;&lt;/span&gt;3.3.1.0-fuse&lt;span class="ta"&gt;&amp;lt;/servicemix-version&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;                &lt;span class="ta"&gt;&amp;lt;componentName&amp;gt;&lt;/span&gt;servicemix-jms&lt;span class="ta"&gt;&amp;lt;/componentName&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;        &lt;span class="ta"&gt;&amp;lt;/properties&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


&lt;p&gt;
This problem only tends to occur when you have multiple su's within the assembly that depend on the same servicemix component (e.g. servicemix-jms). Make sure you add the componentName to all of the Service Unit poms.xml's that use that component. 

&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.pepperdust.org/">
    <author>
      <name>dave</name>
    </author>
    <id>tag:blog.pepperdust.org,2008-05-14:55</id>
    <published>2008-05-14T21:07:00Z</published>
    <updated>2008-05-14T21:13:20Z</updated>
    <category term="Java" />
    <category term="Open Source" />
    <link href="http://blog.pepperdust.org/2008/5/14/using-the-spring-based-jms-endpoints-in-servicemix" rel="alternate" type="text/html" />
    <title>Using the Spring based JMS Endpoints in Servicemix</title>
<content type="html">
            &lt;p&gt;
I've been running performance tests with &lt;a href="http://open.iona.com/downloads"&gt;Fuse ESB 3.3.1&lt;/a&gt; and the spring based JMS endpoints over the last day or two. 
&lt;/p&gt;

&lt;p&gt;
One gotcha I've seen &lt;a href="http://activemq.apache.org/jmstemplate-gotchas.html"&gt;mentioned before&lt;/a&gt; with ActiveMQ is on the producer side you need to use a PooledConnectionFactory when using 
springs jmsTemplate. The same applies when using the Servicemix &lt;a href="http://servicemix.apache.org/servicemix-jms-new-endpoints.html"&gt;jms:provider&lt;/a&gt; endpoint (as 
its using jmsTemplate under the covers).
&lt;/p&gt;

If your jms provider configuration looks similar to this:

&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;5&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt; &lt;span class="ta"&gt;&amp;lt;jms:provider&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;      &lt;span class="an"&gt;service&lt;/span&gt;=&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;test:MySpringProviderService&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;      &lt;span class="an"&gt;endpoint&lt;/span&gt;=&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;mySpringProvider&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;      &lt;span class="an"&gt;destinationName&lt;/span&gt;=&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;queue/OUT&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;      &lt;span class="an"&gt;connectionFactory&lt;/span&gt;=&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;#connectionFactory&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;      &lt;span class="an"&gt;pubSubDomain&lt;/span&gt;=&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;false&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;      &lt;span class="an"&gt;stateless&lt;/span&gt;=&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;false&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class="ta"&gt;/&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt; &lt;span class="ta"&gt;&amp;lt;bean&lt;/span&gt; &lt;span class="an"&gt;id&lt;/span&gt;=&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;connectionFactory&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class="an"&gt;class&lt;/span&gt;=&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;org.apache.activemq.ActiveMQConnectionFactory&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class="ta"&gt;&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="ta"&gt;&amp;lt;property&lt;/span&gt; &lt;span class="an"&gt;name&lt;/span&gt;=&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;brokerURL&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class="an"&gt;value&lt;/span&gt;=&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;tcp://localhost:61616&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class="ta"&gt;/&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt; &lt;span class="ta"&gt;&amp;lt;/bean&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


&lt;p&gt;
change the connectionFactory to something like this:
&lt;/p&gt;

&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;5&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt; &lt;span class="ta"&gt;&amp;lt;bean&lt;/span&gt; &lt;span class="an"&gt;id&lt;/span&gt;=&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;connectionFactory&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class="an"&gt;class&lt;/span&gt;=&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;org.apache.activemq.pool.PooledConnectionFactory&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class="ta"&gt;&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="ta"&gt;&amp;lt;property&lt;/span&gt; &lt;span class="an"&gt;name&lt;/span&gt;=&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;connectionFactory&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class="ta"&gt;&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;      &lt;span class="ta"&gt;&amp;lt;bean&lt;/span&gt; &lt;span class="an"&gt;class&lt;/span&gt;=&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;org.apache.activemq.ActiveMQConnectionFactory&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class="ta"&gt;&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;        &lt;span class="ta"&gt;&amp;lt;property&lt;/span&gt; &lt;span class="an"&gt;name&lt;/span&gt;=&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;brokerURL&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class="an"&gt;value&lt;/span&gt;=&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;tcp://localhost:61616&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class="ta"&gt;/&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;      &lt;span class="ta"&gt;&amp;lt;/bean&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="ta"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="ta"&gt;&amp;lt;property&lt;/span&gt; &lt;span class="an"&gt;name&lt;/span&gt;=&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;maxConnections&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class="an"&gt;value&lt;/span&gt;=&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;1&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class="ta"&gt;/&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="ta"&gt;&amp;lt;property&lt;/span&gt; &lt;span class="an"&gt;name&lt;/span&gt;=&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;maximumActive&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class="an"&gt;value&lt;/span&gt;=&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;1&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class="ta"&gt;/&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="ta"&gt;&amp;lt;/bean&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


&lt;p&gt;
Then by the numbers for my test flow (Jms Consumer-&gt;EIP-&gt;Bean-&gt;JMS Provider &amp; processing/10K worth of messages) ...
&lt;/p&gt;

Pooled ConnectionFactory:

&lt;pre&gt;&lt;code&gt;     [java] Overall time: 40360 ms
     [java] Messages per sec: 247.77006937561944
     [java] 
     [java] Time: 41.064
     [java] 
     [java] OK (1 test)
     [java]    &lt;/code&gt;&lt;/pre&gt;

Non-Pooled ConnectionFactory:

&lt;pre&gt;&lt;code&gt;     [java] Overall time: 908363 ms
     [java] Messages per sec: 11.008814757976712
     [java] 
     [java] Time: 909.34
     [java] OK (1 test)
     [java] 
 &lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;
Those couple of lines of XML make a big difference. Without the pool, the JMS connection is torn down each time and that accounts for the disparity.
&lt;/p&gt;
 
&lt;p&gt;
A second area to look out for is the jms:consumer endpoint configuration. Make sure you set the cacheLevel to CACHE_CONNECTION (1) or CACHE_CONSUMER (3). The default is CACHE_NONE. Below we set the cacheLevel for the underlying DefaultMessageListenerContainer to CACHE_CONSUMER
&lt;/p&gt;

&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;5&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;  &lt;span class="ta"&gt;&amp;lt;jms:consumer&lt;/span&gt; &lt;span class="an"&gt;service&lt;/span&gt;=&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;test:MySpringConsumerService&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;        &lt;span class="an"&gt;endpoint&lt;/span&gt;=&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;mySpringConsumer&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;        &lt;span class="an"&gt;targetService&lt;/span&gt;=&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;test:MySpringProviderService&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;        &lt;span class="an"&gt;destinationName&lt;/span&gt;=&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;queue/SPRING_IN&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;        &lt;span class="an"&gt;connectionFactory&lt;/span&gt;=&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;#connectionFactory&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;        &lt;span class="an"&gt;concurrentConsumers&lt;/span&gt;=&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;1&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;        &lt;span class="an"&gt;cacheLevel&lt;/span&gt;=&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;3&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class="ta"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


I hope these two tips will help you fine tune your Servicemix performance.
          </content>  </entry>
  <entry xml:base="http://blog.pepperdust.org/">
    <author>
      <name>dave</name>
    </author>
    <id>tag:blog.pepperdust.org,2007-10-31:37</id>
    <published>2007-10-31T04:32:00Z</published>
    <updated>2007-10-31T04:53:52Z</updated>
    <link href="http://blog.pepperdust.org/2007/10/31/chumby-update" rel="alternate" type="text/html" />
    <title>Chumby Update</title>
<content type="html">
            &lt;p&gt;
So I got my &lt;a href="http://www.chumby.com"&gt;Chumby&lt;/a&gt; a couple of days ago and its very solid so far. The chumby arrived promptly within a couple of days of ordering it  - in a nicely packaged canvas bag with no molded plastic packaging or wire ties to cut through. 
&lt;/p&gt;
&lt;p&gt;
As far as setup goes, it was very straightforward. It connected to my wireless network first time, and after configuring some flash widgets to play using my account on the chumby website I was up and running. The chumby started to cycle 

through the set of selected widgets (in my case - current weather for my zipcode, blog rss feeds (particularly good for blog 

comments feeds), google news, stock quotes, flickr, utube most popular etc).  As far as the widgets go, the user experience is different to browsing the web. Your fed small digestible chunks of the web at a time and after a couple of days of usage its quite addictive. 
&lt;/p&gt;

&lt;p&gt;With the basics over with (and as the chumby runs an embedded Linux 2.6 kernel) the next step was to see if I could 

connect to the chumby. Thanks to the &lt;a href="http://www.linuxlibrarian.org/?p=184"&gt;linux librarian&lt;/a&gt;, I discovered it was 

possible to ssh. I just needed to enable sshd using the "pi" icon in the chumby options panel. After folowing &lt;a href="http://wiki.chumby.com/mediawiki/index.php/Chumby_tricks"&gt;these steps&lt;/a&gt;, I fired up putty, entered the default 

password of "root" and I had a shell to the chumby. Very cool!
&lt;/p&gt;

&lt;p&gt;
The Linux librarian also mentioned streaming audio from a SlimServer so I figured I'd give that a try also. This took a bit 

of fiddling around but I eventually got it working. 
&lt;/p&gt;

&lt;p&gt;
Here's the steps to get basic mp3 streaming to the chumby using SlimServer (and things that screwed me up): 
&lt;/p&gt;
&lt;p&gt;
1) Install SlimServer 6.5 from &lt;a href="http://www.slimdevices.com/su_downloads.html"&gt;here&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
2) Start the slimserver. It will listen on http://localhost:9000 and you can connect to this url using a web browser to bring up the slimserver admin interface. When you first connect you can give it the location of your music folder and it will find all the music on your computer
&lt;/p&gt;

&lt;p&gt;
3) ssh to the chumby. Start the 'btPlay' mp3 streaming utility to connect back to your slimserver. 

&lt;pre&gt;&lt;code&gt; 
&gt;btPlay http://&amp;lt;slimserver ipaddress&gt;:9000/stream.mp3
&lt;/code&gt;&lt;/pre&gt; 
&lt;/p&gt;
&lt;p&gt;
4) In the slimserver admin configure the content you want to stream to the chumby client. I made the mistake of adding a file with a .m4a extension first. After some time I resorted to running the slimserver with debug output on the command line and the mistake was obvious enough .. not obvious without doing that. Switching to an mp3 and voila! I had mp3 audio streaming working. The Chumby is not a &lt;a href="http://www.slimdevices.com/"&gt;squeezebox&lt;/a&gt; but the sound is fine for background listening. 
&lt;/p&gt;
&lt;p&gt;
5) Next step was to try and get radio streaming working. I figured I'd have a stab at getting &lt;a href="http://www.x2systems.com/AlienBBC/installation.html#windows"&gt;AlienBBC&lt;/a&gt; working. I installed the AlienBBC &lt;a href="http://www.x2systems.com/AlienBBC/AlienBBC-v1.06_6.5.exe"&gt;install pack&lt;/a&gt; and tried to stream the Chris Moyles show ..  silence...(followed by some swearing ....more silence ...)* and back to the slimserver debug output ..

&lt;pre&gt;&lt;code&gt; 
&gt;slim --d_source --d_plugins -d_remotestream
&lt;/code&gt;&lt;/pre&gt; 
&lt;/p&gt;
6) After much pissing about (including an upgrade to SqueezeCenter7.0 which I unfortunately could not get to work), I discovered I needed to: &lt;br /&gt;
&lt;p&gt;   
- Build and install &lt;a href="http://lame.sourceforge.net/index.php"&gt;lame.exe&lt;/a&gt; into the "&amp;lt;slimserver&gt;\server\Bin\MSWin32-x86-multi-thread" directory &lt;br /&gt;
&lt;/p&gt;
- Modify &amp;lt;slimserver&gt;\server\Plugins\Alien\RTSP.pm as follows:
&lt;/p&gt;

&lt;pre&gt;&lt;code&gt; 

        # Check client - only stream to known slim clients
	#if (!defined($client) || !$client-&gt;isPlayer()) {
	#	$::d_remotestream &amp;&amp; msg "Alien only streams to Slim players\n";
	#	return undef;
	#}

&lt;/code&gt;&lt;/pre&gt; 

Finally .. success! 

&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.pepperdust.org/">
    <author>
      <name>dave</name>
    </author>
    <id>tag:blog.pepperdust.org,2007-09-25:32</id>
    <published>2007-09-25T14:18:00Z</published>
    <updated>2007-09-26T14:06:20Z</updated>
    <link href="http://blog.pepperdust.org/2007/9/25/bob-dylan-has-a-message-for-you" rel="alternate" type="text/html" />
    <title>A message from Bob</title>
<content type="html">
            &lt;p&gt;
&amp;lt;object height="400" width="528"&gt;
	&amp;lt;param name="movie" value="http://www.dylanmessaging.com/mediaplayer/assets/flash/message-embedded.swf"&gt;
	&amp;lt;/param&gt;
	&amp;lt;param name="bgcolor" value="#AD1A22"&gt;&amp;lt;/param&gt;
      &amp;lt;param name="flashvars" value="messageURL=http://www.dylanmessaging.com/facebook/dylanmessage.php?uid=715021805&amp;embedID=1800&amp;autoPlayMessage=true"&gt;
      &amp;lt;/param&gt;
      &amp;lt;embed bgcolor="#AD1A22" type="application/x-shockwave-flash" src="http://www.dylanmessaging.com/facebook/flash/message.swf" flashvars="messageURL=http://www.dylanmessaging.com/facebook/dylanmessage.php?uid=715021805&amp;embedID=1800&amp;autoPlayMessage=false" height="400" width="528"&gt;&amp;lt;/embed&gt;

&amp;lt;/object&gt;
&lt;/p&gt;

The Fuse September Release is now &lt;a href="http://open.iona.com/downloads"&gt;available&lt;/a&gt;. New in this release:
&lt;br /&gt;&lt;br /&gt;
- Message Broker 5.0 (based on Apache ActiveMQ trunk) &lt;br /&gt;
- FUSE ESB 3.3 (Based on Apache ServiceMix 3.2 ) &lt;br /&gt;
- Mediation Router 1.2 (based on Apache Camel 1.2) &lt;br /&gt;
- Services Framework 2.0.2 (based on Apache Incubator CXF 2.0.2)&lt;br /&gt; 
&lt;br /&gt;
&lt;p&gt;
(If your in an RSS Reader and swf doesn't embed click &lt;a href="http://blog.pepperdust.org/2007/9/25/bob-dylan-has-a-message-for-you"&gt;here&lt;/a&gt;)
&lt;/p&gt;

Update: Hmm, looks like DylanMessaging are having trouble. If you don't see the message .. try again later!
          </content>  </entry>
  <entry xml:base="http://blog.pepperdust.org/">
    <author>
      <name>dave</name>
    </author>
    <id>tag:blog.pepperdust.org,2007-09-22:31</id>
    <published>2007-09-22T04:03:00Z</published>
    <updated>2007-09-22T04:27:05Z</updated>
    <link href="http://blog.pepperdust.org/2007/9/22/the-making-of-the-chumby" rel="alternate" type="text/html" />
    <title>The making of the Chumby</title>
<content type="html">
            &lt;p&gt;
Some videos from one of the creators of the upcoming hackable/open source &lt;a href="http://www.chumby.com"&gt;Chumby&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.bunniestudios.com/blog/?p=186"&gt;A chip-on-board (CoB) wire bonder:&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;

Amazingly, the PCB's of modern electronic toys don't seem to have a single visible chip (although they have all kinds of smart logic and sounds samples). The chips have been replaced with little blobs of epoxy -  i.e COB (silicon without the casing). I'd wondered about this when I was pulling apart one of Ellie's VTech toys a few months back.. mystery now &lt;a href="http://www.bunniestudios.com/blog/?p=186"&gt;revealed&lt;/a&gt; as the Chumby has the same thing.
&lt;/p&gt;

&lt;p&gt;
&lt;a href="http://www.bunniestudios.com/blog/?p=189"&gt;Injection Molding:&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;

Also pretty interesting on how the plastic casings are &lt;a href="http://www.bunniestudios.com/blog/?p=189"&gt;made&lt;/a&gt;.
&lt;/p&gt;


&lt;p&gt;
&lt;a href="http://www.bunniestudios.com/blog/?p=201"&gt;Quality control on the modern electronics assembly line:&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;

Its easy to take for granted all the work that must go on behind the scenes to produce something like an iPod or any other electronic gizmo. Interesting &lt;a href="http://www.bunniestudios.com/blog/?p=201"&gt;perspective&lt;/a&gt; on how the Chumby folks managed their quality control remotely, especially with all the recent news headlines on this topic.  
&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.pepperdust.org/">
    <author>
      <name>dave</name>
    </author>
    <id>tag:blog.pepperdust.org,2007-07-12:30</id>
    <published>2007-07-12T03:16:00Z</published>
    <updated>2007-07-12T04:00:57Z</updated>
    <link href="http://blog.pepperdust.org/2007/7/12/the-poor-man-s-soa" rel="alternate" type="text/html" />
    <title>The poor man's SOA</title>
<content type="html">
            &lt;img src="http://blog.pepperdust.org/assets/2007/7/12/powercost_monitor.gif" /&gt;

&lt;p&gt;So who knew? My electricity meter has an "interface" (infrared port) that allows you to read power usage statistics realtime. 
&lt;/p&gt;
&lt;p&gt;
A company called Blueline innovations has developed a wireless &lt;a href="http://www.save-electricity.ca/"&gt;powercost monitor&lt;/a&gt; that transmits the power usage stats back to a display device so you can see how much electricity your using realtime. Even better, if your an NSTAR customer in MA you can get one for 29.95$ &lt;a href="http://www.nstaronline.com/residential/energy_efficiency/power_cost_monitor.asp"&gt;before July 31st.&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
I got my Powercost monitor installed today. The install should have been easy but it took a good hour to get the reader aligned with the sensor on the meter, but now that its working I can start to see the worst offenders ..
&lt;/p&gt;
&lt;p&gt;
Top of the list is the clothes drier at about 3Kwh .. next looks to be the water heater at 2kwh. Our refrigerator is ancient and that looks to pull about 800w much more frequently than it should need to. 
&lt;/p&gt;
&lt;p&gt;
Realtime feedback in terms of dollars and cents really makes you think about how much electricity your using. 
&lt;/p&gt;

&lt;p&gt;
You can also draw some parallels to the world of SOA. The monitor, while far removed from the world of IT, does give you insight into the operation of the business - in this case my house. 
&lt;/p&gt;

&lt;p&gt;
Now I can see if I run my drier for an hour its going to cost me approximately 0.54cents (assuming an effective NSTAR rate of 0.18cents per kw/hour with taxes etc..). The technology is aligned to the house's capability to consume power. The impact of using a given appliance is immediately visible and traceable. There is also opportunity for improved efficiency as your have deeper insight and control over whats costing you money. All in all - its an incremental step towards a poor mans &lt;a href="http://en.wikipedia.org/wiki/Service-oriented_architecture"&gt;SOA!&lt;/a&gt;
&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.pepperdust.org/">
    <author>
      <name>dave</name>
    </author>
    <id>tag:blog.pepperdust.org,2007-06-13:28</id>
    <published>2007-06-13T02:10:00Z</published>
    <updated>2007-06-13T03:11:39Z</updated>
    <link href="http://blog.pepperdust.org/2007/6/13/a-basic-jruby-corba-client" rel="alternate" type="text/html" />
    <title>A basic JRuby CORBA client</title>
<content type="html">
            &lt;p&gt;
&lt;a href="http://www.jruby.org"&gt;JRuby 1.0&lt;/a&gt; was released last Saturday so I had a chance to take it for 

a quick testdrive today.&lt;/p&gt;

&lt;p&gt;
In the example below I used Orbix java 6.3, so I added Orbix's corba-asp.jar and a jar containing the 

helper classes for my client to the java classpath. Then it's just a matter of calling 'jruby 

corba_client.rb'. It all pretty much worked out of the box.
&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;

require 'java'

include_class 'java.lang.System'
include_class 'java.util.Properties'
include_class 'org.omg.CORBA.ORB'
include_class 'simple_persistent.Simple.SimpleObject'
include_class 'simple_persistent.Simple.SimpleObjectHelper'

props = System.getProperties
props.put("org.omg.CORBA.ORBClass", "com.iona.corba.art.artimpl.ORBImpl")
props.put("org.omg.CORBA.ORBSingletonClass", "com.iona.corba.art.artimpl.ORBSingleton")


def import_object(orb, filename)
  
  ior = ''
  f = File.open(filename, "r") 
  f.each_line do |line|
    ior += line
  end

  puts "Have IOR: " + ior
  
  orb.string_to_object(ior);
end

puts "Initializing ORB"

# Create a non null args array
args = java.lang.String[1].new 
args[0]=""

orb = ORB.init(args, props)

objref = import_object(orb, "server.ior");

simple = SimpleObjectHelper.narrow(objref)

puts "Invoking call_me"
simple.call_me
puts "Done!"

&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;
It took a bit of digging to figure out how to create a java array in Ruby. The &lt;a href="http://www.headius.com/jrubywiki/index.php/JRuby_Cookbook"&gt;JRuby Cookbook&lt;/a&gt; was helpful there.
&lt;/p&gt; 
&lt;p&gt;
JRuby opens up a whole new set of possibilities in terms of using Ruby scripting (or Ruby on Rails for that matter) to interface with legacy backend enterprise systems.
&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.pepperdust.org/">
    <author>
      <name>dave</name>
    </author>
    <id>tag:blog.pepperdust.org,2007-05-04:26</id>
    <published>2007-05-04T16:55:00Z</published>
    <updated>2007-05-04T17:01:08Z</updated>
    <link href="http://blog.pepperdust.org/2007/5/4/visual-studio-2003-and-wsdls-without-a-soap-1-1-binding" rel="alternate" type="text/html" />
    <title>Visual Studio 2003 and WSDLs without a SOAP 1.1 binding</title>
<content type="html">
            &lt;p&gt;
Arggh. Here's a cryptic error from Visual Studio 2003 to watch out for when trying to add a SOAP/HTTP Web Reference. 
&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;
Custom tool warning: DiscoCodeGenerator unable to initialize code generator.  No code generated.
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;
In this case the WSDL was generated by &lt;a href="http://www.iona.com/products/artix/"&gt;Artix&lt;/a&gt;, and it only contained a SOAP 1.2 binding. This wsdl definitons looked like this:
&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;
&amp;lt;definitions name="my_server" 
    targetNamespace="http://schemas.iona.com/idl/my_server.idl" 
    xmlns="http://schemas.xmlsoap.org/wsdl/" 
    xmlns:corba="http://schemas.iona.com/bindings/corba" 
    xmlns:corbatm="http://schemas.iona.com/typemap/corba/my_server.idl" 
    xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" 
    xmlns:tns="http://schemas.iona.com/idl/my_server.idl" 
    xmlns:wsa="http://www.w3.org/2005/08/addressing" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns:xsd1="http://schemas.iona.com/idltypes/my_server.idl"&amp;gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;
The error is caused because there is no SOAP 1.1 binding/namespace in the WSDL. In order to make it work you have to use(or add) a SOAP 1.1 binding - or switch to VS2005 which supports SOAP 1.2.
&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.pepperdust.org/">
    <author>
      <name>dave</name>
    </author>
    <id>tag:blog.pepperdust.org,2007-04-03:25</id>
    <published>2007-04-03T16:17:00Z</published>
    <updated>2007-04-03T16:20:13Z</updated>
    <category term="Java" />
    <category term="Open Source" />
    <category term="WebServices" />
    <link href="http://blog.pepperdust.org/2007/4/3/building-opensource-web-services-using-jax-ws" rel="alternate" type="text/html" />
    <title>Building opensource web services using JAX-WS</title>
<content type="html">
            &lt;p&gt;
Over on &lt;a href="http://blogs.iona.com/sos/2007/03/qcon_london_celtix_enterprise_1.html"&gt;SOS&lt;/a&gt; Adrian has posted a &lt;a href="http://blogs.iona.com/sos/IONA-Multi-protocol%20open-source%20web%20services%20with%20JAXWS%20and%20Celtix-QCon-2007.pdf"&gt;set of slides&lt;/a&gt; that describe how to build multi-protocol, opensource, web services using JAX-WS. 
&lt;/p&gt;

&lt;p&gt;
The presentation gives a great overview of the architecture that allows &lt;a href="http://www.ionaceltix.com/index.php?option=com_content&amp;task=view&amp;id=28&amp;Itemid=72"&gt;Celtix Enterprise&lt;/a&gt; to deploy services that simulateneosly support multiple payloads (SOAP, XML, JSON) and transports (HTTP, JMS, AMQP). It also give some very helpful pointers on JAX-WS development in general - well worth checking it out.
&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.pepperdust.org/">
    <author>
      <name>dave</name>
    </author>
    <id>tag:blog.pepperdust.org,2007-04-02:24</id>
    <published>2007-04-02T16:39:00Z</published>
    <updated>2007-04-02T16:53:03Z</updated>
    <link href="http://blog.pepperdust.org/2007/4/2/twitter-ruby-gem-experiments" rel="alternate" type="text/html" />
    <title>Twitter Ruby Gem Experiments ..</title>
<content type="html">
            Curious about the recent fuss about &lt;a href="http://twitter.com/"&gt;Twitter&lt;/a&gt;, I installed the Ruby 
&lt;a href="http://twitter.rubyforge.org/"&gt;Twitter gem&lt;/a&gt; over the weekend. 

&lt;pre&gt;&lt;code&gt;

&gt;gem install Hpricot
&gt;gem install twitter

&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;
It has a dependency on the Ruby XML parsing API &lt;a href="http://code.whytheluckystiff.net/hpricot/"&gt;Hpricot&lt;/a&gt;. Its the 

first time I've played around with Hpricot, and the API is nice. (ActiveResource would do well to use it also as ActiveResources current XML to hash implementation is quite brittle).
&lt;/p&gt;
&lt;p&gt;
In terms of configuration, the gem creates a /.twitter file in your home directory. On windows this is below %HOMEPATH%. Once you add your username and password to the config file, you can then post to twitter from a command shell anytime you like:
&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;
&gt;twitter post "Post to my twitter account using ruby"
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;
The only gotcha you have to look out for is that theres a bug in Hpricot when processing XML that contains &amp;lt;text&amp;gt; elements. I just commented out the offending line below:
&lt;/p&gt;

&amp;lt;ruby&amp;gt;/lib/ruby/gems/1.8/gems/twitter-0.1.0/lib/twitter/status.rb

&lt;pre&gt;&lt;code&gt;

     def new_from_xml(xml)
        Status.new do |s|
          s.id         = (xml).at('id').innerHTML
          s.created_at = (xml).at('created_at').innerHTML
          #s.text       = (xml).at('text').innerHTML
          s.user       = User.new_from_xml(xml) if (xml).at('user')
        end
     end

&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;
I think you should be able to use the Twitter gem with the new direct messaging Twitter API to
develop automated SMS response agents as described in TechCrunch's article &lt;a href="http://www.techcrunch.com/2007/03/27/twitter-becomes-mobile-dev-platform/"&gt;"Web Services coming to twitter"&lt;/a&gt;. 
&lt;/p&gt;
This would allow you to implement your own Twitter SMS agents (similar to the &lt;a href="http://www.google.com/intl/en_us/mobile/sms/"&gt;Google SMS API&lt;/a&gt;). I wonder will Google open up their SMS API on the backend?
          </content>  </entry>
  <entry xml:base="http://blog.pepperdust.org/">
    <author>
      <name>dave</name>
    </author>
    <id>tag:blog.pepperdust.org,2007-03-28:23</id>
    <published>2007-03-28T16:13:00Z</published>
    <updated>2007-03-28T16:25:14Z</updated>
    <link href="http://blog.pepperdust.org/2007/3/28/google-pack-and-twittervision" rel="alternate" type="text/html" />
    <title>Google Pack and twittervision ...</title>
<content type="html">
            The work enforced blogging hiatus is over! (for now :-)  Google has updated google pack to include a free version of Symantec Norton Antivirus and PC Tools' Spyware Doctor. 

&lt;p&gt;
&lt;a href="http://pack.google.com/intl/en/pack_installer.html?hl=en&amp;gl=us&amp;utm_source=en-et-gblog_security&amp;amp;amp;utm_medium=et&amp;utm_campaign=en"&gt;Check it out&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Also of interest -   &lt;a href="http://twittervision.com/"&gt;Twittervision!&lt;/a&gt;. Yet another nifty google maps mashup using the twitter API's.
&lt;/p&gt;
          </content>  </entry>
</feed>
