<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Frank's Java Development Blog</title>
	
	<link>http://javablog.franksalinas.net</link>
	<description>Java Enterprise Development &amp; Technology</description>
	<lastBuildDate>Wed, 28 Oct 2009 04:24:03 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/FranksJavaBlog" type="application/rss+xml" /><feedburner:emailServiceId>FranksJavaBlog</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
		<title>Use final</title>
		<link>http://feedproxy.google.com/~r/FranksJavaBlog/~3/_FTe08GbIqU/</link>
		<comments>http://javablog.franksalinas.net/2009/10/27/use-final-judiciously/#comments</comments>
		<pubDate>Wed, 28 Oct 2009 04:19:07 +0000</pubDate>
		<dc:creator>Frank</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[Final]]></category>

		<guid isPermaLink="false">http://javablog.franksalinas.net/?p=574</guid>
		<description><![CDATA[The final keyword is one that I find is under utilized. Use final in your projects as a means of defensive programming. If you are unfamiliar with this keyword here is a great article on its usage.
Renaud Waldura&#8217;s The Final Word On the final Keyword .


No related posts.


No related posts.]]></description>
			<content:encoded><![CDATA[<p>The final keyword is one that I find is under utilized. Use final in your projects as a means of defensive programming. If you are unfamiliar with this keyword here is a great article on its usage.</p>
<p><a href="http://renaud.waldura.com/doc/java/final-keyword.shtml">Renaud Waldura&#8217;s The Final Word On the final Keyword </a>.</p>


<p>No related posts.</p>
<p><a href="http://feedads.g.doubleclick.net/~a/soWj7VmdlDwekPlj7qXL5Avg9ZM/0/da"><img src="http://feedads.g.doubleclick.net/~a/soWj7VmdlDwekPlj7qXL5Avg9ZM/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/soWj7VmdlDwekPlj7qXL5Avg9ZM/1/da"><img src="http://feedads.g.doubleclick.net/~a/soWj7VmdlDwekPlj7qXL5Avg9ZM/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/FranksJavaBlog?a=_FTe08GbIqU:m3aEhmyHJR8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/FranksJavaBlog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/FranksJavaBlog?a=_FTe08GbIqU:m3aEhmyHJR8:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/FranksJavaBlog?i=_FTe08GbIqU:m3aEhmyHJR8:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/FranksJavaBlog?a=_FTe08GbIqU:m3aEhmyHJR8:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/FranksJavaBlog?i=_FTe08GbIqU:m3aEhmyHJR8:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/FranksJavaBlog?a=_FTe08GbIqU:m3aEhmyHJR8:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/FranksJavaBlog?i=_FTe08GbIqU:m3aEhmyHJR8:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/FranksJavaBlog/~4/_FTe08GbIqU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://javablog.franksalinas.net/2009/10/27/use-final-judiciously/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://javablog.franksalinas.net/2009/10/27/use-final-judiciously/</feedburner:origLink></item>
		<item>
		<title>EGL Community Edition 1.0</title>
		<link>http://feedproxy.google.com/~r/FranksJavaBlog/~3/bqj9Sk4Wom8/</link>
		<comments>http://javablog.franksalinas.net/2009/09/09/egl-community-edition-1-0/#comments</comments>
		<pubDate>Wed, 09 Sep 2009 21:18:40 +0000</pubDate>
		<dc:creator>Frank</dc:creator>
				<category><![CDATA[Tools]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[EGL]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[IBM]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[RIA]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[Web 2.0]]></category>

		<guid isPermaLink="false">http://javablog.franksalinas.net/?p=563</guid>
		<description><![CDATA[IBM releases EGL Community Edition 1.0 on September 8, 2009. EGL is a high level language designed to simplify Rich Internet Application (RIA) and Web 2.0 development. EGL is an extensible language that generates standard JavaScript and AJAX code and is not a replacement for these technologies unlike Flex and Silverlight.
EGL Community Edition 1.0 is an Eclipse based tool that is [...]


No related posts.]]></description>
			<content:encoded><![CDATA[<p>IBM releases EGL Community Edition 1.0 on September 8, 2009. EGL is a high level language designed to simplify Rich Internet Application (RIA) and Web 2.0 development. EGL is an extensible language that generates standard JavaScript and AJAX code and is not a replacement for these technologies unlike Flex and Silverlight.</p>
<p>EGL Community Edition 1.0 is an Eclipse based tool that is free for <a href="http://www-949.ibm.com/software/rational/cafe/community/egl/ce" target="_blank">download</a>. To learn more read the <a href="http://www-949.ibm.com/software/rational/cafe/docs/DOC-3249" target="_blank">Quick Overview</a>.</p>


<p>No related posts.</p>
<p><a href="http://feedads.g.doubleclick.net/~a/7D65ZKmNBtutetiQvfFfyxN3Q8Y/0/da"><img src="http://feedads.g.doubleclick.net/~a/7D65ZKmNBtutetiQvfFfyxN3Q8Y/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/7D65ZKmNBtutetiQvfFfyxN3Q8Y/1/da"><img src="http://feedads.g.doubleclick.net/~a/7D65ZKmNBtutetiQvfFfyxN3Q8Y/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/FranksJavaBlog?a=bqj9Sk4Wom8:6RmkbZjZScQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/FranksJavaBlog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/FranksJavaBlog?a=bqj9Sk4Wom8:6RmkbZjZScQ:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/FranksJavaBlog?i=bqj9Sk4Wom8:6RmkbZjZScQ:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/FranksJavaBlog?a=bqj9Sk4Wom8:6RmkbZjZScQ:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/FranksJavaBlog?i=bqj9Sk4Wom8:6RmkbZjZScQ:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/FranksJavaBlog?a=bqj9Sk4Wom8:6RmkbZjZScQ:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/FranksJavaBlog?i=bqj9Sk4Wom8:6RmkbZjZScQ:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/FranksJavaBlog/~4/bqj9Sk4Wom8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://javablog.franksalinas.net/2009/09/09/egl-community-edition-1-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://javablog.franksalinas.net/2009/09/09/egl-community-edition-1-0/</feedburner:origLink></item>
		<item>
		<title>Book Recommendation: The Art of Agile Development</title>
		<link>http://feedproxy.google.com/~r/FranksJavaBlog/~3/Vz6cr5UPeQE/</link>
		<comments>http://javablog.franksalinas.net/2009/06/27/book-recommendation-the-art-of-agile-development/#comments</comments>
		<pubDate>Sat, 27 Jun 2009 19:11:54 +0000</pubDate>
		<dc:creator>Frank</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Recommended]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[SDLC]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[XP]]></category>

		<guid isPermaLink="false">http://javablog.franksalinas.net/?p=541</guid>
		<description><![CDATA[
I just finished reading The Art of Agile Development
by James Shore and Shane Warden. I picked up the book because I wanted to find out more about agile development. I hear a lot of terms thrown around the office about scrum processes and agile development. However, as I paid more attention to the activity within [...]


No related posts.]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.amazon.com/gp/product/0596527675?ie=UTF8&amp;tag=franksalnet-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0596527675"><img class=" alignleft" style="border: 0px initial initial;" title="The Art of Agile Development" src="http://javablog.franksalinas.net/wp-content/uploads/2009/06/51T8FQJDhL._SL160__thumb.jpg" border="0" alt="" width="126" height="164" /></a></p>
<p><img style="border:none !important; margin:0px !important;" src="http://www.assoc-amazon.com/e/ir?t=franksalnet-20&amp;l=as2&amp;o=1&amp;a=0596527675" border="0" alt="" width="1" height="1" />I just finished reading <em><a href="http://www.amazon.com/gp/product/0596527675?ie=UTF8&amp;tag=franksalnet-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0596527675">The Art of Agile Development</a><img style="border:none !important; margin:0px !important;" src="http://www.assoc-amazon.com/e/ir?t=franksalnet-20&amp;l=as2&amp;o=1&amp;a=0596527675" border="0" alt="" width="1" height="1" /><br />
</em>by James Shore and Shane Warden. I picked up the book because I wanted to find out more about agile development. I hear a lot of terms thrown around the office about scrum processes and agile development. However, as I paid more attention to the activity within the work place I started to question the validity of our processes as being “agile”.</p>
<p><span id="more-541"></span>A scrum meeting which pushes almost an hour in time does not fit the definition of a stand-up scrum meeting. Developing formal requirements and functional specification documentation up front and scheduling around those processes fit in the “traditional” waterfall methodologies rather than agile methodologies. It seems to me that we are practicing traditional waterfall methodologies and masking it behind scrum terminology. I think there is room for improvement in our development processes and I want to learn as much as I can to help improve the process and speed up development.</p>
<p>The book provided exactly the information I was seeking. It&#8217;s loaded with information and thoroughly covers the entire software development process focusing on Extreme Programming (XP) methodologies. The XP lifecycle includes all the phases of the traditional software development life cycle (SDLC) of planning, analysis, design, code, test and deploy but eliminates formal documentation and reorganizes the phases into more efficient processes through the use of face-to-face collaboration, incremental design and parallel task execution.</p>
<p>XP emphasizes pair programming, test-driven development (TDD), iterative design, an open, collaborative workspace, and on-site customer support (e.g. Product Manager or other team members who are able to provide <span style="text-decoration: underline;">real</span> requirements). The authors walk you through adopting XP practices from planning workspaces, pair programming techniques, handling changing requirements and team organization along with commentary on alternatives to XP methods.</p>
<p>If you are interested in XP, or agile development in general, and want to get a solid understanding of how to work in or create an agile team this is the resource. I highly recommend it.</p>


<p>No related posts.</p>
<p><a href="http://feedads.g.doubleclick.net/~a/nVpwYTAiOQ-OQ-iHnnH1TlZNqu8/0/da"><img src="http://feedads.g.doubleclick.net/~a/nVpwYTAiOQ-OQ-iHnnH1TlZNqu8/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/nVpwYTAiOQ-OQ-iHnnH1TlZNqu8/1/da"><img src="http://feedads.g.doubleclick.net/~a/nVpwYTAiOQ-OQ-iHnnH1TlZNqu8/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/FranksJavaBlog?a=Vz6cr5UPeQE:HTLtJqU_auo:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/FranksJavaBlog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/FranksJavaBlog?a=Vz6cr5UPeQE:HTLtJqU_auo:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/FranksJavaBlog?i=Vz6cr5UPeQE:HTLtJqU_auo:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/FranksJavaBlog?a=Vz6cr5UPeQE:HTLtJqU_auo:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/FranksJavaBlog?i=Vz6cr5UPeQE:HTLtJqU_auo:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/FranksJavaBlog?a=Vz6cr5UPeQE:HTLtJqU_auo:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/FranksJavaBlog?i=Vz6cr5UPeQE:HTLtJqU_auo:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/FranksJavaBlog/~4/Vz6cr5UPeQE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://javablog.franksalinas.net/2009/06/27/book-recommendation-the-art-of-agile-development/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://javablog.franksalinas.net/2009/06/27/book-recommendation-the-art-of-agile-development/</feedburner:origLink></item>
		<item>
		<title>Five Essential Skills For Software Developers</title>
		<link>http://feedproxy.google.com/~r/FranksJavaBlog/~3/X9UtnE-JJIk/</link>
		<comments>http://javablog.franksalinas.net/2009/05/09/five-essential-skills-for-software-developers/#comments</comments>
		<pubDate>Sun, 10 May 2009 03:59:21 +0000</pubDate>
		<dc:creator>Frank</dc:creator>
				<category><![CDATA[Career]]></category>
		<category><![CDATA[Productivity]]></category>

		<guid isPermaLink="false">http://javablog.franksalinas.net/?p=343</guid>
		<description><![CDATA[There are a lot of software developers out there and the competition is high in the current job market. The economy is in a state of flux and the unemployment rate continues to rise. It&#8217;s important to develop a set of skills that distinguish you from the rest of the pack and I believe maintaining [...]


No related posts.]]></description>
			<content:encoded><![CDATA[<p>There are a lot of software developers out there and the competition is high in the current job market. The economy is in a state of flux and the <a href="http://www.google.com/publicdatads=usunemployment&amp;met=unemployment_rate&amp;tdim=true&amp;q=unemployment+rate#met=unemployment_rate&amp;idim=state:ST060000&amp;tdim=true" target="_blank">unemployment rate </a>continues to rise. It&#8217;s important to develop a set of skills that distinguish you from the rest of the pack and I believe maintaining a well rounded set of skills is the best way to do that. Here are five essential skills to keep you on top of the game.<span id="more-343"></span></p>
<ol>
<li>Technical Knowledge</li>
<li>Verbal and Written Communication</li>
<li>White Board</li>
<li>Time Management</li>
<li>Social Interaction</li>
</ol>
<h4>Technical Knowledge</h4>
<p>As a software developer this is a set of skills which is constantly evaluated and tested by managers and co-workers. It&#8217;s a topic of your performance review and is the most highlighted topic on your resume. If you fluffed up your resume to land that job you&#8217;d better study hard nights and weekends to deliver the goods; this is not a skill you can fake for long.</p>
<p>Keeping up with the latest technology is tough and requires many hours of personal time to read about and play with the latest and greatest of technology X. Technology moves too fast to keep up with it all so narrow your focus to specific areas of interest and become an expert those areas. Remember that technology is only a tool for implementing software designs. The selected technology, or programming language, should not dictate your software design rather your software design should dictate which technology you use to best implement the design. Whatever you do, target technical skills that you find interesting and maximize your marketability</p>
<p>While it&#8217;s fine to specialize you also want to remain flexible. A developer who has a solid understanding and the ability to work in all layers of an application from the user interface to the back end database code is a valuable team member. More importantly, become an expert on the application you work on. If you find a weak area within your team, take the opportunity to become the expert. Build relationships and talk with developers that work on other areas of the application to increase general knowledge of the overall product. The more you know, the more valuable you are to the company.</p>
<h4>Verbal and Written Communication</h4>
<p>Developers must be able to communicate software designs clearly and effectively with managers, business analyst and other team members. The ability to analyze business requirements and produce functional specification and design documentation is critical. Documentation should be written concisely covering all the business requirements. At times, it may be necessary to present your software design to a larger group in the form of a presentation. Presentations require strong verbal communication skills and the use of visual aids are beneficial. The ability to communicate your ideas clearly in front of a group of people is essential to career advancement.</p>
<h4>White Board</h4>
<p>I&#8217;ve written thousands of pages of documentation in the form of functional specifications and architectural design documents using Word, Visio and PowerPoint. While these documents are great for presentations and getting a project off the ground I&#8217;ve found that most people don&#8217;t actually read them (particularly the executives). This is when a quick, high-level overview of the design described pictorially on a white board is the most effective and efficient form of communication. As the old saying goes&#8230;&#8221;A picture is worth a thousand words&#8221;.</p>
<p>There is some skill required to be a good &#8220;white boarder&#8221;. I&#8217;ve worked with engineers who&#8217;s white board skills are horrible. While verbally communicating the design, they attempt to use the white board as a visual aid but nothing of substance is ever drawn. A series of dots, boxes, circles, lines and squigglies (which are supposed to represent text) are produced which result in something resembling a heaping, multi-colored plate of spaghetti (I myself am guilty of this). If you come back to the board the next day to review the drawing it is completely unreadable and has no meaning at all. Slow down and try to remain aware of what you are communicating. It is easy to become so involved in what you are verbalizing that the visual aspect of the white board suffers. I&#8217;ve always been impressed with people who can use the white board effectively. They tend to speak clearly and produce clean, easy to understand diagrams.</p>
<h4>Time Management</h4>
<p>Time management is an essential skill in the developers tool belt. A developer who has good time management skills can consistently deliver projects on time. This, in turn, will earn you the respect and confidence of project managers. Effective time management requires the ability to multi-task and delegate. Multi-tasking allows the developer to juggle multiple task at one time. Delegation enables multi-tasking by allowing the developer to distribute and offload tasks to alternate resources. Think of multi-tasking and delegation as concurrency in the work place, each employee/department is a worker thread, delegate a task and move on to the next.</p>
<p>Make the most of your time at work <span style="text-decoration: underline;">while at work</span>. Do not bring work home unless you absolutely have to. If you find yourself bringing work home often then you are probably not utilizing your time at work efficiently. Create a todo list each day and methodically check off each task as they are completed. Microsoft Outlook has a task list feature which allows you to set reminders and completion dates. This is a great way to keep things moving. If you are working from a project plan, check it daily to make sure you are completing task on time in conjunction with the projected completion date. Keep interested parties up to date on your progress and completion of major milestones.</p>
<h4>Social Interaction</h4>
<p>At the end of the day this is just a job, a way to make money and pay the bills. Take some time to relax and associate with your co-workers in a social environment. Eating together is a great way to bond with people so try getting a group together for lunch or an after work drink and appetizers. Keep the work talk light and spend more time getting to know each other on a personal level. Socializing with your co-workers can help you in the work place. Allowing others to get to know you on a personal level may make them feel more comfortable and trusting. Developing a trusting relationship with your co-workers can increase communication, and efficiency in the office. Social interaction, along with demonstrated competence, is a great way to build up your referral network.</p>


<p>No related posts.</p>
<p><a href="http://feedads.g.doubleclick.net/~a/jghtSbvxNECFZF-VsM2o6Z92hS8/0/da"><img src="http://feedads.g.doubleclick.net/~a/jghtSbvxNECFZF-VsM2o6Z92hS8/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/jghtSbvxNECFZF-VsM2o6Z92hS8/1/da"><img src="http://feedads.g.doubleclick.net/~a/jghtSbvxNECFZF-VsM2o6Z92hS8/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/FranksJavaBlog?a=X9UtnE-JJIk:LZo2Nx8bQec:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/FranksJavaBlog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/FranksJavaBlog?a=X9UtnE-JJIk:LZo2Nx8bQec:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/FranksJavaBlog?i=X9UtnE-JJIk:LZo2Nx8bQec:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/FranksJavaBlog?a=X9UtnE-JJIk:LZo2Nx8bQec:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/FranksJavaBlog?i=X9UtnE-JJIk:LZo2Nx8bQec:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/FranksJavaBlog?a=X9UtnE-JJIk:LZo2Nx8bQec:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/FranksJavaBlog?i=X9UtnE-JJIk:LZo2Nx8bQec:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/FranksJavaBlog/~4/X9UtnE-JJIk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://javablog.franksalinas.net/2009/05/09/five-essential-skills-for-software-developers/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://javablog.franksalinas.net/2009/05/09/five-essential-skills-for-software-developers/</feedburner:origLink></item>
		<item>
		<title>The EJB Specification, Concurrency, and Batch Processing</title>
		<link>http://feedproxy.google.com/~r/FranksJavaBlog/~3/M8yyk4UbLSY/</link>
		<comments>http://javablog.franksalinas.net/2009/03/01/the-ejb-specification-concurrency-and-batch-processing/#comments</comments>
		<pubDate>Sun, 01 Mar 2009 19:54:51 +0000</pubDate>
		<dc:creator>Frank</dc:creator>
				<category><![CDATA[JBoss]]></category>
		<category><![CDATA[JEE]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Batch Processing]]></category>
		<category><![CDATA[Concurrency]]></category>
		<category><![CDATA[EJB]]></category>
		<category><![CDATA[JMS]]></category>
		<category><![CDATA[Specifications]]></category>
		<category><![CDATA[ThreadPoolExecutor]]></category>
		<category><![CDATA[Threads]]></category>

		<guid isPermaLink="false">http://javablog.franksalinas.net/?p=211</guid>
		<description><![CDATA[The EJB specification does not leave much room for implementing concurrent processing within the EJB container. This poses a problem to developers who need to implement solutions for processing long running batch processes as part of the business logic of an application. The EJB specification states the following:
The enterprise bean must not attempt to manage [...]


No related posts.]]></description>
			<content:encoded><![CDATA[<p>The EJB specification does not leave much room for implementing concurrent processing within the EJB container. This poses a problem to developers who need to implement solutions for processing long running batch processes as part of the business logic of an application. The EJB specification states the following:</p>
<blockquote><p>The enterprise bean must not attempt to manage threads. The enterprise bean must not attempt to start, stop, suspend, or resume a thread, or to change a thread’s priority or name. The enterprise bean must not attempt to manage thread groups.</p>
<p><em>These functions are reserved for the EJB container. Allowing the enterprise bean to manage threads would decrease the container’s ability to properly manage the runtime environment.</em></p></blockquote>
<p><span id="more-211"></span>Researching this topic I found that while the specification states the restrictions, the EJB containers do not actually enforce the rule. I was able to test an implementation using a ThreadPoolExecutor in JBoss with no problems. Most implementations addressing long running batch processing solutions specify developing applications outside the EJB container. While the design respects the EJB programming restrictions it is not always a feasible solution for developers. Currently, I am confronted with business requirements to process a large set of files within the process flow of a business method.  The process flow would be to select files based on some criteria, specify what to do with the file collection, and submit the task asynchronously as a background process through JMS to a message-driven bean (MDB) for processing. When the job is done, update the database with the new file paths and notify the user of successful completion. There are several underlying issues:</p>
<ol>
<li>The user submits a request to process a very large set of files. The time to process this request may take hours to complete and will most-likely exceed the default configured transaction time-out of the message-driven bean at which point a TransactionTimeOut Exception is thrown and the operation halts. This can be overcome to a certain extent by increasing the transaction timeout period in the application server settings.</li>
<li>The single large task executes in a sequential manner, and does not take advantage of all available CPU&#8217;s on a multi-processor machine.</li>
<li>It would be more efficient and reduce execution time if the task could be broken up into smaller tasks (or batches) and executed in parallel, or distributed across a group of servers which can process each sub-task individually.</li>
</ol>
<p>The design concepts are relatively simple but the implementation details are complex due to the programming restrictions in the EJB specification. This screams concurrency! The most commonly suggested solution for concurrency is to use JMS. One solution I found is to break up the task, create multiple JMS messages that reply to an acknowledgment queue. Then set the Session Bean to listen to that ack queue using a message filter to collect the results of each sub-task. This is a good solution but a bit more complex to implement than bending the rules and using a ThreadPoolExecutor. I think the real issue with managing threads within the EJB container is the topic of <a href="http://www.oreillynet.com/cs/user/view/cs_msg/17107" target="_blank">reentrancy</a>. In my case, I am calling a remote service so there is no chance of that.</p>
<p>There are many factors to consider when implementing a batch processing framework for your application. There is no one size fits all solution. You really have to evaluate all the options, weigh the pros and cons of each, and decide on your own which approach works best in your environment. Here is a list of articles I found very helpful in making that decision:</p>
<ul>
<li><a title="High Performance Batch Processing" href="http://java.sys-con.com/node/415321" target="_blank">High Performance Batch Processing with Java Enterprise Edition</a></li>
<li><a href="http://www.javaworld.com/javaworld/jw-07-2003/jw-0718-mdb.html?page=1" target="_blank">Add Concurrent Processing with Message Driven Beans</a></li>
<li><a href="http://www.devx.com/Java/Article/20184/0/page/1" target="_blank">JMS Enables Concurrent Processing in EJB</a></li>
<li><a href="http://www.devx.com/java/article/20791" target="_blank">High Volume Transaction Processing in J2EE</a></li>
</ul>


<p>No related posts.</p>
<p><a href="http://feedads.g.doubleclick.net/~a/mwolMLma9dMZ-T63G1cYLtObt7g/0/da"><img src="http://feedads.g.doubleclick.net/~a/mwolMLma9dMZ-T63G1cYLtObt7g/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/mwolMLma9dMZ-T63G1cYLtObt7g/1/da"><img src="http://feedads.g.doubleclick.net/~a/mwolMLma9dMZ-T63G1cYLtObt7g/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/FranksJavaBlog?a=M8yyk4UbLSY:w9MkrEXxzMg:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/FranksJavaBlog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/FranksJavaBlog?a=M8yyk4UbLSY:w9MkrEXxzMg:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/FranksJavaBlog?i=M8yyk4UbLSY:w9MkrEXxzMg:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/FranksJavaBlog?a=M8yyk4UbLSY:w9MkrEXxzMg:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/FranksJavaBlog?i=M8yyk4UbLSY:w9MkrEXxzMg:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/FranksJavaBlog?a=M8yyk4UbLSY:w9MkrEXxzMg:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/FranksJavaBlog?i=M8yyk4UbLSY:w9MkrEXxzMg:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/FranksJavaBlog/~4/M8yyk4UbLSY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://javablog.franksalinas.net/2009/03/01/the-ejb-specification-concurrency-and-batch-processing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://javablog.franksalinas.net/2009/03/01/the-ejb-specification-concurrency-and-batch-processing/</feedburner:origLink></item>
		<item>
		<title>Enforce Data Integrity With Check Constraints</title>
		<link>http://feedproxy.google.com/~r/FranksJavaBlog/~3/4CclOa4vh4M/</link>
		<comments>http://javablog.franksalinas.net/2008/11/23/enforce-data-integrity-with-check-constraints/#comments</comments>
		<pubDate>Sun, 23 Nov 2008 17:25:39 +0000</pubDate>
		<dc:creator>Frank</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[PL/SQL]]></category>
		<category><![CDATA[Programming 101]]></category>

		<guid isPermaLink="false">http://javablog.franksalinas.net/?p=175</guid>
		<description><![CDATA[I came across some code the other day that simply horrified me. I was looking at a table that had a field name which implied it stored a boolean value (e.g. IS_LAUGHABLE). The field type is defined as a char(1), allows NULL values and defined no default value. Looking at the data in the column [...]


No related posts.]]></description>
			<content:encoded><![CDATA[<p>I came across some code the other day that simply horrified me. I was looking at a table that had a field name which implied it stored a boolean value (e.g. IS_LAUGHABLE). The field type is defined as a char(1), allows NULL values and defined no default value. Looking at the data in the column I found a combination of the following values: T, F, Y, and N.<span id="more-175"></span></p>
<p>I didn&#8217;t know what to do. I wanted to insert a new row but could not decide which value is correct to denote for boolean true or false? Then I thought how would the code handle these values? The above value combinations make it impossible to use the ternary operator to retrieve the desired boolean value such as:</p>
<pre class="brush:java; smart-tabs:true; wrap-lines:false">
boolean isLaughable =
    resultSet.getString("is_laughable").equals("Y")?true:false);</pre>
<p>Then I found that someone had gone through the trouble of creating a utility method to convert the various character values to the desired boolean output of true or false. The method looked something like this:</p>
<pre class="brush:java; smart-tabs:true; wrap-lines:false" >static public boolean getBooleanFromString(String attr)
{
  if ( attr == null ) {
		return false ;
  }
  boolean val = false;

  if ("true".equalsIgnoreCase(attr)
         || "t".equalsIgnoreCase(attr)
         || "y".equalsIgnoreCase(attr)
         || "yes".equalsIgnoreCase(attr))
  {
		val = true;
  }

  return val;
}</pre>
<p>I couldn&#8217;t believe it! Instead of cleansing the data they just applied a Band-Aid to get around the issue. This is not the proper way to store this type of data. Possible values for this field can only be one of two values; true or false. Physically what characters represent those values is up to the developer. However since it represents a boolean value it should not allow more than two values to be inserted nor should it allow NULL values.</p>
<p>The proper action to take here is to clean up the data and add a check constraint to the table to restrict the data stored in this field. This can be done with two simple ALTER statements:</p>
<pre class="brush:sql; smart-tabs:true wrap-lines:false">ALTER TABLE jokes
ADD IS_LAUGHABLE char(1) DEFAULT 'N' NOT NULL; 

ALTER TABLE jokes
ADD CONSTRAINT jokes_is_laughable_ck
CHECK (IS_LAUGHABLE IN('Y','N'));</pre>
<p>Adding check constraints to your database will greatly increase data integrity, reduce data related bugs and make programming easier since you know exactly what values to expect from the database. Any situation where you have a finite list of values such as boolean values, or state (e.g. Error, Success, Processing, etc) are good candidates for value check constraints. Use good judgment and leverage check constraints to your advantage.</p>


<p>No related posts.</p>
<p><a href="http://feedads.g.doubleclick.net/~a/MwMS-ebcx8wjIYzJCEh_VwbXkmo/0/da"><img src="http://feedads.g.doubleclick.net/~a/MwMS-ebcx8wjIYzJCEh_VwbXkmo/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/MwMS-ebcx8wjIYzJCEh_VwbXkmo/1/da"><img src="http://feedads.g.doubleclick.net/~a/MwMS-ebcx8wjIYzJCEh_VwbXkmo/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/FranksJavaBlog?a=4CclOa4vh4M:-j7ZqeV-2bI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/FranksJavaBlog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/FranksJavaBlog?a=4CclOa4vh4M:-j7ZqeV-2bI:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/FranksJavaBlog?i=4CclOa4vh4M:-j7ZqeV-2bI:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/FranksJavaBlog?a=4CclOa4vh4M:-j7ZqeV-2bI:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/FranksJavaBlog?i=4CclOa4vh4M:-j7ZqeV-2bI:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/FranksJavaBlog?a=4CclOa4vh4M:-j7ZqeV-2bI:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/FranksJavaBlog?i=4CclOa4vh4M:-j7ZqeV-2bI:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/FranksJavaBlog/~4/4CclOa4vh4M" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://javablog.franksalinas.net/2008/11/23/enforce-data-integrity-with-check-constraints/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://javablog.franksalinas.net/2008/11/23/enforce-data-integrity-with-check-constraints/</feedburner:origLink></item>
		<item>
		<title>Java vs. .NET: Job Market and Salary Survey</title>
		<link>http://feedproxy.google.com/~r/FranksJavaBlog/~3/fMaXQnarh_8/</link>
		<comments>http://javablog.franksalinas.net/2008/11/22/java-vs-net-job-market-and-salary-survey/#comments</comments>
		<pubDate>Sun, 23 Nov 2008 03:27:15 +0000</pubDate>
		<dc:creator>Frank</dc:creator>
				<category><![CDATA[Career]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[Salary]]></category>

		<guid isPermaLink="false">http://javablog.franksalinas.net/?p=102</guid>
		<description><![CDATA[I was recently contacted about a technology job search engine named OdinJobs.com. I took a look a the site and found that they have some great tools for job market analysis and salary surveys. Here I compared salaries and job market trends between J2EE and .NET Architect/Lead and Developer roles in the San Francisco Bay [...]


No related posts.]]></description>
			<content:encoded><![CDATA[<p>I was recently contacted about a technology job search engine named OdinJobs.com. I took a look a the site and found that they have some great tools for job market analysis and salary surveys. Here I compared salaries and job market trends between J2EE and .NET Architect/Lead and Developer roles in the San Francisco Bay Area.<br />
<span id="more-102"></span></p>
<h2>Median Salary</h2>
<p>As you can see from the data below the median salary between the two technologies is comparable with .NET having a slightly higher median salary for Architect/Lead roles and Java/J2EE having a higher median salary for Developer roles.</p>
<table style="font-size:80%" border="0">
<tbody>
<tr>
<td colspan="2"><img src="http://www.odinjobs.com/Odin/mediansalary?id=6362&amp;q=.NET vs J2EE" alt="" /></td>
</tr>
<tr>
<td align="left">Generated By: <img src="http://www.odinjobs.com/favicon.ico" alt="" />OdinJobs &#8211; <a href="http://www.odinjobs.com">IT Jobs and Technology Job Search Engine</a></td>
</tr>
</tbody>
</table>
<table style="font-size:80%" border="0">
<tbody>
<tr>
<td colspan="2"><img src="http://www.odinjobs.com/Odin/mediansalary?id=6365&amp;q=.NET vs J2EE" alt="" /></td>
</tr>
<tr>
<td align="left">Generated By: <img src="http://www.odinjobs.com/favicon.ico" alt="" />OdinJobs &#8211; <a href="http://www.odinjobs.com">IT Jobs and Technology Job Search Engine</a></td>
</tr>
</tbody>
</table>
<h2>Job Trends</h2>
<p>The job trends charts shows that there is a higher demand for J2EE Architect/Lead roles than for .NET. There also appears to have been a spike in job listings for J2EE Architect/Lead roles in recent months while job trends for Developer roles are comparable between the two technologies. Both charts show an increase in job listings in 2008 over 2007.</p>
<table style="font-size:80%" border="0">
<tbody>
<tr>
<td colspan="2"><img src="http://www.odinjobs.com/Odin/jobstrendline?id=6362&amp;q=.NET vs J2EE" alt="" /></td>
</tr>
<tr>
<td align="left">Generated By: <img src="http://www.odinjobs.com/favicon.ico" alt="" />OdinJobs &#8211; <a href="http://www.odinjobs.com">IT Jobs and Technology Job Search Engine</a></td>
</tr>
</tbody>
</table>
<table style="font-size:80%" border="0">
<tbody>
<tr>
<td colspan="2"><img src="http://www.odinjobs.com/Odin/jobstrendline?id=6365&amp;q=.NET vs J2EE" alt="" /></td>
</tr>
<tr>
<td align="left">Generated By: <img src="http://www.odinjobs.com/favicon.ico" alt="" />OdinJobs &#8211; <a href="http://www.odinjobs.com">IT Jobs and Technology Job Search Engine</a></td>
</tr>
</tbody>
</table>
<h2>Salary Histogram</h2>
<p>The salary histograms show that the salary range for Architect/Lead roles is between $80k and $120k, and $70k and $100k for Developer roles depending on experience. Both histograms show outlying salary data around the $150k range which I suspect represents Director level positions.</p>
<table style="font-size:80%" border="0">
<tbody>
<tr>
<td colspan="2"><img src="http://www.odinjobs.com/Odin/salaryhistogram?id=6362&amp;q=.NET vs J2EE" alt="" /></td>
</tr>
<tr>
<td align="left">Generated By: <img src="http://www.odinjobs.com/favicon.ico" alt="" />OdinJobs &#8211; <a href="http://www.odinjobs.com">IT Jobs and Technology Job Search Engine</a></td>
</tr>
</tbody>
</table>
<table style="font-size:80%" border="0">
<tbody>
<tr>
<td colspan="2"><img src="http://www.odinjobs.com/Odin/salaryhistogram?id=6365&amp;q=.NET vs J2EE" alt="" /></td>
</tr>
<tr>
<td align="left">Generated By: <img src="http://www.odinjobs.com/favicon.ico" alt="" />OdinJobs &#8211; <a href="http://www.odinjobs.com">IT Jobs and Technology Job Search Engine</a></td>
</tr>
</tbody>
</table>
<h2>Conclusion</h2>
<p>The job market seems solid for both technologies and salaries are comparable. Java/J2EE seems to have a slight advantage in demand and salary but it is evident that you can make a great career specializing in Java or .NET with plenty of room for career advancement. The <a href="http://www.odinjobs.com/">OdinJobs</a> web site provides additional functionality to compare job market trends and salary in different locations as well as specific job roles and company types. It&#8217;s interesting to see which industries specific technologies are in demand.</p>


<p>No related posts.</p>
<p><a href="http://feedads.g.doubleclick.net/~a/w-G9ogEJdoYUDM7YOcISV2f1XOQ/0/da"><img src="http://feedads.g.doubleclick.net/~a/w-G9ogEJdoYUDM7YOcISV2f1XOQ/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/w-G9ogEJdoYUDM7YOcISV2f1XOQ/1/da"><img src="http://feedads.g.doubleclick.net/~a/w-G9ogEJdoYUDM7YOcISV2f1XOQ/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/FranksJavaBlog?a=fMaXQnarh_8:_RhSZLTt8Ds:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/FranksJavaBlog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/FranksJavaBlog?a=fMaXQnarh_8:_RhSZLTt8Ds:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/FranksJavaBlog?i=fMaXQnarh_8:_RhSZLTt8Ds:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/FranksJavaBlog?a=fMaXQnarh_8:_RhSZLTt8Ds:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/FranksJavaBlog?i=fMaXQnarh_8:_RhSZLTt8Ds:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/FranksJavaBlog?a=fMaXQnarh_8:_RhSZLTt8Ds:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/FranksJavaBlog?i=fMaXQnarh_8:_RhSZLTt8Ds:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/FranksJavaBlog/~4/fMaXQnarh_8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://javablog.franksalinas.net/2008/11/22/java-vs-net-job-market-and-salary-survey/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://javablog.franksalinas.net/2008/11/22/java-vs-net-job-market-and-salary-survey/</feedburner:origLink></item>
		<item>
		<title>Web Services on JBoss</title>
		<link>http://feedproxy.google.com/~r/FranksJavaBlog/~3/0IAIq32uFjs/</link>
		<comments>http://javablog.franksalinas.net/2008/10/29/web-services-on-jboss/#comments</comments>
		<pubDate>Thu, 30 Oct 2008 03:26:50 +0000</pubDate>
		<dc:creator>Frank</dc:creator>
				<category><![CDATA[JBoss]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JAX-RPC]]></category>
		<category><![CDATA[JAX-WS]]></category>
		<category><![CDATA[JBossWS]]></category>
		<category><![CDATA[web services]]></category>

		<guid isPermaLink="false">http://javablog.franksalinas.net/?p=45</guid>
		<description><![CDATA[I&#8217;ve been working on a project which requires developing some web service endpoints. This is the first time I&#8217;ve had to develop Java web services and I came across a couple of issues which slowed me down. I am using JBoss 4.0.5.GA which comes packaged with JBossWS 1.0.3.SP1. I started out by going through the [...]


No related posts.]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been working on a project which requires developing some web service endpoints. This is the first time I&#8217;ve had to develop Java web services and I came across a couple of issues which slowed me down. I am using JBoss 4.0.5.GA which comes packaged with JBossWS 1.0.3.SP1. I started out by going through the examples provided in <a href="http://docs.jboss.org/jbossas/jboss4guide/r5/html/ch12.html" target="_blank">Chapter 12 of the J2EE Users Guide</a> which helped me get a template for my project. As I attempted to expand my project with multiple service endpoints I received errors during deployment using JBossWS 1.0.3.SP1.  I decided to upgrade to JBossWS 1.2.1.GA which is packaged in the 4.2.3.GA certified distribution of JBoss Application Server. The upgrade solved some of my initial issues but introduced a couple more, some of which are not documented in the official JBossWS users guide.<span id="more-45"></span></p>
<p>It&#8217;s been a frustrating experience so far. I&#8217;ve spent the past week troubleshooting and prototyping various web service implementations with different versions of JBossWS rather than developing my application code. The issues have revolved primarily around different versions of JBossWS and deployment. For instance, I found that I could successfully deploy multiple web service endpoints configured as servlets on JBossWS 1.2.0.SP1 which I could not do in 1.0.3.SP1. That being fixed my next task was to refactor the code as EJB service endpoints. Prior to doing that I decided to upgrade JBossWS to version 1.2.1.GA. Logically it is a minor upgrade 1.2.0 to 1.2.1 and should just contain minor bug fixes. However, after upgrading and refractoring my service endpoints as stateless session beans I fired up JBoss to encounter this error:</p>
<p><strong>org.jboss.deployment.DeploymentException: Cannot create service endpoint; &#8211; nested throwable: (org.jboss.ws.WSException: Multiple context root not supported)</strong></p>
<p>I cut-and-paste the error into Google and shortly thereafter I stumbled upon the <a href="http://www.jboss.com/index.html?module=bb&amp;op=viewtopic&amp;p=4046101#4046101" target="_blank">answer</a>. Apparently, there was quite a major change in functionality between JBossWS 1.2.0 and 1.2.1 which is not documented very well.</p>
<blockquote><p>Posted: Wed May 16, 2007 07:55 AM    Post subject: Re: If I deploy more than one web service I get</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>Thanks for the valuable discussion. I will try to explain what changes between 1.2.0 and 1.2.1 are causing the problems you encounter.</p>
<p>1.) For EJB3 deployments we need to create a web app for HTTP invocations (obviously)</p>
<p>2.) EJB&#8217;s don&#8217;t contain web context information, so we derive it automagically.</p>
<p>3.) Until 1.2.0 the context name was derived from the ear/jar name.</p>
<p>4.) This changed with 1.2.1 to an algorithm that derives it from the bean class name</p>
<p>So what&#8217;s happening when you deploy a EJB3 jar that contains multiple beans?<br />
The default algorithm derives different context names for each bean in this deployment, which in turn we cannot use to setup the HTTP endpoint and thus throw an exception.</p>
<p>This also explains why the following did work:</p>
<p>@WebContext(contextRoot=&#8221;/beans&#8221;)</p>
<p>Unfortunately this is left out in the specs and thus has been changed many times.<br />
Until we a have a definite solution i suggest you refer to the @WebContext annotation, even though it&#8217;s not the most elegant solution.</p>
<p>&#8211;<br />
Heiko</p></blockquote>
<p>Finally an answer! Well sort of. I didn&#8217;t want to use the annotations. I found an alternative solution in the <a href="http://jbossws.jboss.org/mediawiki/index.php/JBossWS_FAQs#How_do_I_know_what_endpoint_address_is_being_used.3F" target="_blank">JBossWS FAQ</a> which described setting the context root explicitly but no information on how to set the context root. Some more searching and I found the <a href="http://www.jboss.org/community/docs/DOC-10309" target="_blank">DTD</a> for the jboss.xml file which described the XML tags required to set the web service context root. After adding these tags and specifying a context root I successfully deployed my multiple EJB endpoints.</p>
<p>Wow! That&#8217;s a lot of work and I haven&#8217;t written any of my own business logic yet. Needless to say these issues put me a bit behind schedule on my project. The examples provided in the <a href="http://docs.jboss.org/jbossas/jboss4guide/r5/html/ch12.html" target="_blank">JBoss J2EE  Guide</a> for creating web services are simple enough to follow and are good for getting started but that&#8217;s about it. The provided examples work on all of the above mentions versions of JBossWS but fail when you want to get a little more complex with your service. Notice the documentation only provides examples for creating web services that pass primitive types. What about passing custom types? What about passing an array or collection of custom types? None of this is covered and you must refer to outside books and resources to find the answers. In following post I plan to address these topics in detail.</p>


<p>No related posts.</p>
<p><a href="http://feedads.g.doubleclick.net/~a/Zcl3RfbxCd3WT4qMRMwxgbya_Po/0/da"><img src="http://feedads.g.doubleclick.net/~a/Zcl3RfbxCd3WT4qMRMwxgbya_Po/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/Zcl3RfbxCd3WT4qMRMwxgbya_Po/1/da"><img src="http://feedads.g.doubleclick.net/~a/Zcl3RfbxCd3WT4qMRMwxgbya_Po/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/FranksJavaBlog?a=0IAIq32uFjs:_Uao4G7cALw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/FranksJavaBlog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/FranksJavaBlog?a=0IAIq32uFjs:_Uao4G7cALw:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/FranksJavaBlog?i=0IAIq32uFjs:_Uao4G7cALw:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/FranksJavaBlog?a=0IAIq32uFjs:_Uao4G7cALw:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/FranksJavaBlog?i=0IAIq32uFjs:_Uao4G7cALw:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/FranksJavaBlog?a=0IAIq32uFjs:_Uao4G7cALw:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/FranksJavaBlog?i=0IAIq32uFjs:_Uao4G7cALw:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/FranksJavaBlog/~4/0IAIq32uFjs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://javablog.franksalinas.net/2008/10/29/web-services-on-jboss/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<feedburner:origLink>http://javablog.franksalinas.net/2008/10/29/web-services-on-jboss/</feedburner:origLink></item>
	</channel>
</rss>
