<?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"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>one more day is over  @ ceylan&#039;s office &#187; eclipse</title>
	<atom:link href="http://blog.batoo.org/?cat=4&#038;feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://blog.batoo.org</link>
	<description>Coding, not a profession but a joy...</description>
	<lastBuildDate>Fri, 28 May 2010 23:13:50 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Hibernate Dynamic &#8220;import.sql&#8221;</title>
		<link>http://blog.batoo.org/?p=208</link>
		<comments>http://blog.batoo.org/?p=208#comments</comments>
		<pubDate>Fri, 28 May 2010 00:59:16 +0000</pubDate>
		<dc:creator>Hasan Ceylan</dc:creator>
				<category><![CDATA[eclipse]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[solved]]></category>
		<category><![CDATA[web sites]]></category>
		<category><![CDATA[emf]]></category>
		<category><![CDATA[hibernate]]></category>
		<category><![CDATA[teneo]]></category>
		<category><![CDATA[texo]]></category>

		<guid isPermaLink="false">http://blog.batoo.org/?p=208</guid>
		<description><![CDATA[
			
				
			
		
Hello,
I felt the need to generate a dynamic import sql for a project that was based on hibernate.
The task proved to be a bit more advanced then a trivial thing. So here I share the way I hacked it to convince hibernate to use an import script generated on the fly.
Requirement, the project I am [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.batoo.org%2F%3Fp%3D208"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.batoo.org%2F%3Fp%3D208&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>Hello,</p>
<p>I felt the need to generate a dynamic import sql for a project that was based on hibernate.</p>
<p>The task proved to be a bit more advanced then a trivial thing. So here I share the way I hacked it to convince hibernate to use an import script generated on the fly.</p>
<p><em>Requirement, </em>the project I am currently working on is a &#8220;service provision application&#8221;  which designates the application instances by the domain requests are destined to. The application therefore requires to fill the db in with some <em>generated</em> data as it kicks off for the first time. The solution is also handy any scenario that needs to alter import.sql based on some conditions.</p>
<p>First thing is to create a manager class to undertake the task. In my instance it was a <em>spring</em> based application therefore I needed to extend <em>LocalSessionFactoryBean </em>provided by<em> spring.</em> If you need to create a standalone / adhoc hibernate container you may embed the necessary code to your session factory class or so called <em>HibernateUtil</em> class.</p>
<p>Since we will be using our own <em>SchemaExport</em>, we must block <em>hibernate.hbm2ddl.auto</em> somehow in the properties file and set it to none. In my case since I was using spring, I just put hardcoded <em>hibernate.hbm2ddl.auto</em> <em>= none </em>in my <em>applicationContext.xml </em>file<em>.</em></p>
<p>Then comes the generation of the sql on the fly. My sql was not a huge file therefore I chose to regenerate it with a <em>FileStream</em> accessed via <em>BufferedReader</em> and appended the altered SQL lines to my <em>StringBuffer</em>.</p>
<p>The next thing is to create a <em>SchemaExport </em>and set the importSQL. Here hibernate implementation wierdly only allows classpath relative import.sql references and removes the leading &#8220;/&#8221; which makes it impossible to refer a generated file residing somewhere in the file system (err, in the tmp path of the application server, runtime or OS, to be a good boy). What we do here is to replace the thread&#8217;s classloader with a fake classloader. We feed in a fake name for the import script and as we see the fake name back in the classloader requested as a stream via <em>getResourceAsStream</em>, we just return an input stream that reads whatever (or wherever) we prepared the sql.</p>
<p>By issuing a create request to <em>SchemExport</em>,  we are done. And we cleanup by restoring the original classloader of the thread we are executing on.</p>
<p>Below is the code that I used. By modifying as required, it should be good to use in stand alone / ad hoc / <a href="http://wiki.eclipse.org/Teneo" target="_blank">Teneo</a> driven, etc environments. By the way, for those that are not aware of <a href="http://www.eclipse.org/modeling/emf/" target="_blank">Eclipse EMF</a> and <a href="http://wiki.eclipse.org/Teneo" target="_blank">Eclipse Teneo</a>,  with the new sister project <a href="http://wiki.eclipse.org/Texo" target="_blank">Texo</a>, I highly recommend you get your hands on EMF and Teneo, I am sure you will love it.</p>
<pre>package com.example.session;

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import org.hibernate.HibernateException;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.hibernate.util.ConfigHelper;
import org.springframework.orm.hibernate3.LocalSessionFactoryBean;

public class ExampleSessionFactory extends LocalSessionFactoryBean {

	private static final String	FAKE_SCRIPT	= "__auto_generated_import.sql__";	//$NON-NLS-1$
	private StringBuffer		sql;

	/*
	 * (non-Javadoc)
	 *
	 * @see org.springframework.orm.hibernate3.LocalSessionFactoryBean#newSessionFactory(org.hibernate.cfg.Configuration)
	 */
	@Override
	protected SessionFactory newSessionFactory(Configuration config)
		throws HibernateException {
		final SessionFactory sessionFactory = config.buildSessionFactory();

		final String httpPort = CommonUtils.getHTTPPort();

		if ( this.schemaInitRequired(sessionFactory) ) {
			this.prepareSchema(config, httpPort);
		}

		return sessionFactory;
	}

	private void prepareSchema(Configuration config, final String httpPort) {
		try {
			final InputStream is = ConfigHelper.getResourceAsStream("/import.sql"); //$NON-NLS-1$
			final InputStreamReader importFileReader = new InputStreamReader(is);

			this.sql = new StringBuffer();

			this.logger.info("Preparing import script..."); //$NON-NLS-1$
			final BufferedReader reader = new BufferedReader(importFileReader);
			for ( String raw = reader.readLine(); raw != null; raw = reader.readLine() ) {
				final String replaced1 = raw.replaceAll("%host%", InetAddress.getLocalHost().getHostName()); //$NON-NLS-1$
				final String replaced2 = replaced1.replaceAll("%port%", httpPort); //$NON-NLS-1$
				this.sql.append(replaced2);
				this.sql.append("\n"); //$NON-NLS-1$
			}

			final ClassLoader oldClassLoader = Thread.currentThread().getContextClassLoader();
			this.swapClassLoader(oldClassLoader);

			try {
				final SchemaExport export = new SchemaExport(config);
				export.setImportFile(ExampleSessionFactory.FAKE_SCRIPT);
				export.create(false, true);
			}
			finally {
				Thread.currentThread().setContextClassLoader(oldClassLoader);
			}
		}
		catch ( final Exception e ) {
			this.logger.fatal("Error while initializing database", e);
		}
	}

	private boolean schemaInitRequired(SessionFactory factory) {
		final Session session = factory.openSession();
		try {
			final Connection connection = session.connection();

			try {
				final Statement statement = connection.createStatement();
				try {
					final ResultSet resultSet = statement.executeQuery("SELECT * from APPLICATION");
					try {
						return ( !resultSet.next() );
					}
					finally {
						resultSet.close();
					}
				}
				finally {
					statement.close();
				}
			}
			catch ( final SQLException e ) {
				return true;
			}
		}
		finally {
			session.close();
		}
	}

	/**
	 * Swapping with a *fake* class loader to trick hibernate
	 *
	 * @param oldClassLoader
	 */
	private void swapClassLoader(ClassLoader oldClassLoader) {
		Thread.currentThread().setContextClassLoader(new ClassLoader() {

			@Override
			public InputStream getResourceAsStream(String name) {
				if ( ExampleSessionFactory.FAKE_SCRIPT.equals(name) ) {
					return new ByteArrayInputStream(ExampleSessionFactory.this.sql.toString().getBytes());
				}

				return super.getResourceAsStream(name);
			}
		});
	}
}</pre>
<p>Enjoy your dynamic import.sql&#8230;</p>
<img src="http://blog.batoo.org/?ak_action=api_record_view&id=208&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.batoo.org/?feed=rss2&amp;p=208</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Logging with Log4J When Using maven-tomcat-plugin</title>
		<link>http://blog.batoo.org/?p=200</link>
		<comments>http://blog.batoo.org/?p=200#comments</comments>
		<pubDate>Mon, 03 May 2010 05:47:55 +0000</pubDate>
		<dc:creator>Hasan Ceylan</dc:creator>
				<category><![CDATA[bugs]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[solved]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[tomcat]]></category>

		<guid isPermaLink="false">http://blog.batoo.org/?p=200</guid>
		<description><![CDATA[
			
				
			
		
As you are reading this post, probably

You do web application development
You use maven as your your build system
You like to debug your application right from eclipse (preferably  also using Maven Eclipse Integration )

But,

you HATE the standard java logging and anything else &#8211; commons-logging, log4j, slf4j &#8211; will do it for you.

Here&#8217;s what you should do&#8230;
&#60;build&#62;
...
&#60;plugins&#62;
...
 [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.batoo.org%2F%3Fp%3D200"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.batoo.org%2F%3Fp%3D200&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>As you are reading this post, probably</p>
<ul>
<li>You do web application development</li>
<li>You use maven as your your build system</li>
<li>You like to debug your application right from eclipse (preferably  also using <a href="http://m2eclipse.sonatype.org/" target="_blank">Maven Eclipse Integration</a> )</li>
</ul>
<p>But,</p>
<ul>
<li>you HATE the standard java logging and anything else &#8211; commons-logging, log4j, slf4j &#8211; will do it for you.</li>
</ul>
<p>Here&#8217;s what you should do&#8230;</p>
<pre>&lt;build&gt;</pre>
<pre>...</pre>
<pre>&lt;plugins&gt;</pre>
<pre>...</pre>
<pre>  &lt;plugin&gt;
    &lt;groupId&gt;org.codehaus.mojo&lt;/groupId&gt;
    &lt;artifactId&gt;tomcat-maven-plugin&lt;/artifactId&gt;
    &lt;version&gt;1.0-beta-1-hc&lt;/version&gt;
    &lt;configuration&gt;
      &lt;systemProperties&gt;
        &lt;java.util.logging.manager&gt;org.apache.juli.ClassLoaderLogManager&lt;/java.util.logging.manager&gt;
        &lt;log4j.configuration&gt;file://${basedir}/src/main/webapp/WEB-INF/log4j.xml&lt;/log4j.configuration&gt;
      &lt;/systemProperties&gt;
    &lt;/configuration&gt;
    &lt;dependencies&gt;
      &lt;dependency&gt;
        &lt;groupId&gt;org.apache.tomcat&lt;/groupId&gt;
        &lt;artifactId&gt;juli&lt;/artifactId&gt;
        &lt;classifier&gt;log4j&lt;/classifier&gt;
        &lt;version&gt;6.0.26&lt;/version&gt;
      &lt;/dependency&gt;
      &lt;dependency&gt;
        &lt;groupId&gt;org.apache.tomcat&lt;/groupId&gt;
        &lt;artifactId&gt;juli-adapters&lt;/artifactId&gt;
        &lt;version&gt;6.0.26&lt;/version&gt;
      &lt;/dependency&gt;
      &lt;dependency&gt;
        &lt;groupId&gt;log4j&lt;/groupId&gt;
        &lt;artifactId&gt;log4j&lt;/artifactId&gt;
        &lt;version&gt;1.2.13&lt;/version&gt;
      &lt;/dependency&gt;
     &lt;/dependencies&gt;
   &lt;/plugin&gt;</pre>
<pre>...</pre>
<pre>  &lt;/plugins&gt;</pre>
<pre>...</pre>
<pre>&lt;/build&gt;
</pre>
<p>Now, there needs to be done couple of things</p>
<ul>
<li>juli-6.0.26-log4j is not published by tomcat project. you need to obtain <a href="http://tomcat.apache.org/tomcat-6.0-doc/logging.html#log4j" target="_blank">tomcat juli log4j</a> and install / deploy it to your local / company repository.</li>
<li>maven-tomcat-plugin <a href="http://jira.codehaus.org/browse/MTOMCAT-53" target="_blank">has a bug</a> that it sets the <em>systemproperties </em>just too late. you should either build and deploy an interim version of the plugin or check it out from the trunk and stick to the SNAPSHOT version until the plugin releases a new version.</li>
</ul>
<p>For the second issue I emailed the author of the plugin, <a href="http://jira.codehaus.org/secure/ViewProfile.jspa?name=olamy" target="_blank">Olivier Lamy</a> and asked about a planned release date, as I get an answer, I will publish the date here.</p>
<p>As a separate thing, the plugin has another bug that exposes itself if the application must run as <em>ROOT</em> <em>application</em> in tomcat and either the application or the framework(s) it is based on (struts, urlrewriter, etc) uses <em>server side redirects</em> (<em>internal dispatching</em>). TYhe bug is discussed  <a href="http://jira.codehaus.org/browse/MTOMCAT-54" target="_blank">here</a> and also the fix for that got main stream.<br />
Enjoy&#8230;</p>
<img src="http://blog.batoo.org/?ak_action=api_record_view&id=200&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.batoo.org/?feed=rss2&amp;p=200</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Android is picking up&#8230;</title>
		<link>http://blog.batoo.org/?p=194</link>
		<comments>http://blog.batoo.org/?p=194#comments</comments>
		<pubDate>Mon, 29 Mar 2010 16:48:35 +0000</pubDate>
		<dc:creator>Hasan Ceylan</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[general]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[news]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://blog.batoo.org/?p=194</guid>
		<description><![CDATA[
			
				
			
		
According to this post android is picking up market share at an unprecedented pace.

Obviously the graph is on the traffic source rather then number of users or handset sales and at least in my experience, android encourages users to use their device more for the internet, nevertheless it should give the idea. And it is [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.batoo.org%2F%3Fp%3D194"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.batoo.org%2F%3Fp%3D194&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>According to <a href="http://www.redmonk.com/jgovernor/2010/03/26/microsoft-back-in-the-mix-developers-developers-developers-reprised/" target="_blank">this post</a> android is picking up market share at an unprecedented pace.</p>
<p><img class="alignleft" style="margin: 10px;" title="Mobile OS Traffic Share" src="http://static.arstechnica.com/gadgets/admob_feb10_US_share.png" alt="" width="340" height="254" /></p>
<p>Obviously the graph is on the traffic source rather then number of users or handset sales and at least in my experience, android encourages users to use their device more for the internet, nevertheless it should give the idea. And it is based on the US data, where android powered phones and devices are marketed as much aggressively as iPhone, so for the rest of the world,  iPhone shares should be on the positive side for Apple&#8217;s account.</p>
<p>However, what to read from this piece of information is being totally justifying the motivation for Apple &#8211; HTC lawsuit, iPhone is loosing a great deal of market share to Android. On the flip side of the coin, despite a big deal of re-work in Windows Mobile 7, Microsoft is far from being a major player in the game.</p>
<p>Another thing I could read from the data is, mobile arena is one of the largest market, where innovation and quality is awarded with immediate market share. While it takes years to change the adopted habits on the desktop computing &#8211; even with the netbook market wars, mobile users seem to be have more tendency to switch their choice of operating system. I can also see this as having used 3 different OS&#8217;es in the last 7 years &#8211; symbian, Windows Mobile, Android&#8230;</p>
<p>Being a hardcore Linux and java and eclipse developer, I can hardly wait to have some time to start doing professional stuff on Android.</p>
<img src="http://blog.batoo.org/?ak_action=api_record_view&id=194&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.batoo.org/?feed=rss2&amp;p=194</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Adding Ubuntu to a list of distros I use, in addition to Fedora &amp; RHEL&#8230;</title>
		<link>http://blog.batoo.org/?p=167</link>
		<comments>http://blog.batoo.org/?p=167#comments</comments>
		<pubDate>Thu, 11 Mar 2010 19:27:50 +0000</pubDate>
		<dc:creator>Hasan Ceylan</dc:creator>
				<category><![CDATA[eclipse]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[solved]]></category>
		<category><![CDATA[apt]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[fedora]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[yum]]></category>

		<guid isPermaLink="false">http://blog.batoo.org/?p=167</guid>
		<description><![CDATA[
			
				
			
		
I have recently fed up with the broken dependencies and potential boot problems after ever every update and decided to give Ubuntu a try &#8211; an action that was long awaiting on my to do list.
Although this does not mean I dumped Fedora &#8211; as I have been involved with Fedora every since the Fedora [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.batoo.org%2F%3Fp%3D167"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.batoo.org%2F%3Fp%3D167&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>I have recently fed up with the broken dependencies and potential boot problems after ever every update and decided to give <a href="http://www.ubuntu.com/" target="_blank">Ubuntu</a> a try &#8211; an action that was long awaiting on my to do list.</p>
<p>Although this does not mean I dumped Fedora &#8211; as I have been involved with Fedora every since the Fedora Core 1, it is a simple head up and look around.</p>
<p>The reasons for my recent ubuntu interest are</p>
<ul>
<li>Ubuntu has been around for a while and quite mature, even one can argue it is more stable then Fedora</li>
<li>I have recently dived into the Android platform. Android uses the Ubuntu as the base</li>
<li>I have also interest in intel&#8217;s netbook targeted OS &#8211; Moblin</li>
<li>I have been long planning to get accustomed to debian breed linux systems</li>
<li>If I get knowledgeable on ubuntu, I can convert more Microsoft users to Linux as Ubuntu seems to target the end users and remove the barriers for non-GPL software sources and propriety / copyrighted software</li>
<li> etc, etc.</li>
</ul>
<p>For those that are hardcore console users like me, when it comes to maintaining the OS, yum and rpm have always been the best friends. Now there seems to be a need for crash course to adopt apt and dpkg utilities and not surprisingly a simple  googling revealed ubuntu already prepared the <a href="https://help.ubuntu.com/community/SwitchingToUbuntu/FromLinux/%20RedHatEnterpriseLinuxAndFedora" target="_blank">info</a> for us.</p>
<img src="http://blog.batoo.org/?ak_action=api_record_view&id=167&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.batoo.org/?feed=rss2&amp;p=167</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>10 Things OSS Projects Should Be Aware</title>
		<link>http://blog.batoo.org/?p=142</link>
		<comments>http://blog.batoo.org/?p=142#comments</comments>
		<pubDate>Fri, 19 Feb 2010 16:19:44 +0000</pubDate>
		<dc:creator>Hasan Ceylan</dc:creator>
				<category><![CDATA[business]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[10 things]]></category>
		<category><![CDATA[project management]]></category>

		<guid isPermaLink="false">http://blog.batoo.org/?p=142</guid>
		<description><![CDATA[
			
				
			
		
With the widespread of the internet, today there is many many open source projects. This means competition is now not only in between closed source proprietary projects, but also in between open source projects and closed source proprietary as well amongst the open source projects themselves. This requires projects to adhere a set of standards [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.batoo.org%2F%3Fp%3D142"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.batoo.org%2F%3Fp%3D142&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>With the widespread of the internet, today there is many many open source projects. This means competition is now not only in between closed source proprietary projects, but also in between open source projects and closed source proprietary as well amongst the open source projects themselves. This requires projects to adhere a set of standards to stay alive &#8211; especially for those in their early incubation phases.</p>
<p>Having been in the <em>OSS World</em> throughout its prime time,  I have a good deal of observations as to how a project endures over time an become a success. ı would like to share this experiences as an executive summary here. Here it goes&#8230;</p>
<h2>1. Your Project is Your Promise</h2>
<p>It is always a good idea to mock up stuff for a developer. Learning by trial is one of the best way to improve one&#8217;s self. If you have a sparkling idea, start by writing in down and coding as soon as possible.</p>
<p>Develop your project any time you like. Invite your friends to join. Work / study all the way you like. This is only until you go public and make your statement.</p>
<p>Starting an OSS project is no different then taking on a new job &#8211; you make a promise, people will rely on you, so keep it!</p>
<h2>2. Have a Clear Mission Statement and Defined Targets for Your project</h2>
<p>This is something you should apply not only to your OSS project but almost everything in your life.</p>
<p><em>&#8220;Carpe diem&#8221;</em> is a very striking phrase but does not work in professional world.</p>
<p>Define your project&#8217;s mission statement and keep it as short as possible. Outline the targets it has and try to satisfy those.</p>
<h2>3. Ensure Your Project&#8217;s Life</h2>
<p>You project is like your child. You should ensure a sustainable life for your project just like you prepare your child for the life. That means plan your time and devotion to your project. If you are not prepared to devote yourself, do not go public &#8211; otherwise this will only harm your credibility.</p>
<p>A good idea to find sponsors or work a financial model for your project. Your project needs you, you need time and time is money.</p>
<p>There is a lot of platforms that will provide the basic platform for free of charge. During your projects incubation, using one will save you hosting and other costs, also the tools they provide will give you the most effective distributed agile environment.</p>
<h2>4. Have a Good Build System</h2>
<p>Have an automatic build system that produces nightly snapshots. As your number contributors increase this will help your project have a better and agile distributed contribution system.<br />
Prepare a <em>&#8220;How to Build&#8221;</em> page and enable your project to build without a complex build environment on an anonymous user&#8217;s system. This will increase anonymous contributions and conversion of anonymous contributors to committers in time.</p>
<h2>5. Have a Schedule</h2>
<p>OSS community usually follow the latest and the greatest. Thus, having a clear schedule that lists the dates and milestone / release deliverables is key to maintaining the interest from the community. Not to mention, try to adhere your schedule and inform of changes in timeline and / or features as soon as they are known to you.</p>
<h2>6. Treat Your Community as Your Clients</h2>
<p>A common mistake by OSS projects is sometimes they think they give away something for free or doing a great favour to their user base.</p>
<p>Do not forget, the motivation is &#8220;you should think of &#8216;free&#8217; as in &#8216;free speech,&#8217; not as in &#8216;free beer&#8217;&#8221;. This is as true for yourself as for your community. You DO get something in return, therefore treat your community as your clients.</p>
<h2>7. Maintain Your Project</h2>
<p>Keep an issue tracking system, an FAQ, a Quick Start Page and forum for the project. And do NOT just create the instruments like these ones just because the platform you are hosting will create them automagically for you. Use it!</p>
<p>You should view all this instruments as your channels to the community. A phone never answered creates nothing but frustration. The same goes for project instruments. Having these channels and actually using them properly will help improve the communication with your community.</p>
<p>Keep your issue tracking system live. Give <em>&#8220;human&#8221;</em> responses to acknowledge the need, assess the case and engage in early discussion as much possible as you can. It is also good idea to map issues that are confirmed to planned versions and milestones. This way your community knows that their submissions are valuable, and they know when to expect a return for their time and effort for the submission.</p>
<p>Forums are key to extend the community and gain popularity by helping out newbies. Unanswered questions will only make you loose potential new members. As always keeping one happy is 10 times easier to get a new one.</p>
<p>From postings in the forums and irrelevant, extract the common cases and mistakes. Compile an FAQ out of them, make it accessible and refer to it in the forums and issue tickets.</p>
<p>A project may also want to utilize channels like a News Page, a Blog by its contributers and IRC Channel, etc. The same rule applies though, you create the channel, it is your responsibility to keep it live and functional.</p>
<h2>8. Try to Understand Your Community</h2>
<p>Another common mistake is not paying attention to your community or not trying to understand what community requires.<br />
A good example of that is, the attitude I have seen in some of the bug / enhancement submissions and forum postings. Once every while, we see developers or architects reply with some sort of &#8220;This is how it works and cannot change, PERIOD&#8221;.<br />
A rather better approach is to try to understand what the change arise from, if it is worth to discuss the issue in detail with the community member(s).<br />
If the request does not make sense, explain in detail and try to convince. An explanation like &#8220;Because it is more useful the way it is&#8221; is not giving enough details and terminative rather then collaborative.</p>
<h2>9. Think Before You Code</h2>
<p>It is a very good phrase that <em>&#8220;Removing one existing line in the code is better then adding two.&#8221;</em><br />
Adhere the common practises like DRY, Segmentize and Modularize, Use in-code Documentation, etc.<br />
Always bear in mind that some new contributeos join projects and some leave in time. You should also ensure your code is maintainable and not reliant on specific people</p>
<h2>10. Collaborate with Other OSS Projects and Encourage Downstream Projects</h2>
<p>Do not try to solve all the problems yourself. <em>&#8220;Car manufacturers do not produce nails and bolts.&#8221; </em>Try to use what&#8217;s already available. Collaborate with the projects you are in relation with and help those evolve by identifying the missing bits and parts in them.</p>
<p>Similarly, encourage the projects make use of your projects and projects implementing complementary and extensional features to your projects. This is rather then being a threat another reason for a longer life to your project.</p>
<p>Well, I hope these observations help projects in their incubation as well as the ones enjoying their maturity.</p>
<img src="http://blog.batoo.org/?ak_action=api_record_view&id=142&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.batoo.org/?feed=rss2&amp;p=142</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Bug fix day, ProgressView Bug, SWT Link to blame</title>
		<link>http://blog.batoo.org/?p=83</link>
		<comments>http://blog.batoo.org/?p=83#comments</comments>
		<pubDate>Fri, 12 Feb 2010 23:27:53 +0000</pubDate>
		<dc:creator>Hasan Ceylan</dc:creator>
				<category><![CDATA[bugs]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[solved]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[open source]]></category>

		<guid isPermaLink="false">http://blog.batoo.org/?p=83</guid>
		<description><![CDATA[
			
				
			
		
I guess fixing bugs in a project out of reach is one of the most entertaining  thing for a husband who doesn&#8217;t want to go to bed on Friday night.
So here it goes, I was obsessed with the progress view showing hugely high items. I submitted a bug to Platform/UI team. Then I was [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.batoo.org%2F%3Fp%3D83"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.batoo.org%2F%3Fp%3D83&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>I guess fixing bugs in a project out of reach is one of the most entertaining  thing for a husband who doesn&#8217;t want to go to bed on Friday night.</p>
<p>So here it goes, I was obsessed with the progress view showing hugely high items. I submitted a <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=242144">bug</a> to Platform/UI team. Then I was deceived with not seeing for a while.</p>
<p>But it turned out to that this is still happening and based on some state &#8211; if a job has been started and it never called beginTask. I don&#8217;t have so much clue but this boils down to calling computeSize with &#8216;0&#8242; width hint. Then a bug in the way SWT Link (the sub progress info label of the job info item that displays sub task information and optionally can link to other UI elements ie: console) comes to expose the bug.</p>
<p>SWT Label computes the size with 1px width if the width hint is given as 0. Which wraps all the text in the link down and makes its height huge. But this happens only during the layouting, so the user doesn&#8217;t see the word-at-a-line presentation of the link.</p>
<p>In the end, &#8220;Changing the 1px hint to Integer.MAX_VALUE fixes the issue&#8221; like charm.</p>
<p>&#8220;One more bug is fixed&#8221; as &#8220;one more day is over @ ceylan&#8217;s office&#8221;</p>
<img src="http://blog.batoo.org/?ak_action=api_record_view&id=83&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.batoo.org/?feed=rss2&amp;p=83</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Going OSGI, was it a big risk?</title>
		<link>http://blog.batoo.org/?p=65</link>
		<comments>http://blog.batoo.org/?p=65#comments</comments>
		<pubDate>Thu, 11 Feb 2010 08:21:30 +0000</pubDate>
		<dc:creator>Hasan Ceylan</dc:creator>
				<category><![CDATA[eclipse]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[osgi]]></category>
		<category><![CDATA[rap]]></category>
		<category><![CDATA[teneoi emf]]></category>

		<guid isPermaLink="false">http://blog.batoo.org/?p=65</guid>
		<description><![CDATA[
			
				
			
		
Couple of days ago I wrote the article Is JavaEE overrated?
Thanks to comments, another article arouse from its ashes   Here it goes&#8230;
If it wasn&#8217;t open source I wouldn&#8217;t. I am still reluctant to technologies that are in use for 10+ years and closed sourced.
I&#8217;ll continue a bit why I didn&#8217;t view this as [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.batoo.org%2F%3Fp%3D65"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.batoo.org%2F%3Fp%3D65&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p><span>Couple of days ago I wrote the article </span><a title="Permanent Link to Is JavaEE overrated?" rel="bookmark" href="../?p=38">Is JavaEE overrated?</a></p>
<p><span>Thanks to comments, another article arouse from its ashes <img src='http://blog.batoo.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  Here it goes&#8230;</p>
<p>If it wasn&#8217;t open source I wouldn&#8217;t. I am still reluctant to technologies that are in use for 10+ years and closed sourced.</p>
<p>I&#8217;ll continue a bit why I didn&#8217;t view this as a &#8220;big&#8221; risk and went ahead.</p>
<p>1) I am not sure exactly but RAP has its roots in 2007 or earlier, [i], RAP [i] is based on Eclipse RCP [ii], I had developed my first RCP application back in 2005 and have had 3 RCP enterprise applications so far (two of them as being desktop client) . And when it comes to developing a Web Application for corporate business (I mean no traditional website looking application), developing it in java helped us use absolutely zero HTML, JS even we could reuse icons, graphs, menus, wizards, etc. available in eclipse. That saved us tremendous amount of time.</p>
<p>2) Eclipse EMF [iii] started in 2002 and powers most of the eclipse based tools and a great companion for Eclipse RCP. Eclipse has so much belief in EMF, so EMF has its own incubation pool called EMFT</p>
<p>3) Most of the Teneo [iv] code is a glue in between the EMF and Hibernate and gets kicked only during hibernate boot. It generates a hbm.xml that gets passed to hibernate. From then on, it only intercepts the collections and so-called EMF term &#8220;containment&#8221; &#8211; which merely couple of hundred lines of code. The upside of using it, you can reuse the EMF model (The whole idea behind EMF &#8211; &#8220;reusable models&#8221;). And when developing the application this implementation boots in sub second in comparison to &#8220;Annotated Hibernate Model&#8221; which takes about 30 secs to boot with ~100 tables / classes + many-to-many associations. Again a great time saved here too!</p>
<p>4) Eclipse OSGI has been around ever since Eclipse 3.0 released (may require correction). Eclipse as IDE used it way more then any application server and with way more components then an J2EE application server ever can have. Under the hood Equinox OSGI implementation was the power horse of that structure and biggest contributer to OSGI Alliance [v]. It is only recently, that Equinox stepped forward to claim its name.</p>
<p>5) As for the Hibernate and JTreeCache, I think no one argues (at least for hibernate) that these are mature enough.</p>
<p>More over, given the time frame and resources for the project, I think it would have been the bigger risk to go with a conservative approach in this particular instance. One of my benchmarks within the organization showed:</p>
<p>1) This project had 100K lines of which 50K is generated code</p>
<p>2) A highly similar project in terms of customer, criticality and scale had 140K lines of code</p>
<p>3) Our project took 40 man x month of which most spent on E-Signature, integrating with a propriety SOA engine (darn!) and &#8220;Data Versioning&#8221;. In total project took 7 months with 4 resources (Yeah we did work a lot in the nights and weekends)</p>
<p>4) The counter project spent ~200 man x month and span over 2 years with 4 &#8211; 16 resource in variable times. It used hibernate and JSF on a propriety Application server</p>
<p>5) Our application had the better user experience with background UI tasks, multi tasking features (of Eclipse Workbench) and fully generated-on-the-fly client side javascript code &#8211; A great Web 2.0 environment. (You can test drive the concept with yoxos) Although to be fair, the counter project was developed in 2006-08 and did not have access to the current technologies then.</p>
<p>In the end of the day all I did was to glue the pieces together&#8230; Plus we buttered up with maven, init scripts, issue management, ci, and rpm releases but that has nothing to with the osgi and can go together with Java(2)EE but worth mentioning&#8230;</p>
<p>[i]<a title="New window will open" href="http://www.linkedin.com/redirect?url=http%3A%2F%2Fondemand%2Eyoxos%2Ecom%2Fgeteclipse%2Fstart&amp;urlhash=e-23" target="_blank"> http://ondemand.yoxos.com/geteclipse/start</a> <a href="http://www.eclipse.org/rap/">http://www.eclipse.org/rap/</a></p>
<p><span>[ii] </span> <a title="New window will open" href="http://www.linkedin.com/redirect?url=http%3A%2F%2Fwiki%2Eeclipse%2Eorg%2Findex%2Ephp%2FRich_Client_Platform&amp;urlhash=DGq4" target="_blank">http://wiki.eclipse.org/index.php/Rich_Client_Platform</a></p>
<p></span><span> [iii] </span> <a title="New window will open" href="http://www.linkedin.com/redirect?url=http%3A%2F%2Fwww%2Eeclipse%2Eorg%2Femf&amp;urlhash=mVTS" target="_blank">http://www.eclipse.org/emf</a></p>
<p><span>[iv] </span> <a title="New window will open" href="http://www.linkedin.com/redirect?url=http%3A%2F%2Fwww%2Eeclipse%2Eorg%2Femft%2Fprojects%2Fteneo&amp;urlhash=9uXA" target="_blank">http://www.eclipse.org/emft/projects/teneo</a></p>
<p><span>[v] </span> <a title="New window will open" href="http://www.linkedin.com/redirect?url=http%3A%2F%2Fwww%2Eosgi%2Eorg&amp;urlhash=GK2v" target="_blank">http://www.osgi.org</a></p>
<img src="http://blog.batoo.org/?ak_action=api_record_view&id=65&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.batoo.org/?feed=rss2&amp;p=65</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Source Code Provision in Eclipse Update Site Projects</title>
		<link>http://blog.batoo.org/?p=54</link>
		<comments>http://blog.batoo.org/?p=54#comments</comments>
		<pubDate>Thu, 11 Feb 2010 07:56:00 +0000</pubDate>
		<dc:creator>Hasan Ceylan</dc:creator>
				<category><![CDATA[eclipse]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[solved]]></category>
		<category><![CDATA[pde]]></category>
		<category><![CDATA[update site]]></category>

		<guid isPermaLink="false">http://blog.batoo.org/?p=54</guid>
		<description><![CDATA[
			
				
			
		
Update sites in eclipse projects is a great features. One of the big reasons for &#8220;web applications&#8221; (By that I mean applications running in browser and exclude traditional web sites) was the distrubition and update problem.Eclipse with its large ecosystem found itself need to solve this problem, a recently got better with p2 implementation.
However, one [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.batoo.org%2F%3Fp%3D54"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.batoo.org%2F%3Fp%3D54&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>Update sites in eclipse projects is a great features. One of the big reasons for &#8220;web applications&#8221; (By that I mean applications running in browser and exclude traditional web sites) was the distrubition and update problem.Eclipse with its large ecosystem found itself need to solve this problem, a recently got better with p2 implementation.</p>
<p>However, one of the problems with the easy-to-use update site projects in eclipse is it is not obvious how to include your source code in the features you deploy.</p>
<p>Well, a common way of implementation of this is as follows and you may want to browse or check out using SVN the EMF Builder project to see it in action [1]</p>
<p>* Create your plugin project, name it say com.example.myproject.plugin</p>
<p>* Create a feature project which refers to the plugin and plugin and feature dependencies it requires, name it com.example.myproject.feature</p>
<p>* Create ANOTHER feature name it com.example.myproject.sdkfeature</p>
<p>* Create three folders in the root of com.example.myproject.sdkfeature: rootfiles, sourceTemplateFeature, sourceTemplatePlugin. These will be the templates for our source plugin and feature projects</p>
<p>* In the build.properties of the have the following:</p>
<blockquote><p>bin.includes = feature.xml,\<br />
 feature.properties,\<br />
 modeling32.png,\<br />
 epl-v10.html,\<br />
 license.html,\<br />
 about.html,\<br />
 about.ini,\<br />
 about.mappings,\<br />
 about.properties</p>
<p>src.includes = epl-v10.html,\<br />
 license.html</p>
<p>root=rootfiles</p>
<p>generate.feature@com.example.myproject.source=com.example.myproject.feature</p></blockquote>
<p>This will instruct update site builder to create a source plugin com.example.myproject.source which includes the sources for plugins within com.example.myproject.feature</p>
<p>You need not add plugins to the sdk feature. Just add the feature com.example.myproject.feature and virtual com.example.myproject.source feature to the &#8220;Included Features&#8221; section of the sdk feature.</p>
<p>Add the sdk feature to your update site. Ideally update site included two features together, com.example.myproject.sdkfeature and com.example.myproject.feature, so your users can choose to install binary or source + binary versions.</p>
<p>Build and deploy the update site, test it from eclipse you should be able to see two featıres,.</p>
<p>[1] <a title="http://emf-ebm.svn.sourceforge.net/svnroot/emf-ebm/" href="http://emf-ebm.svn.sourceforge.net/svnroot/emf-ebm/update/" target="_blank">http://emf-ebm.svn.sourceforge.net/svnroot/emf-ebm/</a></p>
<img src="http://blog.batoo.org/?ak_action=api_record_view&id=54&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.batoo.org/?feed=rss2&amp;p=54</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Is JavaEE overrated?</title>
		<link>http://blog.batoo.org/?p=38</link>
		<comments>http://blog.batoo.org/?p=38#comments</comments>
		<pubDate>Mon, 08 Feb 2010 18:41:55 +0000</pubDate>
		<dc:creator>Hasan Ceylan</dc:creator>
				<category><![CDATA[eclipse]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[solved]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[javaee]]></category>
		<category><![CDATA[osgi]]></category>

		<guid isPermaLink="false">http://blog.batoo.org/?p=38</guid>
		<description><![CDATA[In a previous assignment we had a project more like an intranet application where you manage document, make applications (which flow through a complex 400+ step BPM), integration with a SOA engine, task, inbox, etc... It was a large government project with 500 daily users..... 
In the end, the project was a big success and a breakthrough not in the country but at the global level. So I think developing enterprise application doesn't mean you gotta go JavaEE. Putting together your own OSGI stack is much better. Plus while developing, you will get the joy of restarting the application in a matter of seconds rather then in minutes in comparison to application servers.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.batoo.org%2F%3Fp%3D38"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.batoo.org%2F%3Fp%3D38&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>In a previous assignment we had a project more like an intranet application where you manage document, make applications (which flow through a complex 400+ step BPM), integration with a SOA engine, task, inbox, etc&#8230; It was a large government project with 500 daily users.</p>
<p>We chose the RAP [RCP], Databinding, EMF, Teneo, hibernate, JTrecache, Equinox[OSGI] project stack. We also have written a simple editor to manipulate EMF model.</p>
<p>I must admit I enjoyed defining my models in ecore. With the help of teneo my DAO consisted only ~100 lines. Since the application security (this is including down to input element levels with hidden/read/write granularity) was so tight we also kept the security definitions in the ecore model.</p>
<p>We kept the database schema definitions along with the ecore classes, which helped BI developers and DB admins to get updates momentarily (In the early phase of the project there were weekly deployments).</p>
<p>I think one of the problems with java world is it has the J2EE definition. 90% times you make a project, you choose the Application server, JPA, Web model etc for the project. But people believe &#8220;If it is a commercial / corporate product it&#8217;s gotta be J2EE compliant&#8221;, which is a big bold and IMHO unnecessary binding. Most of the time, you do not WORE! Not to mention there is the saying &#8220;Write Once Debug Everywhere&#8221;.</p>
<p>Lately application server vendors started adopting OSGI and we&#8217;ll see where this will go. But to be honest (this might require a correction) without using equinox, you cannot use much of the eclipse technologies where  the base plugins require definitions via extension points. e4 with the new dependency injection stuff may make this comment deprecated. But with the  more and on-the-target adoption of OSGI, we&#8217;ll see more eclipse technologies used outside RCP and IDE domain.</p>
<p>On the project I mentioned, people were like &#8216;Are you crazy you are taking way more risks,  how are you gonna get support&#8217;, well, we used the SOA engine and DB of one of the largest provider provider, we have a support ticket still open for 6 months, where I had over 20 interactions with RAP, Teneo, EMF team all resolved within hours to days. Imagine if we were using the application server from that vendor.</p>
<p>In the end, the project was a big success and a breakthrough not in the country but at the global level. So I think developing enterprise application doesn&#8217;t mean you gotta go JavaEE. Putting together your own OSGI stack is much better. Plus while developing, you will get the joy of restarting the application in a matter of seconds rather then in minutes in comparison to application servers.</p>
<img src="http://blog.batoo.org/?ak_action=api_record_view&id=38&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.batoo.org/?feed=rss2&amp;p=38</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>EMF Build Manager 0.1-Beta Released</title>
		<link>http://blog.batoo.org/?p=33</link>
		<comments>http://blog.batoo.org/?p=33#comments</comments>
		<pubDate>Mon, 08 Feb 2010 10:25:45 +0000</pubDate>
		<dc:creator>Hasan Ceylan</dc:creator>
				<category><![CDATA[eclipse]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[emf]]></category>
		<category><![CDATA[oss]]></category>

		<guid isPermaLink="false">http://blog.batoo.org/?p=33</guid>
		<description><![CDATA[
			
				
			
		
The EMF Builder 0.1-beta has been released and I wish everyone to install and give it a test drive.
Update Site:
http://emf-ebm.svn.sourceforge.net/svnroot/emf-ebm/update/
Project Proposal:
http://ebm.batoo.org
Upon installation, right-clicking on the project and Configure -&#62; Add EMF Nature will enable the functionality. In case you experience problems with it you can turn off the nature the same way you enable it.
It [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.batoo.org%2F%3Fp%3D33"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.batoo.org%2F%3Fp%3D33&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>The EMF Builder 0.1-beta has been released and I wish everyone to install and give it a test drive.</p>
<p>Update Site:<br />
<a href="http://emf-ebm.svn.sourceforge.net/svnroot/emf-ebm/update/" target="_blank">http://emf-ebm.svn.sourceforge.net/svnroot/emf-ebm/update/</a></p>
<p>Project Proposal:<br />
<a href="http://ebm.batoo.org" target="_blank">http://ebm.batoo.org</a></p>
<p>Upon installation, right-clicking on the project and Configure -&gt; Add EMF Nature will enable the functionality. In case you experience problems with it you can turn off the nature the same way you enable it.</p>
<p>It should not be dangerous for your source as it uses the EMF and GMF code generation framework. The worst case scenario it will not trigger builds.</p>
<p>Here are the highlights:<br />
* It supports full list of EMF resources by file extension<br />
* It supports transitive dependencies upwards and downwards<br />
- Downwards, if there is an error on a resource, the resources dependent<br />
on this one will be suspended<br />
- Upwards, resources watch for changes in the dependencies and rebuild<br />
when necessary<br />
* It detects the underlying EMF version and regenerates on a change<br />
detection<br />
* Dependency state is preserved across eclipse sessions<br />
* Takes advantage of the Jobs Framework as much as possible with detailed<br />
progress reporting through progress view.<br />
* It provides three extension points<br />
- An extension point to register validators, built in EMF Validator is<br />
registered with this extension<br />
- An extension point to register generators, built in EMF Generator is<br />
registered with this extension. And also a complementary GMF generator uses<br />
this extension points<br />
- An extension point to register content types with the infrastructure,<br />
GMF Gen content type is registered using this extension point<br />
* Full error / warning reporting via &#8220;Problems View&#8221; marker support<br />
* Quick fix support<br />
* Trace support (For bug reports I would appreciate trace turned on)</p>
<img src="http://blog.batoo.org/?ak_action=api_record_view&id=33&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.batoo.org/?feed=rss2&amp;p=33</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
