<?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-6042050729972843368</id><updated>2012-01-30T13:44:30.672-06:00</updated><category term='Threading'/><category term='Reqular Expressions'/><category term='Mocks'/><category term='JBoss'/><category term='RSS BC'/><category term='IDEA'/><category term='Microsoft'/><category term='Convergence'/><category term='REST'/><category term='JBI'/><category term='CVS'/><category term='XMPP'/><category term='XML'/><category term='diff'/><category term='Integration'/><category term='Java'/><category term='Groovy'/><category term='SOAP'/><category term='Netbeans'/><category term='Flash'/><category term='RSS'/><category term='TDD'/><category term='TCP'/><category term='JMX'/><category term='Binding Component Plugin'/><category term='XMPP BC'/><category term='Binding Components'/><category term='Flex'/><category term='Marines'/><category term='SIP BC'/><category term='Grizzly'/><category term='J2EE'/><category term='Jersey'/><category term='Silverlight'/><title type='text'>Chad Gallemore</title><subtitle type='html'>"Freedom is not free, but the U.S. Marine Corps will pay most of your share." -Ned Dolan</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://gallemore.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://gallemore.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Chad Gallemore</name><uri>http://www.blogger.com/profile/03687439195639920481</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_chNvxcoCzH4/R2alFr3cD6I/AAAAAAAAAE8/73AxciHQcrA/S220/chad_headshot.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>42</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6042050729972843368.post-7592065481607692725</id><published>2010-03-22T23:18:00.002-05:00</published><updated>2010-03-22T23:28:20.424-05:00</updated><title type='text'>Must Read Book:  Rework</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://37signals.com/images/rework-cover-small.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 93px; height: 150px;" src="http://37signals.com/images/rework-cover-small.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;I just finished reading &lt;a href="http://37signals.com/rework/"&gt;Rework&lt;/a&gt;, by the guys from &lt;a href="http://37signals.com/"&gt;37signals&lt;/a&gt;.  This was an absolute joy to read and really inspiring.  I won't go into a lot of detail, since the book is a really quick read, and I don't want to give a ton of stuff away.  I will say this.  If you're like me, and come from and Agile background, I think you will really enjoy the book.  It's also inspired me to get of my ass and do some of the things I've been putting off, like writing on this blog.  Do yourself a favor and pick this book up and give it a read.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Also, if you don't follow the &lt;a href="http://37signals.com/svn"&gt;37signals blog&lt;/a&gt;, I would highly recommend that as well.  There is a lot of good stuff that comes across there.  I sound like I'm pimping this guys, I'm really not, it's just great reading.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6042050729972843368-7592065481607692725?l=gallemore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gallemore.blogspot.com/feeds/7592065481607692725/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6042050729972843368&amp;postID=7592065481607692725' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/7592065481607692725'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/7592065481607692725'/><link rel='alternate' type='text/html' href='http://gallemore.blogspot.com/2010/03/must-read-book-rework.html' title='Must Read Book:  Rework'/><author><name>Chad Gallemore</name><uri>http://www.blogger.com/profile/03687439195639920481</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_chNvxcoCzH4/R2alFr3cD6I/AAAAAAAAAE8/73AxciHQcrA/S220/chad_headshot.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6042050729972843368.post-3265939081880159391</id><published>2010-03-22T22:34:00.003-05:00</published><updated>2010-03-22T23:18:17.235-05:00</updated><title type='text'>It's Been A While</title><content type='html'>Well, it's been over a year since I've written anything on this blog, so I figured I would put a few tidbits out there and hopefully it will lead to some posts of substance in the future.&lt;br /&gt;&lt;br /&gt;First off, I've switched gears and have been working for &lt;a href="http://localbase.com/"&gt;Localbase Inc.&lt;/a&gt; for the last 9 months building a small business platform for the social web.  We're pretty excited about the project and we are looking to launch in about 3-6 months.  Until then, here's some stuff I've been doing over that time.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;If you've read my posts before, you'll know that I was heavy into Java, and really into &lt;a href="http://groovy.codehaus.org/"&gt;Groovy&lt;/a&gt;.  I'm still a fan of Groovy, but since joining Localbase I've had the absolute pleasure of working with Python and &lt;a href="http://www.djangoproject.com/"&gt;Django&lt;/a&gt;.  Our platform is being built on the Django framework, and I absolutely love it.  I'm also really liking Python, although I do like Groovy's syntax a little better.&lt;/li&gt;&lt;li&gt;I'm beginning to love Javascript.  For those of you that now me you're probably shocked right now.  Nine months ago, I absolutely hated Javascript and would often volunteer to write tests or do documentation just so I didn't have to mess with it.  Now, I find myself volunteering to do the client side work for our platform.  Part of this is due to &lt;a href="http://www.dojotoolkit.org/"&gt;Dojo&lt;/a&gt;.  The documentation isn't stellar, but I still love it anyways.  The other part is this sweet little Javascript framework that we (I say we, but it was really &lt;a href="http://robmadole.com/"&gt;Rob&lt;/a&gt;) created for Localbase.  It makes my life very easy.  Hopefully we can find some time in the future and contribute it back to the community.&lt;/li&gt;&lt;li&gt;I still love REST.  During my time in the Java world, I worked with &lt;a href="https://jersey.dev.java.net/"&gt;Jersey&lt;/a&gt; a lot, and absolutely loved it.  I can't say that I've found the equivalent in the Python/Django world, but we have found won that works great and I really like it a lot.  If you're in need of one for your Django project, check out &lt;a href="http://bitbucket.org/jespern/django-piston/wiki/Home"&gt;Piston&lt;/a&gt;.  Decent documentation, and really easy to use.  Testing your REST services is super easy as well.&lt;/li&gt;&lt;li&gt;We switched from using Subversion to using &lt;a href="http://mercurial.selenic.com/"&gt;Mercurial&lt;/a&gt; about 8 months ago.  So much faster than Subversion.  If you're thinking about switching to a distributed version control system, I would highly recommend it.  We are using &lt;a href="http://bitbucket.org/"&gt;Bitbucket&lt;/a&gt;, and it's worked out great for us.&lt;/li&gt;&lt;li&gt;&lt;a href="http://sports.espn.go.com/ncb/recap?gameId=300792305"&gt;Yes, my Hawks lost to UNI in the second round&lt;/a&gt;.  &lt;a href="http://kathyescobar.files.wordpress.com/2008/04/cliff-jump.jpg"&gt;No, I haven't jumped of a cliff yet.&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;That's pretty much it in a nutshell.  Hopefully this will inspire me to get off my ass and write some blog posts.  I'm going to follow this up right now with a new post about a great book I just finished reading.  It's definitely a two for one night.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6042050729972843368-3265939081880159391?l=gallemore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gallemore.blogspot.com/feeds/3265939081880159391/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6042050729972843368&amp;postID=3265939081880159391' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/3265939081880159391'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/3265939081880159391'/><link rel='alternate' type='text/html' href='http://gallemore.blogspot.com/2010/03/its-been-while.html' title='It&apos;s Been A While'/><author><name>Chad Gallemore</name><uri>http://www.blogger.com/profile/03687439195639920481</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_chNvxcoCzH4/R2alFr3cD6I/AAAAAAAAAE8/73AxciHQcrA/S220/chad_headshot.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6042050729972843368.post-9185845840839808610</id><published>2008-11-10T08:47:00.002-06:00</published><updated>2008-11-10T08:48:32.876-06:00</updated><title type='text'>Happy Birthday Marines</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://farm4.static.flickr.com/3212/2997815757_18a6af334e.jpg?v=0"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 375px; height: 500px;" src="http://farm4.static.flickr.com/3212/2997815757_18a6af334e.jpg?v=0" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;233 years and counting......&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6042050729972843368-9185845840839808610?l=gallemore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gallemore.blogspot.com/feeds/9185845840839808610/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6042050729972843368&amp;postID=9185845840839808610' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/9185845840839808610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/9185845840839808610'/><link rel='alternate' type='text/html' href='http://gallemore.blogspot.com/2008/11/happy-birthday-marines.html' title='Happy Birthday Marines'/><author><name>Chad Gallemore</name><uri>http://www.blogger.com/profile/03687439195639920481</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_chNvxcoCzH4/R2alFr3cD6I/AAAAAAAAAE8/73AxciHQcrA/S220/chad_headshot.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6042050729972843368.post-7821751405480052023</id><published>2008-10-23T22:24:00.005-05:00</published><updated>2008-10-23T23:13:56.424-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='REST'/><category scheme='http://www.blogger.com/atom/ns#' term='Jersey'/><category scheme='http://www.blogger.com/atom/ns#' term='Groovy'/><title type='text'>Creating RESTful services with Jersey and Groovy</title><content type='html'>It's been a while since I have put anything of substance on here, so I thought I would get back to it.  I've been doing a lot of development with &lt;a href="http://groovy.codehaus.org/"&gt;Groovy &lt;/a&gt;as of late, which I absolutely love.  I wanted to combine that with another API that I really like, &lt;a href="https://jersey.dev.java.net/"&gt;Jersey&lt;/a&gt;.                       Jersey is the open source &lt;a href="https://jsr311.dev.java.net/nonav/releases/1.0/index.html"&gt;JAX-RS&lt;/a&gt; (JSR 311) Reference Implementation for building RESTful Web services.  So, for a simple service to create I decided on an Announcements service.  This service when invoked would look for a file located in the User Home directory and create some HTML to return that would get rendered in the browser.  This example also shows why I might want to use Groovy and Jersey together, as I will leverage Groovy's &lt;a href="http://groovy.codehaus.org/Creating+XML+using+Groovy%27s+MarkupBuilder"&gt;MarkupBuilder &lt;/a&gt;to generate the HTML that gets returned.  I won't get into the details of how to setup Jersey as they have lots of samples that you can find &lt;a href="https://jersey.dev.java.net/use/getting-started.html"&gt;here&lt;/a&gt;, and instead I'll just jump right in to what the source code would look like for my announcement service.&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;import javax.ws.rs.Path;&lt;br /&gt;import javax.ws.rs.GET;&lt;br /&gt;import javax.ws.rs.Produces&lt;br /&gt;&lt;br /&gt;@Path("/announcements")&lt;br /&gt;class AnnouncementService {&lt;br /&gt; def announcements = "announcements.txt"&lt;br /&gt; def errorReadingFileText = " - Error reading Announcements, Announcement File may not exist."&lt;br /&gt; def noAnnouncementsText = " - No Announcements for Today"&lt;br /&gt;&lt;br /&gt; @GET&lt;br /&gt; @Produces (value=["text/html"])&lt;br /&gt; String getHtmlResponse() {&lt;br /&gt;     // Return some cliched textual content&lt;br /&gt;     return getAnnouncements()&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; String getAnnouncements() {&lt;br /&gt;     def announcement = new File(System.getProperty("user.home") + File.separator + announcements)&lt;br /&gt;     def writer = new StringWriter()&lt;br /&gt;     def result = new groovy.xml.MarkupBuilder(writer);&lt;br /&gt;     result.html {&lt;br /&gt;         body {&lt;br /&gt;             h1(align: "center", "As of ${date()}")&lt;br /&gt;             table(width: "100%", height: "100%") {&lt;br /&gt;                 td {&lt;br /&gt;                     if (!announcement.exists()) {&lt;br /&gt;                         tr(errorReadingFileText)&lt;br /&gt;                     } else if (announcement.text.length() &lt;= 0) {                                    &lt;br /&gt;                         tr(noAnnouncementsText)&lt;br /&gt;                     } else {                                                                                                                                        &lt;br /&gt;                         announcement?.eachLine {                                                                      &lt;br /&gt;                             tr(" - $it")                                                           &lt;br /&gt;                         }                                               &lt;br /&gt;                     }                                       &lt;br /&gt;                 }                                              &lt;br /&gt;             }                       &lt;br /&gt;         }               &lt;br /&gt;     }               &lt;br /&gt;     return writer.toString()        &lt;br /&gt;  } &lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;As you can see from the code above that we annotate our class with the &lt;code&gt;@Path&lt;/code&gt; annotation.  This basically defines your jersey resource.  So if you wanted to invoke this resource you URL would be something like http://localhost:8080/sample/announcements where sample is the name of your war you deployed to your application server.  In the code you can also see that our method &lt;code&gt;getHtmlResponse()&lt;/code&gt; has been annotated with &lt;code&gt;@GET&lt;/code&gt; which tells Jersey to call this method when the HTTP Request is a GET Request.  So given the same URL noted above, you could type that into a browser and hit enter and it will invoke the announcement resource with a GET request and invoke our method.  One other thing to note is the &lt;code&gt;@Produces&lt;/code&gt; annotation.  This annotation defines the mime type to return your result.  In our case we want the result to render as html so we set the type to text/html.  This annotation is one that I had to do a little diffrent with Groovy.  In Java the annotation would look like &lt;code&gt;@Produces("text/html")&lt;/code&gt;, whereas in Groovy I have to specifically call out the value property and enclose the value in brackets like this, &lt;code&gt;@Produces (value=["text/html"])&lt;/code&gt;.  If I didn't enclose the property in the proper way I got this error when compiling:&lt;br /&gt;&lt;br /&gt;Annotation list attributes must use Groovy notation [el1, el2]&lt;br /&gt;&lt;br /&gt;The good thing is my IDE (I was using Netbeans) caught this before compile time, and I refrenced this &lt;a href="http://jira.codehaus.org/browse/GROOVY-2679"&gt;issue &lt;/a&gt;to figure out how to get around it.&lt;br /&gt;&lt;br /&gt;So, as you can see from my source code that the bulk of the work is taking place in the getAnnouncements() method.  This was the reason that I wanted to use Groovy, I could very easily read a file, and based on the content create some html markup that would be returned to the browser.  Not much to discuss here, except that MarkupBuilder is very cool.  Alright, I think that's it, Good Luck.  One last thing is I used Jersey 1.0 and Groovy 1.5.6 to work this example.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6042050729972843368-7821751405480052023?l=gallemore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gallemore.blogspot.com/feeds/7821751405480052023/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6042050729972843368&amp;postID=7821751405480052023' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/7821751405480052023'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/7821751405480052023'/><link rel='alternate' type='text/html' href='http://gallemore.blogspot.com/2008/10/creating-restful-services-with-jersey.html' title='Creating RESTful services with Jersey and Groovy'/><author><name>Chad Gallemore</name><uri>http://www.blogger.com/profile/03687439195639920481</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_chNvxcoCzH4/R2alFr3cD6I/AAAAAAAAAE8/73AxciHQcrA/S220/chad_headshot.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6042050729972843368.post-2163495789253370362</id><published>2008-06-26T15:44:00.002-05:00</published><updated>2008-06-26T16:44:39.689-05:00</updated><title type='text'>Rapid Web Application Prototypes with Maven and Groovy</title><content type='html'>Utilizing both &lt;a href="http://maven.apache.org/"&gt;Maven&lt;/a&gt; and &lt;a href="http://groovy.codehaus.org/"&gt;Groovy&lt;/a&gt; you can rapidly prototype web apps, and in this blog I'll walk you through exactly how to do that.  First we are going to create a simple Maven web app project using the &lt;a href="http://maven.apache.org/guides/mini/guide-webapp.html"&gt;Maven Web App Archetype&lt;/a&gt;.  If you don't have Maven installed already, go ahead and install it.  Now let's create a directory called sandbox, and cd into that directory.  Now let's create our project by issuing the following command:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;mvn archetype:generate&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;When prompted to choose a number enter 18 (The Java web application archetype) and hit enter.  Next you will be prompted for the groupId, enter com.sample and hit enter, for the artifactId enter sample and hit enter, for the version enter 1.0 and hit enter, and for the package name enter com.sample and hit enter. Confirm you project by entering "Y" and hitting enter.  Once finsihed you will have a maven project ready to go for deployment.  You should see a sample diretory that was created in /sandbox with a pom.xml file.  The pom.xml file is what we will look at next.&lt;br /&gt;&lt;br /&gt;Next we need to add the dependency for Groovy to our pom, as well as the &lt;a href="http://groovy.codehaus.org/GMaven"&gt;Maven Groovy Plugin&lt;/a&gt;.  We do this by adding the following inside the &lt;code&gt;&amp;lt;build&amp;gt;&lt;/code&gt; element in the parent pom:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;plugins&amp;gt;&lt;br /&gt;&amp;lt;plugin&amp;gt;&lt;br /&gt;&amp;lt;groupId&amp;gt;org.codehaus.mojo.groovy&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;lt;artifactId&amp;gt;groovy-maven-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;lt;executions&amp;gt;&lt;br /&gt;&amp;lt;execution&amp;gt;&lt;br /&gt;&amp;lt;goals&amp;gt;&lt;br /&gt;&amp;lt;goal&amp;gt;compile&amp;lt;/goal&amp;gt;&lt;br /&gt;   &amp;lt;goal&amp;gt;testCompile&amp;lt;/goal&amp;gt;&lt;br /&gt;&amp;lt;/goals&amp;gt;&lt;br /&gt;&amp;lt;/execution&amp;gt;&lt;br /&gt;&amp;lt;/executions&amp;gt;&lt;br /&gt;&amp;lt;/plugin&amp;gt;&lt;br /&gt;&amp;lt;plugin&amp;gt;&lt;br /&gt;&amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;lt;artifactId&amp;gt;maven-war-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;lt;version&amp;gt;2.0&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;lt;/plugin&amp;gt;&lt;br /&gt;&amp;lt;/plugins&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;Now that we have the Groovy Plugin added, lets add the Groovy dependency to the pom as well by adding it inside the &lt;code&gt;&amp;lt;dependencies&amp;gt;&lt;/code&gt; element of the pom:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;lt;groupId&amp;gt;org.codehaus.groovy&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;lt;artifactId&amp;gt;groovy-all&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;lt;version&amp;gt;1.5.6&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;lt;/dependency&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;Ok, let's save all that and make sure we can build everything.  From /sandbox/sample issue the following command:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;mvn clean install&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;You should now have a successful build, and you could actually deploy the war that gets created (in /sandbox/sample/target you will have sample.war) to an application server such as JBoss.  Ok, lets get onto the cool stuff.  Groovy has a concept that lets you write normal Java servlets in Groovy, called &lt;a href="http://groovy.codehaus.org/Groovlets"&gt;Groovlets&lt;/a&gt;.  Groovlets are really easy to work with and have some nice features like implicit variables (e.g. request and response which are bound to the ServletRequest and ServletResponse).  So what we are going to do is configure our webapp so that it can handle Groovlets and then create our first Groovlet.  We are first going to edit our web.xml which is located at /sandbox/sample/src/main/webapp/WEB-INF/, go ahead an open that up and add the following between the &lt;code&gt;&amp;lt;web-app&amp;gt;&lt;/code&gt; elements:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;servlet&amp;gt;&lt;br /&gt;&amp;lt;servlet-name&amp;gt;GroovyServlet&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;&amp;lt;servlet-class&amp;gt;groovy.servlet.GroovyServlet&amp;lt;/servlet-class&amp;gt;&lt;br /&gt;&amp;lt;/servlet&amp;gt;&lt;br /&gt;&amp;lt;servlet&amp;gt;&lt;br /&gt;&amp;lt;servlet-name&amp;gt;GroovyTemplate&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;&amp;lt;servlet-class&amp;gt;groovy.servlet.TemplateServlet&amp;lt;/servlet-class&amp;gt;&lt;br /&gt;&amp;lt;/servlet&amp;gt;&lt;br /&gt;&amp;lt;servlet-mapping&amp;gt;&lt;br /&gt;&amp;lt;servlet-name&amp;gt;GroovyServlet&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;&amp;lt;url-pattern&amp;gt;*.groovy&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;&amp;lt;/servlet-mapping&amp;gt;&lt;br /&gt;&amp;lt;servlet-mapping&amp;gt;&lt;br /&gt;&amp;lt;servlet-name&amp;gt;GroovyTemplate&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;&amp;lt;url-pattern&amp;gt;*.gsp&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;&amp;lt;/servlet-mapping&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;This configures your webapp to compile your .groovy files to bytecode and execute your script when called.  Next we need to create our Groovlet and then we are done.  So, in /sandbox/sample/src/main/webapp create a file called Sample.groovy.  We are going to create a simple Groovlet that accepts an HTTP GET request and has a parameter called username.  We will process the request and just print out the response.  So, go ahead and open up the Sample.groovy file you opened and add the following:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;def username = request.getParameter("username")&lt;br /&gt;println "Hello ${username}"&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;That's it.  Rember that the request variable is implicit, meaning it's already bound to the ServletRequest and ready for use.  Now we can compile our war, and deploy it to your favorite application server and you are ready to roll.  Once deployed navigate to http://localhost:8080/sample/Sample.groovy?username=Chad in your web browser and you should see the print out "Hello Chad".&lt;br /&gt;&lt;br /&gt;This is a really nice way to rapidly prototype webapps.  I first started looking into this when I needed a servlet that could access the file system and return XML based off my lookup.  Obiously using &lt;a href="http://groovy.codehaus.org/groovy-jdk/"&gt;Groovy's nice features that have been added to the JDK&lt;/a&gt; for working with Files, and the &lt;a href="http://groovy.codehaus.org/GroovyMarkup"&gt;MarkupBuilder&lt;/a&gt;, this task was trivial.  Give it a spin and let me know what you think.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6042050729972843368-2163495789253370362?l=gallemore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gallemore.blogspot.com/feeds/2163495789253370362/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6042050729972843368&amp;postID=2163495789253370362' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/2163495789253370362'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/2163495789253370362'/><link rel='alternate' type='text/html' href='http://gallemore.blogspot.com/2008/06/rapid-web-application-prototypes-with.html' title='Rapid Web Application Prototypes with Maven and Groovy'/><author><name>Chad Gallemore</name><uri>http://www.blogger.com/profile/03687439195639920481</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_chNvxcoCzH4/R2alFr3cD6I/AAAAAAAAAE8/73AxciHQcrA/S220/chad_headshot.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6042050729972843368.post-3689496042620866125</id><published>2008-06-09T10:36:00.003-05:00</published><updated>2008-06-09T10:51:17.157-05:00</updated><title type='text'>Deploying Jersey REST services to Weblogic</title><content type='html'>I recently had some trouble deploying a REST service using &lt;a href="https://jersey.dev.java.net/"&gt;Jersey &lt;/a&gt;to Weblogic, specifically Weblogic 9.2.  This had me stumped for quite a while as I could deploy my war to JBoss and Tomcat and it worked fine.  Finally with an assist from the mailing list I was able to get past the problem and get the war to deploy.  As &lt;a href="https://jersey.dev.java.net/servlets/ReadMsg?list=users&amp;amp;msgNo=1544"&gt;Paul noted&lt;/a&gt;, the problem was that the default class scanning technique is not portable across servlet implmentations, so I needed to add the following to my web.xml (after the &lt;code&gt;&amp;lt;servlet-class&amp;gt;&lt;/code&gt; element):&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;init-param&amp;gt;&lt;br /&gt;&amp;lt;param-name&amp;gt;com.sun.jersey.config.property.resourceConfigClass&amp;lt;/param-name&amp;gt;&lt;br /&gt;&amp;lt;param-value&amp;gt;com.sun.jersey.api.core.PackagesResourceConfig&amp;lt;/param-value&amp;gt;&lt;br /&gt;&amp;lt;/init-param&amp;gt;&lt;br /&gt;&amp;lt;init-param&amp;gt;&lt;br /&gt;&amp;lt;param-name&amp;gt;com.sun.jersey.config.property.packages&amp;lt;/param-name&amp;gt;&lt;br /&gt;&amp;lt;param-value&amp;gt;*';' separated package names*&amp;lt;/param-value&amp;gt;&lt;br /&gt;&amp;lt;/init-param&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This tells Jersey to use the package scanning instead of the class path scanning.  Now all you have to do is insert your package names in the last param value (replace the *';' with your package name(s) seperated by ';').&lt;br /&gt;&lt;br /&gt;For more detail on this issue see the issue that was filed with Jersey &lt;a href="https://jersey.dev.java.net/issues/show_bug.cgi?id=32"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6042050729972843368-3689496042620866125?l=gallemore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gallemore.blogspot.com/feeds/3689496042620866125/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6042050729972843368&amp;postID=3689496042620866125' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/3689496042620866125'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/3689496042620866125'/><link rel='alternate' type='text/html' href='http://gallemore.blogspot.com/2008/06/deploying-jersey-rest-services-to.html' title='Deploying Jersey REST services to Weblogic'/><author><name>Chad Gallemore</name><uri>http://www.blogger.com/profile/03687439195639920481</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_chNvxcoCzH4/R2alFr3cD6I/AAAAAAAAAE8/73AxciHQcrA/S220/chad_headshot.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6042050729972843368.post-8273294162496435208</id><published>2008-05-29T15:52:00.006-05:00</published><updated>2008-05-29T23:26:28.707-05:00</updated><title type='text'>Groovy SQL - That was easy</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://merwin.bespin.org/blogpics/StaplesEasyButtonSmall.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px;" src="http://merwin.bespin.org/blogpics/StaplesEasyButtonSmall.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I got the chance today to get my hands dirty with &lt;a href="http://groovy.codehaus.org/GSQL"&gt;GSQL&lt;/a&gt; (Groovy's Built in support for SQL), and I must say that it was rather easy.  What I needed to do was connect to an embedded Derby database, parse a file, and populate the table with the results.  Not to hard right.  So, here is what my data looked like in the file I needed to parse:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;2008/04/06,pubsubproxy,6166,4061&lt;br /&gt;2008/04/07,pubsubproxy,6166,4061&lt;br /&gt;2008/04/08,pubsubproxy,6170,4061&lt;br /&gt;2008/04/09,pubsubproxy,6170,4061&lt;br /&gt;2008/04/10,pubsubproxy,6170,4061&lt;br /&gt;2008/04/11,pubsubproxy,6170,4061&lt;br /&gt;2008/04/12,pubsubproxy,6170,4061&lt;br /&gt;2008/04/13,pubsubproxy,6170,4061&lt;br /&gt;2008/04/14,pubsubproxy,6170,4061&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;The best part about this was as I read each line in the file I added the data to the dataset for the table I was populating.  The following shows a quick example of how to do this:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;static parseData(path) {&lt;br /&gt;println("parsing data for the following path: $path")&lt;br /&gt;setDBSystemDir()&lt;br /&gt;def loc = new File(path)&lt;br /&gt;&lt;br /&gt;//Get an instance to the derby database&lt;br /&gt;def sql = Sql.newInstance("jdbc:derby:dashboard;create=true", "org.apache.derby.jdbc.EmbeddedDriver")&lt;br /&gt;&lt;br /&gt;//For Each line in the file, split the line based on the comma&lt;br /&gt;loc.splitEachLine(',') {fields -&gt;&lt;br /&gt;   def pid = fields[1]&lt;br /&gt;   def locResult = Double.parseDouble(fields[2])&lt;br /&gt;   def tloc = Double.parseDouble(fields[3])&lt;br /&gt;   def timeStamp = getDate(fields[0])&lt;br /&gt;&lt;br /&gt;   //Get the linesofcode dataset from the database&lt;br /&gt;   def ds = sql.dataSet("linesofcode")&lt;br /&gt;   //Add the properties from the current line in the file to the dataset.&lt;br /&gt;   ds.add(&lt;br /&gt;           PID:pid,&lt;br /&gt;           TIMESTAMP:timeStamp,&lt;br /&gt;           LOC:locResult,&lt;br /&gt;           TLOC:tloc,&lt;br /&gt;   )&lt;br /&gt;}&lt;br /&gt;println "Done Parsing Data"&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;So as you can see the first thing I do is get a new instance to my database:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;def sql = Sql.newInstance("jdbc:derby:dashboard;create=true",     "org.apache.derby.jdbc.EmbeddedDriver")&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Next is the best part.  I loop over each line in the file, splitting the line based of the "," and then dive right in poplulating my dataset with &lt;code&gt;ds.add().&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;That was easy right?  I thought so.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6042050729972843368-8273294162496435208?l=gallemore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gallemore.blogspot.com/feeds/8273294162496435208/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6042050729972843368&amp;postID=8273294162496435208' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/8273294162496435208'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/8273294162496435208'/><link rel='alternate' type='text/html' href='http://gallemore.blogspot.com/2008/05/groovy-sql-that-was-easy.html' title='Groovy SQL - That was easy'/><author><name>Chad Gallemore</name><uri>http://www.blogger.com/profile/03687439195639920481</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_chNvxcoCzH4/R2alFr3cD6I/AAAAAAAAAE8/73AxciHQcrA/S220/chad_headshot.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6042050729972843368.post-4433673059838560199</id><published>2008-05-08T01:30:00.002-05:00</published><updated>2008-05-08T01:50:36.996-05:00</updated><title type='text'>JavaOne Day Two - All about SOA</title><content type='html'>As you can tell from my title I spent the bulk of my day attending sessions geared towards SOA.  I have to say that the day started out fantastic when I attended the Integration Profile for Glassfish v3.  This TS was given by Keith Babo and Andi Egloff of Sun and they did a phenomenal job of introducing us to &lt;a href="https://fuji.dev.java.net/"&gt;Project Fuji&lt;/a&gt;, Sun's next generation integration runtime.  I was pleasantly surprised to see when Keith gave the demo that they used a couple of the binding components that we, Gestalt, had developed.  The good news is that Keith has put up a &lt;a href="http://wiki.open-esb.java.net/Wiki.jsp?page=FujiScreenCastsDemos"&gt;screencast&lt;/a&gt; of the demo he showed this morning that shows of Project Fuji, and also our &lt;a href="https://rss-bc.dev.java.net/"&gt;RSS&lt;/a&gt; and &lt;a href="https://xmpp-bc.dev.java.net/"&gt;XMPP&lt;/a&gt; components.  &lt;a href="https://fuji.dev.java.net/"&gt;Project Fuji&lt;/a&gt; and &lt;a href="http://glassfishesb.org/"&gt;Glassfish ESB&lt;/a&gt; look very promising and I will be following them closely.&lt;br /&gt;&lt;br /&gt;The rest of the day I spent my time going to various sessions on SOA.  There is still a lot of talk about whether or not SCA is competing with JBI, or are they compliments.  To be honest I'm still not sure my self, but we will see how it plays out. &lt;br /&gt;&lt;br /&gt;I ended the day with the JBI 2.0 BOF.  I really like the way the expert group is approaching this.  They are doing a code first spec.  What the heck does that mean?  Basically what they are doing is going to be putting out code to the community implementing their ideas and gauges the communities feedback.  Once they get the feedback they need then they will put it into the spec.  I think this approach is better in that it will get the community involved in helping drive the specification, we just need to contribute and provide the expert group the feedback.&lt;br /&gt;&lt;br /&gt;Well, that's a short and sweet for today, I'll try and get something up again tomorrow.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6042050729972843368-4433673059838560199?l=gallemore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gallemore.blogspot.com/feeds/4433673059838560199/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6042050729972843368&amp;postID=4433673059838560199' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/4433673059838560199'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/4433673059838560199'/><link rel='alternate' type='text/html' href='http://gallemore.blogspot.com/2008/05/javaone-day-two-all-about-soa.html' title='JavaOne Day Two - All about SOA'/><author><name>Chad Gallemore</name><uri>http://www.blogger.com/profile/03687439195639920481</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_chNvxcoCzH4/R2alFr3cD6I/AAAAAAAAAE8/73AxciHQcrA/S220/chad_headshot.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6042050729972843368.post-3805334741253725204</id><published>2008-05-07T10:04:00.002-05:00</published><updated>2008-05-07T10:20:11.788-05:00</updated><title type='text'>JavaOne - Day One</title><content type='html'>I know it's a day late, but I thought I would try and get this down for anyone who cares.  JavaOne kicked off with a bang in the morning with the General Session in the morning.  We were all greeted with some rockin music and dancers performing on stage.  Half way through James Goosling graced us with his presence and launched T-Shirts into the crowd.  Rich Green of Sun gave the talk and really focused on Java and how it runs everywhere with sample from Amazon, Sony Ericson, a very cool Facebook application, and concluded with a demo from Neil Young (Yeah, the rocker Neil Young).  All in all, it was a very good start to JavaOne.&lt;br /&gt;&lt;br /&gt;After the General Session I started hitting up some of the technical sessions.  I hit up JRuby at first to see how that project is progressing.  I must say, it's coming along really nice.  The biggest take away was the IDE support that NetBeans is providing, it's really nice and improving every day.&lt;br /&gt;&lt;br /&gt;I was also fortunate enough to get invited to listen in on the JBI expert group.  I must say I was rather impressed with what was discussed.  The biggest take away was make sure you keep track of JBI and keep an eye on it over the coming months, I know I will be watching very closely.&lt;br /&gt;&lt;br /&gt;The next session I went to was upcoming Java language changes.  Some of the highlights were the following:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Multi-catch statements&lt;/li&gt;&lt;li&gt;Safe re-throw&lt;/li&gt;&lt;li&gt;Modular programming&lt;/li&gt;&lt;li&gt;Annotations enhancement&lt;/li&gt;&lt;/ul&gt;The biggest focus was on the additional support for annotations.&lt;br /&gt;&lt;br /&gt;Next up was secure mashups with OpenAjax.  This was of particular interest to me since my team is current working on some mashup technologies.  The stuff that OpenAjax is putting out is definitely worth keeping tabs on.&lt;br /&gt;&lt;br /&gt;Finally to end the day I attended the Grails in depth session.  I know that I have a particulair interest in Groovy and Grails, but I've got to say that Grails freaking rocks.  If your team is doing Agile development and need to get quick rapid proof of concepts done, then you really need to take a good hard look at Grails.  With its use of industry standards such as Hibernate and Spring, and the 40+ plugins that have been developed you'd be almost crazy to start from scratch and have to write all of that stuff yourself.&lt;br /&gt;&lt;br /&gt;All in all it was a good first day, now I've got to get ready for day two.  I'll try and get that up tonight or first thing tomorrow morning.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6042050729972843368-3805334741253725204?l=gallemore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gallemore.blogspot.com/feeds/3805334741253725204/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6042050729972843368&amp;postID=3805334741253725204' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/3805334741253725204'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/3805334741253725204'/><link rel='alternate' type='text/html' href='http://gallemore.blogspot.com/2008/05/javaone-day-one.html' title='JavaOne - Day One'/><author><name>Chad Gallemore</name><uri>http://www.blogger.com/profile/03687439195639920481</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_chNvxcoCzH4/R2alFr3cD6I/AAAAAAAAAE8/73AxciHQcrA/S220/chad_headshot.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6042050729972843368.post-3490466141887464370</id><published>2008-05-06T08:52:00.002-05:00</published><updated>2008-05-06T09:03:41.277-05:00</updated><title type='text'>Pre JavaOne</title><content type='html'>Well, I'm fortunate enough to be in San Francisco for this years JavaOne confrence.  I'm going to try and update my blog throughout the day on some of the highlights.  Last night I went to the &lt;a href="http://g2one.com/"&gt;G2One &lt;/a&gt;meetup and listend to &lt;a href="http://glaforge.free.fr/weblog/"&gt;Guillaume Laforge&lt;/a&gt; give the state of the union on the Groovy and Grails community.  There is a lot of excitement around booth of these communities and rightfully so.  They are really cranking and getting a solid community behind them.  Some interesting takeways from last night:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Groovy is going to be making several releases of the coming months, hoping to get to 2.0 by the end of the year.&lt;/li&gt;&lt;li&gt;Groovy has really been focusing on their performance and plans to improve it even more.&lt;/li&gt;&lt;li&gt;Grails has some really nice new features coming down the pipe for 1.1&lt;/li&gt;&lt;/ul&gt;Some other tidbids include&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Look for support for Groovy/Grails in NetBeans 6.5&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.linkedin.com/"&gt;LinkedIn &lt;/a&gt;is using Grails to build one of their new services and been really happy with it and it's integration with their legacy systems.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.contegix.com/"&gt;Contegix &lt;/a&gt;has selected Grails as their platform of choice and talked about why.&lt;/li&gt;&lt;/ul&gt;It was a good start last night, and thanks to the &lt;a href="http://g2one.com/"&gt;G2One &lt;/a&gt;and &lt;a href="http://www.nofluffjuststuff.com/"&gt;NFJS &lt;/a&gt;folks for throwing a really nice function.  More to come today on Day one at the concfrence.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6042050729972843368-3490466141887464370?l=gallemore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gallemore.blogspot.com/feeds/3490466141887464370/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6042050729972843368&amp;postID=3490466141887464370' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/3490466141887464370'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/3490466141887464370'/><link rel='alternate' type='text/html' href='http://gallemore.blogspot.com/2008/05/pre-javaone.html' title='Pre JavaOne'/><author><name>Chad Gallemore</name><uri>http://www.blogger.com/profile/03687439195639920481</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_chNvxcoCzH4/R2alFr3cD6I/AAAAAAAAAE8/73AxciHQcrA/S220/chad_headshot.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6042050729972843368.post-7946255963970810139</id><published>2008-04-25T16:35:00.002-05:00</published><updated>2008-04-25T16:36:50.380-05:00</updated><title type='text'>Oh how I miss these days!!</title><content type='html'>I sometimes miss the days of being in the Military (Semper Fi), and being in the desert with nothing to do, here is a nice little video of what happens when bordem sets in.&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/IRJfYpD0WbY&amp;hl=en"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/IRJfYpD0WbY&amp;hl=en" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6042050729972843368-7946255963970810139?l=gallemore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gallemore.blogspot.com/feeds/7946255963970810139/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6042050729972843368&amp;postID=7946255963970810139' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/7946255963970810139'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/7946255963970810139'/><link rel='alternate' type='text/html' href='http://gallemore.blogspot.com/2008/04/oh-how-i-miss-these-days.html' title='Oh how I miss these days!!'/><author><name>Chad Gallemore</name><uri>http://www.blogger.com/profile/03687439195639920481</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_chNvxcoCzH4/R2alFr3cD6I/AAAAAAAAAE8/73AxciHQcrA/S220/chad_headshot.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6042050729972843368.post-5917132310156872443</id><published>2008-04-21T13:36:00.004-05:00</published><updated>2008-04-21T14:04:31.072-05:00</updated><title type='text'>Groovy XMLSlurper</title><content type='html'>If you know anything about Groovy, I'm sure you have seen the XML parsing features it brings to the table. Whether you have seen it or not it is definitely worth mentioning.  I feel this is a great tool added to my Java tool chest.&lt;br /&gt;&lt;br /&gt;Imagine you have the following XML:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&amp;lt;basketball team="Kansas" status="National Champions"&amp;gt;&lt;br /&gt;&amp;lt;player&amp;gt;&lt;br /&gt;   &amp;lt;name&amp;gt;Brandon Rush&amp;lt;/name&amp;gt;&lt;br /&gt;   &amp;lt;position&amp;gt;Small Forward&amp;lt;/position&amp;gt;&lt;br /&gt;   &amp;lt;pts-per-game&amp;gt;13.5&amp;lt;/pts-per-game&amp;gt;&lt;br /&gt;   &amp;lt;rebs-per-game&amp;gt;6.2&amp;lt;/rebs-per-game&amp;gt;&lt;br /&gt;&amp;lt;/player&amp;gt;&lt;br /&gt;&amp;lt;player&amp;gt;&lt;br /&gt;   &amp;lt;name&amp;gt;Mario Chalmers&amp;lt;/name&amp;gt;&lt;br /&gt;   &amp;lt;position&amp;gt;Guard&amp;lt;/position&amp;gt;&lt;br /&gt;   &amp;lt;pts-per-game&amp;gt;12.5&amp;lt;/pts-per-game&amp;gt;&lt;br /&gt;   &amp;lt;rebs-per-game&amp;gt;4.2&amp;lt;/rebs-per-game&amp;gt;&lt;br /&gt;&amp;lt;/player&amp;gt;&lt;br /&gt;&amp;lt;player&amp;gt;&lt;br /&gt;   &amp;lt;name&amp;gt;Sherron Collins&amp;lt;/name&amp;gt;&lt;br /&gt;   &amp;lt;position&amp;gt;Guard&amp;lt;/position&amp;gt;&lt;br /&gt;   &amp;lt;pts-per-game&amp;gt;10.5&amp;lt;/pts-per-game&amp;gt;&lt;br /&gt;   &amp;lt;rebs-per-game&amp;gt;3.4&amp;lt;/rebs-per-game&amp;gt;&lt;br /&gt;&amp;lt;/player&amp;gt;&lt;br /&gt;&amp;lt;player&amp;gt;&lt;br /&gt;   &amp;lt;name&amp;gt;Darrel Arthur&amp;lt;/name&amp;gt;&lt;br /&gt;   &amp;lt;position&amp;gt;Power Forward&amp;lt;/position&amp;gt;&lt;br /&gt;   &amp;lt;pts-per-game&amp;gt;14.2&amp;lt;/pts-per-game&amp;gt;&lt;br /&gt;   &amp;lt;rebs-per-game&amp;gt;6.9&amp;lt;/rebs-per-game&amp;gt;&lt;br /&gt;&amp;lt;/player&amp;gt;&lt;br /&gt;&amp;lt;player&amp;gt;&lt;br /&gt;   &amp;lt;name&amp;gt;Darnell Jackson&amp;lt;/name&amp;gt;&lt;br /&gt;   &amp;lt;position&amp;gt;Power Forward&amp;lt;/position&amp;gt;&lt;br /&gt;   &amp;lt;pts-per-game&amp;gt;12.5&amp;lt;/pts-per-game&amp;gt;&lt;br /&gt;   &amp;lt;rebs-per-game&amp;gt;8.9&amp;lt;/rebs-per-game&amp;gt;&lt;br /&gt;&amp;lt;/player&amp;gt;&lt;br /&gt;&amp;lt;/basketball&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Now that you have your XML you want to parse it and put it into a Player object.  Let's go ahead and create our Player object:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;class Player {&lt;br /&gt;  String name&lt;br /&gt;  String position&lt;br /&gt;  double ptsPerGame&lt;br /&gt;  double rebsPerGame&lt;br /&gt;&lt;br /&gt;  def String toString() {&lt;br /&gt;      return "Name: ${name}\r\nPosition: ${position}\r\nPoints Per Game: ${ptsPerGame}\r\nRebs Per Game${rebsPerGame}"&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Now that we have our Player class created, lets create a class that will consume the XML create a Player for each Player in the XML:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;class ParsePlayers {&lt;br /&gt;private List players&lt;br /&gt;&lt;br /&gt;  ParsePlayers () {&lt;br /&gt;      players = new ArrayList()&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  def Player[] parsePlayers() {&lt;br /&gt;      def data = this.getClass().getResource("/players.xml").text&lt;br /&gt;      def xmlSlurper = new XmlSlurper()&lt;br /&gt;      def playersXml = xmlSlurper.parseText(data)&lt;br /&gt;&lt;br /&gt;      playersXml.player.each {&lt;br /&gt;          def player = new Player()&lt;br /&gt;&lt;br /&gt;          player.name = it.name.text()&lt;br /&gt;          player.position = it.position.text()&lt;br /&gt;          player.ptsPerGame = Double.parseDouble(it.'pts-per-game'.text().trim())&lt;br /&gt;          player.rebsPerGame = Double.parseDouble(it.'rebs-per-game'.text().trim())&lt;br /&gt;&lt;br /&gt;          players.add(player)&lt;br /&gt;      }&lt;br /&gt;      return (Player[])players.toArray()&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;So, as you can see above that is a pretty simple way to parse XML using XMLSlurper from Groovy.  I don't know about you, but that makes working with XML a little bit nicer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6042050729972843368-5917132310156872443?l=gallemore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gallemore.blogspot.com/feeds/5917132310156872443/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6042050729972843368&amp;postID=5917132310156872443' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/5917132310156872443'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/5917132310156872443'/><link rel='alternate' type='text/html' href='http://gallemore.blogspot.com/2008/04/groovy-xmlslurper.html' title='Groovy XMLSlurper'/><author><name>Chad Gallemore</name><uri>http://www.blogger.com/profile/03687439195639920481</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_chNvxcoCzH4/R2alFr3cD6I/AAAAAAAAAE8/73AxciHQcrA/S220/chad_headshot.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6042050729972843368.post-1116026925716924264</id><published>2008-02-25T17:13:00.007-06:00</published><updated>2008-02-28T13:26:22.497-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mocks'/><category scheme='http://www.blogger.com/atom/ns#' term='Groovy'/><category scheme='http://www.blogger.com/atom/ns#' term='TDD'/><title type='text'>Groovy Stub's</title><content type='html'>I've been getting the chance to use Groovy a lot more at work lately and it's allowed me to really dig deep into some of the features.  One of those being the use of Stub's for Unit testing.  This is a fantastic feature and really simple to use.  Lets look at the following code below:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;def Entries[] getFeed(feedUrl) {&lt;br /&gt;        def url = new URL(feedUrl)&lt;br /&gt;        def data = url.getText()&lt;br /&gt;&lt;br /&gt;        def xmlSlurper = new XmlSlurper()&lt;br /&gt;        def feed = xmlSlurper.parseText(data)&lt;br /&gt;&lt;br /&gt;        if (feedType.toLowerCase() == "rss") {&lt;br /&gt;            feed.channel.item.each { item -&gt;&lt;br /&gt;                def rssItem = new Entries()&lt;br /&gt;                rssItem.title = item.title&lt;br /&gt;                rssItem.link = item.link&lt;br /&gt;                rssItem.description = item.description&lt;br /&gt;                rssItem.date = item.pubDate&lt;br /&gt;                println (rssItem)&lt;br /&gt;                entries.add (rssItem)&lt;br /&gt;            }&lt;br /&gt;        } else {&lt;br /&gt;            feed.entry.each { entry -&gt;&lt;br /&gt;                def atomEntry = new Entries()&lt;br /&gt;&lt;br /&gt;                atomEntry.title = entry.title&lt;br /&gt;                atomEntry.link = entry.link[0].@href&lt;br /&gt;                atomEntry.description = entry.content&lt;br /&gt;                atomEntry.date = entry.published&lt;br /&gt;                entries.add (atomEntry)&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        return (Entries[]) entries.toArray()&lt;br /&gt;    }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This code is pretty straight forward in that we are taking a URL for an RSS feed and going to read the feed and create an Entries object for each entry in the feed (this is a great example of how to use Groovy to consume rss feeds).  The problem with unit testing this is the following section:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;    def url = new URL(feedUrl)&lt;br /&gt;    def data = url.getText()&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;I needed a way to stub this out so I could isolate this code at the unit level.  Using Groovy's StubFor was the perfect way, the following is what my unit test looked like:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;    def void testAtomFeed() {&lt;br /&gt;        def block = new RssDataBlock()&lt;br /&gt;        block.engineURL = "http://bob.com"&lt;br /&gt;        block.feedType = "atom"&lt;br /&gt;        def urlStub = new StubFor(URL)&lt;br /&gt;        urlStub.demand.getText {&lt;br /&gt;            return "my mock data"&lt;br /&gt;        }&lt;br /&gt;        urlStub.use {&lt;br /&gt;            def entries = block.getFeed("http://cnn.com")&lt;br /&gt;            assertEquals("", block.generateOutput(),&lt;br /&gt;                    "Title:${title}\r\nDescription:${description}\r\nLink:${link}\r\nPublished Date: ${date}")&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;The import thing that is going on is we are creating a Stub for the URL class (&lt;code&gt;new StubFor(URL)&lt;/code&gt;), and intercepting when the &lt;code&gt;getText()&lt;/code&gt; method gets called we are going to return our sample data set.  To use the stub you simply call &lt;code&gt;urlStub.use&lt;/code&gt; and in the closure you execute your test.  As you can see above, I call getFeed() with my bogus URL; and then I assert that the output I was expecting (&lt;code&gt;generateOutput()&lt;/code&gt;pretty prints my output for me) is equal to what I actually got.&lt;br /&gt;&lt;br /&gt;This is very powerful and makes my life a whole lot easier.  The more I use Groovy, the more I'm impressed (I've even been able to convert some of my co-workers :) ).  Stay tuned, I plan on posting about Groovlets next......&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6042050729972843368-1116026925716924264?l=gallemore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gallemore.blogspot.com/feeds/1116026925716924264/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6042050729972843368&amp;postID=1116026925716924264' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/1116026925716924264'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/1116026925716924264'/><link rel='alternate' type='text/html' href='http://gallemore.blogspot.com/2008/02/groovy-stubs.html' title='Groovy Stub&apos;s'/><author><name>Chad Gallemore</name><uri>http://www.blogger.com/profile/03687439195639920481</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_chNvxcoCzH4/R2alFr3cD6I/AAAAAAAAAE8/73AxciHQcrA/S220/chad_headshot.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6042050729972843368.post-2298668685302488055</id><published>2008-01-21T14:28:00.000-06:00</published><updated>2008-02-03T12:27:38.986-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Groovy'/><title type='text'>A Socket Client for Groovy</title><content type='html'>Groovy Rocks!!  I needed a simple client that would write data to a socket to test this application I was working on so I wrote it in Java since I had done that before.  My code looked like the following:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;public static void main(String[] args) throws Exception {&lt;br /&gt;        String data = "test data";&lt;br /&gt;        InputStream is = new ByteArrayInputStream(data.getBytes());&lt;br /&gt;&lt;br /&gt;        Socket socket = new Socket("localhost", 8282);&lt;br /&gt;        PrintWriter pw = new PrintWriter(socket.getOutputStream(), true);&lt;br /&gt;        BufferedReader bw = new BufferedReader(new InputStreamReader(&lt;br /&gt;                    socket.getInputStream()));&lt;br /&gt;&lt;br /&gt;        BufferedReader br = new BufferedReader(new InputStreamReader(is));&lt;br /&gt;        String userInput;&lt;br /&gt;        &lt;br /&gt;        if ((userInput = br.readLine()) != null) {&lt;br /&gt;            System.out.println("yeb");&lt;br /&gt;            pw.println(userInput);&lt;br /&gt;            pw.close();&lt;br /&gt;            bw.close();&lt;br /&gt;            br.close();&lt;br /&gt;            socket.close();&lt;br /&gt;            System.exit(200);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;After I got done, I was curious how I could do this same sort of thing in Groovy.  So, I spun up the Groovy Shell and away I went.....&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;s = new Socket("localhost", 8283)&lt;br /&gt;s &lt;&lt; "Groovy Rocks"&lt;br /&gt;s.close()&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;... I type go in my groovy shell and I'm done.  Seriously, 3 lines of code and a quick shell to test it out.  Groovy is awesome.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6042050729972843368-2298668685302488055?l=gallemore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gallemore.blogspot.com/feeds/2298668685302488055/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6042050729972843368&amp;postID=2298668685302488055' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/2298668685302488055'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/2298668685302488055'/><link rel='alternate' type='text/html' href='http://gallemore.blogspot.com/2008/01/socket-client-for-groovy.html' title='A Socket Client for Groovy'/><author><name>Chad Gallemore</name><uri>http://www.blogger.com/profile/03687439195639920481</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_chNvxcoCzH4/R2alFr3cD6I/AAAAAAAAAE8/73AxciHQcrA/S220/chad_headshot.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6042050729972843368.post-8290625555777728763</id><published>2007-11-28T13:28:00.000-06:00</published><updated>2007-11-28T13:36:52.905-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='JMX'/><title type='text'>Connecting jconsole to JBoss JMX server</title><content type='html'>So I was working on integrating the JBI ant tasks to the &lt;a href="http://wiki.open-esb.java.net/Wiki.jsp?page=OpenESBJBoss"&gt;Open ESB distribution for JBoss&lt;/a&gt; and I was having some issues connecting to the JMX server.  So, I wanted to try something simple and see if I could connect &lt;a href="http://java.sun.com/j2se/1.5.0/docs/guide/management/jconsole.html"&gt;jconsole&lt;/a&gt; to the JMX server first.  Out of the box this does not work.  You will have to add some system properties to your run.sh or run.bat file for this to work.  It's pretty simple really, but took me a while to find.  For this to work just add the following properties to you run.sh file:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;# Enable the jconsole agent remotely on port 64850&lt;br /&gt;JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.port=64850"&lt;br /&gt;JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.authenticate=false"&lt;br /&gt;JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.ssl=false"&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Next, start JBoss and once it is started you can start jconsole by issuing the command jconosle from a command window.  You can connect in one of three ways.  If you are connecting locally just select the local tab, you will see the PID and the class for JBoss and select Connect.  If you are connecting to remotely select the remote tab and enter the Host/IP and the Port (the one you entered in your run.sh file).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6042050729972843368-8290625555777728763?l=gallemore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gallemore.blogspot.com/feeds/8290625555777728763/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6042050729972843368&amp;postID=8290625555777728763' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/8290625555777728763'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/8290625555777728763'/><link rel='alternate' type='text/html' href='http://gallemore.blogspot.com/2007/11/connecting-jconsole-to-jboss-jmx-server.html' title='Connecting jconsole to JBoss JMX server'/><author><name>Chad Gallemore</name><uri>http://www.blogger.com/profile/03687439195639920481</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_chNvxcoCzH4/R2alFr3cD6I/AAAAAAAAAE8/73AxciHQcrA/S220/chad_headshot.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6042050729972843368.post-6644132960440860343</id><published>2007-11-12T10:29:00.000-06:00</published><updated>2007-11-16T09:32:08.507-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CVS'/><category scheme='http://www.blogger.com/atom/ns#' term='diff'/><title type='text'>Contributing a patch back to an Open Source project</title><content type='html'>I recently needed to contribute a patch back to an open source project I was working on, and since I wasn't familiar with using cvs from the command line I needed to research how to create a diff.  I thought I would post my findings since it took me a while to find anything useful.  First you will want to create a diff of the code you are contributing. For a single class you could do the following:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;cvs diff -u myClass.java &gt; myClass.diff&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This creates a unified diff, which I have read most open source projects prefer, or the class you modified with what is current in CVS, and output the diff to myClass.diff.&lt;br /&gt;&lt;br /&gt;If the class is not under CVS control, you can add the class and then run the following:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;cvs diff -uN myClass.java &gt; myClass.diff&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;If you have modifications to more than one class you can do a diff on the entire package by doing the following:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;cvs diff -uN myPackage &gt; myPackage.diff&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This will recursively perform a diff on anything that is either added or under cvs control and write the output out to myPackage.diff.&lt;br /&gt;&lt;br /&gt;You can also set how many lines of context you wish in your unified diff by doing the following:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;cvs diff -u8N myClass.java &gt; myClass.diff&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6042050729972843368-6644132960440860343?l=gallemore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gallemore.blogspot.com/feeds/6644132960440860343/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6042050729972843368&amp;postID=6644132960440860343' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/6644132960440860343'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/6644132960440860343'/><link rel='alternate' type='text/html' href='http://gallemore.blogspot.com/2007/11/contributing-patch-back-to-open-source.html' title='Contributing a patch back to an Open Source project'/><author><name>Chad Gallemore</name><uri>http://www.blogger.com/profile/03687439195639920481</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_chNvxcoCzH4/R2alFr3cD6I/AAAAAAAAAE8/73AxciHQcrA/S220/chad_headshot.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6042050729972843368.post-4689146940003847420</id><published>2007-11-09T16:45:00.000-06:00</published><updated>2007-11-09T16:55:58.688-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Marines'/><title type='text'>Happy Birthday Marines - Semper Fi</title><content type='html'>Don't forget to celebrate the best holiday of the year on Saturday November 10th, The 232 Birthday of the United States Marine Corps.  If you need a little inspiration this weekend checkout General Conway's &lt;a href="http://marines.feedroom.com/?fr_story=41572ffae83e4e6c74f36168e7f9a6416818792e&amp;rf=sitemap"&gt;Marine Corps Birthday Message&lt;/a&gt;, this is just one of the several proud traditions that all Marines will be participating in this weekend.  If you know a Marine, make sure and tell them Happy Birthday.  Semper Fi.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6042050729972843368-4689146940003847420?l=gallemore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gallemore.blogspot.com/feeds/4689146940003847420/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6042050729972843368&amp;postID=4689146940003847420' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/4689146940003847420'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/4689146940003847420'/><link rel='alternate' type='text/html' href='http://gallemore.blogspot.com/2007/11/happy-birthday-marines-semper-fi.html' title='Happy Birthday Marines - Semper Fi'/><author><name>Chad Gallemore</name><uri>http://www.blogger.com/profile/03687439195639920481</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_chNvxcoCzH4/R2alFr3cD6I/AAAAAAAAAE8/73AxciHQcrA/S220/chad_headshot.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6042050729972843368.post-3541779064217175236</id><published>2007-11-05T20:56:00.000-06:00</published><updated>2007-11-05T21:06:57.785-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOAP'/><category scheme='http://www.blogger.com/atom/ns#' term='IDEA'/><title type='text'>soapUI - Great plug-in for IDEA</title><content type='html'>I had used &lt;a href="http://www.soapui.org/"&gt;&lt;span style="text-decoration: underline;"&gt;soapUI&lt;/span&gt;&lt;/a&gt;&lt;a href="http://www.soapui.org/"&gt; &lt;/a&gt;before, with &lt;a href="http://www.netbeans.org/"&gt;Netbeans&lt;/a&gt;, but hadn't ever even looked to see if my preferred IDE &lt;strong&gt;&lt;a href="http://www.jetbrains.com/"&gt;IntelliJ IDEA&lt;/a&gt; &lt;/strong&gt;had a plug-in.  Today I was getting ready to run some tests and needed soapUI and I didn't want to start Netbeans, so I installed the &lt;a href="http://www.soapui.org/intellij/index.html"&gt;soapUI plug-in&lt;/a&gt; for IDEA.  It's great, and very simple to use.  Some of you may have used the standalone version of soapUI before, but if your like me you always have your IDE up so why not just get the plug-in.  If you haven't ever used soapUI and need a really great tool to send SOAP for testing purposes, it's a great tool and I highly recommend it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6042050729972843368-3541779064217175236?l=gallemore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gallemore.blogspot.com/feeds/3541779064217175236/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6042050729972843368&amp;postID=3541779064217175236' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/3541779064217175236'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/3541779064217175236'/><link rel='alternate' type='text/html' href='http://gallemore.blogspot.com/2007/11/soapui-great-plug-in-for-idea.html' title='soapUI - Great plug-in for IDEA'/><author><name>Chad Gallemore</name><uri>http://www.blogger.com/profile/03687439195639920481</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_chNvxcoCzH4/R2alFr3cD6I/AAAAAAAAAE8/73AxciHQcrA/S220/chad_headshot.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6042050729972843368.post-4792202547286948881</id><published>2007-10-30T12:30:00.000-05:00</published><updated>2007-10-30T12:42:06.830-05:00</updated><title type='text'>I've been keeping my mouth shut!!!!</title><content type='html'>Well since my beloved Wolverines started out 0-2, I've been keeping my mouth shut this football season.  I think it's time I start to talk some smack again.  My only fear is that once I do, my teams will fall a great defeat to a lesser opponent, but hey who cares.&lt;br /&gt;&lt;br /&gt;So after Michigan's dismal start, they have now reeled off 7 wins in a row.  Granted the Big 10 isn't so good this year, but we have been winning despites some critical injuries.  Last week Big Blue pulled a win out with their starting running back and quarterback on the sidelines in street clothes.  Buckeyes beware!&lt;br /&gt;&lt;br /&gt;On another note, I never brag about my second favorite team, but this year I have to.  The University of Kansas is playing some football.  I don't care what everyone is saying about how weak their schedule is, that fact is they are 8-0.  They have beaten Colorado, K-State, and Texas A&amp;amp;M on the road.  Years past the we couldn't win a game on the road.  You can say what you want about the Jayhawks and their weak schedule, but the fact remains that they have a damn good defense (5th in the Nation I believe), and an offense that can put points on the board against any team in the country.  I'm not saying they are going to win the National Championship (For one, the BCS would never allow a team like KU to be in the title came, but that's a whole other topic for discussion), but I wouldn't be surprised if they rolled into Arrowhead Stadium on November 24th looking to win the Big 12 North and a shot at the Big 12 title.&lt;br /&gt;&lt;br /&gt;With all the fun of college football, we sometimes forget that college basketball is right around the corner.  My Jayhawks kick off the season on Thursday with an exhibition game against Pittsburg State.  Rock Chalk Jayhawk.&lt;br /&gt;&lt;br /&gt;I think it's going to be a good year for my Jayhawks, hopefully the basketball team can start out like the football team and end with a National Championship.&lt;br /&gt;&lt;br /&gt;Ok, enough sports talk.  I'll get back to blogging about tech stuff next time.  I'm hoping to work through some more Groovy examples, and get some of those up here.  Until next time....Rock Chalk Jayhawk...Go KU!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6042050729972843368-4792202547286948881?l=gallemore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gallemore.blogspot.com/feeds/4792202547286948881/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6042050729972843368&amp;postID=4792202547286948881' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/4792202547286948881'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/4792202547286948881'/><link rel='alternate' type='text/html' href='http://gallemore.blogspot.com/2007/10/ive-been-keeping-my-mouth-shut.html' title='I&apos;ve been keeping my mouth shut!!!!'/><author><name>Chad Gallemore</name><uri>http://www.blogger.com/profile/03687439195639920481</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_chNvxcoCzH4/R2alFr3cD6I/AAAAAAAAAE8/73AxciHQcrA/S220/chad_headshot.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6042050729972843368.post-5088342216294062271</id><published>2007-10-10T12:28:00.000-05:00</published><updated>2007-10-10T12:33:29.778-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Groovy'/><title type='text'>Two Minute Drill for Groovy</title><content type='html'>I know I promised more on Groovy, and I will get some more examples up here.  However, one of my co-workers, &lt;a href="http://joe.kueser.com/"&gt;Joe Kueser&lt;/a&gt;, just posted a great blog about Groovy.  Basically Joe's Blog, &lt;a href="http://joe.kueser.com/?p=7"&gt;"What Makes Groovy So...Groovy?"&lt;/a&gt;, is a two minute read that provides a great summary of a lot of the features in Groovy.  Be sure to check out Joe's Two Minute Drill.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6042050729972843368-5088342216294062271?l=gallemore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gallemore.blogspot.com/feeds/5088342216294062271/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6042050729972843368&amp;postID=5088342216294062271' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/5088342216294062271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/5088342216294062271'/><link rel='alternate' type='text/html' href='http://gallemore.blogspot.com/2007/10/two-minute-drill-for-groovy.html' title='Two Minute Drill for Groovy'/><author><name>Chad Gallemore</name><uri>http://www.blogger.com/profile/03687439195639920481</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_chNvxcoCzH4/R2alFr3cD6I/AAAAAAAAAE8/73AxciHQcrA/S220/chad_headshot.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6042050729972843368.post-9051249209065084555</id><published>2007-10-06T09:28:00.000-05:00</published><updated>2007-10-06T09:51:19.145-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><category scheme='http://www.blogger.com/atom/ns#' term='Groovy'/><title type='text'>Converting Dom to Groovy Code</title><content type='html'>I've been looking into and learning a little &lt;a href="http://groovy.codehaus.org/"&gt;Groovy &lt;/a&gt;on the side.  One of the things I'm most interested in is learning how to use the &lt;a href="http://groovy.codehaus.org/Creating+XML+using+Groovy%27s+MarkupBuilder"&gt;MarkupBuilder &lt;/a&gt;provided by Groovy.  Essentially this, in my opinion, is a much better way to parse and construct XML.  As a developer I use XML almost daily.  First I'm looking at integrating this into my unit tests.  Today I stumbled on the DomToGroovy class and found this pretty cool.  I was trying to figure out how to construct XML using Groovy.  I knew what the XML looked liked, so using the DomToGroovy class I could get a good idea what the Groovy code would look like that I needed to write.  Below is a sample of how to do this, and I recommend the &lt;a href="http://groovy.codehaus.org/Groovy+Console"&gt;GroovyConsole &lt;/a&gt;to test with.&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;pre&gt;&lt;br /&gt;import javax.xml.parsers.DocumentBuilderFactory&lt;br /&gt;import org.codehaus.groovy.tools.xml.DomToGroovy&lt;br /&gt;&lt;br /&gt;def xmlExample = """&lt;br /&gt;&amp;lt;jbi:message tns="http://j2ee.netbeans.org/wsdl/rssWsdl"                                     &lt;br /&gt;              type="tns:rssWsdlOperationRequest" version="1.0"&lt;br /&gt;              jbi="http://java.sun.com/xml/ns/jbi/wsdl-11-wrapper"&amp;gt;&lt;br /&gt;         &amp;lt;jbi:part&amp;gt;&lt;br /&gt;             &amp;lt;entrylist xmlns="http://xml.netbeans.org/schema/1.0/extensions/rssbc"&amp;gt;&lt;br /&gt;                 &amp;lt;entry&amp;gt;&lt;br /&gt;                     &amp;lt;title&amp;gt;Entry 1&amp;lt;/title&amp;gt;                     &lt;br /&gt;                     &amp;lt;link&amp;gt;http://localhost:8000/rss/feed/entry1&amp;lt;link&amp;gt;&lt;br /&gt;                     &amp;lt;description&amp;gt;First Entry&amp;lt;/description&amp;gt;&lt;br /&gt;                     &amp;lt;publishdate&amp;gt;Dec 7, 1976&amp;lt;/publishdate&amp;gt;&lt;br /&gt;                 &amp;lt;/entry&amp;gt;&lt;br /&gt;                 &amp;lt;entry&amp;gt;&lt;br /&gt;                     &amp;lt;title&amp;gt;Entry 2&amp;lt;/title&amp;gt;                      &lt;br /&gt;                     &amp;lt;link&amp;gt;http://localhost:8000/rss/feed/entry2&amp;lt;link&amp;gt;&lt;br /&gt;                     &amp;lt;description&gt;Second Entry&amp;lt;/description&amp;gt;&lt;br /&gt;                     &amp;lt;publishdate&amp;gt;Dec. 7, 1976&amp;lt;/publishdate&amp;gt;&lt;br /&gt;                 &amp;lt;/entry&amp;gt;&lt;br /&gt;             &amp;lt;/entrylist&amp;gt;&lt;br /&gt;         &amp;lt;/jbi:part&amp;gt;&lt;br /&gt;     &amp;lt;/jbi:message&amp;gt;&lt;br /&gt;"""&lt;br /&gt;&lt;br /&gt;def builder     = DocumentBuilderFactory.newInstance().newDocumentBuilder()&lt;br /&gt;def inputStream = new ByteArrayInputStream(xmlExample.bytes)&lt;br /&gt;def document    = builder.parse(inputStream)&lt;br /&gt;def output      = new StringWriter()&lt;br /&gt;def converter   = new DomToGroovy(new PrintWriter(output))&lt;br /&gt;&lt;br /&gt;converter.print(document)&lt;br /&gt;println output.toString()&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The output essentially shows you what the Groovy code would look like to construct the XML that we provided.&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;pre&gt;&lt;br /&gt;jbi:message(type:'tns:rssWsdlOperationRequest', version:'1.0',&lt;br /&gt;  xmlns:jbi:'http://java.sun.com/xml/ns/jbi/wsdl-11-wrapper',&lt;br /&gt;  xmlns:tns:'http://j2ee.netbeans.org/wsdl/rssWsdl') {&lt;br /&gt;jbi:part) {&lt;br /&gt; EntryList(xmlns:'http://xml.netbeans.org/schema/1.0/extensions/rssbc') {&lt;br /&gt;   Entry) {&lt;br /&gt;     title('Entry 1')&lt;br /&gt;     link('http://localhost:8000/rss/feed/entry1')&lt;br /&gt;     description('First Entry')&lt;br /&gt;     publishDate('Dec 7, 1976')&lt;br /&gt;   }&lt;br /&gt;   Entry) {&lt;br /&gt;     title('Entry 2')&lt;br /&gt;     link('http://localhost:8000/rss/feed/entry2')&lt;br /&gt;     description('Second Entry')&lt;br /&gt;     publishDate('Dec. 7, 1976')&lt;br /&gt;   }&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;I think this is a pretty slick way to quickly generate a code sample so that you can quickly get started.  More to come on Groovy later......&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6042050729972843368-9051249209065084555?l=gallemore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gallemore.blogspot.com/feeds/9051249209065084555/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6042050729972843368&amp;postID=9051249209065084555' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/9051249209065084555'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/9051249209065084555'/><link rel='alternate' type='text/html' href='http://gallemore.blogspot.com/2007/10/convertying-dom-to-groovy-code.html' title='Converting Dom to Groovy Code'/><author><name>Chad Gallemore</name><uri>http://www.blogger.com/profile/03687439195639920481</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_chNvxcoCzH4/R2alFr3cD6I/AAAAAAAAAE8/73AxciHQcrA/S220/chad_headshot.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6042050729972843368.post-5603045065278510228</id><published>2007-09-25T22:25:00.000-05:00</published><updated>2007-09-25T22:50:19.826-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JBI'/><category scheme='http://www.blogger.com/atom/ns#' term='J2EE'/><category scheme='http://www.blogger.com/atom/ns#' term='Integration'/><title type='text'>The "I" in JBI is for Integration</title><content type='html'>Just in case anyone was wondering....&lt;br /&gt;&lt;br /&gt;I came across &lt;a href="http://www.theserverside.com/tt/articles/article.tss?l=IntegratingPresenceJ2EEEnvironments&amp;amp;asrc=EM_NLN_2261642&amp;amp;uid=6481519"&gt;this&lt;/a&gt; article today which discusses integrating XMPP presence in J2EE, and as I am reading the whole time I'm thinking I could do this with JBI utilizing the &lt;a href="https://xmpp-bc.dev.java.net/"&gt;XMPP Binding Component&lt;/a&gt; and the &lt;a href="http://wiki.open-esb.java.net/Wiki.jsp?page=JMSBC"&gt;JMS Binding Component&lt;/a&gt;.  Leveraging the &lt;a href="http://wiki.open-esb.java.net/Wiki.jsp?page=BPELSE"&gt;BPEL Service Engine&lt;/a&gt; I could easily orchestrate everything and not have to write any code, just create a composite application and deploy it to my JBI Container (e.g. &lt;a href="https://open-esb.dev.java.net/"&gt;OpenESB&lt;/a&gt;) and I'm golden.  The XMPP BC would handle receiving the presence notifications and utilizing BPEL we could pass that along to the JMS BC to be published to the topic or queue.&lt;br /&gt;&lt;br /&gt;I get the feeling that most developers feel the need to always write code to come up with solutions to their problems, when in all actuality there might be a solution to your problem already.  I have said it 100 times myself, "I'm not happy unless I'm in my IDE coding away".&lt;br /&gt;&lt;br /&gt;So my last thought....&lt;br /&gt;&lt;br /&gt;Before you get knee deep in code (I know it's fun), check out some of the &lt;a href="http://wiki.open-esb.java.net/Wiki.jsp?page=Jbicomps"&gt;components &lt;/a&gt;that are available and see how you can use JBI to integrate solutions for your problems.  Remember the "I" in JBI is for Integration.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6042050729972843368-5603045065278510228?l=gallemore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gallemore.blogspot.com/feeds/5603045065278510228/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6042050729972843368&amp;postID=5603045065278510228' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/5603045065278510228'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/5603045065278510228'/><link rel='alternate' type='text/html' href='http://gallemore.blogspot.com/2007/09/i-in-jbi-is-for-integration.html' title='The &quot;I&quot; in JBI is for Integration'/><author><name>Chad Gallemore</name><uri>http://www.blogger.com/profile/03687439195639920481</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_chNvxcoCzH4/R2alFr3cD6I/AAAAAAAAAE8/73AxciHQcrA/S220/chad_headshot.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6042050729972843368.post-5594545323327755798</id><published>2007-09-10T22:15:00.000-05:00</published><updated>2007-09-10T22:23:51.875-05:00</updated><title type='text'>XMPP BC - More Development on the way</title><content type='html'>We are set to add some more enhancements to the &lt;a href="https://xmpp-bc.dev.java.net/"&gt;XMPP BC&lt;/a&gt;, but first a quick recap of what we added last month:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Group Chat capabilities&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Join&lt;/li&gt;&lt;li&gt;Invite&lt;/li&gt;&lt;li&gt;Kicks&lt;/li&gt;&lt;li&gt;Leave&lt;/li&gt;&lt;li&gt;Send/Receive Messages&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Send/Receive Complex Types&lt;/li&gt;&lt;/ul&gt;Here is what we have in the works for this month:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;More Group Chat capabilities&lt;br /&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Create/Destroy Groups&lt;/li&gt;&lt;li&gt;Presence Notifications (Allows a consumer to monitor the status of members in the room)&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Upgrading to the latest Smack API (3.0.4)&lt;/li&gt;&lt;/ul&gt;Stay tuned for more updates, you can get the latest release &lt;a href="https://xmpp-bc.dev.java.net/downloads/download.htm"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6042050729972843368-5594545323327755798?l=gallemore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gallemore.blogspot.com/feeds/5594545323327755798/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6042050729972843368&amp;postID=5594545323327755798' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/5594545323327755798'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/5594545323327755798'/><link rel='alternate' type='text/html' href='http://gallemore.blogspot.com/2007/09/xmpp-bc-more-development-on-way.html' title='XMPP BC - More Development on the way'/><author><name>Chad Gallemore</name><uri>http://www.blogger.com/profile/03687439195639920481</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_chNvxcoCzH4/R2alFr3cD6I/AAAAAAAAAE8/73AxciHQcrA/S220/chad_headshot.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6042050729972843368.post-8492848587887456830</id><published>2007-09-05T13:14:00.000-05:00</published><updated>2007-09-05T13:23:01.804-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Silverlight - The death of the browser</title><content type='html'>At least mine anyways.  So I was reading one of the &lt;a href="http://www.onflex.org/ted/2007/09/silverlight-10-finally-release.php"&gt;Flex evangelists&lt;/a&gt; blogs about Silverlight 1.0 being released, and I thought I would see what all the hoopla was about.  So I went to &lt;a href="http://mlb.mlb.com/media/video.jsp"&gt;MLB.com&lt;/a&gt; and checked out some videos.  What a mistake that was.  First you will have to install Silverlight, no big deal I've had to install the Flash Player before as well.  Once I get that installed and restart my browser, it took 2-3 minutes for my browser to load everything, and the whole time my processor is pegged at 100%.  I waited patiently and finally was able to play a movie, and of course instead of showing the highlights immediately Microsoft had to pat themselves on the back.  Finally the highlights started, and the quality was terrible.  I couldn't hardly read the score because it was fuzzy, and it the actual footage looked choppy.  I've seen enough, I try and go back to Google Reader and now my browser isn't responding, I had to kill the process and start a new session.  Nice job Microsoft.  First impressions are the most important, and my first impression of Silverlight is to go uninstall it as fast as I installed it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6042050729972843368-8492848587887456830?l=gallemore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gallemore.blogspot.com/feeds/8492848587887456830/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6042050729972843368&amp;postID=8492848587887456830' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/8492848587887456830'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/8492848587887456830'/><link rel='alternate' type='text/html' href='http://gallemore.blogspot.com/2007/09/silverlight-death-of-browser.html' title='Silverlight - The death of the browser'/><author><name>Chad Gallemore</name><uri>http://www.blogger.com/profile/03687439195639920481</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_chNvxcoCzH4/R2alFr3cD6I/AAAAAAAAAE8/73AxciHQcrA/S220/chad_headshot.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6042050729972843368.post-8027176701253841321</id><published>2007-09-04T14:52:00.000-05:00</published><updated>2007-09-04T15:09:51.586-05:00</updated><title type='text'>Flex and Real Time Collaboration</title><content type='html'>I stumbled upon this interesting &lt;a href="http://www.igniterealtime.org/community/blogs/pocasts/2007/08/09/using-flex-for-real-time-collaboration-with-derek-demoro"&gt;Video Podcast&lt;/a&gt; from Dereck DeMoro of Jive Software in which he discusses the benefits of switching to Flex while developing the Spark Web Client.  A few key points that he mentioned was that they were developing a desktop application (Spark) that was written in Java (Swing in particular) and a Web client that was written in HTML and JavaScript.  He mentions how they wanted to mimic the two applications to provide the same user experience, and how they struggled to do this.  Once they switched gears and started developing with Flex they were able to have one code base that utilized for the web application and the desktop application.  For the web app, you just embed the swf into an HTML file, and for the desktop application they leveraged Adobe AIR (formerly Apollo).  He talked about how this greatly simplified their development efforts, as well as things like testing since they only had to test one baseline.&lt;br /&gt;&lt;br /&gt;Another key thing he mentions is the easy transition he and his team had (They were all Java developers with no Flash or Flex experience) in transitioning to Flex.  I've had to opportunity to program in Actionscipt and it is very similar to Java, in fact I would bet most Java Programmers could pick it up in no time. &lt;br /&gt;&lt;br /&gt;Sometimes I get the feeling that Java developers don't want to try something different, they just want to stick to what they know.  To me, if it's better I don't care, and in my opinion Flex is better.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6042050729972843368-8027176701253841321?l=gallemore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gallemore.blogspot.com/feeds/8027176701253841321/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6042050729972843368&amp;postID=8027176701253841321' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/8027176701253841321'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/8027176701253841321'/><link rel='alternate' type='text/html' href='http://gallemore.blogspot.com/2007/09/flex-and-real-time-collaboration.html' title='Flex and Real Time Collaboration'/><author><name>Chad Gallemore</name><uri>http://www.blogger.com/profile/03687439195639920481</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_chNvxcoCzH4/R2alFr3cD6I/AAAAAAAAAE8/73AxciHQcrA/S220/chad_headshot.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6042050729972843368.post-5005333384816121397</id><published>2007-09-04T08:30:00.000-05:00</published><updated>2007-09-04T08:39:20.304-05:00</updated><title type='text'>The Big House wasn't so Big on Saturday</title><content type='html'>Yes, I am a die hard Michigan Wolverines fan, and yes I've been getting phone calls, emails, and text messages from friends I haven't talked to in quite some time rubbing salt in my wounds.  Maybe Saturday's loss to Appalachian State was a wake up call for a very talented senior laden football team, or maybe it's a start to a very disappointing season.  I guess we will have to wait and see, but as most Michigan Fans will say if we can beat Ohio State at the end of the year then who cares if we lost to that 1-AA team in September.&lt;br /&gt;&lt;br /&gt;At least Team USA annihilated Argentina (Led by Bron and Melo, I think we definitely take the gold for coolest names), and American Sprinters dominated at the World Championships (Tyson Gay was awesome), the USA is looking good for Beijing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6042050729972843368-5005333384816121397?l=gallemore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gallemore.blogspot.com/feeds/5005333384816121397/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6042050729972843368&amp;postID=5005333384816121397' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/5005333384816121397'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/5005333384816121397'/><link rel='alternate' type='text/html' href='http://gallemore.blogspot.com/2007/09/big-house-wasnt-so-big-on-saturday.html' title='The Big House wasn&apos;t so Big on Saturday'/><author><name>Chad Gallemore</name><uri>http://www.blogger.com/profile/03687439195639920481</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_chNvxcoCzH4/R2alFr3cD6I/AAAAAAAAAE8/73AxciHQcrA/S220/chad_headshot.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6042050729972843368.post-8234449862848054782</id><published>2007-08-29T10:18:00.000-05:00</published><updated>2007-08-29T10:24:15.793-05:00</updated><title type='text'>Team USA</title><content type='html'>I've been watching USA Basketball play in the FIBA Americas Tournament, and I must admit I've been impressed.  Years passed Team USA looked like what they were, a bunch of spoiled overpaid kids.  Not this team.  They are playing with a lot of passion, and I think will get us back to the top.  Kobe Bryant has especially impressed me.  He is one the most people consider a selfish ball hog, but has taken on the role of defensive stopper.  I have watched several games where he has just shut down the other teams best player, kudos Kobe.  Anyways, make sure to tune in, we have Argentina coming up soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6042050729972843368-8234449862848054782?l=gallemore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gallemore.blogspot.com/feeds/8234449862848054782/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6042050729972843368&amp;postID=8234449862848054782' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/8234449862848054782'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/8234449862848054782'/><link rel='alternate' type='text/html' href='http://gallemore.blogspot.com/2007/08/team-usa.html' title='Team USA'/><author><name>Chad Gallemore</name><uri>http://www.blogger.com/profile/03687439195639920481</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_chNvxcoCzH4/R2alFr3cD6I/AAAAAAAAAE8/73AxciHQcrA/S220/chad_headshot.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6042050729972843368.post-1298173769439442915</id><published>2007-08-22T13:11:00.000-05:00</published><updated>2007-08-23T09:28:03.986-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SIP BC'/><category scheme='http://www.blogger.com/atom/ns#' term='JBI'/><category scheme='http://www.blogger.com/atom/ns#' term='Convergence'/><category scheme='http://www.blogger.com/atom/ns#' term='XMPP BC'/><category scheme='http://www.blogger.com/atom/ns#' term='XMPP'/><title type='text'>Bridging the Gap - XMPP to SIP Group Chat</title><content type='html'>&lt;p class="MsoNormal"&gt;As noted in one of my earlier blogs, we have been enhancing the XMPP BC to be able to participate in Group Chat Sessions.  During this process we thought we would also show how you can utilize JBI to be a convergent platform and bridge gaps across protocols.  To do this, we thought we would show how a SIP User Agent (e.g. an xlite soft phone) could participate in an XMPP Group Chat session.  &lt;a href="http://weblogs.java.net/blog/boneill42/"&gt;Brian O'Neill's blog&lt;/a&gt; talks a little more about utilizing &lt;a href="http://weblogs.java.net/blog/boneill42/archive/2007/06/jbi_as_a_conver.html"&gt;JBI as a convergent communication platform&lt;/a&gt;, and provides a use case &lt;a href="http://www.jbizint.org/wiki/index.php?title=Converged_Chat_Room"&gt;here.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Enough with the fluff, on with the demo.  I've uploaded the Netbeans Projects &lt;a href="https://open-jbi-components.dev.java.net/servlets/ProjectDocumentList?folderID=7932"&gt;here &lt;/a&gt;that I will be discussing in this blog so you don’t have to create them from scratch.&lt;span style=""&gt;  &lt;/span&gt;Below is a list of prerequisetes in order to run the demo:&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 27pt; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;-&lt;span style=""&gt;        &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;You will need to get the latest &lt;a href="https://open-esb.dev.java.net/Downloads_OpenESB_Addons_NB6.html"&gt;OpenESB installer&lt;/a&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 63pt; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;&lt;span style=""&gt;o&lt;span style=""&gt;      &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;This comes with Netbeans, Glassfish, and the JBI Components you will need to run the demo.&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 27pt; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;-&lt;span style=""&gt;        &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Set up an Openfire XMPP Server&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 63pt; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;&lt;span style=""&gt;o&lt;span style=""&gt;      &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;You can go &lt;a href="https://xmpp-bc.dev.java.net/screencast/WildfireSetup.htm"&gt;here&lt;/a&gt; for a demo on how to setup Openfire&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 63pt; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;&lt;span style=""&gt;o&lt;span style=""&gt;      &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;You will need to get an XMPP client (e.g. Spark or Pidgin)&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 99pt; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-family:Wingdings;"&gt;&lt;span style=""&gt;§&lt;span style=""&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;You can go &lt;a href="https://xmpp-bc.dev.java.net/screencast/SparkSetup.htm"&gt;here&lt;/a&gt; to see a demo of how to setup Spark&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 63pt; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-family:Wingdings;"&gt;&lt;span style=""&gt;§&lt;span style=""&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;You will need to create one user in Openfire with the username sipua and password sipua (This is defined in the XMPP WSLDs&lt;/p&gt;&lt;p class="MsoNormal" style="margin-left: 63pt; text-indent: -0.25in;"&gt;&lt;span style=""&gt;-&lt;span style=""&gt;        &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Set up a SIP User Agent/SIP Server&lt;span style=""&gt;&lt;span style=""&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-left: 63pt; text-indent: -0.25in;"&gt;&lt;span style=""&gt;&lt;span style=""&gt;       o&lt;span style=""&gt;      &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;We used XLite for the demo, but you should be able to utilize just about any SIP UA and SIP Server.&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 63pt; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;&lt;span style=""&gt;       o&lt;span style=""&gt;      &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Login as a user (e.g. chad)&lt;br /&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 27pt; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;-&lt;span style=""&gt;        &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Edit the XMPP WSDL&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 63pt; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;&lt;span style=""&gt;o&lt;span style=""&gt;      &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Edit all xmpp WSDLs to reflect the correct domain (the domain of your Openfire server) and the correct groupChat name (e.g. &lt;a href="mailto:A@conference.OpenFireDomain"&gt;A@conference.OpenFireDomain&lt;/a&gt;).  Both attributes can be found in the xmpp:address section of the WSDL.&lt;br /&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 27pt; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;-&lt;span style=""&gt;        &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Edit the SIP WSDL&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 63pt; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;&lt;span style=""&gt;o&lt;span style=""&gt;      &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Edit all sip WSDLs to reflect the correct proxyDomain (sip:address section of the wsdl) (the domain of your SIP server)&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 27pt; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;-&lt;span style=""&gt;        &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Edit the BPEL Process&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 63pt; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;&lt;span style=""&gt;o&lt;span style=""&gt;      &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Click on Assign3 and edit the String &lt;a href="mailto:A@conference.b-0498.int.gestalt-llc.com"&gt;A@conference.b-0498.int.gestalt-llc.com&lt;/a&gt; to be the groupChat name you defined in your XMPP WSDL’s earlier.&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 63pt; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;&lt;span style=""&gt;o&lt;span style=""&gt;      &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Click on Assign1 and edit the String &lt;a href="mailto:chad@10.9.5.62"&gt;chad@10.9.5.62&lt;/a&gt; to be whatever user you are logged in as (e.g. mySipUserAgent@mySipServerDomain).&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;You should be all set now.&lt;span style=""&gt;  &lt;/span&gt;You will need to recompile the Composite Application by right clicking (in Netbeans) on SIPAndXMPPCA module and selecting “Clean and Build”.&lt;span style=""&gt;  &lt;/span&gt;You are now ready to deploy your application.&lt;span style=""&gt;  &lt;/span&gt;Follow the following steps to deploy and run the test.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 27pt; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;-&lt;span style=""&gt;        &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Start Glassfish&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 63pt; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;&lt;span style=""&gt;o&lt;span style=""&gt;      &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;In Netbeans Click Window &lt;span style="font-family:Wingdings;"&gt;&lt;span style=""&gt;à&lt;/span&gt;&lt;/span&gt; Services &lt;span style="font-family:Wingdings;"&gt;&lt;span style=""&gt;à&lt;/span&gt;&lt;/span&gt; Servers &lt;span style="font-family:Wingdings;"&gt;&lt;span style=""&gt;à&lt;/span&gt;&lt;/span&gt; Right click on Sun Java Application Server &lt;span style="font-family:Wingdings;"&gt;&lt;span style=""&gt;à&lt;/span&gt;&lt;/span&gt; Click Start.&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 27pt; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;-&lt;span style=""&gt;        &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Start Openfire&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 63pt; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;&lt;span style=""&gt;o&lt;span style=""&gt;      &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;With an XMPP client (e.g. Spark or Pidgin (or Both)) log in, you may have to create an account first.&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 27pt; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;-&lt;span style=""&gt;        &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Start SIP Server and SIP User Agent&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 63pt; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;&lt;span style=""&gt;o&lt;span style=""&gt;      &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Using a SIP UA (e.g. XLite) log in as the user you defined in the Bpel Process above (e.g. &lt;a href="mailto:chad@10.9.5.65"&gt;chad@10.9.5.65&lt;/a&gt;).&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 27pt; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;-&lt;span style=""&gt;        &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Ensure JBI Components are installed and started&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 63pt; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;&lt;span style=""&gt;o&lt;span style=""&gt;      &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;In Netbeans navigate to Window &lt;span style="font-family:Wingdings;"&gt;&lt;span style=""&gt;à&lt;/span&gt;&lt;/span&gt; Services &lt;span style="font-family:Wingdings;"&gt;&lt;span style=""&gt;à&lt;/span&gt;&lt;/span&gt; Sun Java System Application Server 9 &lt;span style="font-family:Wingdings;"&gt;&lt;span style=""&gt;à&lt;/span&gt;&lt;/span&gt; JBI&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 99pt; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-family:Wingdings;"&gt;&lt;span style=""&gt;§&lt;span style=""&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Under Service Engines verify the following Component is installed and started&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 135pt; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span style=""&gt;·&lt;span style=""&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;sun-bpel-engine&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 99pt; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-family:Wingdings;"&gt;&lt;span style=""&gt;§&lt;span style=""&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Under Binding Components verify the following Component is installed and started&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 135pt; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span style=""&gt;·&lt;span style=""&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;gestalt-sip-binding&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 135pt; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span style=""&gt;·&lt;span style=""&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;gestalt-xmpp-binding (uninstall this component by right clicking on the component and selecting "uninstall".  We need to ensure you have the latest XMPP BC, you can find it &lt;a href="http://download.java.net/jbi/binaries/open-jbi-components/main/nightly/latest/ojc/"&gt;here&lt;/a&gt;.  Download the xmppbc.jar and install it by righ clicking on Binding Components and selecting Install New Binding Component.  After Installation, make sure you start the XMPP BC (Right click and select Start).&lt;br /&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 63pt; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;&lt;span style=""&gt;o&lt;span style=""&gt;      &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;If the components are not there, you can download them &lt;a href="http://download.java.net/jbi/binaries/open-jbi-components/main/nightly/latest/ojc/"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 27pt; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;-&lt;span style=""&gt;        &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Deploy the SIPAndXMPPCA by right clicking on the project and selecting “Deploy Project”&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 27pt; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;-&lt;span style=""&gt;        &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Once deployed, you should be able to use your Spark or Pidgin clients and join the Conference room that was created (e.g. A).&lt;span style=""&gt;  &lt;/span&gt;You should see yourself in the room as well as the user sipua.&lt;span style=""&gt;  &lt;/span&gt;You can now send a message to the group and your SIP UA will receive the message.&lt;span style=""&gt;  &lt;/span&gt;Have your SIP UA respond and see the message appear in the Group Chat.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;So a quick recap of what we accomplished.&lt;span style=""&gt;  &lt;/span&gt;First, we were able to create an application that could bridge two protocols that normally couldn’t speak to each other (See screenshot below).&lt;span style=""&gt;  &lt;/span&gt;Second, we did this without writing one line of code.&lt;span style=""&gt;  &lt;/span&gt;Yes, you read that correct.&lt;span style=""&gt;  &lt;/span&gt;To do this application from scratch all you have to do is configure it, and then tell BPEL how to orchestrate it.&lt;span style=""&gt;  &lt;/span&gt;Netbeans provides a nice way to do this with their toolkit support (automatically generating WSDL’s and leveraging the design view for the BPEL process to drag and drop activities on the screen)&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_chNvxcoCzH4/Rs2Yia2w_LI/AAAAAAAAAEk/cw2veLHdwzc/s1600-h/groupChat.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_chNvxcoCzH4/Rs2Yia2w_LI/AAAAAAAAAEk/cw2veLHdwzc/s400/groupChat.png" alt="" id="BLOGGER_PHOTO_ID_5101901669972638898" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;If you have any questions feel free to shoot us an email by using our mailing lists (&lt;a href="https://sip-bc.dev.java.net/servlets/ProjectMailingListList"&gt;&lt;st1:city st="on"&gt;SIP&lt;/st1:city&gt; &lt;st1:state st="on"&gt;BC&lt;/st1:state&gt;&lt;/a&gt;, &lt;a href="https://xmpp-bc.dev.java.net/servlets/ProjectMailingListList"&gt;&lt;st1:place st="on"&gt;&lt;st1:city st="on"&gt;XMPP&lt;/st1:city&gt; &lt;st1:state st="on"&gt;BC&lt;/st1:state&gt;&lt;/st1:place&gt;&lt;/a&gt;), or leave a comment on my blog.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6042050729972843368-1298173769439442915?l=gallemore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gallemore.blogspot.com/feeds/1298173769439442915/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6042050729972843368&amp;postID=1298173769439442915' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/1298173769439442915'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/1298173769439442915'/><link rel='alternate' type='text/html' href='http://gallemore.blogspot.com/2007/08/bridging-gap-xmpp-to-sip-group-chat.html' title='Bridging the Gap - XMPP to SIP Group Chat'/><author><name>Chad Gallemore</name><uri>http://www.blogger.com/profile/03687439195639920481</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_chNvxcoCzH4/R2alFr3cD6I/AAAAAAAAAE8/73AxciHQcrA/S220/chad_headshot.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_chNvxcoCzH4/Rs2Yia2w_LI/AAAAAAAAAEk/cw2veLHdwzc/s72-c/groupChat.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6042050729972843368.post-5150401937968946491</id><published>2007-08-18T23:13:00.000-05:00</published><updated>2007-08-18T23:40:36.226-05:00</updated><title type='text'>Google Rocks</title><content type='html'>I'm all the time checking out Google Labs to see what cool thing they have come up with next.  I'm a big fan of Google and some of the tools they have put out.  I thought I would share some of the ones that I consider must haves, I use these on a daily basis.&lt;br /&gt;&lt;br /&gt;-  Google Reader:  Fabulous tool for managing all of your favorite RSS Feeds.  Manages the feeds through a very simple and easily to read web interface.  Doesn't matter if you are at work or home all you have to do is log in and you can view it, unlike desktop applications like RSS Owl.  Also allows you to star your favorite reads or share with others, providing a unique RSS Feed URL for others to view your shared items.&lt;br /&gt;&lt;br /&gt;-  Google Desktop:  Google has mastered the art of indexing and searching, Google Desktop does this for your desktop.  This tool will index your entire hard drive and emails so that you can quickly search for items you know you have, but can't seem to find.&lt;br /&gt;&lt;br /&gt;-  Blogger:  I got into blogging several months ago and settled on Blogger mainly because it was a Google product and I can utilize my same Google login.  I've been really happy with the ease of managing my blog, if you are thinking about blogging I would highly recommend Blogger.&lt;br /&gt;&lt;br /&gt;-  iGoogle:  Customize your experience with Google.  iGoogle allows you to customize your Google Home page to add things that you are interested in.&lt;br /&gt;&lt;br /&gt;So those are the items that I use every day, here are some items that I have been playing around with that are pretty cool.&lt;br /&gt;&lt;br /&gt;-  Google Pages:  Are you wanting to create a personal web page, but you don't know how to write HTML, don't want to pay for hosting or a domain name, or don't know how to use FTP?  Google Pages could be for you.  With your Google account you create a custom made web page and publish that page to your unique Google pages URL.  You don't have to understand HTML, FTP, and you don't have to pay for a domain name or hosting services.&lt;br /&gt;&lt;br /&gt;- Google 411:  Are you tired of paying fees to use 411 and then paying extra to connect?  Check out Google's 411 service, 1.800.GOOG.411.  I've used it and it works great, and best of all it's Free.&lt;br /&gt;&lt;br /&gt;So to sum it all up, Google Rocks.  My wife calls me a geek every time I mention a new cool Google tool I find, but I can't help it, I guess I'm an addict.  Anyways, you can find all of these tools on &lt;a href="http://labs.google.com/?tab=wz&amp;hl=en"&gt;Google Labs&lt;/a&gt;.  Last thing,  Google is more than a search engine; make sure you are utilizing all of the tools they have available, they are Free.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6042050729972843368-5150401937968946491?l=gallemore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gallemore.blogspot.com/feeds/5150401937968946491/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6042050729972843368&amp;postID=5150401937968946491' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/5150401937968946491'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/5150401937968946491'/><link rel='alternate' type='text/html' href='http://gallemore.blogspot.com/2007/08/google-rocks.html' title='Google Rocks'/><author><name>Chad Gallemore</name><uri>http://www.blogger.com/profile/03687439195639920481</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_chNvxcoCzH4/R2alFr3cD6I/AAAAAAAAAE8/73AxciHQcrA/S220/chad_headshot.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6042050729972843368.post-4426236069491581975</id><published>2007-08-16T13:27:00.000-05:00</published><updated>2007-08-16T13:38:15.213-05:00</updated><title type='text'>My Sports Praise</title><content type='html'>Since I ranted about some things that tick me off about sports, I thought I would share some recent examples why at the end of the day I absolutely love sports.&lt;br /&gt;&lt;br /&gt; -  My Cardinals are making a charge in the dog days of August proving that teamwork and heart can perceiver all obstacles.&lt;br /&gt; -  Rick Ankiel - If you do not know who he is, use Google and read his story.  Fantastic, welcome back.&lt;br /&gt;-  High School Football - It is 100% American, the purest form of athletics (no money, tv ratings, etc.) just good competition.&lt;br /&gt;-  Tiger Woods - I am not that big of a golf fan, but you have to relish watching greatness.&lt;br /&gt;&lt;br /&gt;I could go on and on, but there is no need to do that.  See you on the field!!!!!!!!!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6042050729972843368-4426236069491581975?l=gallemore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gallemore.blogspot.com/feeds/4426236069491581975/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6042050729972843368&amp;postID=4426236069491581975' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/4426236069491581975'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/4426236069491581975'/><link rel='alternate' type='text/html' href='http://gallemore.blogspot.com/2007/08/my-sports-praise.html' title='My Sports Praise'/><author><name>Chad Gallemore</name><uri>http://www.blogger.com/profile/03687439195639920481</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_chNvxcoCzH4/R2alFr3cD6I/AAAAAAAAAE8/73AxciHQcrA/S220/chad_headshot.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6042050729972843368.post-374740080406492233</id><published>2007-08-14T21:53:00.000-05:00</published><updated>2007-08-14T22:03:07.731-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JBI'/><category scheme='http://www.blogger.com/atom/ns#' term='XMPP BC'/><title type='text'>New Enhancements for the XMPP Binding Component</title><content type='html'>We have some new enhancements for the &lt;a href="https://xmpp-bc.dev.java.net/"&gt;XMPP Binding Component&lt;/a&gt; coming down the pipe this month.  Already in place is the ability to join, leave, and send messages to group chats.  You can join a group chat upon deployment or you can dynamically join/leave groups at runtime.  Also in the works for this month are enhancing the XMPP BC to handle complex types.  You can view the documentation for the WSDL Extensions &lt;a href="https://xmpp-bc.dev.java.net/extensions/wsdl_extensions.htm"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6042050729972843368-374740080406492233?l=gallemore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gallemore.blogspot.com/feeds/374740080406492233/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6042050729972843368&amp;postID=374740080406492233' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/374740080406492233'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/374740080406492233'/><link rel='alternate' type='text/html' href='http://gallemore.blogspot.com/2007/08/new-enhancements-for-xmpp-binding.html' title='New Enhancements for the XMPP Binding Component'/><author><name>Chad Gallemore</name><uri>http://www.blogger.com/profile/03687439195639920481</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_chNvxcoCzH4/R2alFr3cD6I/AAAAAAAAAE8/73AxciHQcrA/S220/chad_headshot.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6042050729972843368.post-6058506409676022441</id><published>2007-08-01T16:35:00.000-05:00</published><updated>2007-08-01T16:47:11.175-05:00</updated><title type='text'>My Sports Rant</title><content type='html'>So, my favorite time of year is quickly approaching......Football Season.  Lately I have been catching up on where my teams stand, and as usual someone is holding out for more money.  This is my biggest problem with Pro Sports in general, causing me to be a bigger College sports fan.  I get sick and tired of seeing athletes hold out for more money cause they have had a couple of good seasons.  What happens if you have a bad couple of years, should the team be allowed to negotiate your contract down to what you deserve, oh no that is not how it works.  I am a Chiefs fan, and as most sports fans know, Larry Johnson is holding out for more money.  I can see where he is coming from in a way.  He has been one of the best backs, if not the best, the last couple of years, and he does not make nearly as much as some of the other backs in the league, e.g. LT, Shaun Alexander, Edge, etc.  My beef with all of this is what ever happend to honoring your contract.  You are still making a lot of money, more than 90% of the people out there will make in a lifetime.  Teams have to honor the contract no matter what, unless they want to cut you.  At the end of the day I do not really blame the athletes, I blame the agents.  Most of the time I think they ruin what is good about sports, they are not in this for the athletes, they are in it for themselves.  Just this morning they were talking about Brady Quinn holding out for more money because he thought he should have been drafted higher, sorry buddy you did not so you get pick 22 money.  Now go prove yourself on the field and get that money the next contract, what a novel thought .... proving yourself and earning that money.&lt;br /&gt;&lt;br /&gt;I will get off my soap box now.......&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6042050729972843368-6058506409676022441?l=gallemore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gallemore.blogspot.com/feeds/6058506409676022441/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6042050729972843368&amp;postID=6058506409676022441' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/6058506409676022441'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/6058506409676022441'/><link rel='alternate' type='text/html' href='http://gallemore.blogspot.com/2007/08/my-sports-rant.html' title='My Sports Rant'/><author><name>Chad Gallemore</name><uri>http://www.blogger.com/profile/03687439195639920481</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_chNvxcoCzH4/R2alFr3cD6I/AAAAAAAAAE8/73AxciHQcrA/S220/chad_headshot.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6042050729972843368.post-5681176067521905179</id><published>2007-07-30T12:33:00.000-05:00</published><updated>2007-08-03T10:36:16.512-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JBI'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='JMX'/><title type='text'>Utilizing Installation Descriptor Extensions in JBI</title><content type='html'>&lt;a href="http://en.wikipedia.org/wiki/JBI"&gt;JBI&lt;/a&gt; provides a means to add extensions to your Installation Descriptor (&lt;a href="http://java.sun.com/integration/pa1/docs/dev_guide/appendix_a.html"&gt;jbi.xml&lt;/a&gt;).  These extensions can be used for a variety of different things, like configuration for your component.  Working examples of components utilizing this feature check out the &lt;a href="http://wiki.open-esb.java.net/jbiwiki/Wiki.jsp?page=HTTPBC"&gt;OpenESB HTTP Binding Component&lt;/a&gt; or &lt;a href="http://incubator.apache.org/servicemix/servicemix-http.html"&gt;ServiceMix HTTP Binding Component&lt;/a&gt; .  Recently I needed to use this feature to add some configuration type attributes to the component we were developing.  The first thing you will need to do is add the extensions to your installation descriptor.  As noted in the &lt;a href="http://java.sun.com/integration/1.0/docs/sdk/api/index.html"&gt;API&lt;/a&gt;, the Installation Descriptor Extensions are located at the end of the &amp;lt;component&amp;gt; element of the installation descriptor, something like the following:&lt;pre&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;component&amp;gt;&lt;br /&gt;....&lt;br /&gt;The rest of the jbi.xml&lt;br /&gt;....&lt;br /&gt;&amp;lt;config:Configuration&amp;gt;&lt;br /&gt;    &amp;lt;config:Port&amp;gt;8888&amp;lt;/config:Port&amp;gt;&lt;br /&gt;    &amp;lt;config:Location&amp;gt;localhost&amp;lt;/config:Location&amp;gt;&lt;br /&gt;&amp;lt;/config:Configuration&amp;gt;&lt;br /&gt;&amp;lt;/component&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;During bootstrap init() the InstallationContext is passed in, this object gives you access to the Installation Descriptor Extensions, via installationContext.getInstallationDescriptorExtensions (Which returns a DocumentFramgment containing all Extensions).  At this time you need to store the values in an object so that you can access them during the Components init().  The best way to achieve this is to use JMX.  So the first thing you will need to do is Create an Interface that defines your MBean, and then create your class that will implement that interface.  Something like the following:&lt;pre&gt;&lt;code&gt;&lt;br /&gt;public interface ConfigExtensionsMBean {&lt;br /&gt;public void parseConfigExtensions(DocumentFragment documentFragment);&lt;br /&gt;public String getLocation();&lt;br /&gt;public int getPort();&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;Now we need to write our concrete class that implements this interface, something like the following:&lt;pre&gt;&lt;code&gt;&lt;br /&gt;public class ConfigExtensions implements ConfigExtensionsMBean {&lt;br /&gt;&lt;br /&gt;private int port;&lt;br /&gt;private String location;&lt;br /&gt;&lt;br /&gt;public enum Attributes {Location, Port};&lt;br /&gt;&lt;br /&gt;public String getLocation() {&lt;br /&gt; return location;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private void setLocation(String location) {&lt;br /&gt; this.location = location;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public int getPort() {&lt;br /&gt; return port;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private void setPort(String port) {&lt;br /&gt; this.port = new Integer(port);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public void parseConfigExtensions(DocumentFragment frag) {&lt;br /&gt; //Parse the DocFrag here and call the setters for the port and location.&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;So now we have the Interface and the Concrete class, we just have to use it now.  So the first thing we need to do is in your Bootstrap classes init() method we need to get the Installations Service Description Extensions and create our MBean and register that MBean in our MBean server, this should look something like the following:&lt;pre&gt;&lt;code&gt;&lt;br /&gt;public void init(InstallationContext context) {&lt;br /&gt;ConfigExtensionsMBean mBean = new ConfigExtensions();&lt;br /&gt;DocumentFragment doc = context.getInstallationDescriptorExtension();&lt;br /&gt;mBean.parseConfigExtensions(doc);&lt;br /&gt;&lt;br /&gt;MBeanServer mBeanServer = context.getContext().getMBeanServer();&lt;br /&gt;ObjectName mBeanName = context.getContext().getMBeanNames().createCustomComponentMBeanName("MyMBean");&lt;br /&gt;try {&lt;br /&gt; if (!mBeanServer.isRegistered(mBeanName) {&lt;br /&gt;     ObjectInstance oi = mBeanServer.registerMBean(mBean, mBeanName);&lt;br /&gt; }&lt;br /&gt;} catch (Exception e) {&lt;br /&gt; e.printStackTrace();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;So what we just did was read the extensions, parse them and call the setters, and registered the mBean for future use.  So now our new component is ready to be initialized and needs access to that mBean.  The following is how you can access them during ComponentLifeCycle.init(ComponentContext context):&lt;pre&gt;&lt;code&gt;&lt;br /&gt;public void init(ComponentContext context) {&lt;br /&gt;MBeanServer mBeanServer = context.getMBeanServer();&lt;br /&gt; ObjectName mBeanName = context.getMBeanNames()&lt;br /&gt;                                      .createCustomComponentMBeanName("MyMBean");&lt;br /&gt;&lt;br /&gt; try {&lt;br /&gt;     host = (String) mBeanServer.getAttribute(mBeanName,&lt;br /&gt;             ConfigExtensions.Attributes.Location.toString());&lt;br /&gt;     port = (Integer) mBeanServer.getAttribute(mBeanName,&lt;br /&gt;             ConfigExtensions.Attributes.Port.toString());&lt;br /&gt; } catch (Exception e) {&lt;br /&gt;     log.warning("Exception getting mBean Attributes: " + e);&lt;br /&gt;     e.printStackTrace();&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;So, there you have it, an example of how to utilize the Installation Descriptor Extensions from your jbi.xml.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6042050729972843368-5681176067521905179?l=gallemore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gallemore.blogspot.com/feeds/5681176067521905179/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6042050729972843368&amp;postID=5681176067521905179' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/5681176067521905179'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/5681176067521905179'/><link rel='alternate' type='text/html' href='http://gallemore.blogspot.com/2007/07/utilizing-installation-descriptor.html' title='Utilizing Installation Descriptor Extensions in JBI'/><author><name>Chad Gallemore</name><uri>http://www.blogger.com/profile/03687439195639920481</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_chNvxcoCzH4/R2alFr3cD6I/AAAAAAAAAE8/73AxciHQcrA/S220/chad_headshot.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6042050729972843368.post-5234882100340389550</id><published>2007-07-24T19:18:00.000-05:00</published><updated>2007-08-03T10:35:54.962-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Reqular Expressions'/><title type='text'>Patterns and Matchers - java.util.regex Package</title><content type='html'>Recently I got the oppurtunity to utilize the java.util.regex package, which I had never used before, and found it very simple and handy to work with.  As I look to do on my blog, I will share a simple example of how to match character sequences against patterns specified by regular expressions utilizing the Java API.  So, as &lt;a href="http://en.wikipedia.org/wiki/Test_driven_development"&gt;TDD&lt;/a&gt; goes we will write the test first and then develop our code against our unit test.  If your not familiar with unit testing, you will need to download &lt;a href="http://www.junit.org/index.htm"&gt;JUnit&lt;/a&gt;.  Ok, we will start by creating our new test class.&lt;code&gt;&lt;pre&gt;&lt;br /&gt;import junit.framework.TestCase;&lt;br /&gt;import java.util.List;&lt;br /&gt;&lt;br /&gt;public class ProcessorTest extends TestCase {&lt;br /&gt;    String testData =&lt;br /&gt;   &amp;lt;test&amp;gt;&amp;lt;name&amp;gt;Chad&amp;lt;/name&amp;gt;Bob&amp;lt;name&amp;gt;&amp;lt;/name&amp;gt;&amp;lt;/test&amp;gt;;&lt;br /&gt;&lt;br /&gt;    public void testProcessor() {&lt;br /&gt;        Processor processor = new Processor();&lt;br /&gt;        List&lt;string&gt; list = processor.processMessage(testData);&lt;br /&gt;        assertEquals("List was not correct size", 2, list.size());&lt;br /&gt;        assertEquals("Name did not match", "Chad", list.get(0));&lt;br /&gt;        assertEquals("Name did not match", "Bob", list.get(1));&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This will obviously fail since we haven't created our Processor class yet, so lets go ahead and create our new Class, and then we can run our unit test to verify that our code is doing what we want it to do.&lt;code&gt;&lt;pre&gt;&lt;br /&gt;import java.util.regex.Pattern;&lt;br /&gt;import java.util.regex.Matcher;&lt;br /&gt;import java.util.List;&lt;br /&gt;import java.util.ArrayList;&lt;br /&gt;&lt;br /&gt;public class Processor {&lt;br /&gt;&lt;br /&gt;    public List&lt;string&gt; processMessage(String text) {&lt;br /&gt;        String pattern1 = &amp;lt;\\w*?name&gt;&amp;gt;;&lt;br /&gt;        String pattern2 = &amp;lt;/\\w*?name&amp;gt;;&lt;br /&gt;        List&lt;string&gt; result = new ArrayList&lt;string&gt;();&lt;br /&gt;        Pattern p1 = Pattern.compile(pattern1);&lt;br /&gt;        Pattern p2 = Pattern.compile(pattern2);&lt;br /&gt;        Matcher m1 = p1.matcher(text);&lt;br /&gt;        Matcher m2 = p2.matcher(text);&lt;br /&gt;        while ((m1.find()) &amp;&amp;amp; (m2.find())) {&lt;br /&gt;            result.add(text.substring(m1.end(), m2.start()));&lt;br /&gt;        }&lt;br /&gt;        return result;&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Now we can run our unit test again and our test will pass.  So this is just a simple example of how to use the Matcher and Pattern class provided as part of the JDK, and how to utilize Unit Testing to test your code.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6042050729972843368-5234882100340389550?l=gallemore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gallemore.blogspot.com/feeds/5234882100340389550/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6042050729972843368&amp;postID=5234882100340389550' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/5234882100340389550'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/5234882100340389550'/><link rel='alternate' type='text/html' href='http://gallemore.blogspot.com/2007/07/patterns-and-matchers-javautilregex.html' title='Patterns and Matchers - java.util.regex Package'/><author><name>Chad Gallemore</name><uri>http://www.blogger.com/profile/03687439195639920481</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_chNvxcoCzH4/R2alFr3cD6I/AAAAAAAAAE8/73AxciHQcrA/S220/chad_headshot.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6042050729972843368.post-4076475645401984338</id><published>2007-07-23T12:17:00.000-05:00</published><updated>2007-08-03T10:35:30.304-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TCP'/><category scheme='http://www.blogger.com/atom/ns#' term='Grizzly'/><title type='text'>Using Grizzly to read TCP Packets</title><content type='html'>Recently I had the need to be able to listen on a port and read TCP packets that were sent from a logger (java.util.SocketHandler), and I wanted to utilize the &lt;a href="https://grizzly.dev.java.net/"&gt;Grizzly&lt;/a&gt; framework to do this.  With some help from the &lt;a href="https://grizzly.dev.java.net/servlets/ReadMsg?list=dev&amp;msgNo=354"&gt;Grizzly team&lt;/a&gt; I was able to accomplish this and thought I would share what I did.  The first thing I had to do was write a main that could connect to a port and receive TCP packets, it looked something like the following:&lt;br /&gt;&lt;pre&gt;public class TCPProcessor {&lt;br /&gt;public static void main(String[] args) throws Exception {&lt;br /&gt;  int port = Integer.getInteger(args[0]);&lt;br /&gt;&lt;br /&gt;  Controller controller = new Controller();&lt;br /&gt;  TCPSelectorHandler tcpHandler = new TCPSelectorHandler();&lt;br /&gt;  final MyProtocolFilter filter = new MyProtocolFilter();                                                                                                 &lt;br /&gt;&lt;br /&gt;  tcpHandler.setPort(port);&lt;br /&gt;  controller.setProtocolChainInstanceHandler(new DefaultProtocolChainInstanceHandler() {&lt;br /&gt;      public ProtocolChain poll() {&lt;br /&gt;          ProtocolChain protocolChain = protocolChains.poll();&lt;br /&gt;&lt;br /&gt;          if (protocolChain == null) {&lt;br /&gt;              protocolChain = new DefaultProtocolChain();&lt;br /&gt;              protocolChain.addFilter(new ReadFilter());&lt;br /&gt;              protocolChain.addFilter(filter);&lt;br /&gt;          }&lt;br /&gt;&lt;br /&gt;          return protocolChain;&lt;br /&gt;      }&lt;br /&gt;  });&lt;br /&gt;  controller.addSelectorHandler(tcpHandler);&lt;br /&gt;  controller.start();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;Now that I have my main listening, I need to write the Filter that will handle the processing of the data packet.  With the ProtocolChain, the ReadFilter will read the TCP packets and pass it to the next filter in the chain, which is were I need to process my data.  My filter will look something like the following:&lt;br /&gt;&lt;pre&gt;public class MyProtocolFilter implements ProtocolFilter {&lt;br /&gt;public boolean execute(Context context) {&lt;br /&gt;   final WorkerThread workerThread = ((WorkerThread)Thread.currentThread());&lt;br /&gt;   String message = "";&lt;br /&gt;   ByteBuffer buffer = workerThread.getByteBuffer();&lt;br /&gt;   buffer.flip();&lt;br /&gt;&lt;br /&gt;   if(buffer.hasRemaining()) {&lt;br /&gt;       byte[] data = new byte[buffer.remaining()];&lt;br /&gt;       int position = buffer.position();&lt;br /&gt;       buffer.get(data);&lt;br /&gt;       buffer.position(position);&lt;br /&gt;       message = new String(data);&lt;br /&gt;   }&lt;br /&gt;   System.out.println("New message being read, message is: " + message);&lt;br /&gt;   buffer.clear();&lt;br /&gt;   return false;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;   public boolean postExecute(Context context) throws IOException {&lt;br /&gt;       return true;&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;So now you could whip up a test to send some data over TCP and the Processor will read the packets and print the message out.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6042050729972843368-4076475645401984338?l=gallemore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gallemore.blogspot.com/feeds/4076475645401984338/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6042050729972843368&amp;postID=4076475645401984338' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/4076475645401984338'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/4076475645401984338'/><link rel='alternate' type='text/html' href='http://gallemore.blogspot.com/2007/07/using-grizzly-to-read-tcp-packets.html' title='Using Grizzly to read TCP Packets'/><author><name>Chad Gallemore</name><uri>http://www.blogger.com/profile/03687439195639920481</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_chNvxcoCzH4/R2alFr3cD6I/AAAAAAAAAE8/73AxciHQcrA/S220/chad_headshot.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6042050729972843368.post-3021905567747937647</id><published>2007-07-19T03:33:00.000-05:00</published><updated>2007-07-19T03:51:50.382-05:00</updated><title type='text'>Fun in the Sun!!!!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_chNvxcoCzH4/Rp8l8zW2rRI/AAAAAAAAAEc/wj4b3oF1n7Q/s1600-h/IMG_1368.JPG"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_chNvxcoCzH4/Rp8l8zW2rRI/AAAAAAAAAEc/wj4b3oF1n7Q/s320/IMG_1368.JPG" alt="" id="BLOGGER_PHOTO_ID_5088827830460394770" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_chNvxcoCzH4/Rp8kMTW2rQI/AAAAAAAAAEU/zp51SDMly7A/s1600-h/Rylea_coco_loco.JPG"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://1.bp.blogspot.com/_chNvxcoCzH4/Rp8kMTW2rQI/AAAAAAAAAEU/zp51SDMly7A/s320/Rylea_coco_loco.JPG" alt="" id="BLOGGER_PHOTO_ID_5088825897725111554" border="0" /&gt;&lt;/a&gt;I am currently in Mexico on vacation with my wife and daughter and thought I would share some photos.  This is the first vacation we have had a chance to take with our daughter, and she has had just a great time.  You can tell by the picture that she has thoroughly enjoyed the tropical drinks, I think she likes eating the pineapple more than drinking the drink though.&lt;br /&gt;I have to admit, she has been quite good the entire trip, we drove from Missouri (a 24 hour drive) and I was worried about her ridding in the car that long, thank goodness for portable DVD players.  In the meantime, we have just had a great time relaxing in the sun and playing in the ocean.  Back to the real world next week.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6042050729972843368-3021905567747937647?l=gallemore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gallemore.blogspot.com/feeds/3021905567747937647/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6042050729972843368&amp;postID=3021905567747937647' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/3021905567747937647'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/3021905567747937647'/><link rel='alternate' type='text/html' href='http://gallemore.blogspot.com/2007/07/fun-in-sun.html' title='Fun in the Sun!!!!'/><author><name>Chad Gallemore</name><uri>http://www.blogger.com/profile/03687439195639920481</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_chNvxcoCzH4/R2alFr3cD6I/AAAAAAAAAE8/73AxciHQcrA/S220/chad_headshot.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_chNvxcoCzH4/Rp8l8zW2rRI/AAAAAAAAAEc/wj4b3oF1n7Q/s72-c/IMG_1368.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6042050729972843368.post-6628070111985673090</id><published>2007-07-05T11:39:00.001-05:00</published><updated>2007-08-03T10:35:06.284-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JBI'/><category scheme='http://www.blogger.com/atom/ns#' term='RSS BC'/><category scheme='http://www.blogger.com/atom/ns#' term='RSS'/><title type='text'>New Enhancements for the RSS Binding Component</title><content type='html'>We have recently added some new enhancements to the &lt;a href="https://rss-bc.dev.java.net/"&gt;RSS Binding Component.&lt;/a&gt;  We now provide support for subscribing and receiving notifications from secure feeds that use Basic Authentication, and the ability to subscribe to multiple feeds at the same time during runtime.  Be sure to check out the &lt;a href="https://rss-bc.dev.java.net/extensions/wsdl_extensions.htm"&gt;RSS WSDL Extensiblity elements&lt;/a&gt; for definitions on how to create the WSDL.  If you have any questions feel free to contact me or use the &lt;a href="https://rss-bc.dev.java.net/servlets/ProjectMailingListList"&gt;mailing list&lt;/a&gt; from the project site.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6042050729972843368-6628070111985673090?l=gallemore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gallemore.blogspot.com/feeds/6628070111985673090/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6042050729972843368&amp;postID=6628070111985673090' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/6628070111985673090'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/6628070111985673090'/><link rel='alternate' type='text/html' href='http://gallemore.blogspot.com/2007/07/new-enhancements-for-rss-binding.html' title='New Enhancements for the RSS Binding Component'/><author><name>Chad Gallemore</name><uri>http://www.blogger.com/profile/03687439195639920481</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_chNvxcoCzH4/R2alFr3cD6I/AAAAAAAAAE8/73AxciHQcrA/S220/chad_headshot.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6042050729972843368.post-635046249078795892</id><published>2007-06-12T15:04:00.001-05:00</published><updated>2007-08-03T10:34:47.277-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JBI'/><category scheme='http://www.blogger.com/atom/ns#' term='Binding Components'/><title type='text'>Your One Stop Shop for JBI Components</title><content type='html'>Are you in the need for a certain JBI Component, but don't know where to download it at?  &lt;a href="http://download.java.net/jbi/binaries/open-jbi-components/main/nightly/latest/ojc/"&gt;Here&lt;/a&gt; is a great place to download the binaries for the component you need.  Don't forget to check out the &lt;a href="http://www.glassfishwiki.org/jbiwiki/Wiki.jsp?page=Jbicomps"&gt;wiki&lt;/a&gt; for demo's and descriptions of the components.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6042050729972843368-635046249078795892?l=gallemore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gallemore.blogspot.com/feeds/635046249078795892/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6042050729972843368&amp;postID=635046249078795892' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/635046249078795892'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/635046249078795892'/><link rel='alternate' type='text/html' href='http://gallemore.blogspot.com/2007/06/your-one-stop-shop-for-jbi-components.html' title='Your One Stop Shop for JBI Components'/><author><name>Chad Gallemore</name><uri>http://www.blogger.com/profile/03687439195639920481</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_chNvxcoCzH4/R2alFr3cD6I/AAAAAAAAAE8/73AxciHQcrA/S220/chad_headshot.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6042050729972843368.post-3905180827540616991</id><published>2007-06-11T14:28:00.000-05:00</published><updated>2007-08-03T10:34:22.472-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JBI'/><category scheme='http://www.blogger.com/atom/ns#' term='XMPP BC'/><category scheme='http://www.blogger.com/atom/ns#' term='XMPP'/><title type='text'>XMPP to RSS Demonstration</title><content type='html'>As noted in my last blog, I have been working on some open source binding components.  We recently finished the &lt;a href="https://rss-bc.dev.java.net/"&gt;RSS Binding Component&lt;/a&gt; and I wanted to get one of the demonstrations we did out here as an example of how you can use JBI to tie multiple protocols together that would normally be somewhat difficult to do.  So in this demonstration I use the &lt;a href="https://xmpp-bc.dev.java.net/"&gt;XMPP BC&lt;/a&gt; to send instant messages, and take that message and publish it as an RSS Feed.  You can download the Netbeans project &lt;a href="https://rss-bc.dev.java.net/downloads/XMPPtoRSSDemo.zip"&gt;here&lt;/a&gt;.  Prerequistes to build this application are as follows:&lt;br /&gt;&lt;a href="https://open-esb.dev.java.net/Downloads_OpenESB_Addons_NB6.html"&gt;&lt;br /&gt;OpenESB Installer&lt;/a&gt; this comes with Netbeans, Glassfish with JBI Runtime, and JBI Components&lt;br /&gt;Wildfire XMPP Server:  for instructions on how to set up go &lt;a href="https://xmpp-bc.dev.java.net/screencast/WildfireSetup.htm"&gt;here&lt;/a&gt;.&lt;br /&gt;Spark XMPP IM Client:  For instruction on how to set up go &lt;a href="https://xmpp-bc.dev.java.net/screencast/SparkSetup.htm"&gt;here&lt;/a&gt;.&lt;br /&gt;XMPP Binding Component installed&lt;br /&gt;RSS Binding Component installed&lt;br /&gt;File Binding Component installed&lt;br /&gt;BPEL Service Engine Installed&lt;br /&gt;&lt;br /&gt;All of the Binding Components and the Service Engines come with the OpenESB installer.  If you happen to be missing one you can find and download the component you need from &lt;a href="http://www.glassfishwiki.org/jbiwiki/Wiki.jsp?page=Jbicomps"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;You will want to edit the WSDL's to fit your needs.  First look at the fileWsdl.wsdl.  You will notice that in the address section (file:address) you will be writting a file to you User Home/mag16AOC directory.  You can edit this if you wish, and write the file where ever.  Next look at the message (file:message) section of the WSDL and notice the file will be called mission100.xml.  You can re-name the file if you wish.&lt;br /&gt;&lt;br /&gt;Next look at the rssPublish wsdl, you will want to edit the feedUrl in the rss:address section to be specific to your machine (i.e. http://localhost:64801/feed/mag-16_aoc/mission_100).  What this means is once you deploy this application and start sending instant messages, the messages will be published to the above link and you can view them using an RSS Reader (i.e. RSSOwl), or you can navigate to that link in a web page and view it there.  Next look at the rssSubscribe wsdl.  You will want to edit the rss:address section to be the same feedUrl you used above.  What this does is subscribes to this feed and every time there is a new post you will get notified and the entry will be written to the file we described above.&lt;br /&gt;&lt;br /&gt;Finally lets take a look at the xmppWsdl.  You will need to edit the xmpp:address section to update the domain (i.e. localhost). &lt;br /&gt;&lt;br /&gt;You can now clean and build the module in netbeans by right clicking on the project and selecting clean and build.  With a successfull build you will want to right click on the XMPPtoRSSDemoCompApp and clean and build that.  You are now almost ready to deploy these and test.  You will first need to create a user for your spark client (This is assuming you have followed the instructions on how to setup Spark and Wildfire).  Make sure you Wildfire server is running and start your Spark client.  You will need to select "Accounts" and create a new user (i.e. bob, server is localhost).  Once logged in you will want to pull up your Wildfire server Admin page and add a user.  This user must be the same that is defined in the xmppWsdl (i.e. username = mag-16_aoc, passworkd mag-16_aoc), once this user is created you will want to add him as a contact in your buddy list for your Spark client.  You are now ready to deploy and test.&lt;br /&gt;&lt;br /&gt;Start the server in Netbeans ( Window --&gt; Runtime --&gt; Servers --&gt; Right Click on Sun Java System Application Server 9 and select Start).   Once the server is running you will see a Tab that says &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;JBI&lt;/span&gt;, expand that and verify that under Binding Components you see the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;RSS&lt;/span&gt; Binding Component, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;XMPP&lt;/span&gt; Binding Component, File Binding Component, and under Service Engines verify you see &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;BPEL&lt;/span&gt; SE.  If those are in place you are ready to deploy your Composite Application.  Right Click on the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;XMPPtoRSSDemoCompApp&lt;/span&gt; and select Deploy.  Once successful you will see the buddy you added in your Spark client (mag-16_&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;aoc&lt;/span&gt;) come online (i.e. turn green).  You are now ready to send instant messages and have those messages published to an &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;RSS&lt;/span&gt; Feed.  Send a couple of messages and then navigate to the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;feedUrl&lt;/span&gt; you defined and verify the feed is being published.  You can also verify your subscribe is working by navigating to the file and verifying that the file is being written to the location described in your &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;fileWsdl&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;So in short what we have done using &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;JBI&lt;/span&gt; is the capability to "mash" two protocols together that could normally not happen, at least easily.  This is a great example of how to take simple &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;IM&lt;/span&gt; client and disseminate information to a large group of people.  If you have any questions feel free to email me or use the mailing list on our project site for the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;RSS&lt;/span&gt; BC or &lt;a href="https://xmpp-bc.dev.java.net/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;XMPP&lt;/span&gt; BC&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6042050729972843368-3905180827540616991?l=gallemore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gallemore.blogspot.com/feeds/3905180827540616991/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6042050729972843368&amp;postID=3905180827540616991' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/3905180827540616991'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/3905180827540616991'/><link rel='alternate' type='text/html' href='http://gallemore.blogspot.com/2007/06/xmpp-to-rss-demonstration.html' title='XMPP to RSS Demonstration'/><author><name>Chad Gallemore</name><uri>http://www.blogger.com/profile/03687439195639920481</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_chNvxcoCzH4/R2alFr3cD6I/AAAAAAAAAE8/73AxciHQcrA/S220/chad_headshot.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6042050729972843368.post-7062095763306151472</id><published>2007-06-06T12:30:00.000-05:00</published><updated>2007-08-03T10:34:02.826-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JBI'/><category scheme='http://www.blogger.com/atom/ns#' term='RSS BC'/><category scheme='http://www.blogger.com/atom/ns#' term='RSS'/><title type='text'>New RSS Binding Component on java.net</title><content type='html'>As I have noted in some of my other blogs, I have been fortunate enough to be working on a team lately that has been developing and open sourcing some JBI components to java.net.  This last month we developed a &lt;a href="https://rss-bc.dev.java.net/"&gt;RSS Binding Component&lt;/a&gt; that is now available for download and use.  Feel free to check it out and feel free to let us know what you think or if you have any questions.  You can contact us at the following email address:&lt;br /&gt;&lt;br /&gt;dev@rss-bc.java.net&lt;br /&gt;&lt;br /&gt;Also, feel free to check out our other Binding Components, &lt;a href="https://xmpp-bc.dev.java.net/"&gt;XMPP&lt;/a&gt;, &lt;a href="https://sip-bc.dev.java.net/"&gt;SIP&lt;/a&gt;, and &lt;a href="https://uddi-bc.dev.java.net/"&gt;UDDI&lt;/a&gt;, that we developed a couple of months ago.  For questions about these components you can contact us at the following:&lt;br /&gt;&lt;br /&gt;dev@uddi-bc.java.net&lt;br /&gt;dev@xmpp-bc.java.net&lt;br /&gt;dev@sip-bc.java.net&lt;br /&gt;&lt;br /&gt;The project sites contain documentation on how to use the components as well as demonstration videos that will walk you through creating a component application.  For a complete list of binding components available see the &lt;a href="http://www.glassfishwiki.org/jbiwiki/Wiki.jsp?page=Jbicomps"&gt;JBI Components WIKI&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6042050729972843368-7062095763306151472?l=gallemore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gallemore.blogspot.com/feeds/7062095763306151472/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6042050729972843368&amp;postID=7062095763306151472' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/7062095763306151472'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/7062095763306151472'/><link rel='alternate' type='text/html' href='http://gallemore.blogspot.com/2007/06/new-rss-binding-component-on-javanet.html' title='New RSS Binding Component on java.net'/><author><name>Chad Gallemore</name><uri>http://www.blogger.com/profile/03687439195639920481</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_chNvxcoCzH4/R2alFr3cD6I/AAAAAAAAAE8/73AxciHQcrA/S220/chad_headshot.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6042050729972843368.post-1849175119840219723</id><published>2007-05-18T15:22:00.000-05:00</published><updated>2007-08-03T10:33:28.275-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Threading'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>Java Threading - ScheduledExecutorService</title><content type='html'>Today I stummbled upon something I had not done, this may be old hat for some of you, but none the less I thought it was pretty cool and thought I would share.  I was working on a class that needed to kick off a thread, so i started down the path I knew and created a class that implemented Runnable, created the run method, and it looked something like the following:&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;public class MyThread implements Runnable {&lt;br /&gt;    private Boolean running;&lt;br /&gt; &lt;br /&gt;    public MyThread(Boolean running) {&lt;br /&gt;        this.running = running;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void run() {&lt;br /&gt;     while (running) {&lt;br /&gt;            process();&lt;br /&gt;            try {&lt;br /&gt;                Thread.sleep(5000);&lt;br /&gt;            } catch (InterruptedException ie) {&lt;br /&gt;                ie.printStackTrace();&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public void process() {&lt;br /&gt;     //Do someting cool here&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public void setRunning(Boolean running) {&lt;br /&gt;     this.running = running;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public class ExecuteThread {&lt;br /&gt;    private Boolean running = true;&lt;br /&gt;    private MyThread myThread;&lt;br /&gt;&lt;br /&gt;    public void activate() {&lt;br /&gt;        myThread = new MyThread(running);&lt;br /&gt;        Thread thread = new Thread(myThread);&lt;br /&gt;        thread.start();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void deactivate() {&lt;br /&gt;        myThread.setRunning(false);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;Using the ScheduledExecutorService provided in the java.util.concurrent package you can handle the execution of a thread and control the initial delay, delay, and the unit of time with one method call.  Something like the following:&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;public class MyThread implements Runnable {&lt;br /&gt;    public MyThread() {&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void run() {&lt;br /&gt;        process();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void process() {&lt;br /&gt;        //Do something cool here&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public class ExecuteThread {&lt;br /&gt;    private MyThread myThread;&lt;br /&gt;    private final ScheduledExecutorService scheduler =&lt;br /&gt;        Executors.newSingleThreadScheduledExecutor();&lt;br /&gt;&lt;br /&gt;    public void activate() {&lt;br /&gt;        myThread = new MyThread();&lt;br /&gt;        scheduler.scheduleWithFixedDelay&lt;br /&gt;          (myThread, 0, 10, TimeUnit.SECONDS);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void deactivate() {&lt;br /&gt;        scheduler.shutdown();&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;Again, this might be old news for some of you, but I thought this was a very effective way to handle threading and it really cleaned up my code in the end.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6042050729972843368-1849175119840219723?l=gallemore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gallemore.blogspot.com/feeds/1849175119840219723/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6042050729972843368&amp;postID=1849175119840219723' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/1849175119840219723'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/1849175119840219723'/><link rel='alternate' type='text/html' href='http://gallemore.blogspot.com/2007/05/java-threading-scheduledexecutorservice.html' title='Java Threading - ScheduledExecutorService'/><author><name>Chad Gallemore</name><uri>http://www.blogger.com/profile/03687439195639920481</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_chNvxcoCzH4/R2alFr3cD6I/AAAAAAAAAE8/73AxciHQcrA/S220/chad_headshot.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6042050729972843368.post-3058793914749980535</id><published>2007-05-10T21:28:00.000-05:00</published><updated>2007-08-03T10:33:03.755-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JBI'/><category scheme='http://www.blogger.com/atom/ns#' term='Binding Component Plugin'/><category scheme='http://www.blogger.com/atom/ns#' term='Netbeans'/><title type='text'>Creating a Binding Component Deployment Plug-In for Netbeans</title><content type='html'>&lt;p&gt;Recently I have had the pleasure of working on a team developing and open sourcing to java.net some binding components for JBI.  One of the tasks we had to complete was integrating our binding components into netbeans.  One of the things netbeans provides is a WSDL wizard, so when you are creating new modules the wizard lets you select the type of binding you will be using, and based off that binding will give you a base template of your wsdl with some default values of attributes you need to provide.  When I first started I had no idea on how to create a plug in for netbeans. So, this will cover how to create a Binding Component Deployment Plugin.  The first thing you will need to get is the&lt;br /&gt;&lt;a href="https://open-esb.dev.java.net/Downloads_OpenESB_Addons_NB6.html"&gt;OpenESB installer&lt;/a&gt; for netbeans.&lt;/p&gt;Once you have Netbeans installed you will want to create a new project by doing the following&lt;ul&gt;&lt;li&gt;Select File --&gt; New Project&lt;/li&gt;&lt;li&gt;Under Categories select --&gt; JBI Components&lt;/li&gt;&lt;li&gt;Under Projects select --&gt; Binding Component Deployment Plugin and click next&lt;/li&gt;&lt;li&gt;Name your plugin (i.e. NewBCPlugin)&lt;/li&gt;&lt;li&gt;define your source package (i.e. com.company.netbeans.modules.wsdlextensions.newbc)&lt;/li&gt;&lt;li&gt;Define your component Name (i.e. newbc).&lt;/li&gt;&lt;li&gt;Edit your WSDL Extension&lt;/li&gt;&lt;ol&gt;&lt;li&gt;Define your Namespace (i.e. http://schemas.company.com/jbi/wsdl-extensions/newbc/) &lt;/li&gt;&lt;li&gt;Define your prefix (i.e. newbc)&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;And click Finish&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Once that is finished you will have a Source Packages directory, and under there you will have two packages something like the following:&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;com.company.netbeans.modules.wsdlextensions.newbc&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Bundle.properties&lt;/li&gt;&lt;li&gt;layer.xml&lt;/li&gt;&lt;li&gt;newbcWsdlExt.xsd&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;com.company.netbeans.modules.wsdlextensions.newbc.resources&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;You will need to edit the layer.xml file.  You will need to update the last section to be something like &lt;a href="http://www.gallemore.us/blog/layer.xml"&gt;this&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;You will also need to update the schema to fit your needs for your Binding Component. You will next need to add this &lt;a href="http://www.gallemore.us/blog/wsdl.xsd"&gt;wsdl.xsd&lt;/a&gt; to the com.company.netbeans.modules.wsdlextensions.newbc package.  Once you have added this xsd make sure you add it as an import to the newbcWsdlExt.xsd file.&lt;br /&gt;&lt;br /&gt;That should be a good starting point for you on that package.  Next we will neeed to create a new package called com.company.netbeans.modules.wsdlextensions.newbc.template,and create the following files under that package:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Bundle.properties&lt;br /&gt;NewBCTemplateProvider.java&lt;br /&gt;template.xml&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;First lets edit the Bundle.properties.  This property file defines what type of extensions your wsdl will provide (i.e. transport).  It should look something like the following:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;NewBCTransport=NewBC Transport&lt;br /&gt;NewBCMessage=NewBC Message&lt;br /&gt;http_//schemas.company.com/jbi/wsdl-extensions/newbc/=NewBC&lt;br /&gt;&lt;br /&gt;TEMPLATEGROUP_name=NewBC&lt;br /&gt;TEMPLATEGROUP_prefix_newbc=newbc&lt;br /&gt;TEMPLATE_name_NewBCTransport=NewBC Transport&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Next we are going to edit the NewBCTemplateProvider.java, this class is pretty straight forward and should look like the following:&lt;code&gt;&lt;br /&gt;&lt;br /&gt;package com.company.netbeans.modules.wsdlextensions.newbc.template;&lt;br /&gt;&lt;br /&gt;import java.io.InputStream;&lt;br /&gt;import org.netbeans.modules.xml.wsdl.ui.&lt;br /&gt;spi.ExtensibilityElementTemplateProvider;&lt;br /&gt;import org.openide.util.NbBundle;&lt;br /&gt;&lt;br /&gt;public class NewBCTemplateProvider&lt;br /&gt;extends ExtensibilityElementTemplateProvider {&lt;br /&gt;&lt;br /&gt; static final String templateUrl =&lt;br /&gt;   "/com/company/netbeans/modules/wsdlextensions/newbc&lt;br /&gt;/template/template.xml";&lt;br /&gt;&lt;br /&gt; public InputStream getTemplateInputStream() {&lt;br /&gt;   return NewBCTemplateProvider.class&lt;br /&gt;.getResourceAsStream(templateUrl);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public String&lt;br /&gt;getLocalizedMessage(String str, Object[] objects) {&lt;br /&gt;   return NbBundle.getMessage&lt;br /&gt;(NewBCTemplateProvider.class, str, objects);&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;For this code to compile you will have to update your libraries by doing the following:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Right click on your project --&gt; Properties&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Select Libraries&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Add the following libraries&lt;br /&gt;&lt;ul&gt;&lt;li&gt;WSDL UI (You will need to edit this library and select use Implementation Version)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Utilities API&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;br /&gt;Next we will look at creating the template.xml; this is the file where you add any attribute that is defined in your NewBCExt.xsd to include default vaules.  Once this plugin&lt;br /&gt;is installed these default values show up as properties in the WSDL Editor.  Your template.xml should look something like &lt;a href="http://www.gallemore.us/blog/template.xml"&gt;this&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Finally you well need to add META-INF/services directory which should be located under your src directory (newbc/src/META-INF/services).  This should contain a file called&lt;/p&gt;&lt;p&gt; org.netbeans.modules.xml.wsdl.ui.spi.&lt;br /&gt;ExtensibilityElementTemplateProvider&lt;br /&gt;&lt;/p&gt;&lt;p&gt;and it should say the following:&lt;/p&gt;&lt;p&gt;com.gestalt.netbeans.modules.wsdlextensions.newbc.&lt;br /&gt;template.NewBCTemplateProvider&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Now you are at a point you can test the plugin.  You will need to right click on the project and perform a clean and build.  Next you will need to test, right click the project and select "Install in Target Platform".  This will start a new instance of Netbeans with your plugin installed.  Once it is started create a new project and under Service Oriented Archietecture select BPEL Module.  Once the project is created right click on Process Files and select create new WSDL Document.  Click next through the Wizard until you get to selecting the type of binding.  Here you will want to select the drop down box called Binding Type and select your new plugin (If it isn't showing up in the list there is something missing).&lt;br /&gt;&lt;/p&gt;If you would like a complete netbeans example project just like we did here, you can download the zip &lt;a href="http://www.gallemore.us/blog/NewBCPlugin.zip"&gt;here&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6042050729972843368-3058793914749980535?l=gallemore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gallemore.blogspot.com/feeds/3058793914749980535/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6042050729972843368&amp;postID=3058793914749980535' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/3058793914749980535'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6042050729972843368/posts/default/3058793914749980535'/><link rel='alternate' type='text/html' href='http://gallemore.blogspot.com/2007/05/creating-binding-component-deployment.html' title='Creating a Binding Component Deployment Plug-In for Netbeans'/><author><name>Chad Gallemore</name><uri>http://www.blogger.com/profile/03687439195639920481</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_chNvxcoCzH4/R2alFr3cD6I/AAAAAAAAAE8/73AxciHQcrA/S220/chad_headshot.jpg'/></author><thr:total>1</thr:total></entry></feed>
