<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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/"
		>
<channel>
	<title>Comments on: Extreme Reusability, Part II</title>
	<atom:link href="http://www.avromroyfaderman.com/2008/10/extreme-reusability-part-ii/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.avromroyfaderman.com/2008/10/extreme-reusability-part-ii/</link>
	<description>Tricks, Tips, Thoughts, and Rants About Java EE, Oracle ADF, and Web Application Development</description>
	<lastBuildDate>Thu, 26 Aug 2010 20:48:51 -0700</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Avrom</title>
		<link>http://www.avromroyfaderman.com/2008/10/extreme-reusability-part-ii/comment-page-1/#comment-2479</link>
		<dc:creator>Avrom</dc:creator>
		<pubDate>Mon, 06 Oct 2008 17:22:14 +0000</pubDate>
		<guid isPermaLink="false">http://www.avromroyfaderman.com/?p=148#comment-2479</guid>
		<description>Hi Jan -

So, I want to distinguish two sorts of inputs/outputs. Both are important to document, but they should be documented in different ways.

One sense of inputs/outputs (which applies only to &quot;full&quot; services) is user inputs/browser outputs, business rules governing them, etc. Obviously, developers using the services need to know about these, but so do the users. I think user documentation of these inputs and outputs should suffice for most purposes.

The other sense of inputs/outputs that needs to be documented is really only of interest to developer consumers of the service, but it&#039;s rather more limited. It&#039;s just the inputs that the consuming application needs to pass to the service, the outputs it can expect in return, and the changes to the entity caches that the behavior translates into. The inputs and outputs that the application needs to pass/can expect can be documented just as you would write Javadoc (though obviously you can&#039;t take direct advantage of the Javadoc engine to do so).

JAR files...I agree that versioning is the current weakest point of the methodology. But I don&#039;t think it&#039;s a deal-killer. For one thing, I think that, if you think of the deployed libraries as internal *releases* (in a very fast-cycle, Agile sense), and really use the centralized network instance of the JAR (which will always be the latest release, definitionally) as much as possible, then this sort of versioning won&#039;t be a huge issue.

But I&#039;m still not 100% sure that this is the best way to manage it. Here&#039;s another possibility:

Each application, or service that relies on other services, has, in its build script (and I *strongly* recommend using build scripts, at least for deployment for a variety of independent reasons--though that&#039;s a topic for a different post) which actually checks the latest version of the needed applications out of the source control system into a temporary area, compiles and JARs them, and copies them into the WEB-INF/lib area of the app, so that the built project will always have the latest version of all relevant libraries.

Since the deploy script will call the build script first, this version will also get into the deployed application. (This, obviously, is *not* treating the libraries as having fast production cycles, but rather requires a synch between libraries and apps at each phase: development/testing/production, which is less than perfect; that&#039;s why I prefer the original methodology for this).

One impact of any of these systems is that, to take advantage of a new release of the service, the applications that use the service will need to be redeployed. I&#039;m looking into the possibility that BC and Task Flow libraries don&#039;t actually need to be deployed with the service but can just be added to the J2EE container&#039;s shared classpath (I don&#039;t yet know whether this is true); in that case a simultaneous deployment (via build script) to both the container shared classpath and the shared network location will assure that the latest release version is being used at both design-time and run-time (requiring only a JDev/container bounce to take effect, respectively).

Wow. That was a long reply. It was a very good pair of questions.</description>
		<content:encoded><![CDATA[<p>Hi Jan -</p>
<p>So, I want to distinguish two sorts of inputs/outputs. Both are important to document, but they should be documented in different ways.</p>
<p>One sense of inputs/outputs (which applies only to &#8220;full&#8221; services) is user inputs/browser outputs, business rules governing them, etc. Obviously, developers using the services need to know about these, but so do the users. I think user documentation of these inputs and outputs should suffice for most purposes.</p>
<p>The other sense of inputs/outputs that needs to be documented is really only of interest to developer consumers of the service, but it&#8217;s rather more limited. It&#8217;s just the inputs that the consuming application needs to pass to the service, the outputs it can expect in return, and the changes to the entity caches that the behavior translates into. The inputs and outputs that the application needs to pass/can expect can be documented just as you would write Javadoc (though obviously you can&#8217;t take direct advantage of the Javadoc engine to do so).</p>
<p>JAR files&#8230;I agree that versioning is the current weakest point of the methodology. But I don&#8217;t think it&#8217;s a deal-killer. For one thing, I think that, if you think of the deployed libraries as internal *releases* (in a very fast-cycle, Agile sense), and really use the centralized network instance of the JAR (which will always be the latest release, definitionally) as much as possible, then this sort of versioning won&#8217;t be a huge issue.</p>
<p>But I&#8217;m still not 100% sure that this is the best way to manage it. Here&#8217;s another possibility:</p>
<p>Each application, or service that relies on other services, has, in its build script (and I *strongly* recommend using build scripts, at least for deployment for a variety of independent reasons&#8211;though that&#8217;s a topic for a different post) which actually checks the latest version of the needed applications out of the source control system into a temporary area, compiles and JARs them, and copies them into the WEB-INF/lib area of the app, so that the built project will always have the latest version of all relevant libraries.</p>
<p>Since the deploy script will call the build script first, this version will also get into the deployed application. (This, obviously, is *not* treating the libraries as having fast production cycles, but rather requires a synch between libraries and apps at each phase: development/testing/production, which is less than perfect; that&#8217;s why I prefer the original methodology for this).</p>
<p>One impact of any of these systems is that, to take advantage of a new release of the service, the applications that use the service will need to be redeployed. I&#8217;m looking into the possibility that BC and Task Flow libraries don&#8217;t actually need to be deployed with the service but can just be added to the J2EE container&#8217;s shared classpath (I don&#8217;t yet know whether this is true); in that case a simultaneous deployment (via build script) to both the container shared classpath and the shared network location will assure that the latest release version is being used at both design-time and run-time (requiring only a JDev/container bounce to take effect, respectively).</p>
<p>Wow. That was a long reply. It was a very good pair of questions.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: blogs.oracle.com</title>
		<link>http://www.avromroyfaderman.com/2008/10/extreme-reusability-part-ii/comment-page-1/#comment-2477</link>
		<dc:creator>blogs.oracle.com</dc:creator>
		<pubDate>Mon, 06 Oct 2008 15:26:29 +0000</pubDate>
		<guid isPermaLink="false">http://www.avromroyfaderman.com/?p=148#comment-2477</guid>
		<description>&lt;strong&gt;Extreme Reusability refuses to die...&lt;/strong&gt;

You can&#039;t keep a good idea down... Time and technical issues may have conspired to prevent Avrom...</description>
		<content:encoded><![CDATA[<p><strong>Extreme Reusability refuses to die&#8230;</strong></p>
<p>You can&#39;t keep a good idea down&#8230; Time and technical issues may have conspired to prevent Avrom&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jan Vervecken</title>
		<link>http://www.avromroyfaderman.com/2008/10/extreme-reusability-part-ii/comment-page-1/#comment-2471</link>
		<dc:creator>Jan Vervecken</dc:creator>
		<pubDate>Mon, 06 Oct 2008 09:30:42 +0000</pubDate>
		<guid isPermaLink="false">http://www.avromroyfaderman.com/?p=148#comment-2471</guid>
		<description>hi Avrom

Since you point it out as extremely important, how do you suggest that service developers need to maintain documentation to describe exactly what the inputs, outputs, and behavior of their services are. For example also for what you call “full” services (i.e., particular subtasks that involve a UI).

Preventing that these libraries, and their different versions, become a mess, seems quite hard in this Extreme Reusability methodology you propose.

regards
Jan Vervecken</description>
		<content:encoded><![CDATA[<p>hi Avrom</p>
<p>Since you point it out as extremely important, how do you suggest that service developers need to maintain documentation to describe exactly what the inputs, outputs, and behavior of their services are. For example also for what you call “full” services (i.e., particular subtasks that involve a UI).</p>
<p>Preventing that these libraries, and their different versions, become a mess, seems quite hard in this Extreme Reusability methodology you propose.</p>
<p>regards<br />
Jan Vervecken</p>
]]></content:encoded>
	</item>
</channel>
</rss>
