<?xml version="1.0" encoding="UTF-8"?>
<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/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>JavaPulse</title>
	<atom:link href="http://javapulse.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://javapulse.net</link>
	<description>a finger on the pulse of the freelance Java&#0153; market in the Netherlands</description>
	<pubDate>Sun, 16 Nov 2008 16:34:01 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.2</generator>
	<language>en</language>
			<item>
		<title>About Duchess</title>
		<link>http://javapulse.net/2008/11/16/about-duchess/</link>
		<comments>http://javapulse.net/2008/11/16/about-duchess/#comments</comments>
		<pubDate>Sun, 16 Nov 2008 16:34:01 +0000</pubDate>
		<dc:creator>Clara Ko</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://javapulse.net/2008/11/16/about-duchess/</guid>
		<description><![CDATA[About Duchess
Posted using ShareThis
]]></description>
			<content:encoded><![CDATA[<p><a href="http://jduchess.org/about">About Duchess</a></p>
<p>Posted using <a href="http://sharethis.com">ShareThis</a></p>
]]></content:encoded>
			<wfw:commentRss>http://javapulse.net/2008/11/16/about-duchess/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Introduction to SCRUM</title>
		<link>http://javapulse.net/2008/10/08/introduction-to-scrum/</link>
		<comments>http://javapulse.net/2008/10/08/introduction-to-scrum/#comments</comments>
		<pubDate>Wed, 08 Oct 2008 10:25:41 +0000</pubDate>
		<dc:creator>Clara Ko</dc:creator>
		
		<category><![CDATA[agile]]></category>

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

		<guid isPermaLink="false">http://javapulse.net/2008/10/08/introduction-to-scrum/</guid>
		<description><![CDATA[At my work now, there is a wave of agile revolution going on. Some people (including myself) are really excited about this. I&#8217;ve worked with XP and really enjoy the productivity that comes with teamwork, continuous integration, etc.
I gave the following presentation at work and would like to share it here:

introduction-to-scrum.ppt

RESOURCES:

http://en.wikipedia.org/wiki/Scrum_(development)
5 minutes intro: http://www.softhouse.se/Uploades/Scrum_eng_webb.pdf
glossary: http://www.scrumalliance.org/articles/39-glossary-of-scrum-terms
very [...]]]></description>
			<content:encoded><![CDATA[<p>At my work now, there is a wave of agile revolution going on. Some people (including myself) are really excited about this. I&#8217;ve worked with XP and really enjoy the productivity that comes with teamwork, continuous integration, etc.</p>
<p>I gave the following presentation at work and would like to share it here:</p>
<ul>
<li><a href="http://javapulse.net/wp-content/uploads/introduction-to-scrum.ppt">introduction-to-scrum.ppt</a></li>
</ul>
<p>RESOURCES:</p>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Scrum_(development)">http://en.wikipedia.org/wiki/Scrum_(development)</a></li>
<li>5 minutes intro: <a href="http://www.softhouse.se/Uploades/Scrum_eng_webb.pdf">http://www.softhouse.se/Uploades/Scrum_eng_webb.pdf</a></li>
<li>glossary: <a href="http://www.scrumalliance.org/articles/39-glossary-of-scrum-terms">http://www.scrumalliance.org/articles/39-glossary-of-scrum-terms</a></li>
<li>very useful from MountainGoatSoftware: <a href="http://www.mountaingoatsoftware.com/system/article/file/10/IntroducingAnAgileProcess.pdf">IntroducingAnAgileProcess.pdf</a></li>
<li><a href="http://www.mountaingoatsoftware.com/article_view/5-writing-contracts-for-agile-development">5-writing-contracts-for-agile-development</a></li>
</ul>
<p>WEBSITES:</p>
<ul>
<li><a href="http://www.mountaingoatsoftware.com/">http://www.mountaingoatsoftware.com/</a></li>
<li><a href="http://controlchaos.com/resources/">http://controlchaos.com/resources/</a></li>
<li><a href="http://www.scrumalliance.org/">http://www.scrumalliance.org/</a></li>
<li><a href="with cartoons: http://www.implementingscrum.com/">with cartoons: http://www.implementingscrum.com/</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://javapulse.net/2008/10/08/introduction-to-scrum/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Core AOP (Part I): Introduction to AOP</title>
		<link>http://javapulse.net/2008/10/05/core-aop-part-i-introduction-to-aop/</link>
		<comments>http://javapulse.net/2008/10/05/core-aop-part-i-introduction-to-aop/#comments</comments>
		<pubDate>Sun, 05 Oct 2008 16:28:31 +0000</pubDate>
		<dc:creator>Clara Ko</dc:creator>
		
		<category><![CDATA[aop]]></category>

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

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

		<guid isPermaLink="false">http://javapulse.net/2008/10/05/core-aop-part-i-introduction-to-aop/</guid>
		<description><![CDATA[Finally, after my holidays and a week of work, I get around to writing down my impressions from the AOP course from SpringSource. In this course, we gained experience using Spring AOP and AspectJ, and learned the reason behind the choices to be made when adopting AOP. Furthermore, we learned how to use AOP for [...]]]></description>
			<content:encoded><![CDATA[<p>Finally, after my holidays and a week of work, I get around to writing down my impressions from the <a href="http://springsource.com/training/aop001" target="SpringSource">AOP course</a> from <a href="http://springsource.com">SpringSource</a>. In this course, we gained experience using <a href="http://static.springframework.org/spring/docs/2.5.x/reference/aop.html">Spring AOP</a> and <a href="http://www.eclipse.org/aspectj/" target="AspectJ">AspectJ</a>, and learned the reason behind the choices to be made when adopting AOP. Furthermore, we learned how to use AOP for code analysis and architectural enforcement, infrastructure concerns and finally, domain-specific concerns. I will write several posts on AOP based on my notes from the course. This first one is an introduction to AOP and I plan to fill in more details in further posts.</p>
<h2>Introduction and History</h2>
<h3>Goals of AOP</h3>
<p>Aspect Oriented Programming (AOP) is a programming paradigm that aims to promote desirable software characteristics that have been difficult to implement in the current OOP (Object Oriented Programming) technologies. Desirable software characteristics include the DRY principle (Don&#8217;t Repeat Yourself), 1:1 modularity, information hiding, and separation of cross-cutting concerns. Examples of cross-cutting concerns are logging, security, transactions, remoting, caching, lazy instantiation, and even business logic.</p>
<h3>Design (anti-)patterns</h3>
<p>In the absence of multiple inheritance in the current programming languages such as Java and C# (1), design patterns have been developed to help with modularity. However, design patterns (i.e. such as decorator, proxy, command, inheritance, and callbacks)tend to be work-arounds that are usually weakly-typed, invasive, and cumbersome - requiring programmers to follow a template, thus leading to code copying and making it more difficult to refactor. True separation of concerns enables each concern to be developed and tested individually, leading to easier refactoring, and thus improving agility (adaptation to change). </p>
<h3>Paradigm Shifts</h3>
<p>While programming languages come along more often (2), programming paradigms shift roughly once a decade: assembly/C in the 1970&#8217;s, SmallTalk in the early 1980&#8217;s, C++ in the mid-80&#8217;s, Java in the 1990&#8217;s. AOP adoption is increasing due to improvements in tools which provide clarity in where aspects are applied.</p>
<h2>AOP Basics</h2>
<p>join point - a point in the runtime execution of a program.<br />
pointcut -  a set of join points matched together by a pointcut expression.<br />
advice - a method to execute for each matched join point in the pointcut. Types of advice are: before, after (normal exit, exception thrown, both), and around.<br />
aspect - a unit of modularity (like a class) that specifies pointcuts and advices to implement a cross-cutting concern.</p>
<h2>Spring AOP vs. AspectJ</h2>
<p>Both Spring AOP and AspectJ are now backed by SpringSource and are increasingly tightly integrated: using the same pointcut language and annotations from AspectJ, while Spring provides dependency injection to complement aspects. The differences between them provide the choices that can be made when programming AOP in Java. These differences are language, join point model, weaving possiblities.</p>
<h3>Language</h3>
<p>While Spring AOP specify aspects as normal Java classes and configured using XML or annotation, AspectJ requires the use of the AspectJ language. There are advantages and disadvantages for both. Because aspects as Java classes can be easily understood by Java developers, Spring AOP is easier to adopt, but it has its limitations (see below). Furthermore, pointcut expressions, as well as annotations, are the same as AspectJ. On the other hand, while AspectJ requires knowledge of a new language, the language is most natural for coding aspects, allowing better static analysis with the provided tools and optimal runtime performance.</p>
<h3>Join Point Model</h3>
<p>A join point model is a set of join point types which specify when an advice can run. AspectJ has a rich join point model: including:<br />
- call<br />
- execution<br />
- get<br />
- set<br />
- exception handlers<br />
- initialization<br />
- static initialization<br />
- advice execution<br />
On the other hand, Spring AOP supports only method execution from the above join point types. (Note that initially Spring AOP is sufficient and easier to adopt especially if already using Spring).</p>
<h3>Weaving</h3>
<p>An aspect has to be &#8220;weaved&#8221; into the classes in order for the aspects to be executed during runtime. Spring AOP uses proxy-based (runtime) weaving, while AspectJ provides the choice for compile time, post-compile time, and load time weaving.</p>
<h4>Proxy-based weaving (runtime)</h4>
<p>Proxy-based weaving means that a proxy is dynamically created for each object that need to be advised. This type of weaving is used by Spring AOP. With proxy-based weaving, there is the runtime flexibility to add, remove, and reorder advices, as well as allowing individual objects of the same type to be advised differently. However, with this flexibility comes the inherent problems of proxies such as identity management (which object is &#8216;this&#8217;?). In addition, as mentioned above, Spring AOP is restricted to method execution pointcuts.</p>
<h4>Compile-time weaving (iajc)</h4>
<p>Compile-time weaving means that all sources including aspects are compiled with iajc - incremental AspectJ compiler. This links the classes and aspects together to produce fully-weaved .class files. However, there might be reasons why another compiler cannot be used.</p>
<h4>Binary weaving (post-compile, byte code instrumentation)</h4>
<p>Binary weaving means that aspects are linked with pre-built .class files instead of building the whole application from source. The .class files are &#8220;instrumented&#8221; like they are for coverage measurement with tools like Cobertura and EMMA. There is full Ant (http://dev.eclipse.org/viewcvs/indextech.cgi/aspectj-home/doc/ant-tasks.html) and Maven (http://mojo.codehaus.org/aspectj-maven-plugin/) support for both compile-time and binary weaving.</p>
<h4>Load-time weaving</h4>
<p>Load-time weaving means that weaving is deferred until the last possible moment: when a class is loaded by the VM. From what I understand, this is the least straight-forward approach, since it is application server specific. With Java5+, a Java agent, referencing a weaver, is used to run the application. For application servers, enabling load-time weaver depended on the configuration of the classloader as provided by each application server.</p>
<h2>Summary</h2>
<p>In this post, I wrote an introduction to AOP, presenting goals of AOP, a bit of history, and AOP basic concepts, and finally, exploring the difference between Spring AOP and AspectJ in terms of language, join point model, and weaving. The next post will be about basic pointcut expressions.</p>
<p>Resources:<br />
<a href="http://en.wikipedia.org/wiki/Aspect-oriented_programming">http://en.wikipedia.org/wiki/Aspect-oriented_programming</a><br />
<a href="http://static.springframework.org/spring/docs/2.5.x/reference/aop.html">http://static.springframework.org/spring/docs/2.5.x/reference/aop.html</a><br />
<a href="http://www.eclipse.org/aspectj/">http://www.eclipse.org/aspectj/</a></p>
<p>Footnotes:<br />
1 Why no multiple inheritance in Java?<br />
<a href="http://www.javaworld.com/javaqa/2002-07/02-qa-0719-multinheritance.html">http://www.javaworld.com/javaqa/2002-07/02-qa-0719-multinheritance.html</a><br />
<a href="http://en.wikipedia.org/wiki/Diamond_problem">http://en.wikipedia.org/wiki/Diamond_problem</a></p>
<p>2 History of Programming Languages<br />
<a href="http://merd.sourceforge.net/pixel/language-study/diagram.html">http://merd.sourceforge.net/pixel/language-study/diagram.html</a><br />
Main programming languages: <a href="http://people.mandriva.com/~prigaux/language-study/diagram-light.png">http://people.mandriva.com/~prigaux/language-study/diagram-light.png</a><br />
Full 150+ languages: <a href="http://people.mandriva.com/~prigaux/language-study/diagram.png">http://people.mandriva.com/~prigaux/language-study/diagram.png</a></p>
]]></content:encoded>
			<wfw:commentRss>http://javapulse.net/2008/10/05/core-aop-part-i-introduction-to-aop/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Coverage: EMMA, Cobertura, Maven</title>
		<link>http://javapulse.net/2008/09/02/coverage-emma-cobertura-maven/</link>
		<comments>http://javapulse.net/2008/09/02/coverage-emma-cobertura-maven/#comments</comments>
		<pubDate>Tue, 02 Sep 2008 11:48:44 +0000</pubDate>
		<dc:creator>Clara Ko</dc:creator>
		
		<category><![CDATA[cobertura]]></category>

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

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

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

		<guid isPermaLink="false">http://javapulse.net/2008/09/02/coverage-emma-cobertura-maven/</guid>
		<description><![CDATA[I finished adding test coverage reports to the nightly build a couple of weeks ago, but only got around to write about it now. This post describes the details of my research into both EMMA and Cobertura. In the end, I went with EMMA mainly because of the server support.
Summary



EMMA
Cobertura


Dump and reset coverage data without [...]]]></description>
			<content:encoded><![CDATA[<p>I finished adding test coverage reports to the nightly build a couple of weeks ago, but only got around to write about it now. This post describes the details of my research into both EMMA and Cobertura. In the end, I went with EMMA mainly because of the server support.</p>
<h3>Summary</h3>
<table border="1">
<tr>
<th></th>
<th>EMMA</th>
<th>Cobertura</th>
</tr>
<tr>
<td>Dump and reset coverage data without shutting down application server</td>
<td>Yes</td>
<td>No</td>
</tr>
<tr>
<td>Source files needed for report</td>
<td>No</td>
<td>Yes</td>
</tr>
<tr>
<td>Wildcard to specify multiple source directories in Ant reporting</td>
<td>Yes</td>
<td>No</td>
</tr>
<tr>
<td>External dependencies (Cobertura&#8217;s ASM version is a potential conflict)</td>
<td>No</td>
<td>Yes</td>
</tr>
<tr>
<td>Released Maven plugin</td>
<td>No</td>
<td>Yes</td>
</tr>
<tr>
<td>Active development</td>
<td>No</td>
<td>Yes</td>
</tr>
</table>
<p>Applications running on a server require the following phases for coverage: instrumentation, running, data collection, and report generation.</p>
<p>Note: In Maven, I&#8217;ve put all EMMA related cofiguration in an &#8216;emma&#8217; profile and all Cobertura-related configuration in an &#8216;cobertura&#8217; profile, each activated by the coverage property (-Dcoverage=emma or -Dcoverage=cobertura) so only one can be run at a time.</p>
<hr/>
<h3>Instrumentation</h3>
<p>There are not much difference between EMMA and Cobertura in the instrumentation phase. Both Maven plugins are similar to use and configure, although Cobertura seems to be more clear in specifying paths.</p>
<h5>Field Reflection</h5>
<p>Note that because classes are that are instrumented have added fields to hold coverage data, it is not possible to reflect through all fields of an instrumented class because EMMA/Cobertura fields are not accessible at runtime. Therefore, it is better to reflect using names of fields that you know are there instead of through all fields. If code change is not possible, exclude the classes to be reflected from the instrumentation.</p>
<p>Our project is a multi-module Maven project. To instrument all modules, only the master pom must be altered.</p>
<h4>EMMA</h4>
<p>&lt;build&gt;<br />
&lt;plugins&gt;<br />
&lt;plugin&gt;<br />
&lt;groupId&gt;org.codehaus.mojo&lt;/groupId&gt;<br />
&lt;artifactId&gt;emma-maven-plugin&lt;/artifactId&gt;<br />
&lt;inherited&gt;true&lt;/inherited&gt;<br />
&lt;executions&gt;<br />
&lt;execution&gt;<br />
&lt;id&gt;instr-emma&lt;/id&gt;<br />
&lt;phase&gt;process-classes&lt;/phase&gt;<br />
&lt;configuration&gt;<br />
&lt;filters&gt;<br />
&lt;filter&gt;+com.mycompany.*&lt;/filter&gt;<br />
&lt;filter&gt;-com.mycompany.*.SomeClass&lt;/filter&gt;<br />
&lt;filter&gt;-com.mycompany.*.*Test&lt;/filter&gt;<br />
&lt;/filters&gt;<br />
&lt;/configuration&gt;<br />
&lt;goals&gt;<br />
&lt;goal&gt;instrument&lt;/goal&gt;<br />
&lt;/goals&gt;<br />
&lt;/execution&gt;<br />
&lt;/executions&gt;<br />
&lt;/plugin&gt;<br />
&lt;/plugins&gt;<br />
&lt;/build&gt;</p>
<p>To access the emma-maven-plugin, the CodeHaus snapshot repository must be added to your pom:</p>
<p>    &lt;pluginRepositories&gt;<br />
        &lt;pluginRepository&gt;<br />
            &lt;id&gt;snapshot.codehaus.org&lt;/id&gt;<br />
            &lt;name&gt;CodeHaus Plugin Snapshots&lt;/name&gt;<br />
            &lt;url&gt;http://snapshots.repository.codehaus.org&lt;/url&gt;<br />
            &lt;snapshots&gt;<br />
                &lt;enabled&gt;true&lt;/enabled&gt;<br />
            &lt;/snapshots&gt;<br />
        &lt;/pluginRepository&gt;<br />
    &lt;/pluginRepositories&gt;</p>
<h4>Cobertura</h4>
<p>Cobertura is very similar:</p>
<p>            &lt;build&gt;<br />
                &lt;plugins&gt;<br />
                    &lt;plugin&gt;<br />
                        &lt;groupId&gt;org.codehaus.mojo&lt;/groupId&gt;<br />
                        &lt;artifactId&gt;cobertura-maven-plugin&lt;/artifactId&gt;<br />
                        &lt;inherited&gt;true&lt;/inherited&gt;<br />
                        &lt;executions&gt;<br />
                            &lt;execution&gt;<br />
                                &lt;id&gt;instr-cobertura&lt;/id&gt;<br />
                                &lt;phase&gt;process-classes&lt;/phase&gt;<br />
                        &lt;configuration&gt;<br />
                            &lt;instrumentation&gt;<br />
                                &lt;includes&gt;<br />
                                    &lt;include&gt;com/mycompany/**/*.class&lt;/include&gt;<br />
                                &lt;/includes&gt;<br />
                                &lt;excludes&gt;<br />
                                    &lt;exclude&gt;com/mycompany/**/SomeClass.class&lt;/exclude&gt;<br />
                                    &lt;exclude&gt;com/mycompany/**/*Test.class&lt;/exclude&gt;<br />
                                &lt;/excludes&gt;<br />
                            &lt;/instrumentation&gt;<br />
                        &lt;/configuration&gt;<br />
                                &lt;goals&gt;<br />
                                    &lt;goal&gt;instrument&lt;/goal&gt;<br />
                                &lt;/goals&gt;<br />
                            &lt;/execution&gt;<br />
                        &lt;/executions&gt;<br />
                    &lt;/plugin&gt;<br />
                &lt;/plugins&gt;<br />
            &lt;/build&gt;</p>
<hr/>
<h3>Running</h3>
<p>Running is the same with or without coverage.<br />
Unit tests are run with the surefire plugin in Maven. While integration tests that require applications to be running on a server must be packaged and deployed before they are run from the client side.</p>
<h4>EMMA</h4>
<p>Because an application running with EMMA connects to the socket &#8216;47653&#8242; by default, a running application server and the test client will conflict for the socket. Therefore, if the test client is running on the same machine as the application server, configure the the socket for the test client by setting the system property -Demma.rt.control.port=12345 for the test client.</p>
<h5>System Properties</h5>
<p>Although the surefire plugin is supposed to allow passing in system properties (see <a href="http://maven.apache.org/plugins/maven-surefire-plugin/examples/system-properties.html" target="_blank">http://maven.apache.org/plugins/maven-surefire-plugin/examples/system-properties.html</a>), it did not work when I tried it. Therefore, I moved back to Ant to run the tests.</p>
<hr/>
<h3>Data Collection</h3>
<h4>EMMA</h4>
<p>The main reason I chose EMMA is because of the ability to dump and reset coverage data without shutting down the application server. EMMA (from version 2.1.5320) provides a tool (ctl) for getting a dump from a server and resetting the data. The ctl tool is accessible from the command line or from Ant. This is useful for running several types of tests where you want to collect coverage data for each separately. Here I use Ant so that it can be platform independent (instead of a .bat or .sh file).</p>
<p>After declaring the emma task (see Appendix), the following is the Ant target to be run from the POM&#8217;s of the test projects:</p>
<p>    &lt;target name=&#8221;emma-server-dump&#8221;&gt;<br />
        &lt;delete file=&#8221;${project.name}/coverage-${server}.ec&#8221; failonerror=&#8221;false&#8221;/&gt;<br />
        &lt;emma&gt;<br />
            &lt;ctl connect=&#8221;${server}:47653&#8243;&gt;<br />
                &lt;command name=&#8221;coverage.get&#8221; args=&#8221;${project.name}/coverage-${server}.ec&#8221; /&gt;<br />
                &lt;command&gt;coverage.reset&lt;/command&gt;<br />
            &lt;/ctl&gt;<br />
        &lt;/emma&gt;<br />
    &lt;/target&gt;</p>
<p>The properties are as follows:</p>
<li>${project.name}: the project where to put the coverage data file</li>
<li>${server}: the server from which to collect coverage data</li>
<h4>Cobertura</h4>
<p>Although Cobertura provides an API (See <a href="http://cobertura.sourceforge.net/faq.html" target="_blank">http://cobertura.sourceforge.net/faq.html</a>) for dumping coverage data from an application running on a server, it must be coded, deployed, and exposed to be triggered yourself. Furthermore, there is no API to reset the data. Therefore, to achieve the same functionality as EMMA, the server must be restarted between different test runs.</p>
<hr/>
<h3>Report Generation</h3>
<p>For both EMMA and Cobertura, it is not possible to specify more than one source directory in the report configuration in Maven. Therefore, generating the report in Maven is only useful for single module Maven projects or for running unit tests where only one source directory is to be considered for the report. Because of this limitation, I reverted to Ant to generate the coverage report for both EMMA and Cobertura.</p>
<h4>EMMA</h4>
<p>The following is a portion of the Ant build file after the emma task has been defined (see Appendix).</p>
<p>    &lt;target name=&#8221;emma-report&#8221;&gt;<br />
        &lt;delete failonerror=&#8221;false&#8221; dir=&#8221;${report.dir}&#8221; /&gt;<br />
        &lt;mkdir dir=&#8221;${report.dir}&#8221; /&gt;<br />
        &lt;emma&gt;<br />
            &lt;report&gt;<br />
                &lt;sourcepath&gt;<br />
                    &lt;dirset dir=&#8221;${top.dir}&#8221;&gt;<br />
                        &lt;include name=&#8221;**/src&#8221; /&gt;<br />
                        &lt;include name=&#8221;**/ejbModule&#8221; /&gt;<br />
                        &lt;include name=&#8221;**/Javasource&#8221; /&gt;<br />
                    &lt;/dirset&gt;<br />
                &lt;/sourcepath&gt;<br />
                &lt;fileset dir=&#8221;${top.dir}&#8221;&gt;<br />
                    &lt;include name=&#8221;${project.dirs}/target/coverage.em&#8221; /&gt;<br />
                    &lt;include name=&#8221;${project.name}/coverage*.ec&#8221; /&gt;<br />
                    &lt;exclude name=&#8221;*Test*/target/coverage.em&#8221; /&gt;<br />
                &lt;/fileset&gt;<br />
                &lt;html outfile=&#8221;${report.dir}/index.html&#8221; /&gt;<br />
            &lt;/report&gt;<br />
        &lt;/emma&gt;<br />
    &lt;/target&gt;</p>
<p>The properties are as follows:</p>
<li>${report.dir}: the directory where the coverage report will be generated</li>
<li>${top.dir}: top project directory when the master pom resides</li>
<li>${project.dirs}: project(s) from where to get instrumentation meta-data (.em). can be a specific name or include wildcard (*)</li>
<li>${project.name}: project(s) from where to get the coverage data (.ec). can be a specific name or include wildcard (*)</li>
<h4>Cobertura</h4>
<p>Because it is not possible to specify more than one source directory in a wildcard, configuring cobertura for reporting is much more annoying. Furthermore, meta-data files and coverage data files (.ser) must be first merged because only one such file can be given for the report.</p>
<p>    &lt;target name=&#8221;merge&#8221;&gt;<br />
        &lt;cobertura-merge datafile=&#8221;${report.dir}/${test.name}.ser&#8221;&gt;<br />
            &lt;fileset dir=&#8221;${top.dir}&#8221;&gt;<br />
                &lt;include name=&#8221;${project1}/target/cobertura/cobertura.ser&#8221; /&gt;<br />
                &lt;exclude name=&#8221;${project2}/target/cobertura/cobertura.ser&#8221; /&gt;<br />
            &lt;/fileset&gt;<br />
        &lt;/cobertura-merge&gt;<br />
    &lt;/target&gt;<br />
    &lt;target name=&#8221;cobertura-report&#8221; depends=&#8221;merge&#8221;&gt;<br />
        &lt;cobertura-report format=&#8221;html&#8221; destdir=&#8221;${report.dir}&#8221; datafile=&#8221;${report.dir}/${test.name}.ser&#8221;&gt;<br />
            &lt;fileset dir=&#8221;${src.dir.1}&#8221;&gt;&lt;include name=&#8221;**/*.java&#8221; /&gt;&lt;/fileset&gt;<br />
            &lt;fileset dir=&#8221;${src.dir.2}&#8221;&gt;&lt;include name=&#8221;**/*.java&#8221; /&gt;&lt;/fileset&gt;<br />
            &lt;fileset dir=&#8221;${src.dir.3}&#8221;&gt;&lt;include name=&#8221;**/*.java&#8221; /&gt;&lt;/fileset&gt;<br />
            &#8230;<br />
        &lt;/cobertura-report&gt;<br />
    &lt;/target&gt;</p>
<p>The &#8220;cobertura-report&#8221; target depends on the &#8220;merge&#8221; target.<br />
The properties are as follows:</p>
<li>${report.dir}: the directory where the coverage report will be generated</li>
<li>${test.name}: the name of the ser file where the (merged) coverage data resides. Must be only one file and merged previously.</li>
<li>${project1}&#8230;${project2}: the project(s) to include/exclude from merge. Can contain wildcards because using Ant fileset.</li>
<li>${src.dir.1}..${src.dir.3}: the source directories specified one at a time.</li>
<hr/>
<h3>Appendix: Declaring EMMA / Cobertura in Ant</h3>
<h4>EMMA</h4>
<p>    &lt;property name=&#8221;emma.home&#8221; value=&#8221;/usr/local/emma&#8221;/&gt;<br />
    &lt;path id=&#8221;emma.lib&#8221;&gt;<br />
        &lt;pathelement location=&#8221;${emma.home}/emma.jar&#8221; /&gt;<br />
        &lt;pathelement location=&#8221;${emma.home}/emma_ant.jar&#8221; /&gt;<br />
    &lt;/path&gt;<br />
    &lt;taskdef resource=&#8221;emma_ant.properties&#8221; classpathref=&#8221;emma.lib&#8221;/&gt;</p>
<h4>Cobertura</h4>
<p>    &lt;property name=&#8221;cobertura.dir&#8221; value=&#8221;/usr/local/cobertura&#8221; /&gt;<br />
    &lt;path id=&#8221;cobertura.classpath&#8221;&gt;<br />
        &lt;fileset dir=&#8221;${cobertura.dir}&#8221;&gt;<br />
            &lt;include name=&#8221;cobertura.jar&#8221; /&gt;<br />
            &lt;include name=&#8221;lib/**/*.jar&#8221; /&gt;<br />
        &lt;/fileset&gt;<br />
    &lt;/path&gt;<br />
    &lt;taskdef classpathref=&#8221;cobertura.classpath&#8221; resource=&#8221;tasks.properties&#8221; /&gt;</p>
]]></content:encoded>
			<wfw:commentRss>http://javapulse.net/2008/09/02/coverage-emma-cobertura-maven/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Latest in Spring from SpringOne: Spring Application Platform</title>
		<link>http://javapulse.net/2008/06/15/latest-in-spring-from-springone-spring-application-platform/</link>
		<comments>http://javapulse.net/2008/06/15/latest-in-spring-from-springone-spring-application-platform/#comments</comments>
		<pubDate>Sun, 15 Jun 2008 17:06:54 +0000</pubDate>
		<dc:creator>Clara Ko</dc:creator>
		
		<category><![CDATA[SpringOne08]]></category>

		<guid isPermaLink="false">http://javapulse.net/2008/06/15/latest-in-spring-from-springone-spring-application-platform/</guid>
		<description><![CDATA[Last week, I attended the SpringOne conference in Antwerp. Rod Johnson started the keynote by pointing out that the number of jobs for &#8220;spring application&#8221; surpassed that for &#8220;ejb&#8221; for the first time in December 2007 according to indeed.com. On this website, you can compare job trends for any number of comma-separated terms. This is [...]]]></description>
			<content:encoded><![CDATA[<p>Last week, I attended the SpringOne conference in Antwerp. Rod Johnson started the keynote by pointing out that the number of jobs for &#8220;spring application&#8221; surpassed that for &#8220;ejb&#8221; for the first time in December 2007 according to <a href="http://www.indeed.com/jobtrends">indeed.com</a>. On this website, you can compare job trends for any number of comma-separated terms. This is statistics for North America only. I wished there was something similar for Europe.</p>
<div style="width:500px">
<a href="http://www.indeed.com/jobtrends?q=spring+application%2Cejb" title="spring application,ejb Job Trends"><br />
<img width="500" height="300" src="http://www.indeed.com/trendgraph/jobgraph.png?q=spring+application%2Cejb" border="0" alt="spring application,ejb Job Trends graph"><br />
</a></p>
<table width="100%" cellpadding="6" cellspacing="0" border="0" style="font-size:80%">
<tr>
<td><a href="http://www.indeed.com/jobtrends?q=spring+application%2Cejb">spring application,ejb Job Trends</a></td>
<td align="right"><a href="http://www.indeed.com/jobs?q=spring+application">spring application jobs</a> - <a href="http://www.indeed.com/jobs?q=ejb">ejb jobs</a></td>
</tr>
</table>
</div>
<p>The new buzz from SpringSource is all about the <a href="http://www.springsource.com/beta/applicationplatform/">Spring Application Platform</a> (S2AP) with built-in OSGi support. Basically, SpringSource is getting into the application server space, but as they have always done, they provide a different way of doing things from the traditional J2EE. S2AP is basically an application server but with OSGi enabled - I&#8217;m still not sure why they don&#8217;t call it an application server.</p>
<p>According to the <a href="http://www.osgi.org">OSGi Alliance</a>, OSGi is the dynamic module system for Java. It &#8220;modularizes&#8221; applications into bundles which can be &#8220;dynamically&#8221; swapped in and out of the runtime environment. I see it as like Maven - but for runtime. The idea is to be able to manage versioning of internal and external bundles (jars) during runtime. By pulling external jars out (from a war or ear file) into a repository, OSGi would massively reduce the size of a deliverable. In the future, I would like to see it with built-in search and automatic download from an online repository. OSGi is in fact a very service-oriented technology. It consists of bundles which contains &#8220;services&#8221; that you can &#8220;publish&#8221; to a &#8220;registry&#8221;. An OSGi-enabled bundle is basically a jar with special information in the manifest that tells what services the bundle exports and what other bundles (and their versions) are dependencies. A bundle would follow a certain lifecyle: where you can install, start, stop, uninstall, and update a bundle in runtime.</p>
<p>In an OSGi environment, a bundle must publish its services and find and bind to other bundles. The plumbing code for doing this is provided by <a href="http://springframework.org/osgi">Spring Dynamic Modules</a>. Spring-DM combines Spring and OSGi. It provides a dynamic service model that makes it easier to write Spring applications for deployment in an OSGi environment.</p>
<p>Although <a href="http://www.infoq.com/news/2008/02/osgi_jee">all of the leading application servers seem to be moving towards OSGi</a>, Spring seems to be the only one that makes it available to developers instead of only for the operations side. I&#8217;m not sure why this is. Maybe someone can let me know.</p>
<p>In conclusion, Spring Application Platform and Spring Dynamic Modules together provide Spring developers the ability to managing versioning in runtime using OSGi. The main idea is to promote faster development by removing the need to redeploy on the application server.</p>
]]></content:encoded>
			<wfw:commentRss>http://javapulse.net/2008/06/15/latest-in-spring-from-springone-spring-application-platform/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Java Test Tools</title>
		<link>http://javapulse.net/2008/05/29/java-test-tools/</link>
		<comments>http://javapulse.net/2008/05/29/java-test-tools/#comments</comments>
		<pubDate>Thu, 29 May 2008 08:44:30 +0000</pubDate>
		<dc:creator>Clara Ko</dc:creator>
		
		<category><![CDATA[testing]]></category>

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

		<guid isPermaLink="false">http://javapulse.net/2008/05/29/web-test-tools/</guid>
		<description><![CDATA[List of JavaTest Tools
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.softwareqatest.com/qatweb1.html">List of JavaTest Tools</a></p>
]]></content:encoded>
			<wfw:commentRss>http://javapulse.net/2008/05/29/java-test-tools/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Selenium - automated functional web testing</title>
		<link>http://javapulse.net/2008/05/27/selenium-automated-functional-web-testing/</link>
		<comments>http://javapulse.net/2008/05/27/selenium-automated-functional-web-testing/#comments</comments>
		<pubDate>Tue, 27 May 2008 13:58:39 +0000</pubDate>
		<dc:creator>Clara Ko</dc:creator>
		
		<category><![CDATA[selenium]]></category>

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

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

		<guid isPermaLink="false">http://javapulse.net/2008/05/27/selenium-automated-functional-web-testing/</guid>
		<description><![CDATA[Last week, I set up automated functional testing for the test team using Selenium. So far, I&#8217;m thoroughly impressed with it.
Selenium comes in several version: IDE, core, remote-control, grid.
First, Selenium IDE is used to create tests and run them during test development. It comes as a Firefox plugin, which means that installation happens in one [...]]]></description>
			<content:encoded><![CDATA[<p>Last week, I set up automated functional testing for the test team using <a href="http://selenium.openqa.org/">Selenium</a>. So far, I&#8217;m thoroughly impressed with it.</p>
<p>Selenium comes in several version: IDE, core, remote-control, grid.</p>
<p>First, Selenium IDE is used to create tests and run them during test development. It comes as a Firefox plugin, which means that installation happens in one click. One of the biggest advantages of Selenium is that the tests are stored in HTML, which is easy to understand and easy to manage even without a lot of technical knowledge, making it perfect for functional testers. In addition to creating tests by recording user interactions, tests can also be manually built up from a large list of <a href="http://release.openqa.org/selenium-core/0.8.2/reference.html">commands</a>, implemented in Javascript. Some of these commands use XPath or DOM for specifying elements within a web page.</p>
<p>If the HTML/Javascript solution is not enough to expression your test scenarios, tests can be written in Java, C#, Perl, PHP, Python, or Ruby. Selenium IDE even converts an HTML script to any of the above languages for you as a starting point. But once code that cannot be converted back to HTML are introduced in the test, the test can no longer be run within the IDE, but must be compiled (if necessary) and run with Selenium RC (see below).</p>
<p>Second, Selenium RC (remote-control) is used for running the tests from the command line and remote from the application server, making it easy to integrate into a nightly build. Since Selenium is Java-based, it can be run in any OS that supports Java. Selenium RC encapsulates Selenium Core, which was the initial product that requires tests to be deployed together with a web app. This means that Selenium core is probably no longer used by itself.</p>
<p>Lastly, Selenium Grid encapsulates several Selenium RC servers and allows the tests to be run in parallel on multiple machines. This is useful to start the tests on several different OS at the same time, driven from one process.</p>
<p>Selenium seems to be perfect for functional testing. It is easy to adopt, but is flexible enough for more complicated test scenarios which can be written in a variety of languages.</p>
<p>Selenium references:</p>
<ul>
<li><a href="http://wiki.openqa.org/display/SIDE/Home">Selenium IDE documentation</a></li>
<li><a href="http://release.openqa.org/selenium-core/0.8.2/reference.html">Selenium command reference</a></li>
<li><a href="http://www.nabble.com/Selenium-f14083.html">Selenium forum</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://javapulse.net/2008/05/27/selenium-automated-functional-web-testing/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Women in IT</title>
		<link>http://javapulse.net/2008/05/26/women-in-it/</link>
		<comments>http://javapulse.net/2008/05/26/women-in-it/#comments</comments>
		<pubDate>Mon, 26 May 2008 19:13:43 +0000</pubDate>
		<dc:creator>Clara Ko</dc:creator>
		
		<category><![CDATA[conference]]></category>

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

		<guid isPermaLink="false">http://javapulse.net/2008/05/26/women-in-it/</guid>
		<description><![CDATA[A couple of months ago Linda van der Pal and I, representing Duchess, gave a talk at FOSDEM 2008 on the issues about women in IT today. Here is the abstract:
TITLE
Duchess, Ladies in Java
link: www.jduchess.org
ABSTRACT
Female programmers are rare. Female Java programmers are even more rare. As female Java programmers ourselves, our interest in this issue [...]]]></description>
			<content:encoded><![CDATA[<p>A couple of months ago Linda van der Pal and I, representing Duchess, gave a talk at FOSDEM 2008 on the issues about women in IT today. Here is the abstract:</p>
<p>TITLE<br />
Duchess, Ladies in Java<br />
link: <a href="http://www.jduchess.org">www.jduchess.org</a></p>
<p>ABSTRACT<br />
Female programmers are rare. Female Java programmers are even more rare. As female Java programmers ourselves, our interest in this issue led us to start Duchess, an organization to support and promote women in the Java industry and hopefully to encourage more to join. Our approach to the shortage of women Java programmers includes making  the problem and<br />
arguments for involving women in IT visible. Why is it good to have more women in the industry?</p>
<p><b>Why are there so few women in IT and why there should be more</b><br />
<i>Communications and Language Skills</i><br />
First, there is the image of IT as only for men because men are better at it. However, according to an article &#8220;Why More Women Should Consider a Career in Computer Programming&#8221;, V. Berba Velasco Jr. (the author) argues that women can contribute a lot to the field because of their intrinsic language and communications skills. People with better language skill produce better code because the code would be more readable. This would in turn lead to lower development and maintenance costs. As Martin Fowler<br />
once said, &#8220;Any fool can write code that a computer can understand.  Good programmers write code that humans can understand.&#8221; A team must understand each other to produce the software together. Furthermore, better language<br />
skills lead to better documentation, which helps the intended audience use the software.</p>
<p><i>Diversity = Productivity</i><br />
A diverse workforce is more productive. Therefore, there should be more women in the IT industry. In a recent article on the NYTimes, Scott E. Page, a professor of complex systems, political science and economics, said that homogeneous organizations get stuck more often, while &#8220;diverse groups of people bring to organizations more and different ways of seeing<br />
a problem and, thus, faster/better ways of solving it.&#8221; In his study, he used mathematical models and case studies to support the claim that diversity = productivity. Men and women complement each other. In a BBC article reporting on Helen Fisher&#8217;s speech at DAVOS, she said that &#8220;Having only men or women on your team would be like hopping on one foot instead of walking.&#8221;</p>
<p><i>Economy</i><br />
A second reason for so few women in IT is related to economy. In some countries, the IT industry suffers from the same issues that lead to the general lack of women in the workforce. In these countries, the lack of affordable childcare and flexible hours in the workplace means that women often stop working completely. The price of childcare outweighs the salary of the woman in the family, so that it is often financially unwise for a woman to return to work after having children. In this case, the women staying home is the optimal economic configuration for the family. But for the economy as a whole, a shortage of labor often impedes economic growth. In these countries, governments and businesses can encourage women to return to the workplace by providing affordable childcare and promoting flexible hours.</p>
<p><i>Stereotypes</i><br />
We realize that some of the things we said about women above are considered stereotypes and of course, not everyone fits in to a stereotype, but the fact is that men and women ARE different. The important thing is to be aware of the stereotypes, so you can see how a person - male or female - fit in.</p>
<p><b>About Duchess?</b><br />
Duchess is an organization of women Java programmers. It provides a platform for women to organize themselves online and offline for real life networking. Our short term goals include arranging technical sessions, study groups, social outings, and discounts for external events and courses. Our long term goals include establishing local branches all over the world and reachout programs in schools and universities.</p>
<p>If you are a female Java programmer, why should you join Duchess?<br />
<i>Network.</i> Extending your network is always good for your career.<br />
<i>Learn.</i> There is a chance to learn from workshops and courses accessed through Duchess.<br />
<i>Share.</i> Share your experiences will deepen your knowledge and support other women in IT. </p>
<p>References:<br />
<a href="http://www.scienceblog.com/cms/does-diversity-increase-productivity-15193.html">http://www.scienceblog.com/cms/does-diversity-increase-productivity-15193.html</a><br />
<a href="http://www.nytimes.com/2008/01/08/science/08conv.html?_r=1&#038;ref=science&#038;oref=slogin">http://www.nytimes.com/2008/01/08/science/08conv.html?_r=1&#038;ref=science&#038;oref=slogin</a><br />
<a href="http://www.streetdirectory.com/travel_guide/10105/women/why_more_women_should_consider_a_career_in_computer_programming.html">http://www.streetdirectory.com/travel_guide/10105/women/why_more_women_should_consider_a_career_in_computer_programming.html</a><br />
<a href="http://www.informit.com/articles/article.aspx?p=360842&#038;seqNum=4">http://www.informit.com/articles/article.aspx?p=360842&#038;seqNum=4</a><br />
<a href="http://www.unescap.org/esid/GAD/Events/EGMICT2001/apctt.ppt">http://www.unescap.org/esid/GAD/Events/EGMICT2001/apctt.ppt</a><br />
<a href="http://www.unu.edu/unupress/unupbooks/uu37we/uu37we0k.htm">http://www.unu.edu/unupress/unupbooks/uu37we/uu37we0k.htm</a><br />
<a href="http://news.bbc.co.uk/2/hi/business/7209353.stm">http://news.bbc.co.uk/2/hi/business/7209353.stm</a></p>
]]></content:encoded>
			<wfw:commentRss>http://javapulse.net/2008/05/26/women-in-it/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Spaced-Based Architecture by GigaSpaces</title>
		<link>http://javapulse.net/2008/04/22/spaced-based-architecture-by-gigaspaces/</link>
		<comments>http://javapulse.net/2008/04/22/spaced-based-architecture-by-gigaspaces/#comments</comments>
		<pubDate>Tue, 22 Apr 2008 15:59:05 +0000</pubDate>
		<dc:creator>Clara Ko</dc:creator>
		
		<category><![CDATA[gigaspaces]]></category>

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

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

		<guid isPermaLink="false">http://javapulse.net/2008/04/22/spaced-based-architecture-by-gigaspaces/</guid>
		<description><![CDATA[Lately, I&#8217;ve been researching Space-based Architecture as provided by Gigaspaces. I am especially interested in this because I believe that scalability will become a more and more prominent issue as applications deal with an increasing amount of data. 
In a service oriented architecture, the services are loosely coupled to each other with the promise of [...]]]></description>
			<content:encoded><![CDATA[<p>Lately, I&#8217;ve been researching Space-based Architecture as provided by Gigaspaces. I am especially interested in this because I believe that scalability will become a more and more prominent issue as applications deal with an increasing amount of data. </p>
<p>In a service oriented architecture, the services are loosely coupled to each other with the promise of reusability and improved performance in a distributed environment. However, while services are usually stateless, a business process (use case) often span more than one service, which communicate via a centralized component: a database or a messaging provider. In a tier-based architecture, problems with scalability may negate any improvements made by the distribution of services. Gigaspaces provides a solution in the form of XAP (eXtreme Application Platform), an application server built to enable linear scalability. Linear scalability means a one-to-one ratio between machines added to the deployment and the performance gained, making scaling predictable in costs and effort.</p>
<p>GigaSpaces argues that tier-based architecture is the nemesis to linear scalability. In fact, the architecture itself is the bottleneck, not unoptimized component. This is because in a tier-based architecture, as scability patches are introduced, the communication between the tiers become more complicated and expensive. The complex interaction between tiers and between physical machines in the deployment cause problems with latency and data consistency. Possible problems with tier-based architecture are bottlenecked access to the database, bottlenecked access to a centralized messaging provider, messaging overhead, network latency, inefficient clustering, and unreliable failover recovery. GigaSpaces addresses each of those problems by providing a platform that enables space-based architecture. </p>
<p>The whitepaper, &#8220;Scaling Spring Applications in 4 Easy Steps&#8221;, introduces a four-step approach to achieve the implementation of a space-based architecture.</p>
<p>1) Virtualizing Data<br />
In the first step, virtualizing the database using the IMDG (In-Memory Data Grid) reduces I/O latency to the database. The IMDG (In-Memory Data Grid) provides consistency, availability, and reliability of application state and can be made as reliable as needed - from keeping in memory for fast access, to asynchonous batch writing to database, to direct write/read. It is not only more efficient, but more reliable than a database, by providing failover recovery and memory usage monitor to prevent memory crashes, which helps in tracing memory problems. Although virtualizing the database reduces I/O latency, the need for each tier to access a centralized messaging provider and the need for two-phased commit of distributed transactions when using a centralized transaction manager are still bottlenecks in the system.</p>
<p>2) Virtualizing Messaging<br />
In the second step, virtualized messaging is achieved by creating a data bus to consolidate messaging and data in the same place. The data bus is implemented in the IMDG as a JMS façade acting as the messaging provider. This requires minimal changes to applications using the JMS API. Data affinity, or colocating related data, removes the need for a distributed transaction manager.</p>
<p>3) Virtualizing Application<br />
The third step towards a space-based architecture is to create self-sufficient processing units by packaging the business logic together with the data and messaging middleware. In practice, this means putting all the services required for an entire business process in one processing unit. Because each processing unit is self-sufficient, requiring no external component access, packaging business logic, messaging, and data together enables linear scaling and minimal latency. XAP takes care of content-based routing and automatic detection of service availability to enable dynamic scaling. Within a processing unit, the business logic is hooked into the messaging and data middleware with the &#8220;polling container&#8221;, which allows the business logic to be notified of changes with the messaging/data space.</p>
<p>4) Virtualizing Deployment<br />
The fourth and final step is virtualizing deployment using the OpenSpaces Deployment Framework, which provides the administrator an overview of the entire deployment scope. The OpenSpaces Deployment Framework uses a SLA(Service Level Agreement)-driven container to dynamically scale up (or down) application resources bundled in processing units and to adhere to the service-level agreements by automatically detecting and recovering from failures. </p>
<p>The above four steps effectively transitions an existing application to a space-based architecture. The beauty of it is that using GigaSpaces&#8217; XAP is completely transparent to all concerned - to the designer, developer, administrator, and client. An application deployed in XAP acts as one single server.</p>
<p>References:</p>
<li>GigaSpaces White Paper: <a target="_blank" href="http://gigaspaces.com/files/main/white_papers/FromDeadEndToOpenRoad.pdf">The Scalability Revolution - From Dead End to Open Road</a></li>
<li>GigaSpaces White Paper: <a target="_blank" href="http://gigaspaces.com/files/main/white_papers/The_End_of_Tier.pdf">Space-Based Architecture and the End of Tier-based Computing</a></li>
<li>GigaSpaces White Paper: <a target="_blank" href="http://gigaspaces.com/files/main/white_papers/ScalingSpringApplications.pdf">Scaling Spring Applications in 4 Steps</a></li>
<li><a target="_blank" href="http://www.theserverside.com/tt/knowledgecenter-gs/knowledgecenter-gs.tss?l=ProcessingUnitsandSpring">Scability with GigaSpaces&#8217; Processing Units and Spring</a></li>
<li><a target="_blank" href="http://en.wikipedia.org/wiki/Space-based_architecture">Spaced-Based Architecture - Wikipedia</a></li>
]]></content:encoded>
			<wfw:commentRss>http://javapulse.net/2008/04/22/spaced-based-architecture-by-gigaspaces/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Duchess Site Launched</title>
		<link>http://javapulse.net/2008/03/12/duchess-site-launched/</link>
		<comments>http://javapulse.net/2008/03/12/duchess-site-launched/#comments</comments>
		<pubDate>Wed, 12 Mar 2008 15:55:31 +0000</pubDate>
		<dc:creator>Clara Ko</dc:creator>
		
		<category><![CDATA[java]]></category>

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

		<guid isPermaLink="false">http://javapulse.net/2008/03/12/duchess-site-launched/</guid>
		<description><![CDATA[Duchess has finally launched a brand-new website.
See http://jduchess.org/.
Female Java programmers are welcome to join. As soon as moment there is a critical mass in your area, it&#8217;ll be possible to organize local events and activities.
Also, come to our launch party if you&#8217;re near Amsterdam.
]]></description>
			<content:encoded><![CDATA[<p>Duchess has finally launched a brand-new website.</p>
<p>See <a href="http://jduchess.org/" target="Duchess">http://jduchess.org/</a>.</p>
<p>Female Java programmers are welcome to join. As soon as moment there is a critical mass in your area, it&#8217;ll be possible to organize local events and activities.</p>
<p>Also, come to our <a href="http://jduchess.org/events/duchess-site-launch-party" target="Duchess">launch party</a> if you&#8217;re near Amsterdam.</p>
]]></content:encoded>
			<wfw:commentRss>http://javapulse.net/2008/03/12/duchess-site-launched/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
