<?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-4793616645740977627</id><updated>2011-11-10T00:45:51.485-05:00</updated><title type='text'>Service Activator Toolkit</title><subtitle type='html'>The easy way to build service-oriented applications with OSGi</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://eclipse-sat.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4793616645740977627/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://eclipse-sat.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Simon Archer</name><uri>http://www.blogger.com/profile/03583004412891607822</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://1.bp.blogspot.com/-6mr5ibkGEEk/Trtk7DXXpFI/AAAAAAAAAHQ/hrkY0yw2gX4/s220/simon2011.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>21</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4793616645740977627.post-832927842212632302</id><published>2010-02-02T13:07:00.002-05:00</published><updated>2010-02-02T13:24:10.917-05:00</updated><title type='text'>Working with OSGi: The stuff you need to know</title><content type='html'>I am presenting a &lt;a href="http://www.eclipsecon.org/2010/sessions/?page=sessions&amp;amp;id=1140" target="_blank"&gt;tutorial&lt;/a&gt; at &lt;a href="http://www.eclipsecon.org/2010" target="_blank"&gt;EclipseCon 2010&lt;/a&gt; with Paul VanderLei and Jeff McAffer that is based on the contents of our soon to be published &lt;a href="http://my.safaribooksonline.com/9780321561510" target="_blank"&gt;OSGi and Equinox book&lt;/a&gt;.&lt;br /&gt;&lt;a href="http://www.eclipsecon.org/2010/"&gt;&lt;br /&gt;&lt;img border="0" src="http://www.eclipsecon.org/2010/static/image/130x100_speaking.gif" height="100" width="130" alt="I'm speaking at EclipseCon 2010" /&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;The conference runs from Monday 22nd March until the 25th. We hear that there will be plenty of copies of the book available, so be sure to pick one up while you're there!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4793616645740977627-832927842212632302?l=eclipse-sat.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclipse-sat.blogspot.com/feeds/832927842212632302/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4793616645740977627&amp;postID=832927842212632302' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4793616645740977627/posts/default/832927842212632302'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4793616645740977627/posts/default/832927842212632302'/><link rel='alternate' type='text/html' href='http://eclipse-sat.blogspot.com/2010/02/working-with-osgi-stuff-you-need-to.html' title='Working with OSGi: The stuff you need to know'/><author><name>Simon Archer</name><uri>http://www.blogger.com/profile/03583004412891607822</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://1.bp.blogspot.com/-6mr5ibkGEEk/Trtk7DXXpFI/AAAAAAAAAHQ/hrkY0yw2gX4/s220/simon2011.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4793616645740977627.post-8670975814860151402</id><published>2009-11-27T15:47:00.001-05:00</published><updated>2009-11-27T15:47:59.464-05:00</updated><title type='text'>Safari Updated!</title><content type='html'>The manuscript for our OSGi and Equinox book has been updated on &lt;a href="http://www.facebook.com/l.php?u=http%253A%252F%252Fmy.safaribooksonline.com%252F9780321561510&amp;h=c0e0babc205ec7d475eeb0460d5a4a3f&amp;ref=nf"&gt;Safari&lt;/a&gt;. The manuscript is now in the hands of the publisher and is due to be on shelves at the start of 2010. Too late for Christmas, but not for EclipseCon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4793616645740977627-8670975814860151402?l=eclipse-sat.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclipse-sat.blogspot.com/feeds/8670975814860151402/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4793616645740977627&amp;postID=8670975814860151402' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4793616645740977627/posts/default/8670975814860151402'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4793616645740977627/posts/default/8670975814860151402'/><link rel='alternate' type='text/html' href='http://eclipse-sat.blogspot.com/2009/11/safari-updated.html' title='Safari Updated!'/><author><name>Simon Archer</name><uri>http://www.blogger.com/profile/03583004412891607822</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://1.bp.blogspot.com/-6mr5ibkGEEk/Trtk7DXXpFI/AAAAAAAAAHQ/hrkY0yw2gX4/s220/simon2011.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4793616645740977627.post-1944753016718670926</id><published>2008-12-30T23:31:00.004-05:00</published><updated>2009-01-07T09:11:15.643-05:00</updated><title type='text'>Truth, Technology and People</title><content type='html'>I'm reading an excellent novel, which was written in 1957, that contains the following interesting quote that caught my eye:&lt;blockquote&gt;"It is only in the realm of pure science that truth is an absolute criterion. When we deal with applied science, with technology - we deal with people.  And when we deal with people, considerations other than truth enter the question."&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4793616645740977627-1944753016718670926?l=eclipse-sat.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclipse-sat.blogspot.com/feeds/1944753016718670926/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4793616645740977627&amp;postID=1944753016718670926' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4793616645740977627/posts/default/1944753016718670926'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4793616645740977627/posts/default/1944753016718670926'/><link rel='alternate' type='text/html' href='http://eclipse-sat.blogspot.com/2008/12/truth-technology-and-people.html' title='Truth, Technology and People'/><author><name>Simon Archer</name><uri>http://www.blogger.com/profile/03583004412891607822</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://1.bp.blogspot.com/-6mr5ibkGEEk/Trtk7DXXpFI/AAAAAAAAAHQ/hrkY0yw2gX4/s220/simon2011.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4793616645740977627.post-3850276160648971868</id><published>2008-11-26T17:18:00.003-05:00</published><updated>2008-11-26T17:32:31.041-05:00</updated><title type='text'>EclipseCon 2009 Submissions</title><content type='html'>Time is short for &lt;a href="http://www.eclipsecon.org/2009" target="_blank"&gt;EclipseCon 2009&lt;/a&gt; submissions! All submissions must be in by 28th November, so consider &lt;a href="http://www.eclipsecon.org/2009/submissions" target="_blank"&gt;submitting&lt;/a&gt; something now. In the meantime, check out my submissions:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Long Talk: &lt;a href="https://www.eclipsecon.org/submissions/2009/view_talk.php?id=564" target="_blank"&gt;Best and Worst Practices for OSGi&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Tutorial: &lt;a href="https://www.eclipsecon.org/submissions/2009/view_talk.php?id=566" target="_blank"&gt;Build an OSGi Application from the Ground Up&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4793616645740977627-3850276160648971868?l=eclipse-sat.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclipse-sat.blogspot.com/feeds/3850276160648971868/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4793616645740977627&amp;postID=3850276160648971868' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4793616645740977627/posts/default/3850276160648971868'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4793616645740977627/posts/default/3850276160648971868'/><link rel='alternate' type='text/html' href='http://eclipse-sat.blogspot.com/2008/11/eclipsecon-2009-submissions.html' title='EclipseCon 2009 Submissions'/><author><name>Simon Archer</name><uri>http://www.blogger.com/profile/03583004412891607822</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://1.bp.blogspot.com/-6mr5ibkGEEk/Trtk7DXXpFI/AAAAAAAAAHQ/hrkY0yw2gX4/s220/simon2011.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4793616645740977627.post-3641120068387768886</id><published>2008-11-19T12:30:00.006-05:00</published><updated>2008-11-19T12:40:38.794-05:00</updated><title type='text'>Rough Cuts</title><content type='html'>Our first Rough Cuts edition of &lt;b&gt;Equinox and OSGi: The Power Behind Eclipse&lt;/b&gt; is available &lt;a href="http://safari.peachpit.com/9780321561510"&gt;online&lt;/a&gt; now!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://safari.peachpit.com/9780321561510"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 76px; height: 100px;" src="http://1.bp.blogspot.com/_6NjT_1nSTTA/SSRPDe4xdoI/AAAAAAAAACo/XLzrjdm-Jug/s200/osgi_book.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5270424385179711106" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4793616645740977627-3641120068387768886?l=eclipse-sat.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclipse-sat.blogspot.com/feeds/3641120068387768886/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4793616645740977627&amp;postID=3641120068387768886' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4793616645740977627/posts/default/3641120068387768886'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4793616645740977627/posts/default/3641120068387768886'/><link rel='alternate' type='text/html' href='http://eclipse-sat.blogspot.com/2008/11/rough-cuts.html' title='Rough Cuts'/><author><name>Simon Archer</name><uri>http://www.blogger.com/profile/03583004412891607822</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://1.bp.blogspot.com/-6mr5ibkGEEk/Trtk7DXXpFI/AAAAAAAAAHQ/hrkY0yw2gX4/s220/simon2011.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_6NjT_1nSTTA/SSRPDe4xdoI/AAAAAAAAACo/XLzrjdm-Jug/s72-c/osgi_book.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4793616645740977627.post-6988982799293779501</id><published>2008-11-18T14:32:00.004-05:00</published><updated>2008-11-18T14:59:25.163-05:00</updated><title type='text'>OSGi Book in the Works</title><content type='html'>As you might have heard by now, I'm working with Jeff McAffer and Paul Vanderlei on an OSGi book.  The book will be published by Addison-Wesley and will be part of the &lt;a href="http://www.informit.com/imprint/series_detail.aspx?st=61273" target="_blank"&gt;Eclipse Series&lt;/a&gt;. The working title is &lt;b&gt;Equinox and OSGi: The Power Behind Eclipse&lt;/b&gt;, and you can even find it listed by &lt;a href="http://www.amazon.com/Equinox-OSGi-Power-Behind-Eclipse/dp/0321585712/ref=sr_1_2?ie=UTF8&amp;s=books&amp;qid=1226264736&amp;sr=1-2" target="_blank"&gt;Amazon&lt;/a&gt;, but the book won't be available until 2009.&lt;br /&gt;&lt;br /&gt;The book is firstly an OSGi book, and secondly an Equinox book, and it covers many of the best practices that we have learned from building real-world OSGi applications. The bulk of the book is a tutorial that develops an application as you proceed through the chapters.  There's also some deep dive chapters that attempt to discuss more complicated issues in detail.&lt;br /&gt;&lt;br /&gt;We've just submitted some chapters to be published online under the &lt;a href="http://www.informit.com/promotions/promotion.aspx?promo=135396" target="_blank"&gt;Rough Cuts&lt;/a&gt; program, so be sure to check it out! There's also a &lt;a href="http://equinoxosgi.blogspot.com/" target="_blank"&gt;blog&lt;/a&gt; dedicated to the book that we intend to update as we get closer to the publication date.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4793616645740977627-6988982799293779501?l=eclipse-sat.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclipse-sat.blogspot.com/feeds/6988982799293779501/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4793616645740977627&amp;postID=6988982799293779501' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4793616645740977627/posts/default/6988982799293779501'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4793616645740977627/posts/default/6988982799293779501'/><link rel='alternate' type='text/html' href='http://eclipse-sat.blogspot.com/2008/11/osgi-book-in-works.html' title='OSGi Book in the Works'/><author><name>Simon Archer</name><uri>http://www.blogger.com/profile/03583004412891607822</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://1.bp.blogspot.com/-6mr5ibkGEEk/Trtk7DXXpFI/AAAAAAAAAHQ/hrkY0yw2gX4/s220/simon2011.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4793616645740977627.post-6651758126332864661</id><published>2008-06-13T20:50:00.004-05:00</published><updated>2008-06-13T21:14:43.308-05:00</updated><title type='text'>Working with Multiple LogServices</title><content type='html'>The fact that there can be multiple registered services of a particular type can sometimes be problematic. Consider the &lt;code&gt;LogService&lt;/code&gt; and it's cousin the &lt;code&gt;LogReaderService&lt;/code&gt;.  When there are multiple registered &lt;code&gt;LogService&lt;/code&gt; and &lt;code&gt;LogReaderService&lt;/code&gt; pairs it can be tricky for an application to be able to present a single view of the application's logged messages.&lt;br /&gt;&lt;br /&gt;It is this reason that SAT now has a &lt;a href="http://vanderleiindustries.com/sat/help/topic/org.eclipse.soda.sat.plugin.doc.reference/books/runtime/api-reference/org/eclipse/soda/sat/core/service/LogReaderAggregatorService.html" target="_blank"&gt;&lt;code&gt;LogReaderAggregatorService&lt;/code&gt;&lt;/a&gt;.  As its name implies, it aggregates each registered &lt;code&gt;LogReaderService&lt;/code&gt; and presents a single service API with which to work with the application's entire log. The &lt;code&gt;LogReaderAggregatorService&lt;/code&gt; is straight forward:&lt;br /&gt;&lt;pre&gt;public interface LogReaderAggregatorService extends LogReaderService {&lt;br /&gt;  public Enumeration/*&amp;lt;LogEntry&amp;gt;*/ getLogInOrder();&lt;br /&gt;  public boolean isLoggingToConsole();&lt;br /&gt;  public void setLogToConsole(boolean logToConsole);&lt;br /&gt;}&lt;/pre&gt; Since the interface extends the OSGi-defined &lt;a href="http://www.osgi.org/javadoc/r4/org/osgi/service/log/LogReaderService.html" target="_blank"&gt;&lt;code&gt;LogReaderService&lt;/code&gt;&lt;/a&gt; you can use the API you're familiar with, such as &lt;code&gt;getLog()&lt;/code&gt;, but of course what you'll get back is an &lt;code&gt;Enumeration&lt;/code&gt; of every  &lt;code&gt;LogEvent&lt;/code&gt; for every registered &lt;code&gt;LogReaderService&lt;/code&gt;, in reverse chronological order.&lt;br /&gt;&lt;br /&gt;The &lt;code&gt;LogReaderAggregatorService&lt;/code&gt; interfaces adds the method &lt;code&gt;getLogInOrder()&lt;/code&gt; for accessing every logged message in chronological order, and a couple of methods for controlling whether logged messages will be echoed to the console.&lt;br /&gt;&lt;br /&gt;While the &lt;code&gt;LogReaderAggregatorService&lt;/code&gt; interface is part of the required bundle &lt;code&gt;org.eclipse.soda.sat.core&lt;/code&gt;, the implementation lives in the optional bundle &lt;code&gt;org.eclipse.soda.sat.core.log&lt;/code&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4793616645740977627-6651758126332864661?l=eclipse-sat.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclipse-sat.blogspot.com/feeds/6651758126332864661/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4793616645740977627&amp;postID=6651758126332864661' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4793616645740977627/posts/default/6651758126332864661'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4793616645740977627/posts/default/6651758126332864661'/><link rel='alternate' type='text/html' href='http://eclipse-sat.blogspot.com/2008/06/working-with-multiple-logservices.html' title='Working with Multiple LogServices'/><author><name>Simon Archer</name><uri>http://www.blogger.com/profile/03583004412891607822</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://1.bp.blogspot.com/-6mr5ibkGEEk/Trtk7DXXpFI/AAAAAAAAAHQ/hrkY0yw2gX4/s220/simon2011.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4793616645740977627.post-2935968650458032459</id><published>2008-06-11T17:35:00.002-05:00</published><updated>2008-06-11T17:42:41.393-05:00</updated><title type='text'>Eclipse 3.4 is almost here...</title><content type='html'>If you've not heard, &lt;a href="http://www.eclipse.org/ganymede/"&gt;Ganyemede is coming...&lt;/a&gt;  Time is running out fast, so please consider downloading &lt;a href="http://fullmoon.ottawa.ibm.com/eclipse/downloads/drops/S-3.4RC4-200806091311/index.php"&gt;Eclipse 3.4RC4&lt;/a&gt; and kicking the tires a little.  Likewise, &lt;a href="http://download.eclipse.org/eclipse/equinox/drops/S-3.4RC4-200806091311/index.php"&gt;Equinox 3.4RC4&lt;/a&gt; is available too.  There is still time to report any &lt;a href="https://bugs.eclipse.org/bugs"&gt;bugs&lt;/a&gt; you might find.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4793616645740977627-2935968650458032459?l=eclipse-sat.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclipse-sat.blogspot.com/feeds/2935968650458032459/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4793616645740977627&amp;postID=2935968650458032459' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4793616645740977627/posts/default/2935968650458032459'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4793616645740977627/posts/default/2935968650458032459'/><link rel='alternate' type='text/html' href='http://eclipse-sat.blogspot.com/2008/06/eclipse-34-is-almost-here.html' title='Eclipse 3.4 is almost here...'/><author><name>Simon Archer</name><uri>http://www.blogger.com/profile/03583004412891607822</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://1.bp.blogspot.com/-6mr5ibkGEEk/Trtk7DXXpFI/AAAAAAAAAHQ/hrkY0yw2gX4/s220/simon2011.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4793616645740977627.post-7842542461014578205</id><published>2008-03-19T09:31:00.005-05:00</published><updated>2008-03-21T11:57:13.285-05:00</updated><title type='text'>Best Commercial Equinox Application: Cyrano</title><content type='html'>Congratulations to Band XI on their &lt;i&gt;Best Commercial Equinox Application&lt;/i&gt; victory with &lt;a href="http://www.bandxi.com/cyrano/index.html"&gt;Cyrano&lt;/a&gt;.  See all the &lt;a href="http://www.eclipse.org/org/press-release/20080318_AwardsWinners.php"&gt;winners&lt;/a&gt; here.  Here's a &lt;a href="http://www.flickr.com/photos/33725200@N00/2343072579/in/set-72157604138706926/"&gt;photo&lt;/a&gt; of John accepting the award, but where's Brett and Patrick?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4793616645740977627-7842542461014578205?l=eclipse-sat.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclipse-sat.blogspot.com/feeds/7842542461014578205/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4793616645740977627&amp;postID=7842542461014578205' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4793616645740977627/posts/default/7842542461014578205'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4793616645740977627/posts/default/7842542461014578205'/><link rel='alternate' type='text/html' href='http://eclipse-sat.blogspot.com/2008/03/best-commercial-equinox-application.html' title='Best Commercial Equinox Application: Cyrano'/><author><name>Simon Archer</name><uri>http://www.blogger.com/profile/03583004412891607822</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://1.bp.blogspot.com/-6mr5ibkGEEk/Trtk7DXXpFI/AAAAAAAAAHQ/hrkY0yw2gX4/s220/simon2011.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4793616645740977627.post-7134424290962695377</id><published>2008-03-12T21:15:00.001-05:00</published><updated>2008-03-12T21:18:57.375-05:00</updated><title type='text'>More Equinox Command Provider Enhacements</title><content type='html'>The bundle &lt;code&gt;org.eclipse.soda.sat.equinox.console.cmdprov&lt;/code&gt; extends the Equinox console by registering four &lt;code&gt;org.eclipse.osgi.framework.console.CommandProvider&lt;/code&gt; services. &lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Bundle Dependencies&lt;/b&gt;: These commands allow you to query the dependency and prerequisite relationships that exist between bundles. &lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;Configuration Admin&lt;/b&gt;: These commands allow you to query the &lt;code&gt;ConfigurationAdmin&lt;/code&gt; service for configuration PIDs, factory PIDs and configuration properties.  This command provider requires a &lt;code&gt;ConfigurationAdmin&lt;/code&gt;service to be registered.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;Logging&lt;/b&gt;: These commands let you query and set the log level, and query and control whether tracing is on or off.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;Missing Imported Services of Bundles and Configurations&lt;/b&gt;: These commands allow you to query the missing required and optional imported services of SAT bundles and configurations created by &lt;code&gt;ConfigurationAdmin&lt;/code&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;To use the Equinox console, launch the OSGi framework with the &lt;code&gt;-console&lt;/code&gt; program argument, which is present by default for an OSGi Framework launch configuration. Typing help at the Equinox console will display the following additional command usage information:&lt;pre&gt;&lt;br /&gt;---Bundle Dependencies---&lt;br /&gt; adep &lt;id&gt; - show all dependents of the specified bundle&lt;br /&gt; apre &lt;id&gt; - show all prerequisites of the specified bundle&lt;br /&gt; dep &lt;id&gt; - show dependents the specified bundle&lt;br /&gt; pre &lt;id&gt; - show prerequisites of the specified bundle&lt;br /&gt;---Configuration Admin---&lt;br /&gt; cprops [pid] - display the configuration properties&lt;br /&gt; fpids [filter] - display the factory pids&lt;br /&gt; pids [filter] - display the pids&lt;br /&gt;---Logging---&lt;br /&gt; logLevel [(debug|info|warning|error)] - query and control log level&lt;br /&gt; trace [(on|off)] - query and control tracing&lt;br /&gt;---Missing Imported Services of Bundles and Configurations---&lt;br /&gt; ams [id] - show all missing imported services&lt;br /&gt; mos [id] - show missing optional imported services&lt;br /&gt; mrs [id] - show missing required imported services&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4793616645740977627-7134424290962695377?l=eclipse-sat.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclipse-sat.blogspot.com/feeds/7134424290962695377/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4793616645740977627&amp;postID=7134424290962695377' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4793616645740977627/posts/default/7134424290962695377'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4793616645740977627/posts/default/7134424290962695377'/><link rel='alternate' type='text/html' href='http://eclipse-sat.blogspot.com/2008/03/more-equinox-command-provider.html' title='More Equinox Command Provider Enhacements'/><author><name>Simon Archer</name><uri>http://www.blogger.com/profile/03583004412891607822</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://1.bp.blogspot.com/-6mr5ibkGEEk/Trtk7DXXpFI/AAAAAAAAAHQ/hrkY0yw2gX4/s220/simon2011.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4793616645740977627.post-247372218864809130</id><published>2008-03-07T20:25:00.000-05:00</published><updated>2008-03-11T12:58:02.176-05:00</updated><title type='text'>SAT Support Proxy Service Equality</title><content type='html'>Previous posts talked about the &lt;a href="http://eclipse-sat.blogspot.com/2008/03/question-when-is-object-not-equal-to.html"&gt;problem&lt;/a&gt; of comparing the equality of two proxies, and a&lt;span style="text-decoration: underline;"&gt; &lt;/span&gt;&lt;a href="http://eclipse-sat.blogspot.com/2008/03/supporting-proxy-equality.html"&gt;solution&lt;/a&gt; that involves unwrapping each proxy before performing the equality test.  Today's post is short and sweet in that it simply shows the code to test SAT's support for proxy equality.  The following snippet of code creates a proxied service and compares it with itself.&lt;pre&gt;&lt;br /&gt; FactoryUtility utility = FactoryUtility.getInstance();&lt;br /&gt; BundleContext context = getBundleContext();&lt;br /&gt; IProxyServiceHandler handler = new ProxyServiceHandlerAdapter() {&lt;br /&gt;   public Object createService() {&lt;br /&gt;     return new HotdogVendor();&lt;br /&gt;   }  &lt;br /&gt; };&lt;br /&gt; IServiceRecord record = utility.createExportProxyServiceRecord(context, VendorService.class, handler, null);&lt;br /&gt; Object service = record.getService();&lt;br /&gt; boolean equal = service.equals(service);&lt;br /&gt; System.out.println("service.equals(service) = " + equal);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The console output is, as follows:&lt;pre&gt;&lt;br /&gt;  service.equals(service) = true&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4793616645740977627-247372218864809130?l=eclipse-sat.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclipse-sat.blogspot.com/feeds/247372218864809130/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4793616645740977627&amp;postID=247372218864809130' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4793616645740977627/posts/default/247372218864809130'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4793616645740977627/posts/default/247372218864809130'/><link rel='alternate' type='text/html' href='http://eclipse-sat.blogspot.com/2008/03/sat-support-proxy-service-equality.html' title='SAT Support Proxy Service Equality'/><author><name>Simon Archer</name><uri>http://www.blogger.com/profile/03583004412891607822</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://1.bp.blogspot.com/-6mr5ibkGEEk/Trtk7DXXpFI/AAAAAAAAAHQ/hrkY0yw2gX4/s220/simon2011.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4793616645740977627.post-5721619039303491730</id><published>2008-03-06T20:37:00.000-05:00</published><updated>2008-03-07T16:14:42.396-05:00</updated><title type='text'>Supporting Proxy Equality</title><content type='html'>Yesterday's &lt;a href="http://eclipse-sat.blogspot.com/2008/03/question-when-is-object-not-equal-to.html"&gt;post&lt;/a&gt; talked about how using the &lt;code&gt;equals(Object)&lt;/code&gt; method to compare two &lt;code&gt;Proxy&lt;/code&gt; objects always evaluates to &lt;code&gt;false&lt;/code&gt;, even when the receiver and the parameter are the same instance.  Today's topic is how to implement the &lt;code&gt;InvocationHandler&lt;/code&gt; interface such that the &lt;code&gt;equals(Object)&lt;/code&gt; method is handled correctly.&lt;br /&gt;&lt;br /&gt;The solution is to intercept the invocation of the &lt;code&gt;equals(Object)&lt;/code&gt; method and invoke it with an unwrapped receiver and parameter.  Here's how...&lt;pre&gt;&lt;br /&gt;public class MyInvocationHandler extends Object implements InvocationHandler {&lt;br /&gt;  private Object object;&lt;br /&gt; &lt;br /&gt;  public MyInvocationHandler(Object object) {&lt;br /&gt;    super();&lt;br /&gt;    this.object = object;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {&lt;br /&gt;    Object result = null;&lt;br /&gt;    String name = method.getName();&lt;br /&gt;    if (name.equals("equals") &amp;&amp; args.length == 1) {&lt;br /&gt;      MyInvocationHandler handler = toMyInvocationHandler(args [ 0 ]);&lt;br /&gt;      if (handler != null) {&lt;br /&gt;        Object[] parameters= new Object[] {&lt;br /&gt;          handler.object    &lt;br /&gt;        };&lt;br /&gt;        result = method.invoke(object, parameters);&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt; &lt;br /&gt;    if (result == null) { &lt;br /&gt;      result = method.invoke(object, args);&lt;br /&gt;    }&lt;br /&gt;  &lt;br /&gt;    return result;&lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;  private MyInvocationHandler toMyInvocationHandler(Object parameter) {&lt;br /&gt;    InvocationHandler handler = Proxy.getInvocationHandler(parameter);&lt;br /&gt;    boolean valid = handler instanceof MyInvocationHandler;&lt;br /&gt;    if (valid == false) return null;  &lt;br /&gt;    MyInvocationHandler myHandler = (MyInvocationHandler) handler;&lt;br /&gt;    return myHandler;  &lt;br /&gt;  }  &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Rather than anonymously implementing the &lt;code&gt;InvocationHandler&lt;/code&gt; interface, we have the class &lt;code&gt;MyInvocationHandler&lt;/code&gt;.  The &lt;code&gt;object&lt;/code&gt; field is used to store the object that is being proxied.&lt;br /&gt;&lt;br /&gt;We must intercept the invocation of the &lt;code&gt;equals(Object)&lt;/code&gt; method, and where the parameter is an instance of &lt;code&gt;MyInvocationHandler&lt;/code&gt;, we must invoke the &lt;code&gt;Method&lt;/code&gt;, passing as a parameter the &lt;code&gt;MyInvocationHandler&lt;/code&gt; instance's &lt;code&gt;object&lt;/code&gt; field.&lt;br /&gt;&lt;br /&gt;This technique of unwrapping the parameter &lt;code&gt;Proxy&lt;/code&gt; only works when the proxy is one that has an invocation handler that is an instance of &lt;code&gt;MyInvocationHandler&lt;/code&gt;.  In cases where the parameter is not an appropriate proxy, execute continues as normal in the invocation handler.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4793616645740977627-5721619039303491730?l=eclipse-sat.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclipse-sat.blogspot.com/feeds/5721619039303491730/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4793616645740977627&amp;postID=5721619039303491730' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4793616645740977627/posts/default/5721619039303491730'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4793616645740977627/posts/default/5721619039303491730'/><link rel='alternate' type='text/html' href='http://eclipse-sat.blogspot.com/2008/03/supporting-proxy-equality.html' title='Supporting Proxy Equality'/><author><name>Simon Archer</name><uri>http://www.blogger.com/profile/03583004412891607822</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://1.bp.blogspot.com/-6mr5ibkGEEk/Trtk7DXXpFI/AAAAAAAAAHQ/hrkY0yw2gX4/s220/simon2011.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4793616645740977627.post-1448076037417259472</id><published>2008-03-05T22:03:00.003-05:00</published><updated>2008-03-05T23:39:22.661-05:00</updated><title type='text'>Question: When is an object not equal to itself?</title><content type='html'>Most developers would agree that the expression &lt;code&gt;object.equal(object)&lt;/code&gt; aways evaluates to &lt;code&gt;true&lt;/code&gt;, and I thought so too until a short while ago where I found that it can sometimes evaluate to &lt;code&gt;false&lt;/code&gt;.  Trust me, it can happen.  Consider the following code:&lt;br /&gt;&lt;pre&gt;  public interface IPerson {&lt;br /&gt;    //...&lt;br /&gt;  };&lt;br /&gt; &lt;br /&gt;  private class Person extends Object implements IPerson {&lt;br /&gt;    //...&lt;br /&gt;  };&lt;/pre&gt;The &lt;code&gt;Person&lt;/code&gt; class inherits its &lt;code&gt;equals(Object)&lt;/code&gt; method from &lt;code&gt;Object&lt;/code&gt;, the implementation of which is:&lt;br /&gt;&lt;pre&gt;  public boolean equals (Object object) {&lt;br /&gt;    return this == object;&lt;br /&gt;  }&lt;/pre&gt;So if the expression &lt;code&gt;object == object&lt;/code&gt; always evaluates to &lt;code&gt;true&lt;/code&gt;, and yes, it &lt;i&gt;always&lt;/i&gt; evaluates to &lt;code&gt;true&lt;/code&gt;, how could it be possible for the expression &lt;code&gt;object.equals(object)&lt;/code&gt; to ever evaluate to &lt;code&gt;false&lt;/code&gt;?&lt;br /&gt;&lt;br /&gt;Answer: When it's a proxy.  This is a serious problem, since in most cases where proxies are used the fact that you're using a &lt;code&gt;Proxy&lt;/code&gt; should not be something you need to think about.  Consider the following code that creates a proxy and then compares it with itself:&lt;br /&gt;&lt;pre&gt;  final IPerson person = new Person();&lt;br /&gt;&lt;br /&gt;  ClassLoader classLoader = Person.class.getClassLoader();&lt;br /&gt;  Class[] interfaces = {&lt;br /&gt;    IPerson.class&lt;br /&gt;  };&lt;br /&gt;  InvocationHandler handler = new InvocationHandler() {&lt;br /&gt;    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {&lt;br /&gt;      return method.invoke(person, args);&lt;br /&gt;    }&lt;br /&gt;  };&lt;br /&gt;  Object object = Proxy.newProxyInstance(classLoader, interfaces, handler);&lt;br /&gt;&lt;br /&gt;  boolean equal = object.equals(object);&lt;br /&gt;  System.out.println("object.equals(object): " + equal);&lt;br /&gt;  &lt;br /&gt;  boolean identical = object == object;&lt;br /&gt;  System.out.println("object == object: " + identical);&lt;/pre&gt;This code outputs the following to the console:&lt;br /&gt;&lt;pre&gt;  object.equals(object): false&lt;br /&gt;  object == object: true&lt;/pre&gt;When I first saw this I could not believe my eyes, thinking that it must be a bug in either the JVM or the implementation of the &lt;code&gt;Proxy&lt;/code&gt; class, when of course it was neither.  The problem lies in the anonymous inner-class implementation of the &lt;code&gt;InvocationHandler&lt;/code&gt; interface:&lt;br /&gt;&lt;pre&gt;  InvocationHandler handler = new InvocationHandler() {&lt;br /&gt;    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {&lt;br /&gt;      return method.invoke(person, args);&lt;br /&gt;    }&lt;br /&gt;  };&lt;/pre&gt;The receiver is always a &lt;code&gt;Proxy&lt;/code&gt;, so when we evaluate &lt;code&gt;object.equals(object)&lt;/code&gt;, execution quickly jumps to the handler's &lt;code&gt;invoke&lt;/code&gt; method, where the expression &lt;code&gt;method.invoke(person, args)&lt;/code&gt; is evaluated.  The trick is to remember that this line of code is equivalent to:&lt;br /&gt;&lt;pre&gt;  object.equals(person)&lt;/pre&gt;This evaluates to &lt;code&gt;false&lt;code&gt; because:&lt;ul&gt;&lt;/li&gt;&lt;li&gt;The &lt;code&gt;object&lt;/code&gt; is an instance of &lt;code&gt;Proxy&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;The &lt;code&gt;person&lt;/code&gt; is an instance of &lt;code&gt;IPerson&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;Both instances are distinct objects.&lt;/li&gt;&lt;li&gt;The &lt;code&gt;Proxy&lt;/code&gt; class inherits its &lt;code&gt;equals(Object)&lt;/code&gt; method from &lt;code&gt;Object&lt;/code&gt;.&lt;li&gt;The expression &lt;code&gt;object == person&lt;/code&gt; evaluate to &lt;code&gt;false&lt;/code&gt;.&lt;/ul&gt;&lt;br /&gt;It is unfortunate that the &lt;code&gt;Proxy&lt;/code&gt; class does not take care of ensuring that the &lt;code&gt;equals(Object)&lt;/code&gt; method just works as you would expect, but sadly this is not the case.  If you want it to work, and you really do want it to work, your &lt;code&gt;InvocationHandler&lt;/code&gt; must be smarter.  But I'm saving that for another day.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4793616645740977627-1448076037417259472?l=eclipse-sat.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclipse-sat.blogspot.com/feeds/1448076037417259472/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4793616645740977627&amp;postID=1448076037417259472' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4793616645740977627/posts/default/1448076037417259472'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4793616645740977627/posts/default/1448076037417259472'/><link rel='alternate' type='text/html' href='http://eclipse-sat.blogspot.com/2008/03/question-when-is-object-not-equal-to.html' title='Question: When is an object not equal to itself?'/><author><name>Simon Archer</name><uri>http://www.blogger.com/profile/03583004412891607822</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://1.bp.blogspot.com/-6mr5ibkGEEk/Trtk7DXXpFI/AAAAAAAAAHQ/hrkY0yw2gX4/s220/simon2011.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4793616645740977627.post-7296534852794663174</id><published>2007-07-12T14:52:00.000-05:00</published><updated>2007-07-12T16:22:20.335-05:00</updated><title type='text'>SAT for Eclipse 3.3 (Europa)</title><content type='html'>Now that &lt;a href="http://www.eclipse.org/europa/"&gt;Eclipse 3.3 (Europa)&lt;/a&gt; is released, SAT has been rebuilt and a link to the build has been posted on the &lt;span style="font-weight: bold;"&gt;SAT Downloads&lt;/span&gt; section.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4793616645740977627-7296534852794663174?l=eclipse-sat.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclipse-sat.blogspot.com/feeds/7296534852794663174/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4793616645740977627&amp;postID=7296534852794663174' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4793616645740977627/posts/default/7296534852794663174'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4793616645740977627/posts/default/7296534852794663174'/><link rel='alternate' type='text/html' href='http://eclipse-sat.blogspot.com/2007/07/sat-for-eclipse-33-europa.html' title='SAT for Eclipse 3.3 (Europa)'/><author><name>Simon Archer</name><uri>http://www.blogger.com/profile/03583004412891607822</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://1.bp.blogspot.com/-6mr5ibkGEEk/Trtk7DXXpFI/AAAAAAAAAHQ/hrkY0yw2gX4/s220/simon2011.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4793616645740977627.post-9203266035277884279</id><published>2007-05-14T21:54:00.000-05:00</published><updated>2007-05-23T19:48:37.175-05:00</updated><title type='text'>SAT Steps Up to Eclipse 3.3 M7</title><content type='html'>As the &lt;a href="http://www.eclipse.org/eclipse/development/eclipse_project_plan_3_3.html#Milestones" target="_blank"&gt;release date&lt;/a&gt; of Eclipse 3.3 quickly approaches, SAT has stepped up to &lt;a href="http://download.eclipse.org/eclipse/downloads/drops/S-3.3M7-200705031400/index.php" target="_blank"&gt;M7&lt;/a&gt;. The SAT Downloads section, on the right, now includes links for both Eclipse 3.2.2 and Eclipse 3.3 M7.&lt;br /&gt;&lt;br /&gt;Eclipse 3.3 is shaping up to be an important release for everyone that cares about OSGi. The PDE team has out done themselves by addressing over &lt;a href="http://tinyurl.com/2bm7e4" target="_blank"&gt;900 bugs reports&lt;/a&gt;. I am particular pleased to see strides towards making the PDE tooling more friendly towards the needs of OSGi developers. Here's a &lt;a href="http://tinyurl.com/2vjbtw" target="_blank"&gt;list&lt;/a&gt; of PDE bug reports in which I have been involved.&lt;br /&gt;&lt;br /&gt;If you're just getting to Eclipse 3.3 now, be sure to check out the New and Noteworthy &lt;a href="http://download.eclipse.org/eclipse/downloads/drops/S-3.3M7-200705031400/eclipse-news-M7.html" target="_blank"&gt;document&lt;/a&gt; for M7 and for the earlier milestones.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4793616645740977627-9203266035277884279?l=eclipse-sat.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclipse-sat.blogspot.com/feeds/9203266035277884279/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4793616645740977627&amp;postID=9203266035277884279' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4793616645740977627/posts/default/9203266035277884279'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4793616645740977627/posts/default/9203266035277884279'/><link rel='alternate' type='text/html' href='http://eclipse-sat.blogspot.com/2007/05/sat-steps-up-to-eclipse-33-m7.html' title='SAT Steps Up to Eclipse 3.3 M7'/><author><name>Simon Archer</name><uri>http://www.blogger.com/profile/03583004412891607822</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://1.bp.blogspot.com/-6mr5ibkGEEk/Trtk7DXXpFI/AAAAAAAAAHQ/hrkY0yw2gX4/s220/simon2011.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4793616645740977627.post-5778515010100466730</id><published>2007-04-21T14:08:00.000-05:00</published><updated>2007-04-22T11:26:21.151-05:00</updated><title type='text'>The Simplest Thing That Could Possibly Work</title><content type='html'>Motivated by a recent thread on the &lt;a href="http://www2.osgi.org/pipermail/osgi-dev/2007-April/000517.html"&gt;osgi-dev&lt;/a&gt; mailing list, here's the infamous &lt;i&gt;Buns 'n Wieners&lt;/i&gt; example of building an OSGi service-oriented bundle activator using SAT.&lt;br /&gt;&lt;br /&gt;This is a good showcase for SAT since it demonstrates the simplicity of building a bundle that imports multiple dynamic services as a prerequisite to exporting a service.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;public class Activator extends BaseBundleActivator {&lt;br /&gt;  private HotdogVendor vendorService;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;  public Activator() {&lt;br /&gt;    super();&lt;br /&gt;    vendorService= new HotdogVendor();&lt;br /&gt;  }&lt;br /&gt;&amp;nbsp;&lt;br /&gt;  protected String[] getImportedServiceNames() {&lt;br /&gt;    return new String[] {&lt;br /&gt;      BunService.SERVICE_NAME,&lt;br /&gt;      WienerService.SERVICE_NAME&lt;br /&gt;    };&lt;br /&gt;  }&lt;br /&gt;&amp;nbsp;&lt;br /&gt;  protected void activate() {&lt;br /&gt;    System.out.println("Hotdog Vendor has been activated");&lt;br /&gt;    BunService bunService = getBunService();&lt;br /&gt;    WienerService wienerService = getWienerService();&lt;br /&gt;    vendorService.bind(bunService, wienerService);&lt;br /&gt;    addExportedService(VendorService.SERVICE_NAME, vendorService, null);&lt;br /&gt;  }&lt;br /&gt;&amp;nbsp;&lt;br /&gt;  protected void deactivate() {&lt;br /&gt;    vendorService.unbind();&lt;br /&gt;    System.out.println("Hotdog Vendor has been deactivated");&lt;br /&gt;  }&lt;br /&gt;&amp;nbsp;&lt;br /&gt;  private BunService getBunService() {&lt;br /&gt;    return (BunService) getImportedService(BunService.SERVICE_NAME);&lt;br /&gt;  }&lt;br /&gt;&amp;nbsp;&lt;br /&gt;  private WienerService getWienerService() {&lt;br /&gt;    return (WienerService) getImportedService(WienerService.SERVICE_NAME);&lt;br /&gt;  }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;The method &lt;code&gt;getImportedServiceNames()&lt;/code&gt; returns the names of the imported services.  The &lt;code&gt;SERVICE_NAME&lt;/code&gt; field is the fully qualified name of the service interface and is an SAT convention.&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt;The methods &lt;code&gt;getBunService()&lt;/code&gt; and &lt;code&gt;getWienerService()&lt;/code&gt; are helper methods; another SAT convention.&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt;The &lt;code&gt;activate()&lt;/code&gt; method is a &lt;i&gt;hook method&lt;/i&gt; that only gets called when all the bundle's imported services have been acquired.  When called from the &lt;code&gt;activate()&lt;/code&gt; method, the &lt;code&gt;getBunService()&lt;/code&gt; and &lt;code&gt;getWienerService()&lt;/code&gt; method are guaranteed to not return &lt;code&gt;null&lt;/code&gt;.&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt;The &lt;code&gt;deactivate()&lt;/code&gt; method is a &lt;i&gt;hook method&lt;/i&gt; that only gets called when the bundle loses one of its imported services.&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt;The use of a bind method in &lt;code&gt;activate()&lt;/code&gt; and an unbind method in &lt;code&gt;deactivate()&lt;/code&gt; is another SAT convention that simplifies the binding and unbinding of imported services.  It would be equally valid to call setter methods instead.&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt;The methods &lt;code&gt;activate()&lt;/code&gt; and &lt;code&gt;deactivate()&lt;/code&gt; are a pair and will get called multiple times during the lifetime of the bundle as its imported services change.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Historically this has always been the first example used to teach SAT since everyone understand that you're not selling hotdogs without both buns and wieners!&lt;br /&gt;&lt;br /&gt;Credit for this example goes squarely to Paul Vanderlei, my colleague and buddy at IBM.  Paul has been involved with SAT from the very start while developing it at OTI and later at IBM.  Paul is the first person to tell me when "it's too hard for the caveman".  Much of SAT's simplicity is thanks to Paul and his alter-ego, the caveman, who has existed long before the &lt;a href="http://www.geico.com/video/airport_h.htm"&gt;Geico&lt;/a&gt; ad campaign.&lt;br /&gt;&lt;br /&gt;To learn more about SAT, check out the introductory &lt;a href="http://www.vanderleiindustries.com/sat/help/topic/org.eclipse.soda.sat.plugin.doc/books/tutorials/01/tutorial.html"&gt;tutorial&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4793616645740977627-5778515010100466730?l=eclipse-sat.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclipse-sat.blogspot.com/feeds/5778515010100466730/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4793616645740977627&amp;postID=5778515010100466730' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4793616645740977627/posts/default/5778515010100466730'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4793616645740977627/posts/default/5778515010100466730'/><link rel='alternate' type='text/html' href='http://eclipse-sat.blogspot.com/2007/04/simplest-thing-that-could-possibly-work.html' title='The Simplest Thing That Could Possibly Work'/><author><name>Simon Archer</name><uri>http://www.blogger.com/profile/03583004412891607822</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://1.bp.blogspot.com/-6mr5ibkGEEk/Trtk7DXXpFI/AAAAAAAAAHQ/hrkY0yw2gX4/s220/simon2011.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4793616645740977627.post-4615548148534592559</id><published>2007-04-02T23:39:00.000-05:00</published><updated>2007-04-05T14:35:57.173-05:00</updated><title type='text'>Implementing Equinox's CommandProvider to Extend the Console</title><content type='html'>The Equinox console can be extended by any bundle that registers a &lt;code&gt;CommandProvider&lt;/code&gt; service. SAT now includes such a bundle that adds the following commands to the console:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;---SAT Bundle Dependencies---&lt;br /&gt;&amp;nbsp;&amp;nbsp;depend &amp;lt;id&amp;gt; - show dependents the specified bundle&lt;br /&gt;&amp;nbsp;&amp;nbsp;dependall &amp;lt;id&amp;gt; - show all dependents of the specified bundle&lt;br /&gt;&amp;nbsp;&amp;nbsp;prereq &amp;lt;id&amp;gt; - show prerequisites of the specified bundle&lt;br /&gt;&amp;nbsp;&amp;nbsp;prereqall &amp;lt;id&amp;gt; - show all prerequisites of the specified bundle&lt;br /&gt;---SAT Logging---&lt;br /&gt;&amp;nbsp;&amp;nbsp;loglevel {(debug|info|warning|error)} - query and control log level&lt;br /&gt;&amp;nbsp;&amp;nbsp;trace {(on|off)} - query and control tracing&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;The bundle is called &lt;code&gt;org.eclipse.soda.sat.equinox.console.cmdprov&lt;/code&gt;, and is optional and specific to the Equinox console.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://mea-bloga.blogspot.com/"&gt;Chris Aniszczyk&lt;/a&gt; has a good article on developerWorks titled "&lt;a href="http://www-128.ibm.com/developerworks/opensource/library/os-ecl-osgiconsole"&gt;Explore Eclipse's OSGi console&lt;/a&gt;".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4793616645740977627-4615548148534592559?l=eclipse-sat.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclipse-sat.blogspot.com/feeds/4615548148534592559/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4793616645740977627&amp;postID=4615548148534592559' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4793616645740977627/posts/default/4615548148534592559'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4793616645740977627/posts/default/4615548148534592559'/><link rel='alternate' type='text/html' href='http://eclipse-sat.blogspot.com/2007/04/implementing-equinoxs-commandprovider.html' title='Implementing Equinox&apos;s CommandProvider to Extend the Console'/><author><name>Simon Archer</name><uri>http://www.blogger.com/profile/03583004412891607822</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://1.bp.blogspot.com/-6mr5ibkGEEk/Trtk7DXXpFI/AAAAAAAAAHQ/hrkY0yw2gX4/s220/simon2011.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4793616645740977627.post-6534446035942759091</id><published>2007-03-29T20:55:00.000-05:00</published><updated>2007-04-03T12:38:51.238-05:00</updated><title type='text'>Service-Oriented Device Architecture at Eclipse.org</title><content type='html'>The Eclipse &lt;a href="http://www.eclipse.org/ohf"&gt;Open Healthcare Framework&lt;/a&gt; project has recently added a page that describes &lt;a href="http://www.eclipse.org/ohf/components/soda/index.php"&gt;SODA&lt;/a&gt;, of which SAT is a part.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;em&gt;"Service-Oriented Device Architecture (SODA) is an initiative to standardize and simplify the integration of devices with enterprise solutions by introducing a services-based programming model. SODA leverages existing and emerging standards from both the embedded-device and IT domains to provide well-defined interfaces for hardware devices to a service-oriented architecture (SOA)."&lt;/em&gt;&lt;/blockquote&gt;&lt;br /&gt;On the page you'll also find links to Device Kit and SAT resources, and you can find the official OHF downloads for SODA &lt;a href="http://www.eclipse.org/ohf/downloads/index.php"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4793616645740977627-6534446035942759091?l=eclipse-sat.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclipse-sat.blogspot.com/feeds/6534446035942759091/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4793616645740977627&amp;postID=6534446035942759091' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4793616645740977627/posts/default/6534446035942759091'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4793616645740977627/posts/default/6534446035942759091'/><link rel='alternate' type='text/html' href='http://eclipse-sat.blogspot.com/2007/03/service-oriented-device-architecture-at.html' title='Service-Oriented Device Architecture at Eclipse.org'/><author><name>Simon Archer</name><uri>http://www.blogger.com/profile/03583004412891607822</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://1.bp.blogspot.com/-6mr5ibkGEEk/Trtk7DXXpFI/AAAAAAAAAHQ/hrkY0yw2gX4/s220/simon2011.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4793616645740977627.post-2109770934820019050</id><published>2007-03-12T19:57:00.000-05:00</published><updated>2007-03-14T09:10:48.194-05:00</updated><title type='text'>A Successful OSGi Tutorial at EclipseCon</title><content type='html'>The EclipseCon tutorial &lt;a href="http://www.eclipsecon.org/2007/index.php?page=sub/&amp;amp;id=3630" target="_blank"&gt;Building Service Oriented Bundle Architectures&lt;/a&gt; was a huge success and generated a lot of positive publicity for SAT. At the tutorial the attendees learned how to build service-oriented bundles and worked with both fake and real hardware devices.&lt;br /&gt;&lt;br /&gt;If you missed the tutorial, the materials are available &lt;a href="http://www.bandxi.com/soba/index.html" target="_blank"&gt;here&lt;/a&gt; at the Band XI site.&lt;br /&gt;&lt;br /&gt;Thank you John, Brett, Patrick, Paul, Randy, Bill and Kristen for developing the materials and doing such a fantastic job at the conference. See you &lt;a href="http://www.eclipsecon.org/2008" target="_blank"&gt;next year&lt;/a&gt;!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4793616645740977627-2109770934820019050?l=eclipse-sat.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclipse-sat.blogspot.com/feeds/2109770934820019050/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4793616645740977627&amp;postID=2109770934820019050' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4793616645740977627/posts/default/2109770934820019050'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4793616645740977627/posts/default/2109770934820019050'/><link rel='alternate' type='text/html' href='http://eclipse-sat.blogspot.com/2007/03/eclipsecon-2007-successful-osgi.html' title='A Successful OSGi Tutorial at EclipseCon'/><author><name>Simon Archer</name><uri>http://www.blogger.com/profile/03583004412891607822</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://1.bp.blogspot.com/-6mr5ibkGEEk/Trtk7DXXpFI/AAAAAAAAAHQ/hrkY0yw2gX4/s220/simon2011.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4793616645740977627.post-9194443624299295684</id><published>2007-03-03T16:02:00.000-05:00</published><updated>2007-03-03T17:36:03.206-05:00</updated><title type='text'>EclipseCon Tutorial: Building Service Oriented Bundle Architectures</title><content type='html'>Going to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;EclipseCon&lt;/span&gt; next week? Then be sure to sign up for the tutorial &lt;a href="http://www.eclipsecon.org/2007/index.php?page=sub/&amp;amp;id=3630" target="_blank"&gt;Building Service Oriented Bundle Architectures&lt;/a&gt; to learn more about how to use SAT.&lt;br /&gt;&lt;br /&gt;The tutorial, presented by &lt;a href="http://www.bandxi.com" target="_blank"&gt;BandXI International&lt;/a&gt; and &lt;a href="http://www.ibm.com" target="_blank"&gt;IBM&lt;/a&gt;, is going to a great opportunity to learn more about how best to use Eclipse to build OSGi applications and the benefits of being service oriented.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4793616645740977627-9194443624299295684?l=eclipse-sat.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclipse-sat.blogspot.com/feeds/9194443624299295684/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4793616645740977627&amp;postID=9194443624299295684' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4793616645740977627/posts/default/9194443624299295684'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4793616645740977627/posts/default/9194443624299295684'/><link rel='alternate' type='text/html' href='http://eclipse-sat.blogspot.com/2007/03/eclipsecon-tutorial-building-service.html' title='EclipseCon Tutorial: Building Service Oriented Bundle Architectures'/><author><name>Simon Archer</name><uri>http://www.blogger.com/profile/03583004412891607822</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://1.bp.blogspot.com/-6mr5ibkGEEk/Trtk7DXXpFI/AAAAAAAAAHQ/hrkY0yw2gX4/s220/simon2011.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4793616645740977627.post-5305505304615525433</id><published>2007-03-02T15:13:00.000-05:00</published><updated>2007-05-13T09:43:26.569-05:00</updated><title type='text'>SAT is Now Available at Eclipse.org</title><content type='html'>The Service Activator Toolkit source is now available in the &lt;a href="http://www.eclipse.org/ohf" target="_blank"&gt;Open &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Healthcare&lt;/span&gt; Framework&lt;/a&gt; technology project of Eclipse.org.&lt;br /&gt;&lt;br /&gt;SAT started life in 2001 as an IBM/&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;OTI&lt;/span&gt; technology developed to make building &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;OSGi&lt;/span&gt; service-oriented bundles easier. From its inception SAT has always been about writing less &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;OSGi&lt;/span&gt; plumbing code, leaving more time to worry about writing the business logic of your application.&lt;br /&gt;&lt;br /&gt;An Eclipse 3.2.2 compatible binary download of the latest &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;runtime&lt;/span&gt; and tooling update sites is also &lt;a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.ohf/plugins/org.eclipse.soda.sat/builds/322/build_1.0.0.200705020030.zip?root=Technology_Project&amp;amp;view=co"&gt;available&lt;/a&gt;. Once you have installed the tooling into your Eclipse IDE, read the documentation for instructions on how to use the runtime bundles. For more information on SAT, take a look at the &lt;a href="http://www.vanderleiindustries.com/sat/help/topic/org.eclipse.soda.sat.plugin.doc/books/book.html" target="_blank"&gt;documentation&lt;/a&gt; online.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4793616645740977627-5305505304615525433?l=eclipse-sat.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eclipse-sat.blogspot.com/feeds/5305505304615525433/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4793616645740977627&amp;postID=5305505304615525433' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4793616645740977627/posts/default/5305505304615525433'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4793616645740977627/posts/default/5305505304615525433'/><link rel='alternate' type='text/html' href='http://eclipse-sat.blogspot.com/2007/03/sat-is-now-available-at-eclipseorg.html' title='SAT is Now Available at Eclipse.org'/><author><name>Simon Archer</name><uri>http://www.blogger.com/profile/03583004412891607822</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://1.bp.blogspot.com/-6mr5ibkGEEk/Trtk7DXXpFI/AAAAAAAAAHQ/hrkY0yw2gX4/s220/simon2011.jpg'/></author><thr:total>4</thr:total></entry></feed>
