<?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' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1045160544820320988</id><updated>2011-09-15T22:14:26.591-07:00</updated><title type='text'>Colin MacNaughton's Blog</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://colinmacnaughton.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1045160544820320988/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://colinmacnaughton.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Colin MacNaughton</name><uri>http://www.blogger.com/profile/10473252971113028218</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TWU3Fz2Kuw8/Seo9ucfF9fI/AAAAAAAAAAM/5-xWHKaZEO8/S220/colin.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>3</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1045160544820320988.post-1053795719739296898</id><published>2009-12-14T07:17:00.000-08:00</published><updated>2009-12-14T07:21:52.058-08:00</updated><title type='text'>Mop 1.0-m1</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://mop.fusesource.org/images/mop-logo.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 160px; height: 160px;" src="http://mop.fusesource.org/images/mop-logo.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;If you're a Maven user, or better yet if you're a user of software that is published in a Maven repo, checkout &lt;a href="http://hiramchirino.com/blog/2009/12/mop-1-0-milestone-1-released/"&gt;Hiram's Blog post&lt;/a&gt; on &lt;a href="http://mop.fusesource.org/"&gt;Mop.&lt;/a&gt; Mop is a cool utility that downloads and executes Java apps (and all of their dependencies) from Maven repos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1045160544820320988-1053795719739296898?l=colinmacnaughton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://colinmacnaughton.blogspot.com/feeds/1053795719739296898/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://colinmacnaughton.blogspot.com/2009/12/mop-10-m1.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1045160544820320988/posts/default/1053795719739296898'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1045160544820320988/posts/default/1053795719739296898'/><link rel='alternate' type='text/html' href='http://colinmacnaughton.blogspot.com/2009/12/mop-10-m1.html' title='Mop 1.0-m1'/><author><name>Colin MacNaughton</name><uri>http://www.blogger.com/profile/10473252971113028218</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TWU3Fz2Kuw8/Seo9ucfF9fI/AAAAAAAAAAM/5-xWHKaZEO8/S220/colin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1045160544820320988.post-800621754996890685</id><published>2009-12-10T11:30:00.000-08:00</published><updated>2009-12-14T08:40:00.574-08:00</updated><title type='text'>MeshKeeper 1.0-m1 released!</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://meshkeeper.fusesource.org/images/meshkeeper-logo.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img src="http://meshkeeper.fusesource.org/images/meshkeeper-logo.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;I'm please to introduce our first milestone release of &lt;a href="http://meshkeeper.fusesource.org/index.html"&gt;MeshKeeper&lt;/a&gt;! &lt;strong&gt; &lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;MeshKeeper&lt;/strong&gt; is a platform of services that allow Java applications to discover, launch, coordinate, and control remote processes across a grid of computers.&lt;br /&gt;&lt;br /&gt;My colleague &lt;a href="http://hiramchirino.com/blog/"&gt;Hiram Chirino&lt;/a&gt; and I developed MeshKeeper to assist us in creating robust distributed tests for &lt;a href="http://fusesource.com/products/enterprise-activemq/"&gt;Fuse Message Broker&lt;/a&gt; based on &lt;a href="http://activemq.apache.org/"&gt;ActiveMQ&lt;/a&gt;. We wanted an easy, dynamic and platform agnostic mechanism for distributing test objects around a grid of machines.&lt;br /&gt;&lt;br /&gt;At the most basic level MeshKeeper is process launching framework. It consists of a MeshKeeper control server and any number of agents listening for requests to launch processes:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_TWU3Fz2Kuw8/SyFF8-v_qlI/AAAAAAAAAAw/M4OYuvkV4Yw/s1600-h/diagram-3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img src="http://2.bp.blogspot.com/_TWU3Fz2Kuw8/SyFF8-v_qlI/AAAAAAAAAAw/M4OYuvkV4Yw/s320/diagram-3.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;At the process launching level, MeshKeeper gives you the ability to discover agents and allows you to launch, monitor and destroy processes in your grid. We've tried very hard to make getting started easy. From an application standpoint all you need to do is include the &lt;a href="http://meshkeeper.fusesource.org/repo/release/org/fusesource/meshkeeper/meshkeeper-api/1.0-m1/meshkeeper-api-1.0-m1.jar"&gt;MeshKeeper api jar&lt;/a&gt; on your classpath, and you can start launching processes. MeshKeeper will deploy an embedded control server and launch agent under the covers.&lt;br /&gt;&lt;br /&gt;But that is just a small piece of what MeshKeeper provides. The &lt;a href="http://meshkeeper.fusesource.org/maven/1.0-m1/apidocs/org/fusesource/meshkeeper/MeshKeeper.html"&gt;MeshKeeper API&lt;/a&gt; provides several different interfaces that allow you to easily work with distributed java components:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_TWU3Fz2Kuw8/SyFH47FVSxI/AAAAAAAAAA4/pCnTrn1y42U/s1600-h/diagram-1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img src="http://4.bp.blogspot.com/_TWU3Fz2Kuw8/SyFH47FVSxI/AAAAAAAAAA4/pCnTrn1y42U/s320/diagram-1.png" border="0" /&gt;&lt;/a&gt;&lt;b&gt; &lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Check out the &lt;a href="http://meshkeeper.fusesource.org/"&gt;MeshKeeper &lt;/a&gt;website for examples relating to these interfaces (some not done yet :))&lt;br /&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Launching: &lt;/b&gt;Allows you to launch processes in a platform neutral fashion throughout the grid. This also provides mechanism for distributing your local classpath to remotely launched java applications. &lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Remoting: &lt;/b&gt;Allows you export java objects in the grid and let's you perform RMI style invocation on them&lt;/li&gt;&lt;li&gt;&lt;b&gt;Registry:&lt;/b&gt;Allows you to discover registered objects or data in the grid (quite powerful when combined with Remoting)&lt;/li&gt;&lt;li&gt;&lt;b&gt;Eventing:&lt;/b&gt; Once you've distributed your objects in the grid, Eventing helps you coordinate their activity.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Repository: &lt;/b&gt;Let's you distribute artifacts (files, jvms etc) in the grid for use by distributed components.  &lt;/li&gt;&lt;/ul&gt;MeshKeeper also provides a really lightweight container that allows you to host your java objects on target machines.&lt;br /&gt;&lt;br /&gt;I could go into a lot of detail about each of these, but for the sake of brevity once it's all put together you can do things like:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="color: rgb(0, 136, 136); font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0, 136, 136); font-weight: bold;"&gt;static&lt;/span&gt; &lt;span style="color: rgb(51, 51, 153); font-weight: bold;"&gt;class&lt;/span&gt; &lt;span style="color: rgb(187, 0, 102); font-weight: bold;"&gt;MyClass&lt;/span&gt; &lt;span style="color: rgb(0, 136, 136); font-weight: bold;"&gt;implements&lt;/span&gt; &lt;span style="color: rgb(51, 68, 153); font-weight: bold;"&gt;Serializable&lt;/span&gt;{  &lt;span style="color: rgb(0, 136, 136); font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: rgb(51, 68, 153); font-weight: bold;"&gt;Properties&lt;/span&gt; getSystemProperties()  {    &lt;span style="color: rgb(0, 136, 0); font-weight: bold;"&gt;return&lt;/span&gt; &lt;span style="color: rgb(51, 68, 153); font-weight: bold;"&gt;System&lt;/span&gt;.getProperties();  }}&lt;span style="color: rgb(0, 136, 136); font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: rgb(51, 51, 153); font-weight: bold;"&gt;void&lt;/span&gt; hostMyClass() &lt;span style="color: rgb(0, 136, 136); font-weight: bold;"&gt;throws&lt;/span&gt; &lt;span style="color: rgb(51, 68, 153); font-weight: bold;"&gt;Exception&lt;/span&gt;{  MeshKeeper mk = MeshKeeperFactory.createMeshKeeper();  MeshContainer container = mk.launcher().launchMeshContainer(&lt;span style="background-color: rgb(255, 240, 240); color: rgb(221, 34, 0);"&gt;&lt;span style="color: rgb(119, 17, 0);"&gt;"&lt;/span&gt;&lt;span&gt;fastbox&lt;/span&gt;&lt;span style="color: rgb(119, 17, 0);"&gt;"&lt;/span&gt;&lt;/span&gt;);  &lt;span style="color: rgb(136, 136, 136);"&gt;//Returns a proxy version of my class using MeshKeeper Remoting&lt;/span&gt;  &lt;span style="color: rgb(136, 136, 136);"&gt;//support:&lt;/span&gt;  MyClass myClass = container.host(&lt;span style="background-color: rgb(255, 240, 240); color: rgb(221, 34, 0);"&gt;&lt;span style="color: rgb(119, 17, 0);"&gt;"&lt;/span&gt;&lt;span&gt;propFinder&lt;/span&gt;&lt;span style="color: rgb(119, 17, 0);"&gt;"&lt;/span&gt;&lt;/span&gt;, &lt;span style="color: rgb(0, 136, 0); font-weight: bold;"&gt;new&lt;/span&gt; MyClass());  &lt;span style="color: rgb(136, 136, 136);"&gt;//We can use the proxy to print the system properties on the&lt;/span&gt;  &lt;span style="color: rgb(136, 136, 136);"&gt;//target system. &lt;/span&gt;  myClass.getSystemProperties().list(&lt;span style="color: rgb(51, 68, 153); font-weight: bold;"&gt;System&lt;/span&gt;.out);    &lt;span style="color: rgb(136, 136, 136);"&gt;//If we don't need it anymore unhost&lt;/span&gt;  container.unhost(&lt;span style="background-color: rgb(255, 240, 240); color: rgb(221, 34, 0);"&gt;&lt;span style="color: rgb(119, 17, 0);"&gt;"&lt;/span&gt;&lt;span&gt;propFinder&lt;/span&gt;&lt;span style="color: rgb(119, 17, 0);"&gt;"&lt;/span&gt;&lt;/span&gt;);  container.kill(); }&lt;/pre&gt;&lt;br /&gt;In the above snippet, we create a MeshContainer on the agent machine called "fastbox" using your application's classpath. We then host MyClass in the container (under the covers using Remoting) ... the only requirement is that MyClass be Serializable.  Once it's there we can invoke methods on it just as if it were running in our own jvm! In this example we simply get the host machine's System properties and list them locally.&lt;br /&gt;&lt;br /&gt;Anyway, give MeshKeeper a try and &lt;a href="http://meshkeeper.fusesource.org/community.html"&gt;let us know what you think&lt;/a&gt;!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1045160544820320988-800621754996890685?l=colinmacnaughton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://colinmacnaughton.blogspot.com/feeds/800621754996890685/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://colinmacnaughton.blogspot.com/2009/12/meshkeeper-10-m1-released.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1045160544820320988/posts/default/800621754996890685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1045160544820320988/posts/default/800621754996890685'/><link rel='alternate' type='text/html' href='http://colinmacnaughton.blogspot.com/2009/12/meshkeeper-10-m1-released.html' title='MeshKeeper 1.0-m1 released!'/><author><name>Colin MacNaughton</name><uri>http://www.blogger.com/profile/10473252971113028218</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TWU3Fz2Kuw8/Seo9ucfF9fI/AAAAAAAAAAM/5-xWHKaZEO8/S220/colin.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_TWU3Fz2Kuw8/SyFF8-v_qlI/AAAAAAAAAAw/M4OYuvkV4Yw/s72-c/diagram-3.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1045160544820320988.post-220549311364543027</id><published>2009-10-19T13:50:00.000-07:00</published><updated>2009-10-19T14:06:51.178-07:00</updated><title type='text'>RMI vi JMS 1.0</title><content type='html'>Hiram just released &lt;a href="http://rmiviajms.fusesource.org/index.html"&gt;RMI via JMS 1.0&lt;/a&gt;! Check out his blog post &lt;a href="http://hiramchirino.com/blog/2009/10/rmi-via-jms-1-0-released/"&gt;here&lt;/a&gt;. It takes regular old &lt;a href="http://java.sun.com/docs/books/tutorial/rmi/index.html"&gt;java.rmi&lt;/a&gt;, and makes it much easier to use. I find regular rmi to be pretty irritating since it requires your remoted objects to implement the &lt;a href="http://java.sun.com/j2se/1.4.2/docs/api/java/rmi/Remote.html"&gt;Remote&lt;/a&gt; interface and throw &lt;a href="http://java.sun.com/j2se/1.4.2/docs/api/java/rmi/RemoteException.html"&gt;RemoteException&lt;/a&gt;s. RMI via JMS loosens up these restrictions making it easier to convert your existing application interfaces into remote ones.&lt;br /&gt;&lt;br /&gt;And as Hiram points out it throws in a bit of ASM trickery through cglib, so you don't even have to export your classes with interface specifications to begin with (though it's probably still a good idea to do so).&lt;br /&gt;&lt;br /&gt;Beyond that it allows asynchronous method invocations with the use of rmiviajms's @oneway annotation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1045160544820320988-220549311364543027?l=colinmacnaughton.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://colinmacnaughton.blogspot.com/feeds/220549311364543027/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://colinmacnaughton.blogspot.com/2009/10/rmi-vi-jms-10.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1045160544820320988/posts/default/220549311364543027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1045160544820320988/posts/default/220549311364543027'/><link rel='alternate' type='text/html' href='http://colinmacnaughton.blogspot.com/2009/10/rmi-vi-jms-10.html' title='RMI vi JMS 1.0'/><author><name>Colin MacNaughton</name><uri>http://www.blogger.com/profile/10473252971113028218</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TWU3Fz2Kuw8/Seo9ucfF9fI/AAAAAAAAAAM/5-xWHKaZEO8/S220/colin.jpg'/></author><thr:total>0</thr:total></entry></feed>
