<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
		>
<channel>
	<title>Comments for Hanumant's Java Workshop</title>
	<atom:link href="http://javaworkshop.wordpress.com/comments/feed/" rel="self" type="application/rss+xml" />
	<link>http://javaworkshop.wordpress.com</link>
	<description>Turbo Charged Java Development!</description>
	<lastBuildDate>Tue, 20 Oct 2009 19:36:15 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>Comment on Creating an RPM for a Java Application by Sergey</title>
		<link>http://javaworkshop.wordpress.com/2008/10/22/rolling-up-an-rpm-for-a-java-application/#comment-18</link>
		<dc:creator>Sergey</dc:creator>
		<pubDate>Tue, 20 Oct 2009 19:36:15 +0000</pubDate>
		<guid isPermaLink="false">http://javaworkshop.wordpress.com/?p=20#comment-18</guid>
		<description>Step 2: The .rpmmacro file
should be
Step 2: The .rpmmacros file</description>
		<content:encoded><![CDATA[<p>Step 2: The .rpmmacro file<br />
should be<br />
Step 2: The .rpmmacros file</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Creating an RPM for a Java Application by Lucas</title>
		<link>http://javaworkshop.wordpress.com/2008/10/22/rolling-up-an-rpm-for-a-java-application/#comment-14</link>
		<dc:creator>Lucas</dc:creator>
		<pubDate>Sun, 24 May 2009 15:58:57 +0000</pubDate>
		<guid isPermaLink="false">http://javaworkshop.wordpress.com/?p=20#comment-14</guid>
		<description>Great stuff. I had same doubts and your article makes things easy.

Thanks,

Lucas</description>
		<content:encoded><![CDATA[<p>Great stuff. I had same doubts and your article makes things easy.</p>
<p>Thanks,</p>
<p>Lucas</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Creating an RPM for a Java Application by Daniel Dario Morales Salas</title>
		<link>http://javaworkshop.wordpress.com/2008/10/22/rolling-up-an-rpm-for-a-java-application/#comment-11</link>
		<dc:creator>Daniel Dario Morales Salas</dc:creator>
		<pubDate>Tue, 27 Jan 2009 04:06:49 +0000</pubDate>
		<guid isPermaLink="false">http://javaworkshop.wordpress.com/?p=20#comment-11</guid>
		<description>Hi. I was following this post to make an RPM from binaries of Gantt Project but with no luck. I&#039;m using opensuse 11.1 and this tutorial speaks of using .rpmmacro but for some reason that doesn&#039;t work with opensuse :(

SO, i&#039;m mixing your tutorial with the reality of opensuse (using /usr/src/packages/ instead of ~/rpm and copying ganttproject-2.0.9 binaries folder direct to /usr/src/packages/SOURCES) but the main problem i have is that when i type &quot;rpmbuild -bb /usr/src/packages/SPECS/ganttproject.spec&quot; all i have is File not found listing ALL the files from %file from spec file.

If i see the /tmp directory i can see all the files of ganttproject in that root directory (/tmp/ganttproject_files) so obviously i&#039;m doing something wrong.

This is the spec file i&#039;m using:
http://pastebin.com/f1187a291

This is the output i get:
http://pastebin.com/f15b4369a

Can you help me please ??

Thanks !!!</description>
		<content:encoded><![CDATA[<p>Hi. I was following this post to make an RPM from binaries of Gantt Project but with no luck. I&#8217;m using opensuse 11.1 and this tutorial speaks of using .rpmmacro but for some reason that doesn&#8217;t work with opensuse <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
<p>SO, i&#8217;m mixing your tutorial with the reality of opensuse (using /usr/src/packages/ instead of ~/rpm and copying ganttproject-2.0.9 binaries folder direct to /usr/src/packages/SOURCES) but the main problem i have is that when i type &#8220;rpmbuild -bb /usr/src/packages/SPECS/ganttproject.spec&#8221; all i have is File not found listing ALL the files from %file from spec file.</p>
<p>If i see the /tmp directory i can see all the files of ganttproject in that root directory (/tmp/ganttproject_files) so obviously i&#8217;m doing something wrong.</p>
<p>This is the spec file i&#8217;m using:<br />
<a href="http://pastebin.com/f1187a291" rel="nofollow">http://pastebin.com/f1187a291</a></p>
<p>This is the output i get:<br />
<a href="http://pastebin.com/f15b4369a" rel="nofollow">http://pastebin.com/f15b4369a</a></p>
<p>Can you help me please ??</p>
<p>Thanks !!!</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Terracotta and GridGain comparison&#8230; by Dmitriy Setrakyan</title>
		<link>http://javaworkshop.wordpress.com/2007/10/01/terracotta-and-gridgain-comparison/#comment-6</link>
		<dc:creator>Dmitriy Setrakyan</dc:creator>
		<pubDate>Tue, 02 Oct 2007 22:55:49 +0000</pubDate>
		<guid isPermaLink="false">http://javaworkshop.wordpress.com/2007/10/01/terracotta-and-gridgain-comparison/#comment-6</guid>
		<description>Hi Hanumant,

&lt;blockquote&gt;I will try to modify it such that we can see how coordination can be achieved on GridGain. Any suggestions would be welcome!&lt;/blockquote&gt;
In GridGain there is a concept of split - a task gets split into multiple jobs for parallel execution. If you need to have synchronization between multiple jobs within the same task, you should use Distributed Grid Task Session. Session object is simply injected into GridTask or GridJob and you are able to set, get, or wait for any attribute/event either synchronously or asynchronously.

Hope this helps.

Best,
Dmitriy Setrakyan
&lt;a href=&quot;http://www.gridgain.com&quot; rel=&quot;nofollow&quot;&gt;GridGain - Grid Computing Made Simple&lt;/a&gt;</description>
		<content:encoded><![CDATA[<p>Hi Hanumant,</p>
<blockquote><p>I will try to modify it such that we can see how coordination can be achieved on GridGain. Any suggestions would be welcome!</p></blockquote>
<p>In GridGain there is a concept of split &#8211; a task gets split into multiple jobs for parallel execution. If you need to have synchronization between multiple jobs within the same task, you should use Distributed Grid Task Session. Session object is simply injected into GridTask or GridJob and you are able to set, get, or wait for any attribute/event either synchronously or asynchronously.</p>
<p>Hope this helps.</p>
<p>Best,<br />
Dmitriy Setrakyan<br />
<a href="http://www.gridgain.com" rel="nofollow">GridGain &#8211; Grid Computing Made Simple</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Off my mark with GridGain&#8230; by Hanumant Deshmukh</title>
		<link>http://javaworkshop.wordpress.com/2007/10/01/12/#comment-5</link>
		<dc:creator>Hanumant Deshmukh</dc:creator>
		<pubDate>Tue, 02 Oct 2007 09:28:06 +0000</pubDate>
		<guid isPermaLink="false">http://javaworkshop.wordpress.com/2007/10/01/12/#comment-5</guid>
		<description>Hi Dmitriy, Thanks for your comments.

&gt;&gt;In your Terracotta example you started one producer and one consumer. So one node was producing jobs in one thread and another node was consuming jobs also in one thread. So you simply were not able to control how many consumers or producers you could have, and, hence, didn’t ask this question then.

I don&#039;t think that is correct. I was able to control the number of producers or consumers by starting either a producer or a consumer on another node (see the main method). So I could have 1 producer and 2 consumers. 

It looks like I can&#039;t do so in GridGain without changing the code. I can add more grid nodes but since I have 1 Producer and 1 Consumer, it doesn&#039;t matter how many nodes I have, the Job instances will still be processed sequentially by that Consumer. While Job.run() may be executed on another node, and the main node and all other nodes are idling. So basically, I will have to know before hand how many nodes do I have and accordingly start the number of Consumers.

Please let me know if that is not so.</description>
		<content:encoded><![CDATA[<p>Hi Dmitriy, Thanks for your comments.</p>
<p>&gt;&gt;In your Terracotta example you started one producer and one consumer. So one node was producing jobs in one thread and another node was consuming jobs also in one thread. So you simply were not able to control how many consumers or producers you could have, and, hence, didn’t ask this question then.</p>
<p>I don&#8217;t think that is correct. I was able to control the number of producers or consumers by starting either a producer or a consumer on another node (see the main method). So I could have 1 producer and 2 consumers. </p>
<p>It looks like I can&#8217;t do so in GridGain without changing the code. I can add more grid nodes but since I have 1 Producer and 1 Consumer, it doesn&#8217;t matter how many nodes I have, the Job instances will still be processed sequentially by that Consumer. While Job.run() may be executed on another node, and the main node and all other nodes are idling. So basically, I will have to know before hand how many nodes do I have and accordingly start the number of Consumers.</p>
<p>Please let me know if that is not so.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Off my mark with GridGain&#8230; by Dmitriy Setrakyan</title>
		<link>http://javaworkshop.wordpress.com/2007/10/01/12/#comment-4</link>
		<dc:creator>Dmitriy Setrakyan</dc:creator>
		<pubDate>Mon, 01 Oct 2007 16:51:31 +0000</pubDate>
		<guid isPermaLink="false">http://javaworkshop.wordpress.com/2007/10/01/12/#comment-4</guid>
		<description>Hi Hanumant,

&lt;blockquote&gt;What happens when a Consumer picks up a Job from Jobs and calls job.run().&lt;/blockquote&gt;
The behavior of grid-enabled methods is just as it would be local – the method has to behave identically with or without grid. In your code, consumer synchronously waits for job completion and that’s exactly what happens after grid-enabling. What you are suggesting is that you want your consumer to wait asynchronously - but for that you have to update your own logic. The advantage of remote execution is that with addition of remote nodes you can afford to have many more consumers running locally in parallel.

&lt;blockquote&gt;How many Consumers should I start from Main?&lt;/blockquote&gt;
In your Terracotta example you started one producer and one consumer. So one node was producing jobs in one thread and another node was consuming jobs also in one thread. So you simply were not able to control how many consumers or producers you could have, and, hence, didn&#039;t ask this question then :)

The answer to your question is that every application is different. If you see that application is under-performing, then start another node to help out. If you see that application is idling, then either start more consumers or remove nodes to get better CPU utilization.

One of the big differences you didn&#039;t mention is that with GridGain your remote nodes did not require any extra Jars or configuration - all your code was peer-loaded automatically onto remote nodes for execution. Just imagine what kind of time-saver it is during development.

Best,
Dmitriy Setrakyan
&lt;a&gt;GridGain - Grid Computing Made Simple&lt;/a&gt;</description>
		<content:encoded><![CDATA[<p>Hi Hanumant,</p>
<blockquote><p>What happens when a Consumer picks up a Job from Jobs and calls job.run().</p></blockquote>
<p>The behavior of grid-enabled methods is just as it would be local – the method has to behave identically with or without grid. In your code, consumer synchronously waits for job completion and that’s exactly what happens after grid-enabling. What you are suggesting is that you want your consumer to wait asynchronously &#8211; but for that you have to update your own logic. The advantage of remote execution is that with addition of remote nodes you can afford to have many more consumers running locally in parallel.</p>
<blockquote><p>How many Consumers should I start from Main?</p></blockquote>
<p>In your Terracotta example you started one producer and one consumer. So one node was producing jobs in one thread and another node was consuming jobs also in one thread. So you simply were not able to control how many consumers or producers you could have, and, hence, didn&#8217;t ask this question then <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>The answer to your question is that every application is different. If you see that application is under-performing, then start another node to help out. If you see that application is idling, then either start more consumers or remove nodes to get better CPU utilization.</p>
<p>One of the big differences you didn&#8217;t mention is that with GridGain your remote nodes did not require any extra Jars or configuration &#8211; all your code was peer-loaded automatically onto remote nodes for execution. Just imagine what kind of time-saver it is during development.</p>
<p>Best,<br />
Dmitriy Setrakyan<br />
<a>GridGain &#8211; Grid Computing Made Simple</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Working with GridGain by Dmitriy Setrakyan</title>
		<link>http://javaworkshop.wordpress.com/2007/09/27/working-with-gridgain/#comment-3</link>
		<dc:creator>Dmitriy Setrakyan</dc:creator>
		<pubDate>Thu, 27 Sep 2007 22:34:35 +0000</pubDate>
		<guid isPermaLink="false">http://javaworkshop.wordpress.com/2007/09/27/working-with-gridgain/#comment-3</guid>
		<description>Hi,

Nothing could be further from the truth. For simply taking a code and running it with GridGain (just like Terracotta), you don&#039;t have to write any code (GridTasks are useful when you want to split your logic into smaller pieces to achieve even higher level of parallelism).

Here are the steps you need to do in order to grid-enable your producer-consumer application described &lt;a&gt;here&lt;/a&gt;.

1.  Make Job implement &lt;b&gt;java.io.Serializable&lt;/b&gt;

2.  Attach &lt;b&gt;@Gridify&lt;/b&gt; annotation to &lt;b&gt;Job.run()&lt;/b&gt; method:
{code}
/**
 * The body of the class is directly copied from your example.
 */
public class Job implements Serializable {
    int jobduration = (int) (Math.random()*5000);

    /**
     * This method is grid-enabled by a virtue of attaching @Gridify annotation. The body of the method is directly copied from your example.
     */
    @Gridify
    public void run(){
        try {
            Thread.sleep(jobduration);

            System.out.println(&quot;Job finished in &quot; + jobduration + &quot; millis.&quot;);
        }
        catch (InterruptedException ex) {
            ex.printStackTrace();
        }
    }
}
{code}
3.  That’s it. Here is what your Main would look like:
{code}
public class Main {
    public static void main(String[] args) throws Exception          {
        // Start grid.
        GridFactory.start();

        try {
            Jobs jobs = new Jobs();

            new Producer(jobs).start();
            new Consumer(jobs).start();
            new Consumer(jobs).start();

            Thread.sleep(Long.MAX_VALUE);
        }
        finally {
            // Stop grid.
            GridFactory.stop(true);
        }
    }
}
{code}

4. Now you can run your Main directly from IDE of your choice. Note that there is no extra configuration required. If you start remote GridGain node (just double-click on gridgain.bat script) then your jobs will be executed on that node without any (re)deployment steps - the classes will be peer-loaded automatically.

Best,
Dmitriy Setrakyan
&lt;a href=&quot;http://www.gridgain.com&quot; rel=&quot;nofollow&quot;&gt;GridGain - Grid Computing Made Simple&lt;/a&gt;</description>
		<content:encoded><![CDATA[<p>Hi,</p>
<p>Nothing could be further from the truth. For simply taking a code and running it with GridGain (just like Terracotta), you don&#8217;t have to write any code (GridTasks are useful when you want to split your logic into smaller pieces to achieve even higher level of parallelism).</p>
<p>Here are the steps you need to do in order to grid-enable your producer-consumer application described <a>here</a>.</p>
<p>1.  Make Job implement <b>java.io.Serializable</b></p>
<p>2.  Attach <b>@Gridify</b> annotation to <b>Job.run()</b> method:<br />
{code}<br />
/**<br />
 * The body of the class is directly copied from your example.<br />
 */<br />
public class Job implements Serializable {<br />
    int jobduration = (int) (Math.random()*5000);</p>
<p>    /**<br />
     * This method is grid-enabled by a virtue of attaching @Gridify annotation. The body of the method is directly copied from your example.<br />
     */<br />
    @Gridify<br />
    public void run(){<br />
        try {<br />
            Thread.sleep(jobduration);</p>
<p>            System.out.println(&#8220;Job finished in &#8221; + jobduration + &#8221; millis.&#8221;);<br />
        }<br />
        catch (InterruptedException ex) {<br />
            ex.printStackTrace();<br />
        }<br />
    }<br />
}<br />
{code}<br />
3.  That’s it. Here is what your Main would look like:<br />
{code}<br />
public class Main {<br />
    public static void main(String[] args) throws Exception          {<br />
        // Start grid.<br />
        GridFactory.start();</p>
<p>        try {<br />
            Jobs jobs = new Jobs();</p>
<p>            new Producer(jobs).start();<br />
            new Consumer(jobs).start();<br />
            new Consumer(jobs).start();</p>
<p>            Thread.sleep(Long.MAX_VALUE);<br />
        }<br />
        finally {<br />
            // Stop grid.<br />
            GridFactory.stop(true);<br />
        }<br />
    }<br />
}<br />
{code}</p>
<p>4. Now you can run your Main directly from IDE of your choice. Note that there is no extra configuration required. If you start remote GridGain node (just double-click on gridgain.bat script) then your jobs will be executed on that node without any (re)deployment steps &#8211; the classes will be peer-loaded automatically.</p>
<p>Best,<br />
Dmitriy Setrakyan<br />
<a href="http://www.gridgain.com" rel="nofollow">GridGain &#8211; Grid Computing Made Simple</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Working with Terracotta by Dmitriy Setrakyan</title>
		<link>http://javaworkshop.wordpress.com/2007/09/26/working-with-terracotta/#comment-2</link>
		<dc:creator>Dmitriy Setrakyan</dc:creator>
		<pubDate>Wed, 26 Sep 2007 07:43:57 +0000</pubDate>
		<guid isPermaLink="false">http://javaworkshop.wordpress.com/2007/09/26/working-with-terracotta/#comment-2</guid>
		<description>Hi,

Looking forward to your GridGain analysis :)

I think GridGain benefits will shine not only when you have to execute something on remote node, but also when you need to split a bigger task into smaller subtasks.

Also GridGain&#039;s peer-class-loading will come very convenient during development - there is no deployment or extra configuration of remote nodes.

Best,
Dmitriy Setrakyan
GridGain - Grid Computing Made Simple</description>
		<content:encoded><![CDATA[<p>Hi,</p>
<p>Looking forward to your GridGain analysis <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>I think GridGain benefits will shine not only when you have to execute something on remote node, but also when you need to split a bigger task into smaller subtasks.</p>
<p>Also GridGain&#8217;s peer-class-loading will come very convenient during development &#8211; there is no deployment or extra configuration of remote nodes.</p>
<p>Best,<br />
Dmitriy Setrakyan<br />
GridGain &#8211; Grid Computing Made Simple</p>
]]></content:encoded>
	</item>
</channel>
</rss>
