<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.2.2" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>

<channel>
	<title>Mavericks</title>
	<link>http://openmakesoftware.com/mavericks</link>
	<description>News from the Field</description>
	<pubDate>Thu, 03 Jul 2008 19:58:47 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.2.2</generator>
	<language>en</language>
			<item>
		<title>Git Code Control Follows Social Networking Model</title>
		<link>http://openmakesoftware.com/mavericks/2008/07/03/git-code-control-follows-social-networking-model/</link>
		<comments>http://openmakesoftware.com/mavericks/2008/07/03/git-code-control-follows-social-networking-model/#comments</comments>
		<pubDate>Thu, 03 Jul 2008 19:48:13 +0000</pubDate>
		<dc:creator>Sean Blanton</dc:creator>
		
		<category><![CDATA[Social Networking]]></category>

		<category><![CDATA[Git]]></category>

		<category><![CDATA[Coding]]></category>

		<category><![CDATA[SCM Strategy]]></category>

		<category><![CDATA[Meister]]></category>

		<category><![CDATA[OpenMake]]></category>

		<guid isPermaLink="false">http://openmakesoftware.com/mavericks/2008/07/03/git-code-control-follows-social-networking-model/</guid>
		<description><![CDATA[With the Web 2.0 evolution, information flow between people has changed from a &#8216;push&#8217; paradigm (I send you an email) to a pull paradigm (I follow you on Twitter). How could this possibly relate to code management such as branching, merging and history? Well, Git&#8217;s distributed repository model and how one obtains code updates from [...]]]></description>
			<content:encoded><![CDATA[<p>With the Web 2.0 evolution, information flow between people has changed from a &#8216;push&#8217; paradigm (I send you an email) to a pull paradigm (I follow you on Twitter). How could this possibly relate to code management such as branching, merging and history? Well, Git&#8217;s distributed repository model and how one obtains code updates from &#8220;friend&#8221; repositories is similar to Twitter and how you obtain status updates on the people you choose to follow. Instead of communicating micro-blog entries or status updates, Git is communicating source code branch updates.</p>
<p>Also like how Facebook or Twitter allows you to specify a person&#8217;s name in lieu of the communication protocol identifier (email address or web page), Git uses aliases for long repository locations so you have a more direct, natural language and human feel to what you are doing: &#8220;git fetch linus&#8221; will pull changes from Linus&#8217; repository, which you have only had to define once.</p>
<p>Here is a scenario where Steve and I are working on a part of the Linux file system to provide information useful for build management and dependency tracking, which Meister and other tools can take advantage of. Steve started by cloning the master Linux repository and started working away making changes. Steve asked me to work on another part of this project, so I cloned his repository, allowing me to pick up all his changes. I am now automatically following  (Git calls it remote-tracking) Steve&#8217;s &#8220;master&#8221; branch of his repository since I started my repository by cloning his. The &#8220;master&#8221; branch is a.k.a. the &#8220;trunk&#8221; code stream. I can pick up his updates periodically with:</p>
<div class="codecolorer-container text" style="height:35px;">$ git pull</div>
<p>Now, I may also want to get updates directly from the master Linux repository, but it has a complicated URL that I won&#8217;t remember and only want to look up once. So, as a one-time command I do:</p>
<div class="codecolorer-container text" style="height:35px;">$ git remote add linux-nfs git://linux-nfs.org/pub/nfs-2.6.git<br></div>
<p>Forever after:</p>
<div class="codecolorer-container text">$ git fetch linux-nfs<br>
* refs/remotes/linux-nfs/master: storing branch 'master' ...<br>
commit: bf81b46<br></div>
<p>The &#8220;fetch&#8221; command doesn&#8217;t put the master Linux changes directly into my workspace, but off to the side for me to examine first (very nice). If I want, I can accept the changes into my local work tree. To tell me which repositories I am following (which friends), I do:</p>
<div class="codecolorer-container text">$ git branch –r<br>
linux-nfs/master<br>
steve/master<br>
origin/master<br></div>
<p>&#8220;origin/master&#8221; is my own trunk. I could also get the full repository information associated with the short names, but as long as it works, I don&#8217;t want to know what it is. For me, this type of friendly and fluid interaction with repositories is one of the major advantages over CVS and Subversion.</p>
]]></content:encoded>
			<wfw:commentRss>http://openmakesoftware.com/mavericks/2008/07/03/git-code-control-follows-social-networking-model/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Here Comes Git for Code Change Management</title>
		<link>http://openmakesoftware.com/mavericks/2008/06/30/here-comes-git-for-code-change-management/</link>
		<comments>http://openmakesoftware.com/mavericks/2008/06/30/here-comes-git-for-code-change-management/#comments</comments>
		<pubDate>Mon, 30 Jun 2008 20:59:17 +0000</pubDate>
		<dc:creator>Sean Blanton</dc:creator>
		
		<category><![CDATA[Git]]></category>

		<category><![CDATA[Coding]]></category>

		<category><![CDATA[SCM Strategy]]></category>

		<category><![CDATA[Perl]]></category>

		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://openmakesoftware.com/mavericks/2008/06/30/here-comes-git-for-code-change-management/</guid>
		<description><![CDATA[If you are a hard-core open source programmer, you probably use Git for project code change management instead of Subversion (I chose those words carefully). There is a lot of passion from Git advocates and, while it is not a very mature solution, it has a lot of momentum to push it forward. Merely being [...]]]></description>
			<content:encoded><![CDATA[<p>If you are a hard-core open source programmer, you probably use <a href="http://git.or.cz/gitwiki">Git</a> for project code change management instead of Subversion (I chose those words carefully). There is a lot of passion from Git advocates and, while it is not a very mature solution, it has a lot of momentum to push it forward. Merely being conceived of and written by <a href="http://en.wikipedia.org/wiki/Linus_Torvalds">Linus Torvalds</a> and being used on a few large open source projects, such as the very Linux kernel itself, is enough to garner wide support.</p>
<p>A great place to learn about Git is <a href="http://utsl.gen.nz/talks/git-svn/intro.html">Sam Vilain&#8217;s Tutorial</a>. He goes into a lot of detail on the benefits and how-to&#8217;s of using Git. Some of the highlights include repository space savings of over 90% and local-to-repository sync times dropping from hours in Subversion to minutes with Git. The real power of Git is in the highly distributed repositories and the ease and control of moving and accepting changes between repositories. For an open source project with a large number of developers it seems Git will really shine. Git has fine control over branching, merging and accepting or not accepting project changes according to various criteria.</p>
<p>A popular way to use Git is to have Git pull from a public Subversion or CVS repository with convenient integration with those tools to a local Git repository and work from there. Friends working on the same project can easily pass changes between each other with Git and later commit back to the centralized CVS or Subversion repository. <a href="http://GitHub.com">GitHub</a> provides a simple Git repository hosting service. Doing a lot of Java work with JBoss and WebSphere, I am naturally interested in an Eclipse plug-in for Git and indeed <a href="http://git.or.cz/gitwiki/EclipsePlugin">one</a> exists. It looks like a newborn infant, but I will check it out.</p>
<p>I also have a Perl open source project that is currently pretty anemic, but I hope to revitalize it soon. I really hate the fact that I&#8217;m locked into using Subversion on SourceForge and I never came to like Subversion. I&#8217;m eager to explore moving the project to GitHub, even though I&#8217;ll probably be the only committer for awhile. Since I&#8217;m a hardcore software management person and robust Perl developer, I think Git might be my tool. I&#8217;ll let you know.</p>
]]></content:encoded>
			<wfw:commentRss>http://openmakesoftware.com/mavericks/2008/06/30/here-comes-git-for-code-change-management/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Registration Now Required for Comments</title>
		<link>http://openmakesoftware.com/mavericks/2008/05/26/registration-now-required-for-comments/</link>
		<comments>http://openmakesoftware.com/mavericks/2008/05/26/registration-now-required-for-comments/#comments</comments>
		<pubDate>Mon, 26 May 2008 22:16:45 +0000</pubDate>
		<dc:creator>Sean Blanton</dc:creator>
		
		<category><![CDATA[OpenMake]]></category>

		<guid isPermaLink="false">http://openmakesoftware.com/mavericks/2008/05/26/registration-now-required-for-comments/</guid>
		<description><![CDATA[I&#8217;m now getting about 100 spam comments a week, and so I have to require registration in order to leave comments. A few of you have asked questions to me and this will ensure I can get back to you as well.
So, until I find a new spam filter plug-in for Word Press (and figure [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m now getting about 100 spam comments a week, and so I have to require registration in order to leave comments. A few of you have asked questions to me and this will ensure I can get back to you as well.</p>
<p>So, until I find a new spam filter plug-in for Word Press (and figure out how to use Word Press) I&#8217;ll have to require registration.</p>
<p>Thanks,</p>
<p>Sean</p>
]]></content:encoded>
			<wfw:commentRss>http://openmakesoftware.com/mavericks/2008/05/26/registration-now-required-for-comments/feed/</wfw:commentRss>
		</item>
		<item>
		<title>YAJBT – Yet another Java Build Tool</title>
		<link>http://openmakesoftware.com/mavericks/2008/05/26/yajbt-%e2%80%93-yet-another-java-build-tool/</link>
		<comments>http://openmakesoftware.com/mavericks/2008/05/26/yajbt-%e2%80%93-yet-another-java-build-tool/#comments</comments>
		<pubDate>Mon, 26 May 2008 20:25:28 +0000</pubDate>
		<dc:creator>Sean Blanton</dc:creator>
		
		<category><![CDATA[Maven]]></category>

		<category><![CDATA[SCM Strategy]]></category>

		<category><![CDATA[Coding]]></category>

		<category><![CDATA[buildr]]></category>

		<category><![CDATA[Perl]]></category>

		<category><![CDATA[Ant]]></category>

		<category><![CDATA[Java]]></category>

		<category><![CDATA[OpenMake]]></category>

		<category><![CDATA[Meister]]></category>

		<category><![CDATA[Build Management]]></category>

		<guid isPermaLink="false">http://openmakesoftware.com/mavericks/2008/05/26/yajbt-%e2%80%93-yet-another-java-build-tool/</guid>
		<description><![CDATA[Here comes buildr: yet another Java build tool. Hopefully I, or one of my other cohorts will check this out in detail soon. But, with my experience working with all manner of build tools, with 100 companies and many more development teams, I can already make a few observations.
First of all, why another build tool [...]]]></description>
			<content:encoded><![CDATA[<p>Here comes <a href="http://incubator.apache.org/buildr/">buildr</a>: yet another Java build tool. Hopefully I, or one of my other cohorts will check this out in detail soon. But, with my experience working with all manner of build tools, with 100 companies and many more development teams, I can already make a few observations.</p>
<p>First of all, why another build tool for Java? I am occasionally told that Maven or Ant is a perfect tool, but clearly the people behind <em>buildr</em> don&#8217;t think so. The choice of JRuby as the vehicle for delivering this tool, I think is probably a good one. JRuby is a scripting language in the same vain as Perl, which is used by Meister.</p>
<p>Doing software builds is an ugly business involving lots of file and operating system interaction. This is not where Java shines, but scripting languages can. As long as operating systems are written in C and not Java, C-like tools will be better and faster at interacting with them. Plain Ruby itself is C-based, and JRuby no doubt inherits C-like operating traits. Calling out to a Java compiler from Perl or JRuby, though it has its own JVM, does not represent a significant overhead compared with the file system operations and the compilation/translation itself.</p>
<p>Both Maven and Ant are relatively difficult to extend compared most other build tools, and I&#8217;ll be buildr beats them here. If you have all the Maven plug-ins and Ant tasks you need, then good for you. If not, then you have to start developing in Java and it becomes too much of an investment to sink into a build system. It is much cheaper to extend in JRuby or Perl. My frequently cited example is the XMLBeans compile step in Meister, written in Perl, which is only 40 lines of real code. The Maven plug-in is 60 pages of Java code and no one can tell me really what it is doing (I asked on all the forums). Less code is usually more transparent, which is also good for build audits.</p>
<p>I am a little disappointed to see them try to placate the Maven and Ant users by promising it is a drop-in replacement for Maven and they have all the Ant tasks covered. Both tools have their drawbacks and I don&#8217;t want to see another tool with the same deficiencies. They should have the cajones (or co<span style="color: black; font-family: Book Antiqua; font-size: 10pt">ñ</span>ejos) to apply all their resources to what they think is a better tool (with its own unique benefits and deficiencies). I imagine offering Ant task equivalents is pretty easy because of the ease of coding in JRuby compared with Java.</p>
<p>They also don&#8217;t mention who is supposed to use the tool. Is it for individuals, small development teams, the enterprise? Maven falls short because it is only appropriate for development teams and not for stable, controlled, enterprise builds. Ant is not even tool, but a means to create some tools for small teams. I don&#8217;t think Meister will fear <em>buildr</em> either.</p>
<p>Well, since <em>buildr</em> is only in incubation status with Apache, I&#8217;m not sure how much time I&#8217;ll be able to spend on it, but I am curious and I&#8217;ll let you know if I find out more.</p>
]]></content:encoded>
			<wfw:commentRss>http://openmakesoftware.com/mavericks/2008/05/26/yajbt-%e2%80%93-yet-another-java-build-tool/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Sean’s Favorite Things about Online Social Networks</title>
		<link>http://openmakesoftware.com/mavericks/2008/05/09/sean%e2%80%99s-favorite-things-about-online-social-networks/</link>
		<comments>http://openmakesoftware.com/mavericks/2008/05/09/sean%e2%80%99s-favorite-things-about-online-social-networks/#comments</comments>
		<pubDate>Fri, 09 May 2008 21:23:50 +0000</pubDate>
		<dc:creator>Sean Blanton</dc:creator>
		
		<category><![CDATA[Social Networking]]></category>

		<category><![CDATA[OpenMake]]></category>

		<guid isPermaLink="false">http://openmakesoftware.com/mavericks/2008/05/09/sean%e2%80%99s-favorite-things-about-online-social-networks/</guid>
		<description><![CDATA[I&#8217;ve been using and experimenting with Facebook, LinkedIn, All About Wine, Ancestry.com and Plaxo online social networking. I am confident I will be a user of online social networks as long as I can type, and hopefully longer. Here are the things I like best about using them:
Enables Greater Social Interaction
This is especially true with [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been using and experimenting with Facebook, LinkedIn, All About Wine, Ancestry.com and Plaxo online social networking. I am confident I will be a user of online social networks as long as I can type, and hopefully longer. Here are the things I like best about using them:</p>
<h3>Enables Greater Social Interaction</h3>
<p>This is especially true with people that you would not socialize with frequently such as people you don&#8217;t see in the office every day. My social interaction with these people went from &#8216;never&#8217; to &#8217;sometimes&#8217;. This includes those of my friends and relatives who are a great physical distance away. As people move, my laptops explode, and email clients change, I lose track of people&#8217;s email addresses, so I miss out on sending a holiday greeting or the latest round of baby pictures.</p>
<p>Between Facebook and LinkedIn, I pretty much have all of my high school and college friends somewhere and that can be beneficial professionally as well as socially.</p>
<h3>Saves Time</h3>
<p>Some of my friends say that Facebook uses up too much of their time, but I find that Facebook in particular saves me a lot of time. I can click on anyone&#8217;s face in the Entourage application and send them a quick note. Or, I can take advantage of Facebook&#8217;s slick auto-complete where I only need to type one or two characters to uniquely identify someone. Time savings would be #1 on my list if it were not for the fact that this greater facilitation leads me to slightly more interaction. I do not consider the greater interaction to be a distraction, but it in fact slightly improves my overall quality of life.</p>
<p>LinkedIn also saves me time professionally. Forwarding someone&#8217;s LinkedIn profile is much faster than attaching a resume document and writing an introductory email.</p>
<h3>Facilitates Special Interests</h3>
<p>Facebook also helps me share my interest in less popular topics with like-minded enthusiasts. I can easily send soccer highlight videos or punk rock news to those few friends of mine who are interested. While I could create an email list to do the same, Facebook makes it far simpler and much faster to manage these types of lists. Or, I can post something, and those who spot the post on their mini-feed and are interested can click on it to learn more.</p>
<p>I suppose baby pictures fall into this category. Facebook in particular has awesome picture sharing functionality. The ability to &#8216;tag&#8217; people in photos and have Facebook collect them is priceless. For example, I get can all the pictures taken by many different people where I am tagged and Facebook will collect them for me into a single slide show.</p>
]]></content:encoded>
			<wfw:commentRss>http://openmakesoftware.com/mavericks/2008/05/09/sean%e2%80%99s-favorite-things-about-online-social-networks/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Using UNIX/Linux Shell Scripts in a Perl Environment</title>
		<link>http://openmakesoftware.com/mavericks/2008/05/09/using-unixlinux-shell-scripts-in-a-perl-environment/</link>
		<comments>http://openmakesoftware.com/mavericks/2008/05/09/using-unixlinux-shell-scripts-in-a-perl-environment/#comments</comments>
		<pubDate>Fri, 09 May 2008 20:45:57 +0000</pubDate>
		<dc:creator>Sean Blanton</dc:creator>
		
		<category><![CDATA[Testing]]></category>

		<category><![CDATA[Deployment]]></category>

		<category><![CDATA[Coding]]></category>

		<category><![CDATA[Perl]]></category>

		<category><![CDATA[OpenMake]]></category>

		<category><![CDATA[Build Management]]></category>

		<guid isPermaLink="false">http://openmakesoftware.com/mavericks/2008/05/09/using-unixlinux-shell-scripts-in-a-perl-environment/</guid>
		<description><![CDATA[The first rule for Bash/C/Korn shell scripts in a Perl program environment is to re-write them all in Perl. If your Perl environment has any sophistication, you will have common code, standardized logging (perhaps with Log::Log4perl), testing with Test::More, etc. and your shell scripts just can&#8217;t keep pace.
If you share the environment with any non-Perl [...]]]></description>
			<content:encoded><![CDATA[<p>The first rule for Bash/C/Korn shell scripts in a Perl program environment is to re-write them all in Perl. If your Perl environment has any sophistication, you will have common code, standardized logging (perhaps with Log::Log4perl), testing with Test::More, etc. and your shell scripts just can&#8217;t keep pace.</p>
<p>If you share the environment with any non-Perl applications, however, you will still have to deal with the environment profile(s). I also have some legacy shell scripts that we can&#8217;t justify converting to Perl unless they have another reason to change. (Don&#8217;t change tested code in my house ~~ head bobble + finger wave ~~, nuh-uh!)</p>
<p>There are two ways I know of that you can extend the benefits of your Perl implementation towards your legacy and profile shell scripts. The first is through Bahut&#8217;s excellent tip on embedding POD documentation in shell script. This solves my problem of generating HTML documentation from POD in Perl scripts and having upsetting holes where the shell scripts are. I also have some controls for the Perl scripts that run <em>podchecker</em> before committing to version control, which fails if no documentation is found. Now, I can extend this control to the shell scripts.</p>
<p>The second Perl tool you can extend is the testing functionality. I&#8217;ve found the functionality in Test::More to be useful for validating that the changes to the shell environment profiles are correct and do not introduce defects. Profiles can be notoriously tricky to change when they get fat and you have variables depending on other variables. Mostly the profiles in my case are used to set environment variables that control the version control and build system, and these can be easily validated in a test script called profiles.t via checks like:</p>
<p>ok( $ENV{CODE_ROOT} eq &#8216;/opt/code&#8217;, &#8220;CODE_ROOT set to &#8216;/opt/code&#8217;&#8221;);</p>
<p>You then just rattle off tests for all the variables that are set and you have a great way to validate that everything will still work after the profile change. For a legacy script, you may not be able to have a crack at the internals, but you can at least check the return code and maybe some external effect it has somewhere, such as a file timestamp change.</p>
<p>eval { `legacy_script.sh`};</p>
<p>ok( !$?, &#8220;legacy_script&#8221;); #&#8211; $? is zero if script executes successfully</p>
<p>Profile.t and any other test scripts used to test legacy shell code can be bundled with all the other Perl tests via Test::Harness for a single test suite that really tests everything shell and Perl.</p>
]]></content:encoded>
			<wfw:commentRss>http://openmakesoftware.com/mavericks/2008/05/09/using-unixlinux-shell-scripts-in-a-perl-environment/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Sean’s Top 10 Tools for JBoss Deployment on Linux</title>
		<link>http://openmakesoftware.com/mavericks/2008/05/09/sean%e2%80%99s-top-10-tools-for-jboss-deployment-on-linux/</link>
		<comments>http://openmakesoftware.com/mavericks/2008/05/09/sean%e2%80%99s-top-10-tools-for-jboss-deployment-on-linux/#comments</comments>
		<pubDate>Fri, 09 May 2008 20:36:02 +0000</pubDate>
		<dc:creator>Sean Blanton</dc:creator>
		
		<category><![CDATA[JBoss]]></category>

		<category><![CDATA[Testing]]></category>

		<category><![CDATA[Deployment]]></category>

		<category><![CDATA[Perl]]></category>

		<category><![CDATA[Mojo]]></category>

		<category><![CDATA[OpenMake]]></category>

		<category><![CDATA[Meister]]></category>

		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://openmakesoftware.com/mavericks/2008/05/09/sean%e2%80%99s-top-10-tools-for-jboss-deployment-on-linux/</guid>
		<description><![CDATA[First, let me say how nice it is to have the Mojo workflow engine that allows us to manage the compliance checks, deploy to multiple machines in parallel and validate deployment. This makes our lives a lot easier and provides clear benefits for deployment via the parallelization, dependency management, scalability, logging and reporting. Underneath the [...]]]></description>
			<content:encoded><![CDATA[<p>First, let me say how nice it is to have the Mojo workflow engine that allows us to manage the compliance checks, deploy to multiple machines in parallel and validate deployment. This makes our lives a lot easier and provides clear benefits for deployment via the parallelization, dependency management, scalability, logging and reporting. Underneath the covers, and for those of you who don&#8217;t have the luxury to use this almost-free product, there are some important low-level tools that are critical to the development, testing and operation of the Mojo JBoss deployment system on Linux.</p>
<p>With the most important listed first, they are:</p>
<ol>
<li>JBoss support</li>
<li>The Perl executable (5.6-5.10) and base language</li>
<li>Perl&#8217;s Test::Simple or Test::More modules</li>
<li>Perl&#8217;s Test::Harness module</li>
<li>The JBoss twiddle.sh script or command equivalent</li>
<li>Perl&#8217;s XML::Twig</li>
<li>Perl&#8217;s Archive::Zip</li>
<li>vi</li>
<li>ssh</li>
<li>xterm</li>
</ol>
<p>JBoss support wins hands down due to the number of bugs and critically important undocumented features. On a scale of 1 to 10 where 10 is the best documentation, I give JBoss about a 3 or 4. Googling doesn&#8217;t even help that much for deployment issues.</p>
<p>You may be surprised at the prominence of Perl, but if you think about what you are really doing and what the best tool for the job is, it makes sense. You are really moving an archive (a ZIP format file), copying XML files, creating directories, changing permissions, extracting the archive to the file system perhaps. Where did I mention Java? Nowhere. The twiddle.sh command comes in handy if you get the secret commands from JBoss support that tell you if the application you deployed has actually started correctly. Notice that this is a shell script suggesting we&#8217;re not the first to use non-Java tools to manage deployment.</p>
<p>Particularly on the testing side, I can&#8217;t think of a viable alternative to Perl testing. We need to test that we created this directory, changed that permission, updated that file timestamp, etc. We have about 300 test cases encoded in Perl that are run with every change to the deployment system. It takes about 20 seconds to write and run a simple test case in Perl.</p>
<p>Lessons? Use JBoss support early and often and use Perl.</p>
]]></content:encoded>
			<wfw:commentRss>http://openmakesoftware.com/mavericks/2008/05/09/sean%e2%80%99s-top-10-tools-for-jboss-deployment-on-linux/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Automating XML Updates for Web Services</title>
		<link>http://openmakesoftware.com/mavericks/2008/04/24/automating-xml-updates-for-web-services/</link>
		<comments>http://openmakesoftware.com/mavericks/2008/04/24/automating-xml-updates-for-web-services/#comments</comments>
		<pubDate>Thu, 24 Apr 2008 18:42:40 +0000</pubDate>
		<dc:creator>Sean Blanton</dc:creator>
		
		<category><![CDATA[Testing]]></category>

		<category><![CDATA[Eclipse]]></category>

		<category><![CDATA[Coding]]></category>

		<category><![CDATA[Microsoft]]></category>

		<category><![CDATA[SOA]]></category>

		<category><![CDATA[CA Harvest]]></category>

		<category><![CDATA[Deployment]]></category>

		<category><![CDATA[WebSphere]]></category>

		<category><![CDATA[JBoss]]></category>

		<category><![CDATA[Ant]]></category>

		<category><![CDATA[Java]]></category>

		<category><![CDATA[XML]]></category>

		<category><![CDATA[Perl]]></category>

		<category><![CDATA[Maven]]></category>

		<category><![CDATA[.NET]]></category>

		<category><![CDATA[Build Management]]></category>

		<guid isPermaLink="false">http://openmakesoftware.com/mavericks/2008/04/24/automating-xml-updates-for-web-services/</guid>
		<description><![CDATA[As a follow up to my article on automating XML updates, I&#8217;d like to report that I did use Excel and Perl&#8217;s XML::Twig to successfully generate XML descriptors for my web service consumer, and it was a lot easier than I thought. I&#8217;m using XFire 1.2.6 web services stack running under JBoss and using MyEclipse [...]]]></description>
			<content:encoded><![CDATA[<p>As a follow up to my <a href="http://openmakesoftware.com/mavericks/2008/03/23/automating-xml-updates-for-software-development/">article on automating XML updates</a>, I&#8217;d like to report that I did use Excel and Perl&#8217;s <a href="http://www.xmltwig.com/">XML::Twig</a> to successfully generate XML descriptors for my web service consumer, and it was a lot easier than I thought. I&#8217;m using XFire 1.2.6 web services stack running under JBoss and using MyEclipse IDE 5.0. I&#8217;m happy to say I went from blank spreadsheet and no plan to generated XML files from spreadsheet values in one and half hours. The implementation is of course expandable and reusable. This implementation should work for WebSphere and .NET as well.
</p>
<p>I needed to create different configurations for my web application so that the service request went to different endpoints for different environments. The endpoint is at an enterprise service bus (ESB) and there is a different ESB for each environment. I need to have my &#8216;dev&#8217; instance of the consumer hit the &#8216;dev&#8217; instance of the ESB, the &#8216;qa&#8217; instance of my web app hit the &#8216;qa&#8217; instance of the ESB, etc. We&#8217;ve set up Meister to pick up the correct XML file for the target environment for the build of the WAR.
</p>
<p>I started by setting up the spreadsheet as follows. I had an unnecessary column for Host indicating JBoss, but I hope to include WebSphere and maybe .NET as well some day. My web app actually connects to two services a.k.a. providers, so there is a column there. And, next is the configuration label for my web app with the name corresponding to the environment it is designed for. So, the first three columns of the spreadsheet look like:
</p>
<div>
<table style="border-collapse:collapse" border="0">
<colgroup><col style="width:76px"/><col style="width:124px"/><col style="width:102px"/></colgroup>
<tbody valign="top">
<tr style="height: 18px">
<td vAlign="bottom" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  none">
<p><span style="font-family:Arial; font-size:10pt"><strong>Host</strong></span></p>
</td>
<td vAlign="bottom" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  none">
<p><span style="font-family:Arial; font-size:10pt"><strong>Provider</strong></span></p>
</td>
<td vAlign="bottom" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  none">
<p style="text-align: center"><span style="font-family:Arial; font-size:10pt"><strong>Configuration</strong></span></p>
</td>
</tr>
<tr style="height: 17px">
<td vAlign="bottom" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none"> </td>
<td vAlign="bottom" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none"> </td>
<td vAlign="bottom" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none"> </td>
</tr>
<tr style="height: 17px">
<td vAlign="bottom" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none">
<p><span style="font-family:Arial; font-size:10pt">JBoss</span></p>
</td>
<td vAlign="bottom" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none">
<p><span style="font-family:Arial; font-size:10pt">helloworld_service</span></p>
</td>
<td vAlign="bottom" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none">
<p style="text-align: center"><span style="font-family:Arial; font-size:10pt">dev</span></p>
</td>
</tr>
<tr style="height: 17px">
<td vAlign="bottom" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none"> </td>
<td vAlign="bottom" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none"> </td>
<td vAlign="bottom" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none">
<p style="text-align: center"><span style="font-family:Arial; font-size:10pt">int</span></p>
</td>
</tr>
<tr style="height: 17px">
<td vAlign="bottom" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none"> </td>
<td vAlign="bottom" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none"> </td>
<td vAlign="bottom" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none">
<p style="text-align: center"><span style="font-family:Arial; font-size:10pt">perf</span></p>
</td>
</tr>
<tr style="height: 17px">
<td vAlign="bottom" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none"> </td>
<td vAlign="bottom" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none"> </td>
<td vAlign="bottom" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none">
<p style="text-align: center"><span style="font-family:Arial; font-size:10pt">qa</span></p>
</td>
</tr>
<tr style="height: 17px">
<td vAlign="bottom" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none"> </td>
<td vAlign="bottom" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none"> </td>
<td vAlign="bottom" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none">
<p style="text-align: center"><span style="font-family:Arial; font-size:10pt">prod</span></p>
</td>
</tr>
<tr style="height: 17px">
<td vAlign="bottom" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none"> </td>
<td vAlign="bottom" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none"> </td>
<td vAlign="bottom" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none"> </td>
</tr>
<tr style="height: 17px">
<td vAlign="bottom" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none">
<p><span style="font-family:Arial; font-size:10pt">JBoss</span></p>
</td>
<td vAlign="bottom" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none">
<p><span style="font-family:Arial; font-size:10pt">foobar_service</span></p>
</td>
<td vAlign="bottom" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none">
<p style="text-align: center"><span style="font-family:Arial; font-size:10pt">dev</span></p>
</td>
</tr>
<tr style="height: 17px">
<td vAlign="bottom" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none"> </td>
<td vAlign="bottom" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none"> </td>
<td vAlign="bottom" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none">
<p style="text-align: center"><span style="font-family:Arial; font-size:10pt">int</span></p>
</td>
</tr>
<tr style="height: 17px">
<td vAlign="bottom" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none"> </td>
<td vAlign="bottom" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none"> </td>
<td vAlign="bottom" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none">
<p style="text-align: center"><span style="font-family:Arial; font-size:10pt">perf</span></p>
</td>
</tr>
<tr style="height: 17px">
<td vAlign="bottom" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none"> </td>
<td vAlign="bottom" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none"> </td>
<td vAlign="bottom" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none">
<p style="text-align: center"><span style="font-family:Arial; font-size:10pt">qa</span></p>
</td>
</tr>
<tr style="height: 17px">
<td vAlign="bottom" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none"> </td>
<td vAlign="bottom" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none"> </td>
<td vAlign="bottom" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none">
<p style="text-align: center"><span style="font-family:Arial; font-size:10pt">prod</span></p>
</td>
</tr>
</tbody>
</table>
</div>
<p>
 </p>
<p>Then I needed a way to indicate the resource that would change. Right now I only have XML files, but I chose to stick with a generic URL for that. Unlike Maven or Ant generators, we start with an XML file that actually works and has been tested - not some hacked up parameterized version that takes additional effort to create. The fourth column of the spreadsheet looks like the following (with repeated entries omitted):
</p>
<div>
<table style="border-collapse:collapse" border="0">
<colgroup><col style="width:457px"/></colgroup>
<tbody valign="top">
<tr style="height: 18px">
<td vAlign="bottom" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  none">
<p><span style="font-family:Arial; font-size:10pt"><strong>Document URL</strong></span></p>
</td>
</tr>
<tr style="height: 17px">
<td vAlign="bottom" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none"> </td>
</tr>
<tr style="height: 17px">
<td vAlign="bottom" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none">
<p><a href="file:///\\consumerWeb\src\com\company\consumer\HelloWorldServiceConsumer.xml"><span style="color:blue; font-family:Arial; font-size:10pt; text-decoration:underline">file://consumerWeb/src/com/company/consumer/HelloWorldConsumer.xml</span></a></p>
</td>
</tr>
<tr style="height: 17px">
<td vAlign="bottom" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none"> </td>
</tr>
<tr style="height: 17px">
<td vAlign="bottom" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none"> </td>
</tr>
<tr style="height: 17px">
<td vAlign="bottom" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none"> </td>
</tr>
<tr style="height: 17px">
<td vAlign="bottom" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none"> </td>
</tr>
<tr style="height: 17px">
<td vAlign="bottom" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none"> </td>
</tr>
<tr style="height: 17px">
<td vAlign="bottom" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none">
<p><a href="file://consumerWeb/src/com/company/consumer/FooBarConsumer.xml"><span style="font-family:Arial; font-size:10pt">file://consumerWeb/src/com/company/consumer/FooBarConsumer.xml</span></a></p>
</td>
</tr>
</tbody>
</table>
</div>
<p>
 </p>
<p>Next, I needed a way to specify a target location to change within the XML file. Now, I know I&#8217;m going to use XPath, but I&#8217;ll want this to one day work for properties files as well, so I came up with a URL-like thing called a Universal Datum Locator (UDL) which pre-pends the method of locating the datum to change on to a method-specific locator. It could be a property name, an XPath or a Perl regex, for example. In this case it is XPath and then the last column contains the replacement value for the datum indicated by the UDL. <a href="http://www.w3schools.com/xpath/default.asp">XPath</a> is also very intuitive and easier to construct than it may look.
</p>
<p><span style="font-family:Arial; font-size:10pt">The value for the UDL looks like:<br />
</span></p>
<p><strong>xpath://beans/bean[@factory-bean=&#8217;xfireProxyFactory&#8217;]/ constructor-arg[@index=&#8217;1&#8242;]/value<br />
</strong></p>
<p><span style="font-family:Arial; font-size:10pt">So the fifth column contains the UDL&#8217;s, which in my case is always the same XPath expression. The final column of the spreadsheet contains the replacement value of the datum indicated by the UDL:</span>
	</p>
<div>
<table style="border-collapse:collapse" border="0">
<colgroup><col style="width:473px"/></colgroup>
<tbody valign="top">
<tr style="height: 18px">
<td vAlign="bottom" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid black 1.0pt; border-right:  none">
<p><span style="font-family:Arial; font-size:10pt"><strong>Value</strong></span></p>
</td>
</tr>
<tr style="height: 17px">
<td vAlign="bottom" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none"> </td>
</tr>
<tr style="height: 17px">
<td vAlign="bottom" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none">
<p><span style="font-family:Arial; font-size:10pt">http://devesb/esb/helloworld_service/services/HelloWorldJBossService</span></p>
</td>
</tr>
<tr style="height: 17px">
<td vAlign="bottom" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none">
<p><span style="font-family:Arial; font-size:10pt">http://intesb/esb/helloworld_service/services/HelloWorldJBossService</span></p>
</td>
</tr>
<tr style="height: 17px">
<td vAlign="bottom" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none">
<p><span style="font-family:Arial; font-size:10pt">http://peresb/esb/helloworld_service/services/HelloWorldJBossService</span></p>
</td>
</tr>
<tr style="height: 17px">
<td vAlign="bottom" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none">
<p><span style="font-family:Arial; font-size:10pt">http://accesb/esb/helloworld_service/services/HelloWorldJBossService</span></p>
</td>
</tr>
<tr style="height: 17px">
<td vAlign="bottom" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none">
<p><span style="font-family:Arial; font-size:10pt">http://prdesb/esb/helloworld_service/services/HelloWorldJBossService</span></p>
</td>
</tr>
<tr style="height: 17px">
<td vAlign="bottom" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none"> </td>
</tr>
<tr style="height: 17px">
<td vAlign="bottom" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none">
<p><span style="font-family:Arial; font-size:10pt">http://devesb/esb/foobar_service/services/FooBarJBossService</span></p>
</td>
</tr>
<tr style="height: 17px">
<td vAlign="bottom" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none">
<p><span style="font-family:Arial; font-size:10pt">http://intesb/esb/foobar_service/services/FooBarJBossService</span></p>
</td>
</tr>
<tr style="height: 17px">
<td vAlign="bottom" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none">
<p><span style="font-family:Arial; font-size:10pt">http://peresb/esb/foobar_service/services/FooBarJBossService</span></p>
</td>
</tr>
<tr style="height: 17px">
<td vAlign="bottom" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none">
<p><span style="font-family:Arial; font-size:10pt">http://accesb/esb/foobar_service/services/FooBarJBossService</span></p>
</td>
</tr>
<tr style="height: 17px">
<td vAlign="bottom" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  none; border-right:  none">
<p><span style="font-family:Arial; font-size:10pt">http://prdesb/esb/foobar_service/services/FooBarJBossService</span></p>
</td>
</tr>
</tbody>
</table>
</div>
<p>
 </p>
<p>My nifty Perl script is only about 80 lines of real code and because XML::Twig is nearly the best thing in the world, I pass the entire XPath in as a hash key to modify the source XML file:
</p>
<p>   my $twig = XML::Twig-&gt;new(
</p>
<p>      pretty_print  =&gt; &#8216;indented&#8217;,
</p>
<p>      twig_handlers =&gt; {
</p>
<p>         &#8220;$xpath&#8221; =&gt; sub {
</p>
<p>            $_-&gt;set_text($new_datum);
</p>
<p>           }
</p>
<p>      }
</p>
<p>   );
</p>
<p>Here, &#8220;$xpath&#8221; is directly from the &#8220;UDL&#8221; column of the spreadsheet with only the &#8216;xpath://&#8217; stripped off and &#8220;$new_datum&#8221; is directly from the &#8220;Value&#8221; column. That&#8217;s a pretty useful one line subroutine if you ask me. I had the new XML files each generated into a different folder (dev/,int/, etc). Then, I checked them into version control (CA Harvest) and built each of them with Meister. If you want the full code, let me know and I&#8217;ll post it somewhere.
</p>
<p>I did find working with the Excel 2003 XML Spreadsheet format a tiny bit awkward. You have to keep track of the column and row indices, but not bad other than that. I see Microsoft Word 2007 allows you to save as an XML document directly, but you apparently have to define bindings. I&#8217;ll have to check that out.</p>
]]></content:encoded>
			<wfw:commentRss>http://openmakesoftware.com/mavericks/2008/04/24/automating-xml-updates-for-web-services/feed/</wfw:commentRss>
		</item>
		<item>
		<title>JBoss Thread Timings, File Timestamps and Deployment</title>
		<link>http://openmakesoftware.com/mavericks/2008/04/15/jboss-thread-timings-file-timestamps-and-deployment/</link>
		<comments>http://openmakesoftware.com/mavericks/2008/04/15/jboss-thread-timings-file-timestamps-and-deployment/#comments</comments>
		<pubDate>Tue, 15 Apr 2008 00:07:05 +0000</pubDate>
		<dc:creator>Sean Blanton</dc:creator>
		
		<category><![CDATA[SCM Strategy]]></category>

		<category><![CDATA[Deployment]]></category>

		<category><![CDATA[JBoss]]></category>

		<category><![CDATA[XML]]></category>

		<category><![CDATA[Release Management]]></category>

		<category><![CDATA[OpenMake]]></category>

		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://openmakesoftware.com/mavericks/2008/04/15/jboss-thread-timings-file-timestamps-and-deployment/</guid>
		<description><![CDATA[JBoss checks for certain watch files when handling deploying or undeploying an application. The watch files are certain key files germane to the object you are deploying. For an EAR, the watch file is the application.xml and the optional jboss-app.xml files. For a web application archive, the watch files are the web.xml and jboss-web.xml files. [...]]]></description>
			<content:encoded><![CDATA[<p>JBoss checks for certain watch files when handling deploying or undeploying an application. The watch files are certain key files germane to the object you are deploying. For an EAR, the watch file is the application.xml and the optional jboss-app.xml files. For a web application archive, the watch files are the web.xml and jboss-web.xml files. For single-file XML resources, such as datasources, the watch file is the XML file itself. In this article, I am dealing with archives that are deployed in unextracted (unzipped) form.</p>
<p>The first check is made for the existence or non-existence of a watch file. If a previously unknown watch file is found, the appropriate deployer is started and the file modification timestamp is stored in memory. If a known watch file is found to be missing, the appropriate undeployer is launched.</p>
<p>If a known watch file is found on a subsequent pass of checking watch files, its timestamp is checked against the time that was stored in memory by the deploy process. If the deployed watch file is newer, the appropriate deployer is launched which apparently first dumps the associated resources and then reloads the object as if it were newly found.</p>
<p>This leaves a hole that can lead to the horrifying result of having files deployed to the server, but not having the changes reflected in the running application.</p>
<p>The issue has to do with completely replacing a running application with a new version. You might first delete the application completely from the runtime area leaving the server to undeploy it. Then you replace the object with a new version of itself. The window of time between checks of the watch files is finite and I&#8217;ve found it is possible to remove and replace the archive within that window so that the JBoss server does not detect that the watch file was missing and so it is not unloaded from memory. The server does check the watch file timestamps, but if you have changed files other than the watch files and have not updated the timestamps of the watch files themselves, the server will happily ignore the new version of the archive while running the old one.</p>
<p>If you use this deployment strategy, then this issue is essentially a random process, and a deployment failure due to this reason happened in our case on only a few percent of all deployments. When you are running a few hundred deployments a week, or it happens for a production deployment it becomes a big problem – especially when people don&#8217;t know what the problem is. A simple resolution is to always update the timestamps of the watch files when changing anything for a deployed application. This will take care of everything but possibly compiled JSP&#8217;s. (Possibly more on that later.)</p>
<p>This also points to a &#8220;restart&#8221; mechanism for JBoss – simply &#8216;touch&#8217; the watch files of a running application to change their timestamps to the current time. This will trigger the dump-and-reload on the next watch file check. This can be useful when the application has not changed, but an associated XML resource has.</p>
]]></content:encoded>
			<wfw:commentRss>http://openmakesoftware.com/mavericks/2008/04/15/jboss-thread-timings-file-timestamps-and-deployment/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Working with the Meister Eclipse Plug-in and Locking-Type Version Control Tools</title>
		<link>http://openmakesoftware.com/mavericks/2008/03/26/working-with-the-meister-eclipse-plug-in-and-locking-type-version-control-tools/</link>
		<comments>http://openmakesoftware.com/mavericks/2008/03/26/working-with-the-meister-eclipse-plug-in-and-locking-type-version-control-tools/#comments</comments>
		<pubDate>Wed, 26 Mar 2008 18:08:15 +0000</pubDate>
		<dc:creator>Sean Blanton</dc:creator>
		
		<category><![CDATA[WebSphere]]></category>

		<category><![CDATA[Coding]]></category>

		<category><![CDATA[Eclipse]]></category>

		<category><![CDATA[CA Harvest]]></category>

		<category><![CDATA[SCM Strategy]]></category>

		<category><![CDATA[JBoss]]></category>

		<category><![CDATA[Java]]></category>

		<category><![CDATA[OpenMake]]></category>

		<category><![CDATA[Meister]]></category>

		<category><![CDATA[Build Management]]></category>

		<guid isPermaLink="false">http://openmakesoftware.com/mavericks/2008/03/26/working-with-the-meister-eclipse-plug-in-and-locking-type-version-control-tools/</guid>
		<description><![CDATA[When you work with a locking-type version control tool like CA Harvest, your Meister build project will appear in your Eclipse workspace as read-only when you check out an existing workspace. I&#8217;ve been using Eclipse for WebSphere development (WebSphere Studio Application Developer) and for JBoss via MyEclipse IDE. If you want to regenerate your Java [...]]]></description>
			<content:encoded><![CDATA[<p>When you work with a locking-type version control tool like CA Harvest, your Meister build project will appear in your Eclipse workspace as read-only when you check out an existing workspace. I&#8217;ve been using Eclipse for WebSphere development (WebSphere Studio Application Developer) and for JBoss via MyEclipse IDE. If you want to regenerate your Java targets, you first have to check out the Meister build project so that the files are writable.</p>
<p>Since this can lock the targets exclusively and prevent others from updating the target, you may not want to check out the build project, but you may still want to develop freely and update your local targets for Meister to build it. For this situation I recommend creating a separate build project that you may never check in to version control. It will be writable and it allows you great freedom for a maximally agile development environment. The &#8216;official&#8217; build project may reference all the built archives in the workspace, but having your own local build project can allow you to focus for a unit build. For example, my workspace may contain an EAR project, a WAR project and one or more JAR projects. If I am principally working only on one of the JAR projects, my local build project can reference only that one JAR project.</p>
<p>When it&#8217;s time to release your JAR code updates to the system build and test environments, synchronize your workspace and check out the VC build project. Generate your targets, do a local system build and then check everything in. Your team system build will work fine!</p>
]]></content:encoded>
			<wfw:commentRss>http://openmakesoftware.com/mavericks/2008/03/26/working-with-the-meister-eclipse-plug-in-and-locking-type-version-control-tools/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
