<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss'><id>tag:blogger.com,1999:blog-9278084</id><updated>2009-04-23T10:31:32.229-04:00</updated><title type='text'>Thoughts of Hiram Chirino</title><subtitle type='html'>Software Architect for &lt;a href="fusesource.com"&gt;Progress: FUSE&lt;/a&gt;. Disclaimer: the views expressed on this site are mine alone and do not necessarily reflect the views of my employer or its affiliated entities.</subtitle><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/posts/default'/><link rel='alternate' type='text/html' href='http://hiramchirino.com/blog/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/posts/default?start-index=26&amp;max-results=25'/><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://hiramchirino.com/atom.xml'/><author><name>Hiram Chirino</name><uri>http://www.blogger.com/profile/16983993595849131879</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>27</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-9278084.post-3246241242512349260</id><published>2008-08-02T11:18:00.002-04:00</published><updated>2008-08-02T11:29:22.858-04:00</updated><title type='text'>New Checksum Plugin</title><content type='html'>So in &lt;a href="http://hiramchirino.com/blog/2008/07/comments-on-maven-repository-security.html"&gt;my last post&lt;/a&gt; I was suggesting making it easier to include dependency checksums as part of a maven build.  I decided that it should be simple enough to implement this as a Maven Plugin.  For those of you interested, you can get the source to the &lt;a href="https://svn.apache.org/repos/asf/servicemix/maven-plugins/checksum-maven-plugin/trunk"&gt;new Checksum Plugin here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The basic problem the plugin is trying to solve is that it is possible that central repositories get hacked and the artifacts/dependencies of our builds get replaced with&lt;br /&gt;malicious versions.  Right now we have no way to easily detect that&lt;br /&gt;and we could potential create a release build of a project which&lt;br /&gt;bundles one of those malicious dependencies.  In practice this rarely&lt;br /&gt;occurs, but it's not out of the realm of possibilities. &lt;br /&gt;&lt;br /&gt;Basically the plugin supports generating a checksum.txt file that is included as part of the project build. This file holds all the checksums for the dependencies (including the dependencies' pom checksum).  Generating/updating is induced via the use of a maven profile.  This is only done when dependencies get updated.&lt;br /&gt;&lt;br /&gt;In a normal build the plugin just validates the checksums of the downloaded dependencies against those stored in the checksum.txt file.&lt;br /&gt;&lt;br /&gt;I wish I could move up the validation of the dependencies from their current maven life cycle locations, but it seems you can't get the list of dependencies it gets moved up any more.  Any maven mojo hackers have any work arounds for that?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='http://res1.blogblog.com/tracker/9278084-3246241242512349260?l=hiramchirino.com%2Fblog'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/3246241242512349260/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9278084&amp;postID=3246241242512349260' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/posts/default/3246241242512349260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/posts/default/3246241242512349260'/><link rel='alternate' type='text/html' href='http://hiramchirino.com/blog/2008/08/new-checksum-plugin.html' title='New Checksum Plugin'/><author><name>Hiram Chirino</name><uri>http://www.blogger.com/profile/16983993595849131879</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9278084.post-2570858042963475074</id><published>2008-07-28T16:07:00.002-04:00</published><updated>2008-07-28T16:17:17.522-04:00</updated><title type='text'>Comments on the Maven Repository Security Proposal</title><content type='html'>For those of you who don't know, Maven is an awesome build tool.  It uses centralized repositories to share build artifacts.  Right now there is a problem, where if a repository is hacked, malicious code could be injected into those artifacts and distributed by other builds.  Lots of folks &lt;a href="https://issues.apache.org/jira/browse/HADOOP-3302"&gt;object to using maven&lt;/a&gt; solely due to this possibility.  It's a good thing that the maven teams seems to be working on fix those problems.&lt;br /&gt;&lt;br /&gt;First off, I love the &lt;a href="http://docs.codehaus.org/display/MAVEN/Repository+Security"&gt;Maven Repository Security Proposal&lt;/a&gt;.  I think that the 'Specified Checksums' idea is awesome.  I think it needs to be made so easy to use that folks always use it.  Right now it's a little ugly because it makes the dependency declaration much more verbose.  Plus it does not seem to cover transitive dependencies that are being used during the build, and I think that those checksums NEED to be included too.&lt;br /&gt;&lt;br /&gt;I think that what would be better is if maven provided the tools to update the checksum information in the pom.&lt;br /&gt;&lt;br /&gt;Lets say that a build for a module is setup in some strict mode where only artifacts with known checksums are allowed.  If the pom is updated to add a new dependency, I think there should be some maven command which automatically adds the checksum for the new dependency (and transitive dependencies).  Artifacts that are signed with a trusted key get added without prompting, and a confirmation prompt would be given for artifacts that are not GPG trusted.&lt;br /&gt;&lt;br /&gt;So the question is why go through all that trouble?  So that folks get a trusted source distribution (out of SCM or a signed tar ball), can do a build and have a high level of guarantee that the dependencies that are being used in the source build match what was intended by the developers of the source distribution.  Furthermore, it will not matter if the transitive dependencies are signed and have keys in the end user's keyring since all the checksums are include in the build.&lt;br /&gt;&lt;br /&gt;Now, since there could be lots of dependencies in a build, due to the use of build plugins and transitive dependencies, it might be worth storing the checksum data in a file external to pom.xml, or at least in a different xml section from the dependencies declaration.&lt;br /&gt;&lt;br /&gt;Things to think about: Having SNAPSHOT dependencies in the build could complicate things, as the build would be tied to a particular SNAPSHOT/checksum, but maybe that's a good thing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='http://res1.blogblog.com/tracker/9278084-2570858042963475074?l=hiramchirino.com%2Fblog'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/2570858042963475074/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9278084&amp;postID=2570858042963475074' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/posts/default/2570858042963475074'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/posts/default/2570858042963475074'/><link rel='alternate' type='text/html' href='http://hiramchirino.com/blog/2008/07/comments-on-maven-repository-security.html' title='Comments on the Maven Repository Security Proposal'/><author><name>Hiram Chirino</name><uri>http://www.blogger.com/profile/16983993595849131879</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9278084.post-1499566714642524205</id><published>2008-07-17T15:04:00.002-04:00</published><updated>2008-07-17T15:08:35.692-04:00</updated><title type='text'>Keep an eye out for ZooKeeper</title><content type='html'>Wow, I love the simplicity that ZooKeeper brings to a really hard set of distributed problems.  Check out this &lt;a href="http://developer.yahoo.com/blogs/hadoop/2008/03/intro-to-zookeeper-video.html"&gt;Introductory Video&lt;/a&gt; that explains it more in depth.  Basically group leadership/coordination and cluster wide configuration issues are taken care of if you Use ZooKeeper. &lt;br /&gt;&lt;br /&gt;Oh and it's an Apache Project now.  Yay!  Seems like the project website is still not fully setup since they are migrating from SourceForge to Apache, be here's a link to the &lt;a href="https://svn.apache.org/repos/asf/hadoop/zookeeper/trunk"&gt;source tree&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='http://res1.blogblog.com/tracker/9278084-1499566714642524205?l=hiramchirino.com%2Fblog'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/1499566714642524205/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9278084&amp;postID=1499566714642524205' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/posts/default/1499566714642524205'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/posts/default/1499566714642524205'/><link rel='alternate' type='text/html' href='http://hiramchirino.com/blog/2008/07/keep-eye-out-for-zookeeper.html' title='Keep an eye out for ZooKeeper'/><author><name>Hiram Chirino</name><uri>http://www.blogger.com/profile/16983993595849131879</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9278084.post-1651787128055095151</id><published>2008-07-17T14:57:00.002-04:00</published><updated>2008-07-17T15:03:26.668-04:00</updated><title type='text'>TODO: Double Write Buffers</title><content type='html'>Note to self: investigate implementing the &lt;a href="http://www.mysqlperformanceblog.com/2006/08/04/innodb-double-write/"&gt;Double Write Buffers&lt;/a&gt; idea in ActiveMQ.  ActiveMQ keeps several indexes into the persistent messages that it's holding and when ActiveMQ is shutdown ungracefully, we rebuild the indexes from the data logs due to them being in inconsistent state.  If your queueing up millions of messages, building those indexes can take a long time.&lt;br /&gt;&lt;br /&gt;Double buffering may allow us fix inconistencies in those index and gets us running faster..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='http://res1.blogblog.com/tracker/9278084-1651787128055095151?l=hiramchirino.com%2Fblog'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/1651787128055095151/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9278084&amp;postID=1651787128055095151' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/posts/default/1651787128055095151'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/posts/default/1651787128055095151'/><link rel='alternate' type='text/html' href='http://hiramchirino.com/blog/2008/07/todo-double-write-buffers.html' title='TODO: Double Write Buffers'/><author><name>Hiram Chirino</name><uri>http://www.blogger.com/profile/16983993595849131879</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9278084.post-3410991145701814781</id><published>2008-06-02T15:30:00.002-04:00</published><updated>2008-06-02T15:39:08.949-04:00</updated><title type='text'>ActiveMQ/SpecJMS/Camel Webinar</title><content type='html'>Whoa, time flies  by, and I forgot to post about the &lt;a href="https://cc.readytalk.com/cc/schedule/display.do?rfe=ub5sdagy3uis&amp;amp;udc=ueryf6x63zus"&gt;upcoming webinar&lt;/a&gt; that I will be co-hosting with &lt;a href="http://rajdavies.blogspot.com/"&gt;Rob Davies&lt;/a&gt; on June 10th.  We will be covering some messaging basics, introducing Apache ActiveMQ and Apache Camel to the audience, but most interesting I think will be the section where Rob will be covering the results that IONA has been seeing benchmarking ActiveMQ against the SpecJMS2007 test suite.  I totally agree with &lt;a href="http://rajdavies.blogspot.com/2008/05/specjms2007-using-activemq.html"&gt;Rob's comment &lt;/a&gt;that "An independent benchmark is important, because it negates the chance to skew  home groan tests to a vendor's strengths."&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='http://res1.blogblog.com/tracker/9278084-3410991145701814781?l=hiramchirino.com%2Fblog'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/3410991145701814781/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9278084&amp;postID=3410991145701814781' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/posts/default/3410991145701814781'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/posts/default/3410991145701814781'/><link rel='alternate' type='text/html' href='http://hiramchirino.com/blog/2008/06/activemqspecjmscamel-webinar.html' title='ActiveMQ/SpecJMS/Camel Webinar'/><author><name>Hiram Chirino</name><uri>http://www.blogger.com/profile/16983993595849131879</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9278084.post-1429524849394446288</id><published>2008-05-29T15:51:00.002-04:00</published><updated>2008-05-29T15:54:49.660-04:00</updated><title type='text'>InfoQ Covers ActiveMQ 5.1 Release</title><content type='html'>&lt;a href="http://www.infoq.com/news/2008/05/activemq-5.1-release;jsessionid=BFD02D79FC579EDFABD675E93D11BC13"&gt;InfoQ&lt;/a&gt; has posted nice article on the new features in the ActiveMQ 5.1 release versus the last 4.1 release:&lt;br /&gt;&lt;blockquote&gt;&lt;p&gt;&lt;a href="http://activemq.apache.org/"&gt;Apache ActiveMQ&lt;/a&gt;, an open source provider of enterprise messaging services, recently released &lt;a href="http://activemq.apache.org/activemq-510-release.html"&gt;version 5.1&lt;/a&gt; which includes improvements in stability and performance of the message broker product. This version also includes support for priority message ordering and a Microsoft Message Queue (&lt;a href="http://www.microsoft.com/windowsserver2003/technologies/msmq/default.mspx"&gt;MSMQ&lt;/a&gt;) to ActiveMQ Bridge with the new &lt;a href="http://cwiki.apache.org/confluence/display/CAMEL/msmq"&gt;msmq&lt;/a&gt; transport component. &lt;/p&gt; &lt;p&gt;There are also improvements in the &lt;a href="http://activemq.apache.org/how-can-i-monitor-activemq.html"&gt;monitoring&lt;/a&gt; module of ActiveMQ container. A new DestinationSource class was added to access the available &lt;a href="http://java.sun.com/javaee/5/docs/api/javax/jms/Queue.html"&gt;Queues&lt;/a&gt; or &lt;a href="http://java.sun.com/javaee/5/docs/api/javax/jms/Topic.html"&gt;Topics&lt;/a&gt; or listen to Queues/Topics being created or deleted in the container. There is a new &lt;a href="http://activemq.apache.org/maven/activemq-core/apidocs/org/apache/activemq/broker/region/DestinationStatistics.html"&gt;API&lt;/a&gt; to help end users view available destinations and query them to find JMS statistics such as active queue count, queue depth, number of messages etc.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.infoq.com/news/2008/05/activemq-5.1-release;jsessionid=BFD02D79FC579EDFABD675E93D11BC13"&gt;Read More...&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='http://res1.blogblog.com/tracker/9278084-1429524849394446288?l=hiramchirino.com%2Fblog'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/1429524849394446288/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9278084&amp;postID=1429524849394446288' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/posts/default/1429524849394446288'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/posts/default/1429524849394446288'/><link rel='alternate' type='text/html' href='http://hiramchirino.com/blog/2008/05/infoq-covers-activemq-51-release.html' title='InfoQ Covers ActiveMQ 5.1 Release'/><author><name>Hiram Chirino</name><uri>http://www.blogger.com/profile/16983993595849131879</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9278084.post-4155082812578855155</id><published>2008-05-07T12:56:00.002-04:00</published><updated>2008-05-07T13:04:28.252-04:00</updated><title type='text'>ActiveMQ 5.1.0 Release</title><content type='html'>For all of you who ran into issues with &lt;a href="http://activemq.apache.org/"&gt;ActiveMQ&lt;/a&gt; 5.0.0 when running it in anger, I highly recommend you give the just &lt;a href="http://activemq.apache.org/activemq-510-release.html"&gt;released ActiveMQ 5.1.0&lt;/a&gt; a try.  This release focused focused on making the broker rock solid.  It resolved several bugs which only reared their heads in high load situations.  Memory leaks have been squashed and performance has even improved in several areas. &lt;br /&gt;&lt;br /&gt;Even if you have not had seen any issues with your 5.0.0 installation, I'd highly recommend you upgrade to 5.1.0 to avoid running into &lt;a href="http://issues.apache.org/activemq/secure/ReleaseNote.jspa?version=11802&amp;amp;styleName=Html&amp;amp;projectId=10520&amp;amp;Create=Create"&gt;some of the bugs&lt;/a&gt; that have been addressed in the release.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='http://res1.blogblog.com/tracker/9278084-4155082812578855155?l=hiramchirino.com%2Fblog'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/4155082812578855155/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9278084&amp;postID=4155082812578855155' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/posts/default/4155082812578855155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/posts/default/4155082812578855155'/><link rel='alternate' type='text/html' href='http://hiramchirino.com/blog/2008/05/activemq-510-release.html' title='ActiveMQ 5.1.0 Release'/><author><name>Hiram Chirino</name><uri>http://www.blogger.com/profile/16983993595849131879</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9278084.post-929312546086510789</id><published>2008-04-10T13:59:00.002-04:00</published><updated>2008-04-10T14:02:36.705-04:00</updated><title type='text'>Mulitcast not working on a Linux box?</title><content type='html'>Just ran into a problem where some mutlicast tests were failing on a linux box and I could not figure out why.  Did a little bit of research and found out that you may need to add a route for it first.  So if you have this problem try running:&lt;br /&gt;&lt;blockquote&gt;route add 224.0.0.0 netmask 240.0.0.0 dev eth0&lt;/blockquote&gt;&lt;br /&gt;or if you have an older version of linux like me:&lt;br /&gt;&lt;blockquote&gt;route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='http://res1.blogblog.com/tracker/9278084-929312546086510789?l=hiramchirino.com%2Fblog'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/929312546086510789/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9278084&amp;postID=929312546086510789' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/posts/default/929312546086510789'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/posts/default/929312546086510789'/><link rel='alternate' type='text/html' href='http://hiramchirino.com/blog/2008/04/mulitcast-not-working-on-linux-box.html' title='Mulitcast not working on a Linux box?'/><author><name>Hiram Chirino</name><uri>http://www.blogger.com/profile/16983993595849131879</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9278084.post-2478328352425486093</id><published>2008-01-02T09:59:00.000-05:00</published><updated>2008-01-02T11:29:18.297-05:00</updated><title type='text'>More ActiveMQ Fanfare</title><content type='html'>Nice to see the new year starting off right.  I Noticed this post over at the eaimatrix.com:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;A plethora of message queuing products exist in today's EAI market, all aimed at providing solutions to the problem of application integration. Few can however  lay as much claim to fame as &lt;a href="http://activemq.apache.org/" target="_blank"&gt;ActiveMQ&lt;/a&gt;, an open source Message Broker and &lt;a href="http://java.sun.com/products/jms/index.jsp" target="_blank"&gt;JMS&lt;/a&gt;/&lt;a href="http://activemq.apache.org/enterprise-integration-patterns.html"&gt;Enterprise Integration Patterns&lt;/a&gt; provider which is  licensed, developed and distributed under the open source Apache emblem.  &lt;a href="http://activemq.apache.org/" target="_blank"&gt;ActiveMQ&lt;/a&gt; provides  support for &lt;a href="http://activemq.apache.org/cross-language-clients.html"&gt;Cross Language Client and Protocols&lt;/a&gt; as well as a powerful messaging broker which is supported in Java, C, C++, C#, Ruby, Perl, Python, PHP.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://eaimatrix.com/blogs/eai/archive/2008/01/01/enterprise-messaging-with-activemq.aspx"&gt;Read the full article&lt;/a&gt; by Ade Ayonrinde.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='http://res1.blogblog.com/tracker/9278084-2478328352425486093?l=hiramchirino.com%2Fblog'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/2478328352425486093/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9278084&amp;postID=2478328352425486093' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/posts/default/2478328352425486093'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/posts/default/2478328352425486093'/><link rel='alternate' type='text/html' href='http://hiramchirino.com/blog/2008/01/nice-to-see-new-year-starting-off-right.html' title='More ActiveMQ Fanfare'/><author><name>Hiram Chirino</name><uri>http://www.blogger.com/profile/16983993595849131879</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9278084.post-3506032341619676082</id><published>2007-11-13T10:29:00.000-05:00</published><updated>2007-11-13T10:32:31.156-05:00</updated><title type='text'>ActiveMQ Webinar</title><content type='html'>Late notice.. but &lt;a href="http://macstrac.blogspot.com"&gt;James&lt;/a&gt; and I are doing an &lt;a href="http://open.iona.com/resources/news/#webinar"&gt;ActiveMQ Webinar&lt;/a&gt; in an hour and half.  Sign up for it and let us know what you thought about it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='http://res1.blogblog.com/tracker/9278084-3506032341619676082?l=hiramchirino.com%2Fblog'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/3506032341619676082/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9278084&amp;postID=3506032341619676082' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/posts/default/3506032341619676082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/posts/default/3506032341619676082'/><link rel='alternate' type='text/html' href='http://hiramchirino.com/blog/2007/11/activemq-webinar.html' title='ActiveMQ Webinar'/><author><name>Hiram Chirino</name><uri>http://www.blogger.com/profile/16983993595849131879</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9278084.post-2139852033733476289</id><published>2007-10-02T12:22:00.000-04:00</published><updated>2007-10-03T14:51:57.988-04:00</updated><title type='text'>Docbook is dead.. Long live HTML</title><content type='html'>Yay.. The &lt;a href="http://activemq.apache.org/camel"&gt;Apache Camel&lt;/a&gt; project has started to generate some beautiful looking &lt;a href="http://people.apache.org/%7Echirino/camel-manual-1.1-SNAPSHOT.pdf"&gt;PDF documentation&lt;/a&gt; from standard HTML by using &lt;a href="http://www.princexml.com/"&gt;prince&lt;/a&gt; and the &lt;a href="http://www.alistapart.com/articles/boom"&gt;Boom&lt;/a&gt; style sheet against our &lt;a href="http://cwiki.apache.org/confluence/display/CAMEL/Index"&gt;wiki&lt;/a&gt;.   We contacted the Boom folks and they cleared up the license terms of the Boom file so that it's officially open source.  The Boom folks have &lt;a href="http://people.opera.com/howcome/2005/ala/boom-mit.css"&gt;relicensed&lt;/a&gt; under the very liberal MIT license.&lt;br /&gt;&lt;br /&gt;Update:&lt;br /&gt;&lt;a href="http://www.theserverside.com/news/thread.tss?thread_id=47118"&gt;An interesting thread&lt;/a&gt; docbook and HTML is going on at The Server Side.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='http://res1.blogblog.com/tracker/9278084-2139852033733476289?l=hiramchirino.com%2Fblog'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/2139852033733476289/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9278084&amp;postID=2139852033733476289' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/posts/default/2139852033733476289'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/posts/default/2139852033733476289'/><link rel='alternate' type='text/html' href='http://hiramchirino.com/blog/2007/10/docbook-is-dead-long-live-html.html' title='Docbook is dead.. Long live HTML'/><author><name>Hiram Chirino</name><uri>http://www.blogger.com/profile/16983993595849131879</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9278084.post-9060438072965588614</id><published>2007-09-26T11:36:00.000-04:00</published><updated>2007-09-26T11:51:22.887-04:00</updated><title type='text'>Dip Your Toes in Some Camel Today</title><content type='html'>The &lt;a href="http://macstrac.blogspot.com/"&gt;James Strachan&lt;/a&gt; has put together an awesome intro to &lt;a href="http://activemq.apache.org/camel"&gt;Apache Camel&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;object classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" codebase="http://www.apple.com/qtactivex/qtplugin.cab" height="256" width="320"&gt;&lt;param name="src" value="http://repo.open.iona.com/podcasts/camel/intro/camel-intro-medium.mov"&gt;&lt;param name="autoplay" value="false"&gt;&lt;param name="type" value="video/quicktime" height="256" width="320"&gt;&lt;embed src="http://repo.open.iona.com/podcasts/camel/intro/camel-intro-medium.mov" height="256" width="320" autoplay="false" type="video/quicktime" pluginspage="http://www.apple.com/quicktime/download/"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;A &lt;a href="http://repo.open.iona.com/podcasts/camel/intro/camel-intro-high.mov"&gt;high quality version&lt;/a&gt; of the screencast also available.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='http://res1.blogblog.com/tracker/9278084-9060438072965588614?l=hiramchirino.com%2Fblog'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/9060438072965588614/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9278084&amp;postID=9060438072965588614' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/posts/default/9060438072965588614'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/posts/default/9060438072965588614'/><link rel='alternate' type='text/html' href='http://hiramchirino.com/blog/2007/09/dip-your-toes-in-some-camel-today.html' title='Dip Your Toes in Some Camel Today'/><author><name>Hiram Chirino</name><uri>http://www.blogger.com/profile/16983993595849131879</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9278084.post-816821666303344942</id><published>2007-09-25T12:49:00.000-04:00</published><updated>2007-09-25T12:58:14.285-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FUSE'/><title type='text'>New FUSE Releases</title><content type='html'>It looks like &lt;a href="http://blog.pepperdust.org/2007/9/25/bob-dylan-has-a-message-for-you"&gt;the word is spreading&lt;/a&gt; that the &lt;a href="http://open.iona.com/products/"&gt;FUSE&lt;/a&gt; has a new  release out. The release includes enhancements across the &lt;a href="http://open.iona.com/products/"&gt;&lt;span class="caps"&gt;FUSE&lt;/span&gt; family of products&lt;/a&gt; including, &lt;a href="http://open.iona.com/products/fuse-esb"&gt;&lt;span class="caps"&gt;FUSE ESB&lt;/span&gt;&lt;/a&gt;, &lt;a href="http://open.iona.com/products/fuse-message-broker/"&gt;FUSE Message Broker&lt;/a&gt;, &lt;a href="http://open.iona.com/products/fuse-services-framework/"&gt;&lt;span class="caps"&gt;FUSE&lt;/span&gt; Services Framework&lt;/a&gt; and &lt;a href="http://open.iona.com/products/fuse-mediation-router/"&gt;&lt;span class="caps"&gt;FUSE&lt;/span&gt; Mediation Router&lt;/a&gt;. The releases include significant performance and feature improvements and tighter integration between the &lt;a href="http://open.iona.com/products/fuse-esb/"&gt;&lt;span class="caps"&gt;FUSE ESB&lt;/span&gt;&lt;/a&gt; and all components of the product family.&lt;br /&gt;&lt;br /&gt;For those of you who don't know, the FUSE family of products are &lt;a href="http://open.iona.com"&gt;IONA&lt;/a&gt; supported versions of several &lt;a href="http://www.apache.org"&gt;Apache&lt;/a&gt; projects like &lt;a href="http://activemq.apache.org"&gt;ActiveMQ&lt;/a&gt; and &lt;a href="http://servicemix.org"&gt;ServiceMix&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='http://res1.blogblog.com/tracker/9278084-816821666303344942?l=hiramchirino.com%2Fblog'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/816821666303344942/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9278084&amp;postID=816821666303344942' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/posts/default/816821666303344942'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/posts/default/816821666303344942'/><link rel='alternate' type='text/html' href='http://hiramchirino.com/blog/2007/09/new-fuse-releases.html' title='New FUSE Releases'/><author><name>Hiram Chirino</name><uri>http://www.blogger.com/profile/16983993595849131879</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9278084.post-1099796929685061887</id><published>2007-09-20T12:17:00.000-04:00</published><updated>2007-09-20T12:25:47.442-04:00</updated><title type='text'>ServiceMix has Graduated</title><content type='html'>&lt;span class="on" style="display: block;" id="formatbar_CreateLink" title="Link" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;Congratulations to the &lt;a href="http://servicemix.org"&gt;ServiceMix&lt;/a&gt; project for &lt;a href="http://gnodet.blogspot.com/2007/09/servicemix-has-graduated.html"&gt;graduating&lt;/a&gt; from the Incubator!  Having participated in several projects that have graduated from the &lt;a href="http://apache.org"&gt;Apache&lt;/a&gt; incubator, I can attest that this is an awesome milestone to have completed.&lt;br /&gt;&lt;br /&gt;For those of you who don't know what &lt;a href="http://servicemix.org"&gt;ServiceMix&lt;/a&gt; is, it's by far the BEST open source ESB available today.  The components in this ESB use the &lt;a href="http://jcp.org/aboutJava/communityprocess/final/jsr208/index.html"&gt;JBI 1.0 spec&lt;/a&gt; to integrate so end users and component developers can avoid the vendor lock in that is so common in todays commercial ESB space.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='http://res1.blogblog.com/tracker/9278084-1099796929685061887?l=hiramchirino.com%2Fblog'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/1099796929685061887/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9278084&amp;postID=1099796929685061887' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/posts/default/1099796929685061887'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/posts/default/1099796929685061887'/><link rel='alternate' type='text/html' href='http://hiramchirino.com/blog/2007/09/servicemix-has-graduated.html' title='ServiceMix has Graduated'/><author><name>Hiram Chirino</name><uri>http://www.blogger.com/profile/16983993595849131879</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9278084.post-3969814917368656756</id><published>2007-03-02T10:56:00.000-05:00</published><updated>2007-03-02T11:01:14.662-05:00</updated><title type='text'>Learn how to Use ActiveMessaging to leverage ActiveMQ from Rails</title><content type='html'>You have to checkout this great &lt;a href="http://www.infoq.com/articles/intro-active-messaging-rails"&gt;InfoQ Article&lt;/a&gt; on ActiveMessaging.  It's an outstanding writeup on how to use &lt;a href="http://activemq.apache.org"&gt;ActiveMQ&lt;/a&gt; from &lt;a href="http://www.rubyonrails.org/"&gt;Rails&lt;/a&gt;.  I think this is just another sign that &lt;a href="http://hiramchirino.com/2007/02/stompconnect-finally-you-can-talk.html"&gt;STOMP&lt;/a&gt; is gain momentum.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='http://res1.blogblog.com/tracker/9278084-3969814917368656756?l=hiramchirino.com%2Fblog'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/3969814917368656756/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9278084&amp;postID=3969814917368656756' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/posts/default/3969814917368656756'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/posts/default/3969814917368656756'/><link rel='alternate' type='text/html' href='http://hiramchirino.com/blog/2007/03/learn-how-to-use-activemessaging-to.html' title='Learn how to Use ActiveMessaging to leverage ActiveMQ from Rails'/><author><name>Hiram Chirino</name><uri>http://www.blogger.com/profile/16983993595849131879</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9278084.post-76134902903119304</id><published>2007-02-24T21:40:00.000-05:00</published><updated>2007-02-24T22:00:47.095-05:00</updated><title type='text'>StompConnect - Finally, you can talk nativley to any JMS server from any language.</title><content type='html'>OMG, &lt;a href="http://radio.weblogs.com/0112098/"&gt;James&lt;/a&gt; is at it again!  He whipped up the new &lt;a href="http://stomp.codehaus.org/StompConnect"&gt;StompConnect&lt;/a&gt; project at a blink of an eye.  Firstly, let me introduce you to &lt;a href="http://stomp.codehaus.org/"&gt;Stomp&lt;/a&gt;.  Stomp was designed to be a super simple wire protocol for clients to talk to Message Oriented Middleware (MOM), like &lt;a href="http://activemq.apache.org"&gt;ActiveMQ&lt;/a&gt;.  Since the protocol is text based and simple to implement, multiple &lt;a href="http://stomp.codehaus.org/Clients"&gt;language clients&lt;/a&gt; and servers were created with little effort.&lt;br /&gt;&lt;br /&gt;And now thanks StompConnect, every JMS compliant MOM in existence (which is like almost all of them) can now be talked to using Stomp!  This is a huge deal since the wire protocol for most JMS servers is proprietary and  and getting a pure language client for any given mom was either difficult or impossible!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='http://res1.blogblog.com/tracker/9278084-76134902903119304?l=hiramchirino.com%2Fblog'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/76134902903119304/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9278084&amp;postID=76134902903119304' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/posts/default/76134902903119304'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/posts/default/76134902903119304'/><link rel='alternate' type='text/html' href='http://hiramchirino.com/blog/2007/02/stompconnect-finally-you-can-talk.html' title='StompConnect - Finally, you can talk nativley to any JMS server from any language.'/><author><name>Hiram Chirino</name><uri>http://www.blogger.com/profile/16983993595849131879</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9278084.post-6623897438445898917</id><published>2007-02-20T10:20:00.000-05:00</published><updated>2007-02-20T10:27:45.187-05:00</updated><title type='text'>ActiveMQ Updates</title><content type='html'>Wow, it's been a while since I've posted but several exiting events have been happing in the ActiveMQ arena.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Apache ActiveMQ has &lt;span style="font-weight: bold;"&gt;GRADUATED&lt;/span&gt; out of the incubator and is an official Apache project!&lt;/li&gt;&lt;li&gt;The ActiveMQ website has moved to http://activemq.apache.org and has received a new face lift thanks to yours truly.&lt;/li&gt;&lt;li&gt;ActiveMQ 5.0 development is making huge progress and &lt;a href="http://rajdavies.blogspot.com/index.html"&gt;Rob&lt;/a&gt; has put up an &lt;a href="http://rajdavies.blogspot.com/2007/02/apache-activemq-version-50-broker.html"&gt;excellent post&lt;/a&gt; outlining the upcoming features in the next version of ActiveMQ.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;If you want to get a preview of those features, &lt;a href="http://activemq.apache.org/source.html"&gt;get the latest from the ActiveMQ trunk&lt;/a&gt; and kick it around.  &lt;a href="http://activemq.apache.org/discussion-forums.html"&gt;Feedback&lt;/a&gt; would be appreciated.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='http://res1.blogblog.com/tracker/9278084-6623897438445898917?l=hiramchirino.com%2Fblog'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/6623897438445898917/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9278084&amp;postID=6623897438445898917' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/posts/default/6623897438445898917'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/posts/default/6623897438445898917'/><link rel='alternate' type='text/html' href='http://hiramchirino.com/blog/2007/02/activemq-updates.html' title='ActiveMQ Updates'/><author><name>Hiram Chirino</name><uri>http://www.blogger.com/profile/16983993595849131879</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9278084.post-116103515012267706</id><published>2006-10-16T17:31:00.000-04:00</published><updated>2006-10-16T17:45:50.173-04:00</updated><title type='text'>Web 2.0 Communication Layer: from HTTP to Comet to Internet Mess</title><content type='html'>Checkout this &lt;a href="http://www.theserverside.com/news/thread.tss?thread_id=42641"&gt;server side thread&lt;/a&gt;.  Folks are starting to think about using JavaScript on the browser to access an "Internet Messaging Bus".  They want to have thing like:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Guaranteed delivery&lt;/li&gt;&lt;li&gt;    Once and only once deliveryGuaranteed&lt;/li&gt;&lt;li&gt; order of deliveryServer&lt;/li&gt;&lt;li&gt; push and client pullFunny&lt;/li&gt;&lt;/ul&gt; thing is that most of all that is &lt;a href="http://activemq.org/site/ajax.html"&gt;available today&lt;/a&gt; with &lt;a href="http://activemq.org"&gt;ActiveMQ&lt;/a&gt;!  And to get really great performance, use ActiveMQ with &lt;a href="http://jetty.mortbay.org/"&gt;Jetty&lt;/a&gt;!  ActiveMQ comes with a simple little JavaScript API that allows you to access the ActiveMQ message bus using Comet style http polling.  And ActiveMQ provides you all the above guarantees like all good message brokers.&lt;br /&gt;&lt;br /&gt;Other news on this front is all the Ajax tool kits are starting to look at being able to inter-operate.  At a minimum, a page with multiple tool kits will need to share it's connections back to the server.  So they will need to share an API to broker requests back to the server.  I'll keep an eye out for this API because it sounds like something that could be easily tied into ActiveMQ.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='http://res1.blogblog.com/tracker/9278084-116103515012267706?l=hiramchirino.com%2Fblog'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/116103515012267706/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9278084&amp;postID=116103515012267706' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/posts/default/116103515012267706'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/posts/default/116103515012267706'/><link rel='alternate' type='text/html' href='http://hiramchirino.com/blog/2006/10/web-20-communication-layer-from-http.html' title='Web 2.0 Communication Layer: from HTTP to Comet to Internet Mess'/><author><name>Hiram Chirino</name><uri>http://www.blogger.com/profile/16983993595849131879</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9278084.post-115092081104294189</id><published>2006-06-21T15:50:00.000-04:00</published><updated>2006-10-26T11:07:36.700-04:00</updated><title type='text'>AMQP - An Interesting Start</title><content type='html'>A few days ago the AMQP spec was announced on &lt;a href="http://www.theserverside.com/news/thread.tss?thread_id=41008"&gt;TSS&lt;/a&gt;.  I quickly downloaded the spec and I have some initial impressions.&lt;br /&gt;&lt;br /&gt;#1: I think it's unfortunate that the "AMQP" sounds too much like it has something to do with ActiveMQ which most folks abbreviate to AMQ, as in, "Have you downloaded AMQ 4?".  This along with the fact that AMQ and AMQP are both related technologies, the first is a mom provider and the second is a wire protocol for mom providers.&lt;br /&gt;&lt;br /&gt;#2: This is nice spec.  I like the client specified "binding" concepts introduced in this spec.  Perhaps these concepts can be introduced in higher level APIs like JMS one day.&lt;br /&gt;&lt;br /&gt;#3: It seems that one of the goals of the spec is for vendors to be able to interoperate with each other.  I have got a feeling that specs like WS-Notification or &lt;a href="http://stomp.codehaus.org/"&gt;STOMP&lt;/a&gt; have a better chance at accomplishing this.  Binary wire protocols are hard to implement and I doubt there will be many implementations of it.  If a good open source reference implementation becomes available then this would become more plausible.&lt;br /&gt;&lt;br /&gt;#4: It does not go into details of how the content of the messages should be encoded.  This effectively means that JMS implementations will not be able to interoperate using AMQP since different implementations would encodes the content of a JMS Message differently.  Even for simple things like TextMessage, would they use UTF-8 or ASCII?  And it gets even more complex for messages lke StreamMessage and MapMessage.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#5: I may be wrong, but it seems like messages are always sent asynchronously.  In some cases the JMS spec requires messages to be sent synchronously.  Perhaps transactions can be used to simulate a synchronous send, but wouldn't that add substantial of overhead?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='http://res1.blogblog.com/tracker/9278084-115092081104294189?l=hiramchirino.com%2Fblog'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/115092081104294189/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9278084&amp;postID=115092081104294189' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/posts/default/115092081104294189'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/posts/default/115092081104294189'/><link rel='alternate' type='text/html' href='http://hiramchirino.com/blog/2006/06/amqp-interesting-start.html' title='AMQP - An Interesting Start'/><author><name>Hiram Chirino</name><uri>http://www.blogger.com/profile/16983993595849131879</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9278084.post-115056302665167538</id><published>2006-06-17T12:20:00.000-04:00</published><updated>2006-06-18T22:35:50.173-04:00</updated><title type='text'>Problems with Geronimo and RTC</title><content type='html'>The &lt;a href="http://geronimo.apache.org/"&gt;Apache Geronimo&lt;/a&gt; project has recently changed it's commit policy to a Review then Commit (RTC) policy.  Which means no one can commit to the Geronimo project unless you submit a patch and then get 3 other Geronimo committers to review, apply, test, and then give you 3 +1s.&lt;br /&gt;&lt;br /&gt;In theory, this is supposed to increase the communication between the developers.  In practice, it's looking a little scary.  For example, I just wanted to move some ActiveMQ integration modules from living in the ActiveMQ project to live in the Geronimo project.  Now, before I submitted the patch, everyone agreed that it was good idea.  I submitted the patch and now I have been waiting 12 days to get enough +1s.&lt;br /&gt;&lt;br /&gt;Why is it taking so long?  I think it's because the Geronimo project is bigger than what anybody knows.  But we are lucky to have a large developer base that is specialized in different areas of the server.  This specialization is what allows us to produced a server with high quality parts that in turn give us a high quality server.  I don't go wasting time figuring how what's the best way to implement a Transaction Manager or Deployment system, because I trust the guys that are already working on those pieces.&lt;br /&gt;&lt;br /&gt;With the RTC policy, if I we want to get Transaction Manager patch in, folks that might not know ANYTHING about Transaction Manager are going to be looking at those patch and pretending they understand what's going on and then giving the +/- 1's.  The same thing goes for the developer tooling, JMS Messaging, etc. etc.&lt;br /&gt;&lt;br /&gt;I guess in the long run, it may be good that folks get to know other Geronimo systems besides what they specialize in, but in short term, your going to slow down your development model by at least a factor of 10 (I've already been waiting over 10 days to do something that used to take me 10 seconds).  Furthermore, since Geronimo is playing feature catch up, most developers already have enough on their plates, I doubt they also want to review and test other folks patches x3 if the previous development pace is to be sustained.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='http://res1.blogblog.com/tracker/9278084-115056302665167538?l=hiramchirino.com%2Fblog'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/115056302665167538/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9278084&amp;postID=115056302665167538' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/posts/default/115056302665167538'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/posts/default/115056302665167538'/><link rel='alternate' type='text/html' href='http://hiramchirino.com/blog/2006/06/problems-with-geronimo-and-rtc.html' title='Problems with Geronimo and RTC'/><author><name>Hiram Chirino</name><uri>http://www.blogger.com/profile/16983993595849131879</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9278084.post-115033788517949817</id><published>2006-06-14T22:10:00.000-04:00</published><updated>2006-06-15T15:25:14.166-04:00</updated><title type='text'>Getting Involved with Open Source</title><content type='html'>I have a younger brother-in-law that also went in to software development field, and he thinks that I'm the luckiest guy in the world since my day job is basically working on open source projects.  Every once in a while he asks me, "How can I get more involved with open source?".&lt;br /&gt;&lt;br /&gt;I always say, just find a project that you like and start contributing to it.  So far, not much has happened... So Jason, screw that "find a project" stuff.. How about you pick up this &lt;a href="http://issues.apache.org/activemq/browse/AMQ-753"&gt;issue&lt;/a&gt;, and implement it?  It's a small little feature that lots of folks would find handy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='http://res1.blogblog.com/tracker/9278084-115033788517949817?l=hiramchirino.com%2Fblog'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/115033788517949817/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9278084&amp;postID=115033788517949817' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/posts/default/115033788517949817'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/posts/default/115033788517949817'/><link rel='alternate' type='text/html' href='http://hiramchirino.com/blog/2006/06/getting-involved-with-open-source.html' title='Getting Involved with Open Source'/><author><name>Hiram Chirino</name><uri>http://www.blogger.com/profile/16983993595849131879</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9278084.post-114901253538957965</id><published>2006-05-30T14:04:00.000-04:00</published><updated>2006-05-30T14:08:55.390-04:00</updated><title type='text'>Blog URL Moved</title><content type='html'>Since I hate to be dependent on 3rd party services and URLs, I moved my Blog URL to a URL that I own: &lt;a href="http://hiramchirino.com"&gt;http://hiramchirino.com&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;They funny thing is that blogspot wasted no time when I changed how I published my blog, and someone else snatched up my old blogbucket.blogspot.com url.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='http://res1.blogblog.com/tracker/9278084-114901253538957965?l=hiramchirino.com%2Fblog'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/114901253538957965/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9278084&amp;postID=114901253538957965' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/posts/default/114901253538957965'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/posts/default/114901253538957965'/><link rel='alternate' type='text/html' href='http://hiramchirino.com/blog/2006/05/blog-url-moved.html' title='Blog URL Moved'/><author><name>Hiram Chirino</name><uri>http://www.blogger.com/profile/16983993595849131879</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9278084.post-114834470526741425</id><published>2006-05-22T19:40:00.000-04:00</published><updated>2006-05-22T20:38:25.296-04:00</updated><title type='text'>Beefing up Kaha</title><content type='html'>&lt;a href="http://rajdavies.blogspot.com/"&gt;Rob Davies&lt;/a&gt; and I spent some time last week looking at his &lt;a href="http://rajdavies.blogspot.com/2006/04/file-store-persistence-for-activemq.html"&gt;Kaha&lt;/a&gt; message store implementation.  In a way, it's similar to a experimental QuickJournal implementation that I had committed previously.  The idea of the QuickJournal was that Journal log files were not deleted and that messages could be easily retrieved from the Journal.  The journal would only checkpoint to the long term store the location of where the messages are located in the journal.&lt;br /&gt;&lt;br /&gt;In a way, the long term store (JDBC in most cases) is being used like an index into the Journal files.  This increases the performance of the journal since the amount of data that needs to be stored in long term store is drastically reduced and generally of a small size which works better with JDBC batch operations.  Also messages do not need to be batched up in memory (for batch insertion into the DB) thus reducing the memory impact of the message store.&lt;br /&gt;&lt;br /&gt;The funny part is that at some time last week, somehow a wager got started about who could build the fastest message store implementation that could stay under 64 megs of memory usage when a queue was loaded up with 10,000,00 1k messages.  Kaha at the current time keeps it's indexes fully in memory.  So Rob started looking into a way to optimize the down so that they could fit in 64 megs (Rob is the optimization King BTW).  I went down the route of we need to only load parts of the index into memory.  I even shared my algorithm concept with him as long as he did not use it, LOL.   In the end we realized, it was not going to be a weekend deal to implement this stuff and it would be best to work on a single solution together.&lt;br /&gt;&lt;br /&gt;Kaha, IS a nice API and is much more general purpose than the MessageStore APIs.  Some of the problems that Kaha currently has is that it does not guarantee constancy of the indexes and it does not support transactional operations.  Those are 2 things that the journal can do today, and which Kaha could do if we modified it's DataManager so that it journaled operations instead of just storing data items.  So I'm going to try to integrate many of the Journal concepts into the DataManager so that:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The data file acts as a redo log that is 'replayed' on startup to bring the indexes to a consistent state&lt;/li&gt;&lt;li&gt;Use async batch writes for increased throughput: micro benchmarks showed that the journal can write at about 21 megs/s while the current DataManager maxes out at 8 megs/s&lt;/li&gt;&lt;/ul&gt;Other things to consider is that since the interfaces to the Kaha APIs are based on the List and Map interfaces, there is no easy way to:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;switch between doing async and sync operations against the data files.  Currently Kaha has a force() method on the store that does syncs up any pending write but this is not optimal when using async batched writes (you end up syncing on a subsequent write).&lt;/li&gt;&lt;li&gt;associate a transaction with a operation against a list or a map&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;An idea I've been floating in my head is the ability to have multiple proxies to a single physical container.  Each proxy could be enlisted in a different transaction or it's flag to do sync vs. async actions changed.&lt;br /&gt;&lt;br /&gt;As you might be able to tell by now, I'm on the Kaha crack now... bless Rob.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='http://res1.blogblog.com/tracker/9278084-114834470526741425?l=hiramchirino.com%2Fblog'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/114834470526741425/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9278084&amp;postID=114834470526741425' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/posts/default/114834470526741425'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/posts/default/114834470526741425'/><link rel='alternate' type='text/html' href='http://hiramchirino.com/blog/2006/05/beefing-up-kaha.html' title='Beefing up Kaha'/><author><name>Hiram Chirino</name><uri>http://www.blogger.com/profile/16983993595849131879</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9278084.post-114833528601861069</id><published>2006-05-22T17:14:00.000-04:00</published><updated>2007-01-04T10:38:01.476-05:00</updated><title type='text'>A Closer Look at the Gigantic Destination Nut</title><content type='html'>I exposed the gigantic destination issues that &lt;a href="http://activemq.org"&gt;ActiveMQ&lt;/a&gt; has in a &lt;a href="http://blogbucket.blogspot.com/2006/05/scaling-to-gigantic-queues-and-topics.html"&gt;previous blog post&lt;/a&gt;.  I'll take a little time to expand on the issue and why it's not simple to solve, and what ActiveMQ 4.0 does today.&lt;br /&gt;&lt;br /&gt;It's obvious that we need to swap messages to disk when a queue needs to hold more messages than it could hold in RAM.  We sometimes also call that spooling messages to disk.  The issues that make this hard to implement are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Writing a message to disk slows you down a little, avoid it if possible.  Sometimes you have no choice if the message was marked a persistent.&lt;/li&gt;&lt;li&gt;Sometimes we may need to swap out even non-persistent messages.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Avoid chucking a message out of ram if possible since loading it back from disk is REALLY slow.&lt;/li&gt;&lt;li&gt;When a consumer is ready to consume a message, that message should already be in memory, waiting for it to load from disk will lead to consumer starvation.&lt;/li&gt;&lt;li&gt;Even keeping lists of message references to where messages are on disk can use up too much memory.  10,000,000 disk locations in a linked list where every node in the list used only 100 bytes would still chew up about 100 megs of memory.&lt;/li&gt;&lt;/ul&gt;ActiveMQ 4.0 takes a simple approach and when sending persistent message to a Queue, it uses a MessageReference when moving a message though the Broker message dispatch process.  A process that could take a while for a message to go from producer to a consumer and finally message acknowledgement.  The MessageReference starts out being direct, in that it hold a reference to the message to keep it in RAM, but if the reference count drops below 1, then the direct reference is dropped.  The reference count is allowed to drop to 0 when the message is just sitting in the Queue's message list or in a consumer's pending list.  The reference count is &gt; 0 while it's being dispatched to a consumer.  The MessageReference knows how to reload a Message from the peristence store when it's reference count goes up above 0.&lt;br /&gt;&lt;br /&gt;This is a quick and dirty fix and it works, but it obviously does not fix all the issues outlined initial.  The shortcomings of the current solution is that:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;it is only implemented for Queues&lt;/li&gt;&lt;li&gt;consumer starvation problem can exist since it does not persisted load messages asynchronously&lt;/li&gt;&lt;li&gt;it keeps a list of MessageReference objects which can still exhaust JVM memory&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='http://res1.blogblog.com/tracker/9278084-114833528601861069?l=hiramchirino.com%2Fblog'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/114833528601861069/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9278084&amp;postID=114833528601861069' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/posts/default/114833528601861069'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/posts/default/114833528601861069'/><link rel='alternate' type='text/html' href='http://hiramchirino.com/blog/2006/05/closer-look-at-gigantic-destination.html' title='A Closer Look at the Gigantic Destination Nut'/><author><name>Hiram Chirino</name><uri>http://www.blogger.com/profile/16983993595849131879</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9278084.post-114832752848793507</id><published>2006-05-22T15:36:00.000-04:00</published><updated>2006-05-22T18:43:24.190-04:00</updated><title type='text'>Mapping Beans to REST</title><content type='html'>I'm one of those guys that thinks that REST is great technology.  Sure, REST is does not do everything that SOAP can do, but I think that REST is built to be SIMPLE, something that SOAP and it's WS-* buddies forgot about.&lt;br /&gt;&lt;br /&gt;What we are missing is a good standard way to map REST to the simple POJO programming model that most of the Java industry has been quickly adopting.  Seems &lt;a href="http://netzooid.com/blog/2006/05/22/an-attempt-at-a-rest-programming-model/"&gt;SeXFire Dan&lt;/a&gt; has good start on a way of &lt;a href="http://netzooid.com/blog/2006/05/22/an-attempt-at-a-rest-programming-model/"&gt;doing that&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;Dan if you read this, I would make it even simpler if by default the method names for a service are determined by convention.  For example, for a given XService, the methods: &lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;getX(...) : is automatically mapped to a HttpMethod.GET&lt;br /&gt;deleteX(...): is automatically mapped to a HttpMethod.DELETE&lt;br /&gt;addX(...): is automatically mapped to HttpMethod.POST&lt;br /&gt;updateX(...): is automatically mapped to a HttpMethod.PUT&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='http://res1.blogblog.com/tracker/9278084-114832752848793507?l=hiramchirino.com%2Fblog'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/114832752848793507/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9278084&amp;postID=114832752848793507' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/posts/default/114832752848793507'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9278084/posts/default/114832752848793507'/><link rel='alternate' type='text/html' href='http://hiramchirino.com/blog/2006/05/mapping-beans-to-rest.html' title='Mapping Beans to REST'/><author><name>Hiram Chirino</name><uri>http://www.blogger.com/profile/16983993595849131879</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry></feed>