<?xml version="1.0"?>
<rss version="2.0">

<channel>
	<title>Planet Eclipse</title>
	<link>http://planeteclipse.org/planet/</link>
	<language>en</language>
	<description>Planet Eclipse - http://planeteclipse.org/planet/</description>

<item>
	<title>Angelo Zerr: OSGi Equinox in a Servlet Container [step4]</title>
	<guid isPermaLink="false">http://angelozerr.wordpress.com/?p=3158</guid>
	<link>http://angelozerr.wordpress.com/2010/09/08/osgi-equinox-in-a-servlet-container-step4/</link>
	<description>&lt;p&gt;In &lt;a href=&quot;http://angelozerr.wordpress.com/2010/09/06/osgi-equinox-in-a-servlet-container-step3/&quot;&gt;[step3]&lt;/a&gt;, I have explained why it’s important to &lt;strong&gt;define &lt;a&gt;Target Platform&lt;/a&gt;&lt;/strong&gt; with &lt;strong&gt;OSGi Equinox in a Servlet Container&lt;/strong&gt; to compile your custom bundle (sample.http, sample.http2…) with the bundles JARs coming from &lt;strong&gt;bridge/WebContent/WEB-INF/eclipse/plugins&lt;/strong&gt; folder (and not coming from the Eclipse IDE). &lt;/p&gt;
&lt;p&gt;In &lt;a href=&quot;http://angelozerr.wordpress.com/2010/09/02/osgi-equinox-in-a-servlet-container-step2/&quot;&gt;[step2]&lt;/a&gt;, we have seen 2 problems :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It’s &lt;strong&gt;impossible to host some resources&lt;/strong&gt; (HTML, Javascript, Servlet…) in the bridge WEB Application (when /* URL pattern is used). I will explain how fix this problem by using &lt;a href=&quot;http://angelozerr.wordpress.com/feed/#BridgeFilter&quot;&gt;BridgeFilter&lt;/a&gt; coming from &lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=323707&quot;&gt;patch 323707&lt;/a&gt;.
  &lt;/li&gt;
&lt;li&gt;It’s impossible to &lt;strong&gt;use directly the OSGi bundle coming from the workspace&lt;/strong&gt;. You must create a JAR and copy/paste to the /plugins folder. I will explain how fix this problem by using &lt;a href=&quot;http://angelozerr.wordpress.com/feed/#workspace_loc&quot;&gt;${workspace_loc}&lt;/a&gt; wildcard (to declare bundles in config.ini) coming from &lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=323707&quot;&gt;patch 323707&lt;/a&gt;.
  &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The current distribution of &lt;strong&gt;OSGi Equinox in a Servlet Container&lt;/strong&gt; doesn’t manage this 2 features, so I have decided to improve it with &lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=323707&quot;&gt;patch 323707&lt;/a&gt;. In this article I will explain how use this patch to manage the 2 problems explained below.&lt;/p&gt;
&lt;p&gt;&lt;span id=&quot;more-3158&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&quot;download&quot;&gt;Download&lt;/h2&gt;
&lt;p&gt;You can download &lt;a href=&quot;http://dl.dropbox.com/u/2903680/wordpress-blog/tutoriels/eclipse/servletbridge/servletbridge_step4.zip&quot;&gt;servletbridge_step4.zip&lt;/a&gt; which contains following explained projects : &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;brige&lt;/strong&gt; which contains :
&lt;ul&gt;
&lt;li&gt;the JAR patched lib/&lt;strong&gt;org.eclipse.equinox.servletbridge_1.2.0.201008301518.jar&lt;/strong&gt; and plugins/&lt;strong&gt;org.eclipse.equinox.http.servlet_1.1.0.201008310825.jar&lt;/strong&gt;.
      &lt;/li&gt;
&lt;li&gt;the &lt;strong&gt;web.xml&lt;/strong&gt; wich declare &lt;a href=&quot;http://angelozerr.wordpress.com/feed/#BridgeFilter&quot;&gt;BridgeFilter&lt;/a&gt; instead of &lt;strong&gt;BridgeServlet&lt;/strong&gt;.
      &lt;/li&gt;
&lt;li&gt;the resources WEB-INF/WebContent/&lt;a href=&quot;http://angelozerr.wordpress.com/feed/#index-htm&quot;&gt;index.htm&lt;/a&gt;, WEB-INF/WebContent/&lt;a href=&quot;http://angelozerr.wordpress.com/feed/#index-jsp&quot;&gt;index.jsp&lt;/a&gt;.
      &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;sample.http2&lt;/strong&gt; which define &lt;strong&gt;/bin2&lt;/strong&gt; as output folder (instead of /bin folder) explained in &lt;a href=&quot;http://angelozerr.wordpress.com/feed/#bundleClassPathEntries&quot;&gt;bundleClassPathEntries&lt;/a&gt; section.
  &lt;/li&gt;
&lt;li&gt;the same projects than &lt;a href=&quot;http://angelozerr.wordpress.com/2010/09/02/osgi-equinox-in-a-servlet-container-step3/#download&quot;&gt;[step2]&lt;/a&gt;.
  &lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;BridgeFilter&quot;&gt;BridgeFilter – Add resource in bridge webapp&lt;/h2&gt;
&lt;p&gt;To use &lt;strong&gt;OSGi Equinox in a Servlet Container&lt;/strong&gt;, the BrideServlet must be declared as an servlet. It works well except it causes the problem that it’s impossible to host some resources (JSP, HTML, Servlet…) in the bridge WEB Application, if &lt;strong&gt;/* URL servlet-mapping&lt;/strong&gt; pattern is used. To resolve this problem, &lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=323707&quot;&gt;patch 323707&lt;/a&gt; provides the capability to declare the « BrideServlet » as a Filter with BridgeFilter .&lt;/p&gt;
&lt;p&gt;In this section we will see the &lt;a href=&quot;http://angelozerr.wordpress.com/feed/#problem&quot;&gt;problem with BridgeServlet&lt;/a&gt;, how &lt;a href=&quot;http://angelozerr.wordpress.com/feed/#BridgetFilterUsing&quot;&gt;BridgeFilter resolve this problem&lt;/a&gt; and I will explain &lt;a href=&quot;http://angelozerr.wordpress.com/feed/#FilterFixProblem&quot;&gt;why Filter using resolve the problem&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;problem&quot;&gt;The problem with BridgeServlet&lt;/h3&gt;
&lt;h4 id=&quot;index-htm&quot;&gt;Add index.htm&lt;/h4&gt;
&lt;p&gt;Create the WEB-INF/WebContent/&lt;strong&gt;index.html&lt;/strong&gt; file with this content : &lt;/p&gt;
&lt;pre class=&quot;brush: xml;&quot;&gt;&amp;lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot; &quot;http://www.w3.org/TR/html4/loose.dtd&quot;&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
&amp;lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=ISO-8859-1&quot;&amp;gt;
&amp;lt;title&amp;gt;OSGi Equinox in a Servlet Container - Home Page&amp;lt;/title&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;div&amp;gt;OSGi Equinox in a Servlet Container - Home Page&amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/pre&gt;
&lt;p&gt;When you go at &lt;a href=&quot;http://localhost:8080/bridge/index.htm&quot;&gt;http://localhost:8080/bridge/index.htm&lt;/a&gt;, you will have a 404 error : &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://angelozerr.files.wordpress.com/2010/09/servletbridge_indexhtm_404.png?w=600&quot; /&gt;&lt;/p&gt;
&lt;p&gt;This error message show you that BridgeServlet send a 404 error because it tries to search a resources registered ONLY with OSGi services (like /helloworld).&lt;/p&gt;
&lt;h3 id=&quot;#BridgetFilterUsing&quot;&gt;The fix problem – BridgetFilter&lt;/h3&gt;
&lt;p&gt;To resolve the problem of hosting some resources in the bridge WEB Application, you must use &lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=323707&quot;&gt;patch  323707&lt;/a&gt; : &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Download the zip &lt;strong&gt;NewServletBridge_*.zip&lt;/strong&gt; from the &lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=323707&quot;&gt;patch  323707&lt;/a&gt;.
  &lt;/li&gt;
&lt;li&gt;Replace the &lt;strong&gt;servletbridge.jar&lt;/strong&gt; with the JAR &lt;strong&gt;org.eclipse.equinox.servletbridge_1.2.0.201008301518.jar&lt;/strong&gt;.
  &lt;/li&gt;
&lt;li&gt;Replace &lt;strong&gt;org.eclipse.equinox.http.servlet_1.0.0.200704022148.jar&lt;/strong&gt; with the JAR &lt;strong&gt;org.eclipse.equinox.http.servlet_1.1.0.201008310825.jar&lt;/strong&gt;.
  &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You workspace looks like this : &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://angelozerr.files.wordpress.com/2010/09/servletbridge_bridgepatchedworkspace.png?w=600&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Now you can declare BrigeServlet with BridgeFilter (with Filter). To do that modify &lt;strong&gt;web.xml&lt;/strong&gt; like this : &lt;/p&gt;
&lt;pre class=&quot;brush: xml;&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;
&amp;lt;web-app xmlns=&quot;http://java.sun.com/xml/ns/j2ee&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
	xsi:schemaLocation=&quot;http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd&quot;
	version=&quot;2.4&quot;&amp;gt;
	&amp;lt;filter id=&quot;bridge&quot;&amp;gt;
		&amp;lt;filter-name&amp;gt;equinoxbridgefilter&amp;lt;/filter-name&amp;gt;
		&amp;lt;filter-class&amp;gt;org.eclipse.equinox.servletbridge.BridgeFilter&amp;lt;/filter-class&amp;gt;
		&amp;lt;init-param&amp;gt;
			&amp;lt;param-name&amp;gt;commandline&amp;lt;/param-name&amp;gt;
			&amp;lt;param-value&amp;gt;-console&amp;lt;/param-value&amp;gt;
		&amp;lt;/init-param&amp;gt;
		&amp;lt;init-param&amp;gt;
			&amp;lt;param-name&amp;gt;enableFrameworkControls&amp;lt;/param-name&amp;gt;
			&amp;lt;param-value&amp;gt;true&amp;lt;/param-value&amp;gt;
		&amp;lt;/init-param&amp;gt;
	&amp;lt;/filter&amp;gt;
	&amp;lt;filter-mapping&amp;gt;
		&amp;lt;filter-name&amp;gt;equinoxbridgefilter&amp;lt;/filter-name&amp;gt;
		&amp;lt;url-pattern&amp;gt;/*&amp;lt;/url-pattern&amp;gt;
	&amp;lt;/filter-mapping&amp;gt;
	&amp;lt;!--
	  This is required if your application bundles expose JSPs.
	--&amp;gt;
	&amp;lt;filter-mapping&amp;gt;
		&amp;lt;filter-name&amp;gt;equinoxbridgefilter&amp;lt;/filter-name&amp;gt;
		&amp;lt;url-pattern&amp;gt;*.jsp&amp;lt;/url-pattern&amp;gt;
	&amp;lt;/filter-mapping&amp;gt;

&amp;lt;/web-app&amp;gt;&lt;/pre&gt;
&lt;p&gt;You will notice that &lt;strong&gt;Servlet 2.4&lt;/strong&gt; is declared  here : &lt;/p&gt;
&lt;pre class=&quot;brush: xml;&quot;&gt;&amp;lt;web-app xmlns=&quot;http://java.sun.com/xml/ns/j2ee&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
	xsi:schemaLocation=&quot;http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd&quot;
	version=&quot;2.4&quot;&amp;gt;
...
&amp;lt;/web-app&amp;gt;&lt;/pre&gt;
&lt;p&gt;Because Filter is available with &amp;lt;=Servlet 2.3. You could declare too &lt;strong&gt;Servlet 2.3&lt;/strong&gt; like this : &lt;/p&gt;
&lt;pre class=&quot;brush: xml;&quot;&gt;&amp;lt;!DOCTYPE web-app PUBLIC &quot;-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN&quot; &quot;http://java.sun.com/dtd/web-app_2_3.dtd&quot;&amp;gt;
&amp;lt;web-app&amp;gt;
...
&amp;lt;/web-app&amp;gt;&lt;/pre&gt;
&lt;h3&gt;Retry&lt;/h3&gt;
&lt;p&gt;Restart your server and go at &lt;a href=&quot;http://localhost:8080/bridge/index.htm&quot;&gt;http://localhost:8080/bridge/index.htm&lt;/a&gt;, you will see the /index.htm content : &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://angelozerr.files.wordpress.com/2010/09/servletbridge_indexhtm.png?w=600&quot; /&gt;&lt;/p&gt;
&lt;h3 id=&quot;index-jsp&quot;&gt;index.jsp&lt;/h3&gt;
&lt;p&gt;The  bridge/WEB-INF/WebContent folder of the &lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=323707&quot;&gt;patch 323707&lt;/a&gt; provides the &lt;strong&gt;index.jsp&lt;/strong&gt; which display &lt;strong&gt;list of /sp_* commands frameworks&lt;/strong&gt;. If you copy/paste it in your bridge/WEB-INF/WebContent and you go at &lt;a href=&quot;http://localhost:8080/bridge/index.jsp&quot;&gt;http://localhost:8080/bridge/index.jsp&lt;/a&gt;, you will see the /sp_* whole commands with HTML links : &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://angelozerr.files.wordpress.com/2010/09/servletbridge_indexjsp.png?w=600&quot; /&gt;&lt;/p&gt;
&lt;h3 id=&quot;FilterFixProblem&quot;&gt;Why Filter using resolve the problem?&lt;/h3&gt;
&lt;p&gt;When BridgeServlet doesn’t find an OSGi services with the path required (ex : /index.jsp), the servlet send a 404 error, with this code &lt;/p&gt;
&lt;pre class=&quot;brush: java;&quot;&gt;resp.sendError(HttpServletResponse.SC_NOT_FOUND, &quot;BridgeServlet: &quot; + req.getRequestURI());
&lt;/pre&gt;
&lt;p&gt;When BridgeFilter doesn’t find an OSGi services with the path required (ex : /index.jsp), the filter gives the hand of the HTTP server by calling this code : &lt;/p&gt;
&lt;pre class=&quot;brush: java;&quot;&gt;chain.doFilter(req, resp);
&lt;/pre&gt;
&lt;h2 id=&quot;workspace_loc&quot;&gt;${workspace_loc} : Use bundles form the workspace&lt;/h2&gt;
&lt;p&gt;When you develop custom bundles (ex : sample.http, sample.http2….), you must &lt;a href=&quot;http://angelozerr.wordpress.com/2010/09/01/osgi-equinox-in-a-servlet-container-step1/#CreateJARAndDeployBundle&quot;&gt;create and deploy&lt;/a&gt; JARs as soon as you change your Java code of your bundle. In development mode, this action can be really annoying. The &lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=323707&quot;&gt;patch 323707&lt;/a&gt; gives you the capability to use directly your bundles from your workspace (no need to &lt;a href=&quot;http://angelozerr.wordpress.com/2010/09/01/osgi-equinox-in-a-servlet-container-step1/#CreateJARAndDeployBundle&quot;&gt;create and deploy&lt;/a&gt; JARs).&lt;/p&gt;
&lt;p&gt;This feature can works too with BridgeServlet. If you wish manage that, the only &lt;strong&gt;org.eclipse.equinox.servletbridge_1.2.0.201008301518.jar&lt;/strong&gt; is required.&lt;/p&gt;
&lt;h3&gt;${workspace_loc}&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=323707&quot;&gt;patch 323707&lt;/a&gt; gives you the capability to declare your bundles in the &lt;strong&gt;osgi.bundles&lt;/strong&gt; property of the &lt;strong&gt;config.ini&lt;/strong&gt; with :&lt;/p&gt;
&lt;div style=&quot;border: black solid 1px; background-color: #f6f6f6;&quot;&gt;&lt;code&gt;reference\:file\:&lt;em&gt;YOUR_PATH_FOLDER&lt;/em&gt;/&lt;em&gt;YOUR_BUNDLE&lt;/em&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;where :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;YOUR_PATH_FOLDER&lt;/em&gt; is the path folder of your bundles (ex : your workspace path location).
  &lt;/li&gt;
&lt;li&gt;&lt;em&gt;YOUR_BUNDLE&lt;/em&gt; is your bundle name (ex : sample.http).
  &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In my case my workspace path location is &lt;strong&gt;D://_Projets/Personal/workspace-servletbridge-wordpress/step4&lt;/strong&gt;, so I can write : &lt;/p&gt;
&lt;div style=&quot;border: black solid 1px; background-color: #f6f6f6;&quot;&gt;&lt;code&gt;reference\:file\:/D\:/_Projets/Personal/workspace-servletbridge-wordpress/step4/sample.http&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;But path hard-declared is not very usefull when several developers works in the same project. So it’s possible (and it’s adviced) to use &lt;strong&gt;${workspace_loc}&lt;/strong&gt; wilcard like this : &lt;/p&gt;
&lt;div style=&quot;border: black solid 1px; background-color: #f6f6f6;&quot;&gt;&lt;code&gt;${workspace_loc}/&lt;em&gt;YOUR_BUNDLE&lt;/em&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Here the &lt;strong&gt;osgi.bundles&lt;/strong&gt; property of the config.ini used in this article : &lt;/p&gt;
&lt;pre class=&quot;brush: plain;&quot;&gt;osgi.bundles=org.eclipse.equinox.common@2:start, org.eclipse.update.configurator@start, org.eclipse.equinox.http.servletbridge@start, org.eclipse.equinox.http.registry@start,${workspace_loc}/sample.http@start,${workspace_loc}/sample.http2@start,org.apache.felix.webconsole@start&lt;/pre&gt;
&lt;p&gt;The value of the &lt;strong&gt;${workspace_loc}&lt;/strong&gt; can be :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://angelozerr.wordpress.com/feed/#WEBAppDeployedInsideWorkspace&quot;&gt;computed&lt;/a&gt;, if WEB Application is deployed inside the Eclipse Workspace.
  &lt;/li&gt;
&lt;li&gt;or &lt;a href=&quot;http://angelozerr.wordpress.com/feed/#WEBAppDeployedOutsideWorkspace&quot;&gt;setted&lt;/a&gt;, if WEB Application is deployed outside the Eclipse Workspace.
  &lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;WEBAppDeployedInsideWorkspace&quot;&gt;WEB Application (deployed) INSIDE Workspace&lt;/h4&gt;
&lt;p&gt;When WEB Application is deployed inside the &lt;strong&gt;.metadata&lt;/strong&gt; folder of the Workspace, ${workspace_loc} can be computed. This case comes from for instance with WTP Module (our case). For more information, please read &lt;a href=&quot;http://angelozerr.wordpress.com/2010/09/06/osgi-equinox-in-a-servlet-container-step3/#wtpwebapps&quot;&gt;WTP Deployment [step3]&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;To use sample.http and sample.http2 from the bundles workspace : &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;remove the bridge/WebContent/WEB-INF/eclipse/plugins/&lt;strong&gt;sample.http_1.0.0.jar&lt;/strong&gt; and bridge/WebContent/WEB-INF/eclipse/plugins/&lt;strong&gt;sample.http2_1.0.0.jar&lt;/strong&gt;
  &lt;/li&gt;
&lt;li&gt;modify the bridge/WebContent/WEB-INF/eclipse/configuration/&lt;strong&gt;config.ini&lt;/strong&gt; to use ${workspace_loc} like this :
&lt;pre class=&quot;brush: plain;&quot;&gt;osgi.bundles=org.eclipse.equinox.common@2:start, org.eclipse.update.configurator@start, org.eclipse.equinox.http.servletbridge@start, org.eclipse.equinox.http.registry@start,${workspace_loc}/sample.http@start,${workspace_loc}/sample.http2@start,org.apache.felix.webconsole@start&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;start your server and go at &lt;a href=&quot;http://localhost:8080/bridge/sp_rdeploy&quot;&gt;http://localhost:8080/bridge/sp_rdeploy&lt;/a&gt;
  &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Check your &lt;strong&gt;config.ini&lt;/strong&gt; replaced your old config.ini with your real Eclipse Workspace path. In my case I have : &lt;/p&gt;
&lt;pre class=&quot;brush: plain;&quot;&gt;osgi.bundles=org.eclipse.equinox.common@2\:start,org.eclipse.update.configurator@start,org.eclipse.equinox.http.servletbridge@start,org.eclipse.equinox.http.registry@start,reference\:file\:/D\:/_Projets/Personal/workspace-servletbridge-wordpress/step4/sample.http@start,reference\:file\:/D\:/_Projets/Personal/workspace-servletbridge-wordpress/step4/sample.http2@start,org.apache.felix.webconsole@start&lt;/pre&gt;
&lt;p&gt;Restart your server and type in the console View&lt;/p&gt;
&lt;div style=&quot;border: black solid 1px; background-color: #f6f6f6;&quot;&gt;&lt;code&gt;ss&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;The OSGi console display the Short Status of the bundles installed : &lt;/p&gt;
&lt;div style=&quot;border: black solid 1px; background-color: #f6f6f6;&quot;&gt;&lt;code&gt;&lt;br /&gt;
...&lt;br /&gt;
15	ACTIVE      sample.http_1.0.0&lt;br /&gt;
16	ACTIVE      sample.http2_1.0.0&lt;/code&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;sample.http is ACTIVE :  the &lt;a href=&quot;http://localhost:8080/bridge/helloworld&quot;&gt;http://localhost:8080/bridge/helloworld&lt;/a&gt; URL is available.
  &lt;/li&gt;
&lt;li&gt;sample.http2 is ACTIVE :  the &lt;a href=&quot;http://localhost:8080/bridge/helloworld2&quot;&gt;http://localhost:8080/bridge/helloworld2&lt;/a&gt; URL is available.
  &lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;WEBAppDeployedOutsideWorkspace&quot;&gt;WEB Application (deployed) OUTSIDE Workspace&lt;/h4&gt;
&lt;p&gt;When WEB Application is deployed outside the &lt;strong&gt;.metadata&lt;/strong&gt; folder of the Workspace, ${workspace_loc} must be setted. This case comes from for instance with WTP External Module. To set the workspace_loc value path, you can do it in the &lt;strong&gt;web.xml&lt;/strong&gt; with &lt;strong&gt;init-param&lt;/strong&gt; of the BridgeFilter (or BridgeServlet) like this : &lt;/p&gt;
&lt;pre class=&quot;brush: xml;&quot;&gt;&amp;lt;init-param&amp;gt;
  &amp;lt;param-name&amp;gt;workspace_loc&amp;lt;/param-name&amp;gt;
  &amp;lt;param-value&amp;gt;D://_Projets/Personal/workspace-servletbridge-wordpress/step4&amp;lt;/param-value&amp;gt;
&amp;lt;/init-param&amp;gt;&lt;/pre&gt;
&lt;h3 id=&quot;bundleClassPathEntries&quot;&gt;bundleClassPathEntries&lt;/h3&gt;
&lt;p&gt;At this step, &lt;strong&gt;sample.http2&lt;/strong&gt; compile Java classes to the &lt;strong&gt;/bin&lt;/strong&gt; folder. To check that Open the &lt;strong&gt;Navigator View&lt;/strong&gt; with &lt;strong&gt;Window/Show View/Other…&lt;/strong&gt; and &lt;strong&gt;General/Navigator&lt;/strong&gt; :&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://angelozerr.files.wordpress.com/2010/09/servletbridge_samplehttp2bin2_1.png?w=600&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Sometimes you wish customize this output folder. To do that Go at &lt;strong&gt;Properties Project of the sample.http2&lt;/strong&gt; and click on &lt;strong&gt;Java Build Path&lt;/strong&gt; node. Change « &lt;strong&gt;Default output folder&lt;/strong&gt; » with &lt;strong&gt;sample.http2/bin2&lt;/strong&gt; :  &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://angelozerr.files.wordpress.com/2010/09/servletbridge_samplehttp2bin2_2.png?w=600&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Click OK and go to the &lt;strong&gt;Navigator View&lt;/strong&gt; to check classes are stored in /bin2 folder  : &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://angelozerr.files.wordpress.com/2010/09/servletbridge_samplehttp2bin2_3.png?w=600&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Restart your server and type in the console View&lt;/p&gt;
&lt;div style=&quot;border: black solid 1px; background-color: #f6f6f6;&quot;&gt;&lt;code&gt;ss&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;The OSGi console display the Short Status of the bundles installed : &lt;/p&gt;
&lt;div style=&quot;border: black solid 1px; background-color: #f6f6f6;&quot;&gt;&lt;code&gt;&lt;br /&gt;
...&lt;br /&gt;
15	ACTIVE      sample.http_1.0.0&lt;br /&gt;
16	RESOLVED    sample.http2_1.0.0&lt;br /&gt;
&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;You will notice that sample.http is ACTIVE (it works) but sample.http2 is RESOLVED (problem).&lt;/p&gt;
&lt;p&gt;If you try to force the start of the sample.http2 (in my case with start 16), you will see in the console :&lt;/p&gt;
&lt;div style=&quot;border: black solid 1px; background-color: #f6f6f6;&quot;&gt;&lt;code&gt;osgi&amp;gt; start 16&lt;br /&gt;
org.osgi.framework.BundleException: The activator sample.http2.Activator for bundle sample.http2 is invalid&lt;br /&gt;
...&lt;br /&gt;
Caused by: java.lang.ClassNotFoundException: sample.http2.Activator&lt;br /&gt;
	at java.net.URLClassLoader$1.run(Unknown Source)&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;The error show you that OSGi Equinox container cannot find classes of the sample.http2. To resolve that, you must configure BridgeFilter (or BridgeServlet) to set the classes output folder. In our case, we have : &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;/bin for the sample.http.
  &lt;/li&gt;
&lt;li&gt;/bin2 for the sample.http2.
  &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To configure that, you can do it in the &lt;strong&gt;web.xml&lt;/strong&gt; with &lt;strong&gt;bundleClassPathEntries&lt;/strong&gt; as &lt;strong&gt;init-param&lt;/strong&gt; of the BridgeFilter (or BridgeServlet) like this : &lt;/p&gt;
&lt;pre class=&quot;brush: xml;&quot;&gt;&amp;lt;init-param&amp;gt;
  &amp;lt;param-name&amp;gt;bundleClassPathEntries&amp;lt;/param-name&amp;gt;
  &amp;lt;param-value&amp;gt;bin,bin2&amp;lt;/param-value&amp;gt;
&amp;lt;/init-param&amp;gt;&lt;/pre&gt;
&lt;p&gt;Restart your server and type in the console View&lt;/p&gt;
&lt;div style=&quot;border: black solid 1px; background-color: #f6f6f6;&quot;&gt;&lt;code&gt;ss&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;The OSGi console display the Short Status of the bundles installed : &lt;/p&gt;
&lt;div style=&quot;border: black solid 1px; background-color: #f6f6f6;&quot;&gt;&lt;code&gt;&lt;br /&gt;
...&lt;br /&gt;
15	ACTIVE      sample.http_1.0.0&lt;br /&gt;
16	ACTIVE      sample.http2_1.0.0&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;The sample.http and sample.http2 must be ACTIVE. Here the full web.xml used in this article : &lt;/p&gt;
&lt;pre class=&quot;brush: xml;&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;
&amp;lt;web-app xmlns=&quot;http://java.sun.com/xml/ns/j2ee&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
	xsi:schemaLocation=&quot;http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd&quot;
	version=&quot;2.4&quot;&amp;gt;
	&amp;lt;filter id=&quot;bridge&quot;&amp;gt;
		&amp;lt;filter-name&amp;gt;equinoxbridgefilter&amp;lt;/filter-name&amp;gt;
		&amp;lt;filter-class&amp;gt;org.eclipse.equinox.servletbridge.BridgeFilter&amp;lt;/filter-class&amp;gt;
		&amp;lt;init-param&amp;gt;
			&amp;lt;param-name&amp;gt;commandline&amp;lt;/param-name&amp;gt;
			&amp;lt;param-value&amp;gt;-console&amp;lt;/param-value&amp;gt;
		&amp;lt;/init-param&amp;gt;
		&amp;lt;init-param&amp;gt;
			&amp;lt;param-name&amp;gt;enableFrameworkControls&amp;lt;/param-name&amp;gt;
			&amp;lt;param-value&amp;gt;true&amp;lt;/param-value&amp;gt;
		&amp;lt;/init-param&amp;gt;

		&amp;lt;!-- &amp;lt;init-param&amp;gt;
			&amp;lt;param-name&amp;gt;workspace_loc&amp;lt;/param-name&amp;gt;
			&amp;lt;param-value&amp;gt;D://_Projets/Personal/workspace-servletbridge-wordpress/step4&amp;lt;/param-value&amp;gt;
		&amp;lt;/init-param&amp;gt;
		 --&amp;gt;

		 &amp;lt;init-param&amp;gt;
			&amp;lt;param-name&amp;gt;bundleClassPathEntries&amp;lt;/param-name&amp;gt;
			&amp;lt;param-value&amp;gt;bin,bin2&amp;lt;/param-value&amp;gt;
		&amp;lt;/init-param&amp;gt;
	&amp;lt;/filter&amp;gt;
	&amp;lt;filter-mapping&amp;gt;
		&amp;lt;filter-name&amp;gt;equinoxbridgefilter&amp;lt;/filter-name&amp;gt;
		&amp;lt;url-pattern&amp;gt;/*&amp;lt;/url-pattern&amp;gt;
	&amp;lt;/filter-mapping&amp;gt;
	&amp;lt;!--
	  This is required if your application bundles expose JSPs.
	--&amp;gt;
	&amp;lt;filter-mapping&amp;gt;
		&amp;lt;filter-name&amp;gt;equinoxbridgefilter&amp;lt;/filter-name&amp;gt;
		&amp;lt;url-pattern&amp;gt;*.jsp&amp;lt;/url-pattern&amp;gt;
	&amp;lt;/filter-mapping&amp;gt;

&amp;lt;/web-app&amp;gt;&lt;/pre&gt;
&lt;h3&gt;How it works?&lt;/h3&gt;
&lt;p&gt;To understand how it works, go at the Tomcat work folder where /eclipse folder is deployed (For more information, please read &lt;a href=&quot;http://angelozerr.wordpress.com/2010/09/06/osgi-equinox-in-a-servlet-container-step3/#wtpwebapps&quot;&gt;WTP Deployment [step3]&lt;/a&gt;). You will notice  : &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;work/Catalina/localhost/bridge/eclipse/configuration/&lt;strong&gt;config.ini&lt;/strong&gt; : ${workspace_loc} is replaced with your Workspace path location. In my case I have :
&lt;pre class=&quot;brush: plain;&quot;&gt;osgi.bundles=...reference\:file\:/D\:/_Projets/Personal/workspace-servletbridge-wordpress/step4/sample.http@start,reference\:file\:/D\:/_Projets/Personal/workspace-servletbridge-wordpress/step4/sample.http2@start&lt;/pre&gt;
&lt;/li&gt;
&lt;p&gt;work/Catalina/localhost/bridge/eclipse/&lt;strong&gt;dev.properties&lt;/strong&gt; exists, which is a file generated when HTTP server start. It contains for each bundles declared with &lt;strong&gt;reference\:file&lt;/strong&gt; the list of output folder to use : &lt;/p&gt;
&lt;pre class=&quot;brush: plain;&quot;&gt;sample.http2=bin,bin2
sample.http=bin,bin2&lt;/pre&gt;

&lt;/ul&gt;
&lt;p&gt;OSGi Equinox container (org.eclipse.core.runtime.adaptor.&lt;strong&gt;EclipseStarter()&lt;/strong&gt;) is called with &lt;strong&gt;osgi.dev&lt;/strong&gt; parameter by setting the path of the &lt;strong&gt;dev.properties&lt;/strong&gt; file. For more informations about the Equinox OSGi container configuration, please read &lt;a href=&quot;http://help.eclipse.org/helios/index.jsp?topic=/org.eclipse.platform.doc.isv/reference/misc/runtime-options.html&quot;&gt;The Eclipse runtime options&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;In this article we have seen that &lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=323707&quot;&gt;patch 323707&lt;/a&gt; can be helpfull to :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;host some resources&lt;/strong&gt; (HTML, Javascript, Servlet…) in the bridge WEB Application.
  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;use directly the OSGi bundle coming from the workspace&lt;/strong&gt; with &lt;a href=&quot;http://angelozerr.wordpress.com/2010/09/01/osgi-equinox-in-a-servlet-container-step1/#CreateJARAndDeployBundle&quot;&gt;create and deploy&lt;/a&gt; a JAR in the /plugins folder.
  &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In [step5], I will explain how we could use &lt;strong&gt;Equinox in Servlet Container&lt;/strong&gt; to enjoy OSGi for an another features (different from HTTP services). We will transform bridge WEB Application to have  (a simple) &lt;strong&gt;Electronic Document Management&lt;/strong&gt; WEB application which manage &lt;strong&gt;Documentary Collection&lt;/strong&gt;. &lt;strong&gt;Documentary Collection&lt;/strong&gt; will be managed with an &lt;strong&gt;OSGi bundle&lt;/strong&gt; that we will able to &lt;strong&gt;start/stop&lt;/strong&gt; (with OSGi console) to &lt;strong&gt;register/unregister it to the Documentary Collections&lt;/strong&gt;. &lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/angelozerr.wordpress.com/3158/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/angelozerr.wordpress.com/3158/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/angelozerr.wordpress.com/3158/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/angelozerr.wordpress.com/3158/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gofacebook/angelozerr.wordpress.com/3158/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/angelozerr.wordpress.com/3158/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gotwitter/angelozerr.wordpress.com/3158/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/angelozerr.wordpress.com/3158/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/angelozerr.wordpress.com/3158/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/angelozerr.wordpress.com/3158/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/angelozerr.wordpress.com/3158/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/angelozerr.wordpress.com/3158/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/angelozerr.wordpress.com/3158/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/angelozerr.wordpress.com/3158/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://stats.wordpress.com/b.gif?host=angelozerr.wordpress.com&amp;amp;blog=10338309&amp;amp;post=3158&amp;amp;subd=angelozerr&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Wed, 08 Sep 2010 13:48:02 +0000</pubDate>
</item>
<item>
	<title>Holger Staudacher: What do Scout, EGit, Xtext, p2 and RAP have in common?</title>
	<guid isPermaLink="false">http://eclipsesource.com/blogs/?p=4716</guid>
	<link>http://eclipsesource.com/blogs/2010/09/08/what-do-scout-egit-xtext-p2-and-rap-have-in-common/</link>
	<description>&lt;p&gt;First, they are all Eclipse projects. But I think you already knew this. The second thing they have in common is that they are all part of the &lt;a href=&quot;http://eclipsesource.com/en/about/events/eclipse_karlsruhe_stammtisch/&quot;&gt;Eclipse Stammtisch on September 15th in Karlsruhe&lt;/a&gt; (Germany). It’s an honor to announce that all these projects will be presented by top developers who play an important role in their projects.   I would believe that until the &lt;a href=&quot;http://www.eclipsecon.org/summiteurope2010/&quot;&gt;Eclipse Summit Europe&lt;/a&gt; this will be the last chance to hear this many first class talks. If you are in or around Karlsruhe on September 15th feel free to join us and take the opportunity to see all the mentioned technologies in action.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://eclipsesource.com/en/about/events/eclipse_karlsruhe_stammtisch/&quot;&gt;&lt;img alt=&quot;projectLogos What do Scout, EGit, Xtext, p2 and RAP have in common?  &quot; class=&quot;aligncenter size-full wp-image-4725&quot; height=&quot;231&quot; src=&quot;http://eclipsesource.com/blogs/wp-content/uploads/2010/09/projectLogos.png&quot; title=&quot;Get more infirmation about the Stammtisch&quot; width=&quot;543&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Who’s speaking at the Stammtisch?&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The first talk will be an introduction by Ralph Müller. If you know Ralph you also know that this will be very interesting and you will learn something new about the &lt;a href=&quot;http://eclipse.org/org/&quot;&gt;Eclipse Foundation&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;After Ralph, Matthias Sohn and Stefan Lay from SAP will start the technical talks with an overview of the &lt;a href=&quot;http://eclipse.org/egit/&quot;&gt;EGit project&lt;/a&gt;. Egit is an Eclipse team provider for the popular &lt;a href=&quot;http://git-scm.com/&quot;&gt;git version control system&lt;/a&gt;. I had the opportunity to hear their talk in &lt;a href=&quot;http://jug-mannheim.mixxt.de/&quot;&gt;Mannheim&lt;/a&gt; a week ago -  it’s definitely worth to listening to.&lt;/li&gt;
&lt;li&gt;The third talk will be about &lt;a href=&quot;http://eclipse.org/equinox/p2/&quot;&gt;p2, the Eclipse provisioning technology&lt;/a&gt;.  Ian Bull is coming all the way from Canada – so its a special chance to meet Ian live.&lt;/li&gt;
&lt;li&gt;The next speaker isn’t traveling thousands, but hundreds of kilometers to the Stammtisch. Peter Friese is travelling from Hamburg (Germany) to Karlsruhe and will provide a great talk about &lt;a href=&quot;http://eclipse.org/Xtext/&quot;&gt;Xtext&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Andreas Hoegger has agreed to present a very young Eclipse project called &lt;a href=&quot;http://eclipse.org/scout/&quot;&gt;Scout&lt;/a&gt;. To get you familiar with this application framework Andreas will travel from Zürich (Switzerland) to Karlsruhe.&lt;/li&gt;
&lt;li&gt;Last but not least Benjamin Muskalla will hold the last talk. To round out the evening, he’ll speak about the integration of other Eclipse projects with &lt;a href=&quot;http://eclipse.org/rap/&quot;&gt;RAP&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;How much does it cost?&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Attending the talks is all for free.&lt;/li&gt;
&lt;li&gt;But I think the speakers will appreciate a frosty beverage donation after the Stammtisch. &lt;img alt=&quot;;)&quot; class=&quot;wp-smiley&quot; src=&quot;http://eclipsesource.com/blogs/wp-includes/images/smilies/icon_wink.gif&quot; title=&quot;What do Scout, EGit, Xtext, p2 and RAP have in common?  &quot; /&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;What do you have to do to attend the Stammtisch?&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;First of all you need to read the information on the &lt;a href=&quot;http://eclipsesource.com/en/about/events/eclipse_karlsruhe_stammtisch/&quot;&gt;EclipseSource Stammtisch website&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;After this you can add yourself to the &lt;a href=&quot;http://www.doodle.com/4ns4ezbmbbu78qx8&quot;&gt;doodle for the Stammtisch&lt;/a&gt;. Please let us know if you are coming. Only this makes it possible to organize the event well.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I think this will be a unique opportunity to see these talks in the casual atmosphere of a Stammtisch. Thanks in advance to all speakers for agreeing to participate and for making this evening possible. It’s a great honor to have you all in Karlsruhe.&lt;/p&gt;
&lt;p&gt;After the talks we will all go over to a &lt;a href=&quot;http://www.mille-stelle.de/&quot;&gt;small Italian restaurant&lt;/a&gt; and talk about the topics over a frosty beverage. You are free to join this round and network with the speakers and audience. If you’re not able to attend the Stammtisch you also have a second chance. I think all of the speakers submitted a proposal for the Eclipse Summit Europe. You can attend this event by following the steps described &lt;a href=&quot;http://www.eclipsecon.org/summiteurope2010/registration/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Looking forward to meeting you at the Stammtisch. I will also be there and try to answer questions about RAP &lt;img alt=&quot;;)&quot; class=&quot;wp-smiley&quot; src=&quot;http://eclipsesource.com/blogs/wp-includes/images/smilies/icon_wink.gif&quot; title=&quot;What do Scout, EGit, Xtext, p2 and RAP have in common?  &quot; /&gt; &lt;/p&gt;</description>
	<pubDate>Wed, 08 Sep 2010 06:55:37 +0000</pubDate>
</item>
<item>
	<title>Ken Ryall: CDT-EDC Where is the Exit?</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-7742435659113733626.post-2612581493111802562</guid>
	<link>http://nokiacarbideoneclipse.blogspot.com/2010/09/cdt-edc-where-is-exit.html</link>
	<description>Our team is working on our next generation of C/C++ development tools for Symbian, Carbide 3.0 (C3). These build on the Eclipse Debugger for C/C++ (EDC) that's part of the CDT project. Our test team reported a bug that raises an interesting question for developers: do you want the debugger to show you what's really happening even if it seems a bit confusing?&lt;br /&gt;&lt;br /&gt;Here is the situation: you are debugging a C++ function that looks something like this:&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_8MzFF6b5axY/TIaxvBdAOGI/AAAAAAAAATQ/imYaEgzJLsQ/s1600/Clip+1+%285%29.png&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://1.bp.blogspot.com/_8MzFF6b5axY/TIaxvBdAOGI/AAAAAAAAATQ/imYaEgzJLsQ/s320/Clip+1+%285%29.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Say you are stepping through this function in the debugger and you start at line 31. &quot;value&quot; happens to be 200 so the condition on line 31 fails. You step over and end up on line 36. Step over again to go to line 37. So far everything looks OK. Now you step again from line 37 and you might reasonably expect to exit the function. Instead you end up on line 34! This looks like a heinous bug but is a case of the compiler reorganizing things even in a normal debug build with optimizations off.&lt;br /&gt;&lt;br /&gt;The compiler has built this function by putting all of the return/exit code in one place, in the middle of the function at line 34. At the end of the function, at line 37, instead of generating the exit stuff again it simply jumps to the address at line 34 and exits there. It dutifully and accurately records this bit of slight-of-hand into the symbol information and the EDC debugger shows you on line 34.&lt;br /&gt;&lt;br /&gt;Should the EDC debugger try to detect this just to avoid confusion? Another perspective is that the debugger should show you exactly what's happening even if the result is sometimes puzzling. What do you think the EDC debugger should do?&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/7742435659113733626-2612581493111802562?l=nokiacarbideoneclipse.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Tue, 07 Sep 2010 23:59:15 +0000</pubDate>
	<author>noreply@blogger.com (Ken Ryall)</author>
</item>
<item>
	<title>Roy Ganor: Five (more) tips for speeding up Eclipse PDT</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-36941363.post-759372874438519379</guid>
	<link>http://ganoro.blogspot.com/2010/09/five-more-tips-for-speeding-up-eclipse.html</link>
	<description>In a &lt;a href=&quot;http://www.nwiresoftware.com/blogs/nwire/2010/09/five-tips-speeding-eclipse-pdt-and-nwire&quot;&gt;previous blog post&lt;/a&gt; written by Zviki Cohen, five simple tips were suggested to help Eclipse PHP Development Tools (PDT) users speeding up their development environment . I want to share five more tricks that can dramatically improve your experience with Eclipse and PDT. Not only these tips help speeding up performance but also make your PHP source code more controlled. &lt;br /&gt;&lt;br /&gt;1. Exclude non-source-code folders and manage wisely your project buildpath - Buildpath is a set of paths indicating what folders should be scanned (built) by Eclipse. If the project Buildpath includes its root (for example) then all folders that include images, javascript , style sheets and other non-source related files are listed to the scanner. Although theoretically most of these files are not actually scanned since non-PHP content types files are skipped, Eclipse keeps track on changes and make some redundant operations on these folders that may contain thousands of irrelevant files, hence perform bad .    &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;2. Setup project include path - to optimize the include/require statements path resolving it is more than useful to make sure that the project include path settings are set correctly. Representing the actual include path is a key to make things work smoothly.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;3. External libraries are not part of your code, don't keep it under your project resources - this is a classic project configuration mistake. Make sure that frameworks and external libraries are not included under your project sources, instead link it to your project as a library. Eclipse can relate to these (&quot;static&quot;/&quot;read-only&quot;) frameworks differently than your (&quot;dynamic&quot;/&quot;writeable&quot;) code which is under constant development. Frameworks should be scanned once and not be part of your project source code.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;4. Split your project into sub-projects and modules - it makes sense you separate your core business, services, client side interface, tests and other modules into different projects that have different natures and make the components more flexible and easy to be re-used and maintained by others. Often, I see PHP projects that include dozens of thousands of flat hierarchy source code that is hard to maintain and configure.    &lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;5. Share your project configuration files with your team. Configure your project once  and make sure all team members follow the same conventions and management rules.  These files are located under your project root (the dot files) and can be shared in your source code repository.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;To summarize things &lt;/span&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;&quot;Mastering your development environment is as important as mastering your source code&quot;&lt;/span&gt; - this concept is sometimes forgotten by scripting language developer who are used to a flat hierarchy source code. Although I consider this as a major strength of scripting languages it doesn't mean that project management should be flat... &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/36941363-759372874438519379?l=ganoro.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Tue, 07 Sep 2010 21:18:25 +0000</pubDate>
	<author>ganoro@gmail.com (Roy Ganor)</author>
</item>
<item>
	<title>Eugene Ostroukhov: Using expressions in your extension points</title>
	<guid isPermaLink="false">http://eclipseblog.ostroukhovs.com/?p=200</guid>
	<link>http://eclipseblog.ostroukhovs.com/2010/09/07/using-expressions-in-your-extension-points/</link>
	<description>&lt;p&gt;Originally I meant to create a reference of the Eclipse expressions and properties available in SDK but there is already such article in &lt;a href=&quot;http://wiki.eclipse.org/Command_Core_Expressions&quot; target=&quot;_blank&quot;&gt;Eclipse Wiki&lt;/a&gt;. I would strongly recommend bookmarking that article – it is an excellent reference. I would like to describe how you could leverage the expressions in your extension points (when you declare extension points as opposed to providing extensions to platform extension points). There are several reasons to use expressions as a part of your extension point:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Lazy initialization – expression can be tested without activating the plugin that contributed the extension.&lt;/li&gt;
&lt;li&gt;External declaration – expressions are declared in the plugin.xml and that sometimes makes it easier to maintain them.&lt;/li&gt;
&lt;li&gt;Flexible and pluggable language. Users can leverage &lt;a href=&quot;http://help.eclipse.org/helios/index.jsp?topic=/org.eclipse.platform.doc.isv/reference/extension-points/org_eclipse_core_expressions_definitions.html&quot;&gt;org.eclipse.core.expressions.definitions&lt;/a&gt; extension point to declare reusable expressions. Users can also leverage &lt;a href=&quot;http://help.eclipse.org/helios/index.jsp?topic=/org.eclipse.platform.doc.isv/reference/extension-points/org_eclipse_core_expressions_definitions.html&quot;&gt;org.eclipse.core.expressions.propertyTesters&lt;/a&gt; to declare property testers that contain complex logic.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;To use expression in your extension point you will need to update your extension point schema file (exsd file) to declare expression language elements. The easiest way is by referencing expression language schema:&lt;/p&gt;
&lt;pre class=&quot;brush: xml; &quot;&gt;&amp;lt;include schemaLocation=&quot;schema://org.eclipse.core.expressions/schema/expressionLanguage.exsd&quot;/&amp;gt;
&lt;/pre&gt;
&lt;p&gt;This will import all the elements so you can use them in the extension elements editor:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://eclipseblog.ostroukhovs.com/wp-content/uploads/2010/09/9-7-2010-10-08-47-AM.png&quot;&gt;&lt;img alt=&quot;Expression elmeents in the extension element editor&quot; class=&quot;aligncenter size-full wp-image-201&quot; height=&quot;454&quot; src=&quot;http://eclipseblog.ostroukhovs.com/wp-content/uploads/2010/09/9-7-2010-10-08-47-AM.png&quot; title=&quot;expressionelements&quot; width=&quot;570&quot; /&gt;&lt;/a&gt;Note that you can specify any expression element as the expression root. I would recommend to using the “enablement” element as this would let you get all changes to expression languages as they appear in the subsequent Eclipse releases. Plug-in developers will see the expressions in the PDE editor after extension point definition is updated.&lt;/p&gt;
&lt;p&gt;To test the expression you will need to parse the expression:&lt;/p&gt;
&lt;pre class=&quot;brush: java; &quot;&gt;IConfigurationElement[] children = configurationElement.getChildren(&quot;enablement&quot;);
if (children.length == 1) {
    expression = ExpressionConverter.getDefault().perform(children[0]);
}
&lt;/pre&gt;
&lt;p&gt;Then you will have to create “evaluation context” and evaluate the expression. Evaluation context provides all the variables that are available to the expression – like “activeWorkbenchWindow” and others in the commands framework. You may spacify one object as a “default” (it is “project” variable in my snippet):&lt;/p&gt;
&lt;pre class=&quot;brush: java; &quot;&gt;final EvaluationResult result = expression.evaluate(new EvaluationContext(null, project));
&lt;/pre&gt;
&lt;p&gt;“result” will be one of FALSE, TRUE and NOT_LOADED. NOT_LOADED is mostly when the user references the propery tester from inactive plug-in and tells the framework to avoid plug-in activation to instantiate just the property tester.&lt;/p&gt;
&lt;p&gt;After this point the user will be able to use the expressions with your extension point just the same way they are used in extension points declared by core Eclipse.&lt;/p&gt;
&lt;div&gt;&lt;span style=&quot;font-family: Arial, sans-serif;&quot;&gt;&lt;span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;

&lt;img height=&quot;1&quot; src=&quot;http://feeds.feedburner.com/~r/ThoughtsAboutEclipseUi/~4/7dYdjQ8mDQs&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Tue, 07 Sep 2010 17:31:36 +0000</pubDate>
</item>
<item>
	<title>David Bosschaert: OSGi 4.2 Enterprise Interfaces Jar now available in Maven Central</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-4030657773074828717.post-6255163593689668438</guid>
	<link>http://osgithoughts.blogspot.com/2010/09/osgi-42-enterprise-interfaces-jar-now.html</link>
	<description>I can only say: apologies that this took so long, but the OSGi Enterprise Jar is now available from maven central:&lt;br /&gt;&lt;br /&gt;group ID: org.osgi &lt;br /&gt;artifact ID: org.osgi.enterprise &lt;br /&gt;version: 4.2.0&lt;br /&gt;&lt;br /&gt;or directly here:  &lt;a href=&quot;http://repo1.maven.org/maven2/org/osgi/org.osgi.enterprise/4.2.0/&quot;&gt;http://repo1.maven.org/maven2/org/osgi/org.osgi.enterprise/4.2.0/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This should make using Enterprise OSGi from Maven builds a lot easier.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/4030657773074828717-6255163593689668438?l=osgithoughts.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Tue, 07 Sep 2010 15:56:03 +0000</pubDate>
	<author>david.bosschaert@gmail.com (davidb)</author>
</item>
<item>
	<title>EclipseLive: Upcoming Event: Build Custom Maximo Reports with BIRT</title>
	<guid isPermaLink="false">http://live.eclipse.org/971 at http://live.eclipse.org</guid>
	<link>http://live.eclipse.org/node/971</link>
	<description>Event Date: September 22, 2010 6:00 pm GMT-8&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://live.eclipse.org/www.birt-exchange.com/be/info/be-092210-banetti_build_custom_reports-maximo/&quot;&gt;Register Now&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;   

&lt;div class=&quot;field field-type-text field-field-author&quot; id=&quot;author&quot;&gt;
  &lt;span class=&quot;field-item&quot;&gt;BIRT Exchange&lt;/span&gt;
&lt;/div&gt;

&lt;div class=&quot;resource-icon&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://live.eclipse.org/files/ECLP_webinar.gif&quot; /&gt; &lt;/div&gt;  

&lt;div id=&quot;abstract&quot;&gt;
	&lt;span class=&quot;field-label&quot;&gt;Abstract:&lt;/span&gt;  
	&lt;div class=&quot;field field-type-text field-field-author&quot;&gt;
	  &lt;span class=&quot;field-item&quot;&gt;Take this FREE online workshop to learn how to:
&lt;ul&gt;
&lt;li&gt;Create a custom Maximo BIRT report with tables and charts&lt;/li&gt;
&lt;li&gt;Easily modify Maximo BIRT reports, without SQL or database skills&lt;/li&gt;
&lt;li&gt;Enable ad hoc BIRT reporting by business users, safely managed by IT&lt;/li&gt;
&lt;li&gt;Combine Maximo data with other enterprise data to improve business analysis&lt;/li&gt;
&lt;/ul&gt;
&lt;/span&gt;&lt;br /&gt;
	  &lt;span class=&quot;field-item&quot;&gt;&lt;a href=&quot;http://del.icio.us/post?url=http%3A%2F%2Flive.eclipse.org%2Fnode%2F18&amp;amp;title=Webinar&quot; rel=&quot;nofollow&quot; title=&quot;Bookmark this post on del.icio.us.&quot;&gt;&lt;img alt=&quot;delicious&quot; src=&quot;http://live.eclipse.org/modules/service_links/delicious.png&quot; /&gt; delicious&lt;/a&gt; | &lt;a href=&quot;http://digg.com/submit?phase=2&amp;amp;url=http%3A%2F%2Flive.eclipse.org%2Fnode%2F18&amp;amp;title=Webinar&quot; rel=&quot;nofollow&quot; title=&quot;Digg this post on digg.com.&quot;&gt;&lt;img alt=&quot;digg&quot; src=&quot;http://live.eclipse.org/modules/service_links/digg.png&quot; /&gt; digg&lt;/a&gt; | &lt;a href=&quot;http://www.dzone.com/links/add.html?url=http%3A%2F%2Flive.eclipse.org%2Fnode%2F18&amp;amp;title=Webinar&quot; rel=&quot;nofollow&quot; title=&quot;Tag this post on DZone.&quot;&gt;&lt;img alt=&quot;dzone&quot; src=&quot;http://live.eclipse.org/modules/service_links/dzone.png&quot; /&gt; dzone&lt;/a&gt;&lt;/span&gt;
	&lt;/div&gt;
	
&lt;/div&gt;

&lt;div id=&quot;embedded&quot;&gt;
	  &lt;/div&gt;</description>
	<pubDate>Tue, 07 Sep 2010 13:26:01 +0000</pubDate>
	<author>lynn.gayowski@eclipse.org (EclipseLive)</author>
</item>
<item>
	<title>Oisín Hurley: OSGi Training in Dublin</title>
	<guid isPermaLink="false">http://oisinh.wordpress.com/?p=342</guid>
	<link>http://feedproxy.google.com/~r/oisin/~3/Y1TIUALIpYQ/</link>
	<description>&lt;p&gt;The I&lt;a href=&quot;http://www.isa-skillnet.com/&quot;&gt;SA-Skillnet&lt;/a&gt; folks have set up a rare local opportunity for people to get some insights into the world of OSGi on Thursday this week (9th September) at the &lt;a href=&quot;http://maps.google.com/maps/place?cid=12271940990173731235&amp;amp;q=Irish+Business+and+Employers+Confederation&quot;&gt;IBEC offices on Lower Baggot St&lt;/a&gt;.  The inimitable &lt;a href=&quot;http://eclipsesource.com/blogs/author/irbull/&quot;&gt;Ian Bull&lt;/a&gt;, the lead for the &lt;a href=&quot;http://www.eclipse.org/gef/zest/&quot;&gt;Eclipse Zest&lt;/a&gt; visualization toolkit and an &lt;a href=&quot;http://wiki.eclipse.org/Equinox/p2&quot;&gt;Equinox p2&lt;/a&gt; committer will be doing the pitch. Ian knows his onions when it comes to this material and if you are looking for a solid explanation of why OSGi exists, what it does and how you can use it to structure your Java development and enforce runtime component isolation, you should get your carcass over to this talk, which is &lt;b&gt;free&lt;/b&gt; to anyone who works for an Software Skillnet member company – list of members &lt;a href=&quot;http://www.isa-skillnet.com/Member%20Companies%202010.pdf&quot;&gt;here (PDF link&lt;/a&gt;). You could get your company to &lt;a href=&quot;http://www.isa-skillnet.com/Company_Membership/93&quot;&gt;join up&lt;/a&gt;, or just email them an ask about individual access.&lt;/p&gt;
&lt;p&gt;Here’s the announcement: &lt;a href=&quot;http://www.isa-skillnet.com/Training_Courses/88#ss162&quot;&gt; http://www.isa-skillnet.com/Training_Courses/88#ss162&lt;/a&gt;. The show starts at 1745.&lt;/p&gt;
&lt;br /&gt;Filed under: &lt;a href=&quot;http://oisinh.wordpress.com/category/conferences/&quot;&gt;conferences&lt;/a&gt;, &lt;a href=&quot;http://oisinh.wordpress.com/category/eclipse/&quot;&gt;eclipse&lt;/a&gt;, &lt;a href=&quot;http://oisinh.wordpress.com/category/osgi/&quot;&gt;osgi&lt;/a&gt;, &lt;a href=&quot;http://oisinh.wordpress.com/category/software-build/&quot;&gt;software build&lt;/a&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/oisinh.wordpress.com/342/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/oisinh.wordpress.com/342/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/oisinh.wordpress.com/342/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/oisinh.wordpress.com/342/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gofacebook/oisinh.wordpress.com/342/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/oisinh.wordpress.com/342/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gotwitter/oisinh.wordpress.com/342/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/oisinh.wordpress.com/342/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/oisinh.wordpress.com/342/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/oisinh.wordpress.com/342/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/oisinh.wordpress.com/342/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/oisinh.wordpress.com/342/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/oisinh.wordpress.com/342/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/oisinh.wordpress.com/342/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://stats.wordpress.com/b.gif?host=oisinh.wordpress.com&amp;amp;blog=4822470&amp;amp;post=342&amp;amp;subd=oisinh&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/oisin?a=Y1TIUALIpYQ:ivH09fiS8dw:yIl2AUoC8zA&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://feeds.feedburner.com/~ff/oisin?d=yIl2AUoC8zA&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/oisin?a=Y1TIUALIpYQ:ivH09fiS8dw:V_sGLiPBpWU&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://feeds.feedburner.com/~ff/oisin?i=Y1TIUALIpYQ:ivH09fiS8dw:V_sGLiPBpWU&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/oisin?a=Y1TIUALIpYQ:ivH09fiS8dw:F7zBnMyn0Lo&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://feeds.feedburner.com/~ff/oisin?i=Y1TIUALIpYQ:ivH09fiS8dw:F7zBnMyn0Lo&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/oisin?a=Y1TIUALIpYQ:ivH09fiS8dw:dnMXMwOfBR0&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://feeds.feedburner.com/~ff/oisin?d=dnMXMwOfBR0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img height=&quot;1&quot; src=&quot;http://feeds.feedburner.com/~r/oisin/~4/Y1TIUALIpYQ&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Tue, 07 Sep 2010 09:34:32 +0000</pubDate>
</item>
<item>
	<title>Lars Vogel: Viewpoints – Output all Eclipse views your are using</title>
	<guid isPermaLink="false">http://www.vogella.de/blog/?p=2913</guid>
	<link>http://www.vogella.de/blog/2010/09/07/eclipse-iviewregistry/</link>
	<description>&lt;div style=&quot;float: right; width: 42px; padding-right: 10px; margin: 0 0 0 10px;&quot;&gt;
		
		&lt;/div&gt;&lt;p&gt;I received the question how someone could see all available views. &lt;/p&gt;
&lt;p&gt;This is easy, Eclipse 3.x allows access to the current available views via PlatformUI.getWorkbench().getViewRegistry(). &lt;/p&gt;
&lt;p&gt;For example this command handler prints out the ID’s of all available views. &lt;/p&gt;
&lt;pre class=&quot;brush: plain;&quot;&gt;public class SampleHandler extends AbstractHandler {
	public Object execute(ExecutionEvent event) throws ExecutionException {
		// Views
		System.out.println(&quot;All my View ID's&quot;);
		IViewRegistry viewRegistry = PlatformUI.getWorkbench().getViewRegistry();
		IViewDescriptor[] views = viewRegistry.getViews();
		for (IViewDescriptor iViewDescriptor : views) {
			System.out.println(iViewDescriptor.getId());
		}
		return null;
	}
}
&lt;/pre&gt;
&lt;div style=&quot;clear: both;&quot;&gt; &lt;/div&gt;</description>
	<pubDate>Tue, 07 Sep 2010 05:16:12 +0000</pubDate>
</item>
<item>
	<title>Andrew Eisenberg: Where are all my stubs?</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-6917071644715743308.post-3423631104386646006</guid>
	<link>http://contraptionsforprogramming.blogspot.com/2010/09/where-are-all-my-stubs.html</link>
	<description>&lt;br /&gt;The standard way of compiling joint Groovy-Java code outside of Eclipse has always been through the use of stubs:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Generate Java stub files for the Groovy files&lt;/li&gt;&lt;li&gt;Compile the Java files using the stubs to compile against&lt;/li&gt;&lt;li&gt;Compile the Groovy files&lt;/li&gt;&lt;/ol&gt;  &lt;br /&gt;Although this works reasonably well in many situations, there are some complications and problems with this approach, most of which have already been described recently in detail on the groovy-dev mailing list &lt;a href=&quot;http://groovy.329449.n5.nabble.com/Groovy-s-stub-generator-clearly-broken-tp2267109p2267109.html&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;http://groovy.329449.n5.nabble.com/Groovy-needs-better-Maven-support-td1842298.html#a1842353&quot;&gt;here&lt;/a&gt;, so I won't go into them in this post.&lt;br /&gt;&lt;br /&gt;About a year ago, we introduced &lt;a href=&quot;http://blog.springsource.com/2009/07/30/a-groovier-eclipse-experience/&quot;&gt;Groovy-Eclipse 2.0&lt;/a&gt;, which compiles Groovy code by plugging into the JDT compiler and does not need to generate stub files.   And as Andy Clement &lt;a href=&quot;http://andrewclement.blogspot.com/2010/02/running-groovy-eclipse-joint-compiler.html&quot;&gt;describes&lt;/a&gt;, it is possible to run the compiler in batch mode on the command line.&lt;br /&gt;&lt;br /&gt;And now, with a little bit of glue code required, I have released a snapshot of the compiler with both ant and maven integration. Although, this is still early work, I do hope that this approach will solve many of the problems that Groovy programmers are having with stub generation.  I'll describe below how they both work.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Ant integration for Groovy-Eclipse&lt;/h2&gt;&lt;br /&gt;Ant integration for the batch compiler is fairly simple.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Download the &lt;a href=&quot;http://codehaus.org/~werdna/groovy-eclipse-batch-0.5.0.jar&quot;&gt;groovy-eclipse-batch-0.5.0.jar&lt;/a&gt; from its temporary location.&lt;/li&gt;&lt;li&gt;Add this jar to your &lt;code&gt;~/.ant/lib&lt;/code&gt; directory.&lt;/li&gt;&lt;li&gt;Once you have that, you need to set the &lt;code&gt;build.compiler&lt;/code&gt; property to &lt;code&gt;org.codehaus.groovy.eclipse.ant.GroovyCompilerAdapter&lt;/code&gt;.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;This will cause ant's &lt;a href=&quot;http://www.jajakarta.org/ant/ant-1.6.1/docs/en/manual/CoreTasks/javac.html&quot;&gt;javac task&lt;/a&gt; to delegate the Groovy-Eclipse compiler for the actual compilation.  This means that it is possible to pass any combination of Groovy and Java files to the compiler and most parameters applicable for javac are still available when using the compiler adapter.&lt;br /&gt;&lt;br /&gt;A very simple script that uses the Groovy compiler adapter looks like this:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&amp;lt;target name=&quot;compile&quot;&amp;gt;&lt;br /&gt;  &amp;lt;property name=&quot;build.compiler&quot;&lt;br /&gt;           value=&quot;org.codehaus.groovy.eclipse.ant.GroovyCompilerAdapter&quot;&amp;gt;&lt;br /&gt;  &amp;lt;javac srcdir=&quot;src&quot; destdir=&quot;bin&quot;/&amp;gt;&lt;br /&gt;&amp;lt;/target&amp;gt;&lt;/pre&gt;&lt;br /&gt;This script sets compiler adapter and compiles all source files in &lt;code&gt;src&lt;/code&gt;, placing the resulting class files in &lt;code&gt;bin&lt;/code&gt;.  Both &lt;code&gt;*.java&lt;/code&gt; files and &lt;code&gt;*.groovy&lt;/code&gt; files are included in the compilation.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Maven integration for Groovy-Eclipse&lt;/h2&gt;&lt;br /&gt;Groovy-Eclipse can now also be used from maven.   To do so, add the following to your pom.xml.&lt;br /&gt;&lt;br /&gt;The artifacts are currently in the SpringSource snapshot maven repo:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&amp;lt;repositories&amp;gt;&lt;br /&gt;  &amp;lt;repository&amp;gt;&lt;br /&gt;  &amp;lt;id&amp;gt;springsource&amp;lt;/id&amp;gt;&lt;br /&gt;  &amp;lt;url&amp;gt;http://maven.springframework.org/snapshot&amp;lt;/url&amp;gt;&lt;br /&gt;  &amp;lt;releases&amp;gt;&amp;lt;enabled&amp;gt;true&amp;lt;/enabled&amp;gt;&amp;lt;/releases&amp;gt;&lt;br /&gt;  &amp;lt;snapshots&amp;gt;&amp;lt;enabled&amp;gt;true&amp;lt;/enabled&amp;gt;&amp;lt;/snapshots&amp;gt;&lt;br /&gt;  &amp;lt;/repository&amp;gt;&lt;br /&gt;&amp;lt;/repositories&amp;gt;&lt;/pre&gt;&lt;br /&gt;And in your plugin section, you must change the compiler used by the maven-compiler-plugin.  Like the javac ant task, the maven-compiler-plugin does not actually compile, but rather delegates the compilation to a different artifact:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&amp;lt;build&amp;gt;&lt;br /&gt;...&lt;br /&gt;&amp;lt;plugins&amp;gt;&lt;br /&gt;  &amp;lt;plugin&amp;gt;&lt;br /&gt;    &amp;lt;artifactid&amp;gt;maven-compiler-plugin&amp;lt;/artifactid&amp;gt;&lt;br /&gt;    &amp;lt;version&amp;gt;2.3.1&amp;lt;/version&amp;gt;&lt;br /&gt;    &amp;lt;configuration&amp;gt;&lt;br /&gt;      &amp;lt;compilerid&amp;gt;groovy-eclipse-compiler&amp;lt;/compilerid&amp;gt;&lt;br /&gt;      &amp;lt;verbose&amp;gt;true&amp;lt;/verbose&amp;gt;&lt;br /&gt;    &amp;lt;/configuration&amp;gt;&lt;br /&gt;    &amp;lt;dependencies&amp;gt;&lt;br /&gt;      &amp;lt;dependency&amp;gt;&lt;br /&gt;        &amp;lt;groupid&amp;gt;org.codehaus.groovy&amp;lt;/groupid&amp;gt;&lt;br /&gt;        &amp;lt;artifactid&amp;gt;groovy-eclipse-compiler&amp;lt;/artifactid&amp;gt;&lt;br /&gt;        &amp;lt;version&amp;gt;0.0.1-SNAPSHOT&amp;lt;/version&amp;gt;&lt;br /&gt;      &amp;lt;/dependency&amp;gt;&lt;br /&gt;    &amp;lt;/dependencies&amp;gt;&lt;br /&gt;  &amp;lt;/plugin&amp;gt;&lt;br /&gt;  ...&lt;br /&gt;&amp;lt;/plugins&amp;gt;&lt;br /&gt;&amp;lt;/build&amp;gt;&lt;/pre&gt;&lt;br /&gt;This will allow Groovy files to be compiled.  The maven-compiler-plugin prefers all source files to be in &lt;code&gt;src/main/java&lt;/code&gt; and &lt;code&gt;src/test/java&lt;/code&gt;, but if you prefer you can use the standard Groovy convention and keep your files in &lt;code&gt;src/main/groovy&lt;/code&gt; and &lt;code&gt;src/test/groovy&lt;/code&gt;.  You can do so by adding the following plugin to your build section of the pom:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&amp;lt;plugin&amp;gt;&lt;br /&gt;  &amp;lt;groupid&amp;gt;org.codehaus.mojo&amp;lt;/groupid&amp;gt;&lt;br /&gt;  &amp;lt;artifactid&amp;gt;build-helper-maven-plugin&amp;lt;/artifactid&amp;gt;&lt;br /&gt;  &amp;lt;version&amp;gt;1.5&amp;lt;/version&amp;gt;&lt;br /&gt;  &amp;lt;executions&amp;gt;&lt;br /&gt;    &amp;lt;execution&amp;gt;&lt;br /&gt;      &amp;lt;id&amp;gt;add-source&amp;lt;/id&amp;gt;&lt;br /&gt;      &amp;lt;phase&amp;gt;generate-sources&amp;lt;/phase&amp;gt;&lt;br /&gt;      &amp;lt;goals&amp;gt;&lt;br /&gt;        &amp;lt;goal&amp;gt;add-source&amp;lt;/goal&amp;gt;&lt;br /&gt;      &amp;lt;/goals&amp;gt;&lt;br /&gt;      &amp;lt;configuration&amp;gt;&lt;br /&gt;        &amp;lt;sources&amp;gt;&lt;br /&gt;          src/main/groovy&lt;br /&gt;          src/test/groovy&lt;br /&gt;        &amp;lt;/sources&amp;gt; &lt;br /&gt;      &amp;lt;/configuration&amp;gt;&lt;br /&gt;    &amp;lt;/execution&amp;gt;&lt;br /&gt;  &amp;lt;/executions&amp;gt;&lt;br /&gt;&amp;lt;/plugin&amp;gt;&lt;/pre&gt;  &lt;br /&gt;This approach is still in an alpha state and has not been widely tested.  It was hard to find reasonably large Groovy-Java projects that use maven for me to try this on.  The largest project I have compiled in this way is the &lt;a href=&quot;http://gpars.codehaus.org/&quot;&gt;GPars project&lt;/a&gt; (GPars uses gradle for its build, but I adapted its build.gradle to a pom.xml and successfully ran maven on it).  This project includes 168 Java and Groovy files in main as well as 338 Groovy files in test.  In a not particularly scientific manner, I did a few runs of building the main and test classes using both Groovy-Eclipse and GMaven and the results are that Groovy-Eclipse is reasonably faster than GMaven for this project:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt; Time to compile main and test classes using GMaven: 36s&lt;/li&gt;&lt;li&gt; Time to compile main and test classes using Groovy-Eclipse: 28s&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;In addition to being largely untested in the wild, there are a few caveats when using Groovy-Eclipse:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt; Since stubs are not generated, GroovyDoc and any other artifacts that rely on stubs cannot be generated.&lt;/li&gt;&lt;li&gt;This only supports Groovy 1.7.&lt;/li&gt;&lt;li&gt;Third (ant only), your project must have at least one Java file in it (this can be an empty stub), or else ant will finish without compiling anything.  There is a patch for this (&lt;a href=&quot;https://issues.apache.org/bugzilla/show_bug.cgi?id=48829&quot;&gt;Bug 48829&lt;/a&gt;), but I am waiting for it to be contributed back to ant.&lt;/li&gt;&lt;li&gt;Fourth (maven only), your maven project must have at least one groovy file or else compilation will not occur.  (Though, if your project &lt;em&gt;doesn't&lt;/em&gt; have any Groovy files, then why are you using a Groovy compiler?)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;There is still some work to be done, but it is ready enough for people to start trying it out.  Feedback is greatly appreciated.  You can reply to this blog post, send a message to the &lt;a href=&quot;http://xircles.codehaus.org/lists/eclipse-plugin-user@groovy.codehaus.org&quot;&gt;mailing list&lt;/a&gt;, or &lt;a href=&quot;http://jira.codehaus.org/browse/GRECLIPSE&quot;&gt;raise an issue on jira&lt;/a&gt;.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/6917071644715743308-3423631104386646006?l=contraptionsforprogramming.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Tue, 07 Sep 2010 04:04:30 +0000</pubDate>
	<author>noreply@blogger.com (Andrew Eisenberg)</author>
</item>
<item>
	<title>Deepak Azad: New Command in JDT : Open from Clipboard</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-1616206987206690523.post-3730095975822231707</guid>
	<link>http://thecoderlounge.blogspot.com/2010/09/new-command-in-jdt-open-from-clipboard.html</link>
	<description>This is what I used to end up doing very frequently&lt;br /&gt;- copy something like String#getBytes from a bug comment&lt;br /&gt;- press Ctrl+Shift+T in Eclipse&lt;br /&gt;- paste the copied text Open Type dialog&lt;br /&gt;- argh... no matches&lt;br /&gt;- delete the method name&lt;br /&gt;- open the type in an editor&lt;br /&gt;- press Ctrl+O &lt;br /&gt;- argh.. what was that method again?&lt;br /&gt;- go back to bugzilla and read/copy the method name&lt;br /&gt;- come back to Quick Outline and filter the method&lt;br /&gt;- and finally reach the method&lt;br /&gt;&lt;br /&gt;&lt;b&gt;The new command opens a &lt;/b&gt;&lt;b&gt;Java element or a &lt;/b&gt;&lt;b&gt;Java stack trace from clipboard&lt;/b&gt;. If the clipboard  content spans multiple lines then the it is pasted to the Java Stack Trace  Console. If the clipboard content is a single line the command tries to open the  matching Java element in an editor. Some examples&lt;br /&gt;&lt;ul&gt;&lt;li&gt;java.lang.String  &lt;/li&gt;&lt;li&gt;String#getBytes  &lt;/li&gt;&lt;li&gt;java.lang.String.getBytes(String, int[], int)  &lt;/li&gt;&lt;li&gt;String.java:123  &lt;/li&gt;&lt;li&gt;at java.lang.String.matches(String.java:1550)  &lt;/li&gt;&lt;li&gt;java.lang.String.valueOf(char) line: 1456  &lt;/li&gt;&lt;/ul&gt;I use this command with a key binding of &lt;b&gt;Ctrl+Shift+V&lt;/b&gt;. After doing a Ctrl+C the most natural thing to do is Ctrl+V so the key binding for this command should be similar. Plus Ctrl+Shift+V is also similar to Ctrl+Shift+T and Ctrl+Shift+R, making it a bit easier for me to remember it.&lt;br /&gt;&lt;br /&gt;This command (&lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=48880&quot; name=&quot;b48880&quot;&gt;Bug 48880&lt;/a&gt;) is already in nightly builds and will be in the today's I-build. &lt;br /&gt;&lt;br /&gt;As a final note I should also mention 2 'nasty' Platform bugs that I faced while implementing this command&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://bugs.eclipse.org/324160&quot;&gt;Bug 324160&lt;/a&gt;: [Commands] Platform should support to use the action IDs from the action set contribution in menuContribution&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://bugs.eclipse.org/324161&quot;&gt;Bug 324161&lt;/a&gt;: menu contributions added using 'endof' should appear before contributions added using 'after'&lt;/li&gt;&lt;/ul&gt;I say nasty because in its current form the whole menu contribution, command, actionSet, action story can be very confusing...&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/1616206987206690523-3730095975822231707?l=thecoderlounge.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Tue, 07 Sep 2010 02:02:51 +0000</pubDate>
	<author>noreply@blogger.com (Deepak Azad)</author>
</item>
<item>
	<title>Mukul Gandhi: XML Schema 1.1: Xerces-J implementation updates</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-5048327124946889578.post-1492429307443955199</guid>
	<link>http://mukulgandhi.blogspot.com/2010/09/xml-schema-11-xerces-j-implementation.html</link>
	<description>Over the past one or two months, there have been few interesting changes happening at Xerces-J &lt;a href=&quot;http://www.w3.org/XML/Schema&quot;&gt;XML Schema&lt;/a&gt; 1.1 implementation. I feel obliged to share these enhancements with the XML Schema community, and also with folks at &lt;a href=&quot;http://www.eclipse.org/webtools/&quot;&gt;Eclipse WTP&lt;/a&gt; (where we enhanced few &quot;schema aware&quot; components of &lt;a href=&quot;http://wiki.eclipse.org/PsychoPathXPathProcessor&quot;&gt;PsychoPath XPath 2.0 engine&lt;/a&gt;, to support these recent Xerces enhancements -- I think we improved the design of typed values of XML element and attribute &lt;a href=&quot;http://www.w3.org/TR/xpath-datamodel/&quot;&gt;XDM&lt;/a&gt; nodes in PsychoPath XPath2 engine, in case the XDM node has a type annotation of kind simpleType, with varieties list or union).&lt;br /&gt;&lt;br /&gt;Here's a summary of XML Schema 1.1 assertion changes that have recently been completed with Xerces (available at Xerces SVN repos as of now), which are planned to be part of the Xerces-J 2.11.0 release, planned to take please during November 2010 time frame.&lt;br /&gt;&lt;br /&gt;1. &lt;a href=&quot;http://xerces.apache.org/xerces2-j/&quot;&gt;Xerces-J&lt;/a&gt; now has a complete implementation of &lt;a href=&quot;http://www.w3.org/TR/xmlschema11-1/#cip&quot;&gt;XML Schema 1.1 conditional inclusion&lt;/a&gt; functionality. The Xerces-J 2.10.0 release had implementation of XML Schema 1.1 conditional inclusion vc:minVersion and vc:maxVersion attributes. Xerces-J now supports all of &quot;conditional inclusion&quot; attributes as specified by the XML Schema 1.1 spec. The &quot;conditional inclusion&quot; attributes that are now newly supported in Xerces-J are: vc:typeAvailable, vc:typeUnavailable, vc:facetAvailable and vc:facetUnavailable. All of XML Schema 1.1 built-in types and facets are now supported by Xerces-J related to XML Schema 1.1 &quot;conditional inclusion&quot; components.&lt;br /&gt;&lt;br /&gt;2. There are few interesting changes that have happened to Xerces-J &lt;a href=&quot;http://www.w3.org/TR/xmlschema11-1/#cAssertions&quot;&gt;XML Schema 1.1 assertions&lt;/a&gt; implementation as well, that are planned to be part of Xerces-J 2.11.0 release. Xerces now has an improved assertions evaluation processing on XML Schema (1.1) simple types, with varieties 'list' and 'union'.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2.1 Enhancements to assertions evaluation on simpleType -&amp;gt; list:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Here's an example of XML Schema 1.1 assertions on an xs:list schema component:&lt;br /&gt;&lt;i&gt;[XML Schema 1]&lt;/i&gt;&lt;br /&gt;&lt;pre&gt;   &amp;lt;xs:schema xmlns:xs=&quot;http://www.w3.org/2001/XMLSchema&quot;&amp;gt;&lt;br /&gt;&lt;br /&gt;      &amp;lt;xs:element name=&quot;Example&quot; type=&quot;EXAMPLE_LIST&quot; /&amp;gt;&lt;br /&gt;   &lt;br /&gt;      &amp;lt;xs:simpleType name=&quot;EXAMPLE_LIST&quot;&amp;gt;&lt;br /&gt;         &amp;lt;xs:list&amp;gt;&lt;br /&gt;            &amp;lt;xs:simpleType&amp;gt;&lt;br /&gt;               &amp;lt;xs:restriction base=&quot;xs:integer&quot;&amp;gt;&lt;br /&gt;                  &amp;lt;xs:assertion test=&quot;$value mod 2 = 0&quot; /&amp;gt;&lt;br /&gt;               &amp;lt;/xs:restriction&amp;gt;&lt;br /&gt;            &amp;lt;/xs:simpleType&amp;gt;&lt;br /&gt;         &amp;lt;/xs:list&amp;gt;&lt;br /&gt;      &amp;lt;/xs:simpleType&amp;gt;&lt;br /&gt;   &lt;br /&gt;   &amp;lt;/xs:schema&amp;gt; &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;If an XML instance document has a structure something like following:&lt;br /&gt;&lt;i&gt;[XML 1]&lt;/i&gt;&lt;br /&gt;&amp;lt;Example&amp;gt;1 2 3&amp;lt;/Example&amp;gt;&lt;br /&gt;&lt;br /&gt;And if this XML instance document (&lt;i&gt;[XML 1]&lt;/i&gt;) is validated by the above XML schema (&lt;i&gt;[XML Schema 1]&lt;/i&gt;), Xerces-J would report error messages like following (assuming the name of XML document was, test.xml):&lt;br /&gt;&lt;i&gt;[Error] test.xml:1:25: cvc-assertion.3.13.4.1: Assertion evaluation ('$value mod 2 = 0') for element 'Example' with type '#anonymous' did not succeed. Assertion failed for an xs:list member value '1'.&lt;br /&gt;[Error] test.xml:1:25: cvc-assertion.3.13.4.1: Assertion evaluation ('$value mod 2 = 0') for element 'Example' with type '#anonymous' did not succeed. Assertion failed for an xs:list member value '3'.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;An assertion must evaluate on every &lt;i&gt;simpleType -&amp;gt; 'list'&lt;/i&gt; item (which is validated by the itemType of xs:list) in an XML instance document. Xerces now does this, and needed error messages are displayed in case of schema assertion failures.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2.2 Enhancements to assertions evaluation on simpleType -&amp;gt; union:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Here's an example of XML Schema 1.1 assertions on an xs:union schema component:&lt;br /&gt;&lt;i&gt;[XML Schema 2]&lt;/i&gt;&lt;br /&gt;&lt;pre&gt;   &amp;lt;xs:schema xmlns:xs=&quot;http://www.w3.org/2001/XMLSchema&quot;&amp;gt;&lt;br /&gt;   &lt;br /&gt;      &amp;lt;xs:element name=&quot;Example&quot;&amp;gt;&lt;br /&gt;         &amp;lt;xs:simpleType&amp;gt;&lt;br /&gt;            &amp;lt;xs:union memberTypes=&quot;MYDATE xs:integer&quot; /&amp;gt;&lt;br /&gt;         &amp;lt;/xs:simpleType&amp;gt;&lt;br /&gt;      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;   &lt;br /&gt;      &amp;lt;xs:simpleType name=&quot;MYDATE&quot;&amp;gt;&lt;br /&gt;         &amp;lt;xs:restriction base=&quot;xs:date&quot;&amp;gt;&lt;br /&gt;            &amp;lt;xs:assertion test=&quot;$value lt current-date()&quot; /&amp;gt;&lt;br /&gt;         &amp;lt;/xs:restriction&amp;gt;&lt;br /&gt;      &amp;lt;/xs:simpleType&amp;gt;&lt;br /&gt;&lt;br /&gt;   &amp;lt;/xs:schema&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;If an XML instance document has a structure something like following:&lt;br /&gt;[XML 2]&lt;br /&gt;&amp;lt;Example&amp;gt;2010-12-05&amp;lt;/Example&amp;gt;&lt;br /&gt;&lt;br /&gt;And this XML instance document is validated by the schema document, &lt;i&gt;[XML Schema 2]&lt;/i&gt; the following error message is displayed by Xerces:&lt;br /&gt;&lt;i&gt;[Error] temp.xml:1:30: cvc-assertion.union.3.13.4.1: Element 'Example' with value '2010-12-05' is not locally valid. One or more of the assertion facets on an element's schema type, with variety union, have failed.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Xerces tried to validate an atomic value '2010-12-05' both with schema types xs:integer and MYDATE. Since none of these types could successfully validate this atomic value, and an assertion failed in the process of these validation checks, the relevant assertion failure was reported by Xerces.&lt;br /&gt;&lt;br /&gt;If the XML schema, &lt;i&gt;[XML Schema 2]&lt;/i&gt; tries to validate the XML instance document:&lt;br /&gt;&amp;lt;example&amp;gt;10&amp;lt;/Example&amp;gt;&lt;br /&gt;&lt;br /&gt;no validation failures are reported in this case, since an atomic value '10' conforms to the schema type xs:integer, which results in an overall validation success of the atomic value with an 'union' schema type. &lt;br /&gt;&lt;br /&gt;I'm ending this blog post now. Stay tuned for more news :)&lt;br /&gt;&lt;br /&gt;And I hope, that this post was useful.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/5048327124946889578-1492429307443955199?l=mukulgandhi.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Mon, 06 Sep 2010 23:38:56 +0000</pubDate>
	<author>noreply@blogger.com (Mukul Gandhi)</author>
</item>
<item>
	<title>Angelo Zerr: OSGi Equinox in a Servlet Container [step3]</title>
	<guid isPermaLink="false">http://angelozerr.wordpress.com/?p=3156</guid>
	<link>http://angelozerr.wordpress.com/2010/09/06/osgi-equinox-in-a-servlet-container-step3/</link>
	<description>&lt;p&gt;In &lt;a href=&quot;http://angelozerr.wordpress.com/2010/09/02/osgi-equinox-in-a-servlet-container-step2/&quot;&gt;[step2]&lt;/a&gt;, we have explained how bridge and sample.http works. We have seen several problems (4 problems) with &lt;strong&gt;OSGi Equinox in a Servlet Container&lt;/strong&gt;. In this article we will fix 2 problems : &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It may that &lt;strong&gt;/sp_redeploy&lt;/strong&gt; doesn’t work with WTP Web Dynamic Project. I had the problem once, so I will explain more the problem, how fix it and we will understand &lt;a href=&quot;http://angelozerr.wordpress.com/feed/#wtpwebapps&quot;&gt;how WTP deploy the WEB application&lt;/a&gt;.
  &lt;/li&gt;
&lt;li&gt;when bundle (ex : sample.http2) is developed in the workspace, it &lt;strong&gt;use JAR coming from the Eclipse IDE and not from the /bridge/ WEB-INF/WebContent/eclipse/plugins folder&lt;/strong&gt;. We have seen it can cause problem when bundle is deployed ( in the &lt;a href=&quot;http://angelozerr.wordpress.com/2010/09/02/osgi-equinox-in-a-servlet-container-step2/#ImportPackagesProblem&quot;&gt;Import Packages Problem [step2]&lt;/a&gt; section). I will explain how we can fix this problem with &lt;a href=&quot;http://angelozerr.wordpress.com/feed/#TargetPlatform&quot;&gt;Target Platform&lt;/a&gt;.
  &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span id=&quot;more-3156&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&quot;download&quot;&gt;Download&lt;/h2&gt;
&lt;p&gt;You can download &lt;a href=&quot;http://dl.dropbox.com/u/2903680/wordpress-blog/tutoriels/eclipse/servletbridge/servletbridge_step3.zip&quot;&gt;servletbridge_step3.zip&lt;/a&gt; which contains following explained projects : &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;brige&lt;/strong&gt; which contains the &lt;a href=&quot;http://angelozerr.wordpress.com/feed/#TargetPlatform&quot;&gt;bridge.target&lt;/a&gt; Target Platform..
  &lt;/li&gt;
&lt;li&gt;the same projects than &lt;a href=&quot;http://angelozerr.wordpress.com/2010/09/02/osgi-equinox-in-a-servlet-container-step2/#download&quot;&gt;[step2]&lt;/a&gt;.
  &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;http://angelozerr.wordpress.com/feed/#TargetPlatform&quot;&gt;bridge.target&lt;/a&gt; Target Platform is used to use bundle JAR from the &lt;strong&gt;/bridge/ WEB-INF/WebContent/eclipse/plugins&lt;/strong&gt; folder and not from the Eclipse IDE. To use it, click on &lt;a href=&quot;http://angelozerr.wordpress.com/feed/#SetAsTargetPlatform&quot;&gt;Set As Target Platform&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;wtpwebapps&quot;&gt;WTP deployment&lt;/h2&gt;
&lt;p&gt;I had a problem once after having &lt;a href=&quot;http://angelozerr.wordpress.com/2010/09/01/osgi-equinox-in-a-servlet-container-step1/#CreateJARAndDeployBundle&quot;&gt;created and deployed&lt;/a&gt; the &lt;strong&gt;sample.http2&lt;/strong&gt;. The &lt;strong&gt;sample.http2_1.0.0.jar&lt;/strong&gt; was correct in my bridge WEB Application, but when I have done /sp_redeploy, the bridge WEB Application used an old version of the &lt;strong&gt;sample.http2_1.0.0.jar&lt;/strong&gt;. &lt;/p&gt;
&lt;p&gt;To resolve the problem I had studied how WTP deploy WEB Application and I think it’s important to understand that. When you are using Dynamic Web Module Project (with default configuration and not the external Web Module), WTP works with several folder. Here a scheme which show you the different folder :  &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://angelozerr.files.wordpress.com/2010/09/servletbridge_wtpmetadata.png?w=600&quot; /&gt; &lt;/p&gt;
&lt;p&gt;This scheme is a screen of my Eclipse workspace folder. In the article I will use &lt;strong&gt;${workspace_loc}&lt;/strong&gt; to speak about the Eclipse workspace home. You can see that there are &lt;strong&gt;three /WEB-INF/eclipse/plugins folder&lt;/strong&gt; coming from :  &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;(A) Bridge Dynamic Web Project&lt;/strong&gt; : &lt;strong&gt;${workspace_loc}/bridge/ WEB-INF/eclipse/plugins&lt;/strong&gt;, our WTP Dynamic Web Project.&lt;/li&gt;
&lt;li&gt;The workspace contains the &lt;strong&gt;.metadata&lt;/strong&gt; which contains the whole Metadata of the Eclipse plugins.
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;(B) WTP Bridge&lt;/strong&gt; : WTP use this folder to store some Metadata and deploy the WEB Application in the folder &lt;strong&gt;${workspace_loc}/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/bridge&lt;/strong&gt;. WTP deploy the WEB Application when Tomcat server is started.
 	 &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;(C) Tomcat work Bridge&lt;/strong&gt; : &lt;strong&gt;${workspace_loc}/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/work/Catalina/localhost/bridge&lt;/strong&gt; which is the Tomcat working folder.
 	 &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When you go at /sp_redeploy to clean eclipse/plugins JAR, this command take the JAR from the &lt;strong&gt;(B) WTP Bridge&lt;/strong&gt; (wtpwebapps/bridge) and copy it to the &lt;strong&gt;(C) Tomcat work Bridge&lt;/strong&gt; which are the JAR used (and NOT &lt;strong&gt;(A) Bridge Dynamic Web Project&lt;/strong&gt; to &lt;strong&gt;(C) Tomcat work Bridge&lt;/strong&gt; as we can believe). &lt;/p&gt;
&lt;p&gt;When I have had a problem with my JAR which was a not good version, &lt;strong&gt;(B) WTP Bridge&lt;/strong&gt; was not synchronized with &lt;strong&gt;(A) Bridge Dynamic Web Project&lt;/strong&gt; (Why? I don’t know). To fix the problem I had to copy/paste the JAR from (A) to (B). &lt;/p&gt;
&lt;h2 id=&quot;TargetPlatform&quot;&gt;Target Platform&lt;/h2&gt;
&lt;p&gt;In &lt;a href=&quot;http://angelozerr.wordpress.com/2010/09/02/osgi-equinox-in-a-servlet-container-step2/#ImportPackagesProblem&quot;&gt;Import Packages Problem [step2]&lt;/a&gt; section we have seen a problem with import packages. This problems comes from that our &lt;strong&gt;sample.http2&lt;/strong&gt; bundle from the workspace depends on bundle JAR &lt;strong&gt;coming from the Eclipse IDE&lt;/strong&gt; and not from the &lt;strong&gt;bridge/WebContent/WEB-INF/eclipse/plugins&lt;/strong&gt; folder (org.eclipse.osgi.services_3.2*.jar  is used): &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://angelozerr.files.wordpress.com/2010/09/servletbridge_importpackagesproblem.png?w=600&quot; /&gt;&lt;/p&gt;
&lt;p&gt;In this section we will create and configure the &lt;strong&gt;Target Platform&lt;/strong&gt; to use JAR from the &lt;strong&gt;bridge/WebContent/WEB-INF/eclipse/plugins&lt;/strong&gt;  (org.eclipse.osgi.services_3.1*.jar  is used) : &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://angelozerr.files.wordpress.com/2010/09/servletbridge_samplehttp2targetplatform.png?w=600&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Target Platform&lt;/strong&gt; is used to define your whole plugins (different from the Eclipse IDE folder) that you wish used.&lt;/p&gt;
&lt;h3&gt;Create Target Platform&lt;/h3&gt;
&lt;p&gt;Here we create the Target Platform &lt;strong&gt;bridge.target&lt;/strong&gt; with &lt;a href=&quot;http://www.eclipse.org/pde/&quot;&gt;PDE&lt;/a&gt; (Plug-in Development Environment). To do that go at menu &lt;strong&gt;File/New/Other&lt;/strong&gt; and &lt;strong&gt;Plug-in Development/Target Definition&lt;/strong&gt; : &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://angelozerr.files.wordpress.com/2010/09/servletbridge_newtargetplatform1.png?w=600&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Click on &lt;strong&gt;Next&lt;/strong&gt; button. The &lt;strong&gt;New Target Definition&lt;/strong&gt; wizard is displayed.  Here, we will create the &lt;strong&gt;bridge.target&lt;/strong&gt; file in the bridge WEB Application, but you can create it in any folder. To do that : &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Select the bridge folder.
  &lt;/li&gt;
&lt;li&gt;Fill &lt;strong&gt;File name&lt;/strong&gt; filed with « bridge »(in order to create bridge.target file).
  &lt;/li&gt;
&lt;li&gt;Select « &lt;strong&gt;Nothing&lt;/strong&gt; » for &lt;strong&gt;Initialize the target definition with&lt;/strong&gt; to create an empty target definition (none plugins).
  &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;http://angelozerr.files.wordpress.com/2010/09/servletbridge_newtargetplatform2.png?w=600&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Click on &lt;strong&gt;Finish&lt;/strong&gt; button, the Target definition wizard generate a &lt;strong&gt;bridge.target&lt;/strong&gt; file  in the bridge project. Your workspace looks like this : &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://angelozerr.files.wordpress.com/2010/09/servletbridge_newtargetplatform3.png?w=600&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Here we will add  &lt;strong&gt;/bridge/WebContent/WEB-INF/eclipse/plugins&lt;/strong&gt; folder in the target definition to use JAR coming from this folder. To do that, open the &lt;strong&gt;bridge.target&lt;/strong&gt;, go at definition tab and click on &lt;strong&gt;Add…&lt;/strong&gt; button. The &lt;strong&gt;Add Content&lt;/strong&gt; wizard display. Select &lt;strong&gt;Directory&lt;/strong&gt; node : &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://angelozerr.files.wordpress.com/2010/09/servletbridge_newtargetplatform4.png?w=600&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Click on &lt;strong&gt;Next&lt;/strong&gt; button and fill &lt;strong&gt;Location&lt;/strong&gt; field with &lt;strong&gt;${workspace_loc}/bridge/WebContent/WEB-INF/eclipse/plugins&lt;/strong&gt;. &lt;strong&gt;${workspace_loc}&lt;/strong&gt; is a variable known by Eclipse IDE which is used to retrieve your Eclipse workspace path : &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://angelozerr.files.wordpress.com/2010/09/servletbridge_newtargetplatform5.png?w=600&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Click on &lt;strong&gt;Next&lt;/strong&gt; button, you will see your plugins : &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://angelozerr.files.wordpress.com/2010/09/servletbridge_newtargetplatform6.png?w=600&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Click on &lt;strong&gt;Finish&lt;/strong&gt; button.&lt;/p&gt;
&lt;h3 id=&quot;SetAsTargetPlatform&quot;&gt;Install Target Platform&lt;/h3&gt;
&lt;p&gt;Here we have defined &lt;strong&gt; /bridge/WebContent/WEB-INF/eclipse/plugins&lt;/strong&gt; and you will see in the target definition 11 plugins : &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://angelozerr.files.wordpress.com/2010/09/servletbridge_newtargetplatform7.png?w=600&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Now we can activate this Target Platform to use plugins in your workspace. To do that click on &lt;strong&gt;Set as Target Platform&lt;/strong&gt; link (on the top right of the bridge.target). This action will re-compile your workspace with the JAR defined in the target definition. You will have &lt;strong&gt;compilation problems&lt;/strong&gt; with &lt;strong&gt;javax.servlet&lt;/strong&gt; package : &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://angelozerr.files.wordpress.com/2010/09/servletbridge_newtargetplatform8.png?w=600&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Add javax.servlet&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Compilation problems&lt;/strong&gt; with &lt;strong&gt;javax.servlet&lt;/strong&gt; is normal because the Target Platform doesn’t contain the javax.servlet bundle. We will see how bridge can retrieve javax.servlet package although /plugins folder doesn’t contains this bundle (It’s managed with Fragment-Host: system.bundle; extension:=framework (I will explain more that in a futur article))?   &lt;/p&gt;
&lt;p&gt;In our case we need to import &lt;strong&gt;javax.servlet&lt;/strong&gt; bundle which define HTTP Servlet interface. To manage that we will use the &lt;strong&gt;javax.servlet&lt;/strong&gt; coming from the Eclipse IDE. To do that, open the &lt;strong&gt;bridge.target&lt;/strong&gt;, go at definition tab and click on &lt;strong&gt;Add…&lt;/strong&gt; button. The &lt;strong&gt;Add Content&lt;/strong&gt; wizard display. Select &lt;strong&gt;Directory&lt;/strong&gt; node : &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://angelozerr.files.wordpress.com/2010/09/servletbridge_newtargetplatform4.png?w=600&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Click on &lt;strong&gt;Next&lt;/strong&gt; button and fill &lt;strong&gt;Location&lt;/strong&gt; field with &lt;strong&gt;${eclipse_home}&lt;/strong&gt;. &lt;strong&gt;${eclipse_home}&lt;/strong&gt; is a variable known by Eclipse IDE which is used to retrieve your the Eclipse home path :&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://angelozerr.files.wordpress.com/2010/09/servletbridge_addjavaxservlettotp1.png?w=600&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Click on &lt;strong&gt;Finish&lt;/strong&gt; button, bridge.target contains the (in my case) 726 plugins from the Eclipse IDE and the 11 plugins coming from bridge WEB Application : &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://angelozerr.files.wordpress.com/2010/09/servletbridge_addjavaxservlettotp2.png?w=600&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Now we must filter the 726 plugins from the Eclipse IDE to select only the javax.servlet bundle. To do that click on &lt;strong&gt;Content&lt;/strong&gt; tab and &lt;strong&gt;select Location&lt;/strong&gt; in the &lt;strong&gt;Group By&lt;/strong&gt; combo Box to group plugins by folder which have defined (The « Group By » Location can take several times) : &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://angelozerr.files.wordpress.com/2010/09/servletbridge_addjavaxservlettotp31.png?w=600&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Un-select the whole plugins from the ${eclipse_home} and &lt;strong&gt;select ONLY the javax.servlet&lt;/strong&gt; bundle&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://angelozerr.files.wordpress.com/2010/09/servletbridge_addjavaxservlettotp41.png?w=600&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;InstallTarget Platform (2)&lt;/h3&gt;
&lt;p&gt;Now you can re-install the bridge.target Target Platform by clicking on Set As Target Platform. Your workspace is recompiled with no compilation errors : &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://angelozerr.files.wordpress.com/2010/09/servletbridge_addjavaxservlettotp5.png?w=600&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Pay just attention that the javax.servlet used provides the 2.5 Servlet specification.&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;This article show you it’s important to &lt;strong&gt;define &lt;a&gt;Target Platform&lt;/a&gt;&lt;/strong&gt; with &lt;strong&gt;OSGi Equinox in a Servlet Container&lt;/strong&gt; to use in your workspace the bundles coming from &lt;strong&gt;bridge/WebContent/WEB-INF/eclipse/plugins&lt;/strong&gt; folder (and not coming from the Eclipse IDE). &lt;/p&gt;
&lt;p&gt;In the &lt;a href=&quot;http://angelozerr.wordpress.com/2010/09/08/osgi-equinox-in-a-servlet-container-step4/&quot;&gt;[step4]&lt;/a&gt;, I will explain how it’s possible to use directly bundles coming from the workspace (no need to create the bundle JAR) and how it’s possible to host resources (HTML, Servlet, Javascript…) in the bridge WEB Application.&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/angelozerr.wordpress.com/3156/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/angelozerr.wordpress.com/3156/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/angelozerr.wordpress.com/3156/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/angelozerr.wordpress.com/3156/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gofacebook/angelozerr.wordpress.com/3156/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/angelozerr.wordpress.com/3156/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gotwitter/angelozerr.wordpress.com/3156/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/angelozerr.wordpress.com/3156/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/angelozerr.wordpress.com/3156/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/angelozerr.wordpress.com/3156/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/angelozerr.wordpress.com/3156/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/angelozerr.wordpress.com/3156/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/angelozerr.wordpress.com/3156/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/angelozerr.wordpress.com/3156/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://stats.wordpress.com/b.gif?host=angelozerr.wordpress.com&amp;amp;blog=10338309&amp;amp;post=3156&amp;amp;subd=angelozerr&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Mon, 06 Sep 2010 13:14:02 +0000</pubDate>
</item>
<item>
	<title>Peter Friese: Why Your Next App Should be Open Sourced</title>
	<guid isPermaLink="false">http://www.peterfriese.de/?p=575</guid>
	<link>http://feedproxy.google.com/~r/FormFollowsFunctionEclipse/~3/hONSXd2Tev8/</link>
	<description>&lt;p&gt;I've been doing all sorts of software development over the past few years, from closed-source in-house software for companies to closed-source product development to open-source frameworks and tools development to close-source app development. &lt;/p&gt;
&lt;p&gt;Looking back on my experience with the various drawbacks and benefits of each of those development modes, I hereby recommend your next app be open sourced.&lt;br /&gt;
&lt;span id=&quot;more-575&quot;&gt;&lt;/span&gt;Here is why:&lt;/p&gt;
&lt;h3&gt;Reasons pro Open Source&lt;/h3&gt;
&lt;p&gt;We all heard it before, &quot;Open Source will make the world a better place&quot; - but why? Well, let me give you a few reasons:&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;First&lt;/strong&gt;, by open sourcing your code, your code will become better. If everybody can see what your code looks like, you will do your best to make sure it's clean code. Jeff LaMarche calls this &quot;&lt;a href=&quot;http://iphonedevelopment.blogspot.com/2010/06/code-as-if.html&quot;&gt;coding as if everybody is watching&lt;/a&gt;&quot;. Clean code has less errors than quick-and-dirty code, so that's a good thing.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Enabling others to contribute&lt;/strong&gt; will further improve your code. Should you decide to invite other developers to your project, you'll want to add some documentation to make it easier for them to get a jump start. Writing documentation will force you to think through your code and its overall structure. You might find you want to perform some refactorings before you actually let other developers work on your code. This will improve the quality of your code even more.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Enabling others to participate will make your app more attractive&lt;/strong&gt;. Didn't you experience this before: the app you just downloaded is almost perfect - if it only had this one missing feature. For example, I really love &lt;a href=&quot;http://www.tweetdeck.com/iphone/&quot;&gt;TweetDeck for iPhone&lt;/a&gt;, but I'm dearly missing an &lt;a href=&quot;http://www.instapaper.com/&quot;&gt;Instapaper&lt;/a&gt; integration. If TweetDeck was open source, I would've added Instapaper integration to the code and submitted a patch to the creators of TweetDeck for the benefit of the entire user base. But unfortunately, TweetDeck is not open source - what a pity.
&lt;/p&gt;
&lt;p&gt;
By &lt;strong&gt;building a team of skilled people&lt;/strong&gt;, you'll be able to deliver more features in a shorter amount of time than you can ever hope to achieve if you work alone. Successful open source projects are made up of a bunch of gifted individuals with diverse skills. This is even more important for mobile applications, as you not only have to develop the code that makes your app work. You also have to create a great looking UI, so might need a great designer. If you want to promote your app on a website, you might also consider teaming up with a web designer.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Speaking of contributions&lt;/strong&gt;, you might be a bit hesitant to let other people work on your code. That's alright. Usually, contributors do not get commit rights right away. Instead, you ask them to contribute to the project by submitting patches via your bug tracker (you do use a bug tracker, don't you?). This enables you to review their code before actually committing it to the code base. If you're not satisfied, let them know (in a friendly way) what you would like them to improve. If a contributor delivers a number of great patches in a row, you can consider to promote him/her to be a committer.
&lt;/p&gt;
&lt;h3&gt;Reasons against Open Source&lt;/h3&gt;
&lt;p&gt;There are a few reasons why your next app maybe should not be open sourced:&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Others might steal your ideas!&lt;/strong&gt; I keep hearing this argument over and over again. Yes, if you open source your app, other developers might check out the code, re-brand it and sell it on the app store as their invention. Well, they can steal your ideas anyway - just by looking at your app and building an app that looks and feels the same. Granted, re-writing an app consumes considerably more time than re-branding an existing code base. But I doubt anybody dares to submit a blatant 1:1 copy of an app to the app store. At the very least, you should choose a suitable license for your code. There are a number of great open source licenses you might consider check out the &lt;a href=&quot;http://www.opensource.org/licenses&amp;gt;OSI website for a list of open source licenses&amp;lt;/a&amp;gt;. &amp;lt;a href=&quot;&gt;OSI website for a list of open source licenses&lt;/a&gt;. &lt;a href=&quot;http://blog.robrhyne.com/&quot;&gt;Rob Rhyne&lt;/a&gt; even had his &lt;a href=&quot;http://jdrhyne.tumblr.com/&quot;&gt;brother&lt;/a&gt; (who is a lawyer) create a &lt;a href=&quot;http://github.com/capttaco/Briefs/blob/master/LICENSE&quot;&gt;new app-store compatible license&lt;/a&gt; for his app, &lt;a href=&quot;http://giveabrief.com/&quot;&gt;Briefs&lt;/a&gt;. Read his blog post &quot;&lt;a href=&quot;http://blog.robrhyne.com/post/1043407467/selling-open-source&quot;&gt;Selling Open Source&lt;/a&gt;&quot; for the rationale behind this step.
&lt;/p&gt;
&lt;p&gt;
Even if other people don't copy your entire app, &lt;strong&gt;they still might copy some cool UI tricks&lt;/strong&gt; you do. Maybe you've gone to great lengths to create some really cool frameworks that make your life easier or make your app behave in a very cool and new way. You might not want other apps to look as cool as your app does. Well, it's your right. In my opinion, the app store contains way too many badly designed apps. You would do the world a favour by releasing your great library to the public. Really.
&lt;/p&gt;
&lt;p&gt;And finally, you might not be able to open source your next app because your client or the &lt;strong&gt;company you're working for is against open source&lt;/strong&gt;. Maybe they have good reasons for it, maybe they just don't know enough about open source. If the latter is the case, let them read this blog post or drop me a line - I'm available for consulting.
&lt;/p&gt;
&lt;h3&gt;Business Models for Open Source Apps&lt;/h3&gt;
&lt;p&gt;You might have a different point of view (and if you do, please leave a comment - I'm eager to hear your thoughts), but in my opinion open source is not a threat but a chance for your app. If we take this for granted, the question remains, how can you make money with an open sourced app? Here are some suggestions:&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Sell it on the App Store&lt;/strong&gt;. Yes, this might sound a little strange after all my raving about open source. If something is open source, how can you sell it? Well, it turns out selling apps on the App Store is a great idea, especially for open source apps. The app store is the only way how your clients can get hold of your application. Of course - they might check out your code, compile it and upload it to their iPhone. But to do so, they'd need to be registered iPhone developers, meaning they'd need to buy an iPhone developer certificate. Don't you think it is cheaper to just buy your app than shelling out 99 USD for the developer certificate?
&lt;/p&gt;
&lt;p&gt;If you're developing a library or framework, you might consider getting &lt;strong&gt;funding on &lt;a href=&quot;http://www.kickstarter.com/&quot;&gt;Kickstarter&lt;/a&gt;&lt;/strong&gt;. Kickstarter is a great way to get funding for your project: you define the deliverable and how much funds you want to raise and people can back your project by pledging a variable amount of money. This way, &lt;a href=&quot;http://www.penandthink.com/&quot;&gt;John Wain&lt;/a&gt; of &lt;a href=&quot;http://glyphish.com/&quot;&gt;Glyphish&lt;/a&gt; fame &lt;a href=&quot;http://www.kickstarter.com/projects/jpwain/great-icons-for-iphone-4-apps&quot;&gt;managed to raise more than 27.000 USD&lt;/a&gt; for developing an iPhone 4 compatible version of his great Glyphish icon set. His original goal was to raise 2.000 USD, by the way.
&lt;/p&gt;
&lt;p&gt;
I hope I could encourage you to try open source as a strategy for your next application or framework. If I did, let me know! Chances are I might want to submit a patch to add that tiny little feature I think your app is lacking &lt;img alt=&quot;;-)&quot; class=&quot;wp-smiley&quot; src=&quot;http://www.peterfriese.de/wp-includes/images/smilies/icon_wink.gif&quot; /&gt;&lt;/p&gt;
&lt;img height=&quot;1&quot; src=&quot;http://feeds.feedburner.com/~r/FormFollowsFunctionEclipse/~4/hONSXd2Tev8&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Mon, 06 Sep 2010 11:15:17 +0000</pubDate>
</item>
<item>
	<title>Karl Beecher: An Open Source Eco-System?</title>
	<guid isPermaLink="false">http://computerfloss.wordpress.com/?p=406</guid>
	<link>http://computerfloss.wordpress.com/2010/09/06/an-open-source-eco-system/</link>
	<description>&lt;p&gt;To summarise the &lt;a href=&quot;http://computerfloss.wordpress.com/category/research/&quot;&gt;prior writings&lt;/a&gt; from my doctoral thesis: I’ve shown how there are both notable differences and similarities between certain measures of FLOSS repositories (such as number of contributors attracted, rate of contributions, complexity control work, etc.) The pattern of similarities and differences that emerged clearly differentiated one group (containing Debian, GNOME, and KDE) from the other (Savannah and SourceForge), which I tentatively named “controlled” and “open” repositories respectively. Furthermore, the result demonstrated that Debian deserved to be differentiated somewhat from GNOME and KDE, although to a lesser extent.&lt;/p&gt;
&lt;p&gt;What is also interesting about this is that when we compare repositories that are grouped together (GNOME to KDE, or Savannah to SourceForge) we observe very great similarities in these same measures. This raises intriguing possibility number one: that one can establish “types”, by which repositories can be classified. Not only defined by the sorts of measures we can expect, but also the way it functions and organises itself. For example, Savannah and SourceForge often incubate any type of newer software and are open to any contributors. Conversely, GNOME and KDE deliver more well-defined programs and erect meritocratic barriers to entry for contributors and new software.&lt;/p&gt;
&lt;p&gt;Now, when you consider that individual projects in these repositories can transit between them, this raises the second intriguing possibility: these types could be arranged into an evolutionary framework, an eco-system of repositories, if you like. This diagram is an attempt to visualise it.&lt;/p&gt;
&lt;div class=&quot;wp-caption aligncenter&quot; id=&quot;attachment_572&quot; style=&quot;width: 559px;&quot;&gt;&lt;a href=&quot;http://computerfloss.files.wordpress.com/2010/04/progression.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;size-full wp-image-572&quot; height=&quot;372&quot; src=&quot;http://computerfloss.files.wordpress.com/2010/04/progression.png?w=549&amp;amp;h=372&quot; title=&quot;progression&quot; width=&quot;549&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;Framework of progression for FLOSS projects through various types of repositories&lt;/p&gt;&lt;/div&gt;
&lt;h3&gt;Definitions&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Open Repository&lt;/strong&gt;: A repository with a low barrier to entry. That is, the process of joining and adding software is essentially trivial and uncontrolled. Projects tend to be independent and no guiding policies cover the development or organisation process (aside from any terms of service agreements). Examples: Savannah, SourceForge.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Controlled Repository&lt;/strong&gt;: A repository with a higher barrier to entry. That is, joining as a developer or adding new projects are subject to the control of existing members. There is likely a set of guiding policies and development standards enforced throughout the community, as well as goals/roadmaps. Within this group, one can further differentiate:
&lt;ul&gt;
&lt;li&gt; &lt;strong&gt;Distributions&lt;/strong&gt;: E.g. Debian. The projects hosted here are part of the larger GNU/Linux operating system. From the point of view of the process, Debian developers are not typically programming for other Debian projects.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Meta-Projects&lt;/strong&gt;: E.g. GNOME and KDE. The projects contained in a meta-project are each part of a wider system (in these examples, each is a complete desktop environment), and there are typically several glue projects also.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Transition&lt;/strong&gt;: Moving a project from repository to another. This could be a &lt;strong&gt;migration&lt;/strong&gt; (whereby the storage location of a project is changed), or an &lt;strong&gt;inclusion&lt;/strong&gt; (whereby another repository distributes the project, but its location remains the same).
&lt;ul&gt;
&lt;li&gt; &lt;strong&gt;Bold arrows&lt;/strong&gt;: These are typically observed pathways between repository types taken by FLOSS projects.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Dashed arrows&lt;/strong&gt;: These represent atypical transitions, observed much less frequently. No empirical study has been performed on this transition.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Consequences&lt;/h3&gt;
&lt;p&gt;The evidence I have gathered points this to being an &lt;em&gt;evolutionary&lt;/em&gt; framework, because the differences observed are mostly between rates of activity rather than absolute differences in quality. Note that these statements pertain to the average project observed in each repository; there are overlaps present in the process and product attributes. Therefore it should not be expected that all projects in a repository will necessarily perform at the levels established as average for that repository.&lt;/p&gt;
&lt;p&gt;What might reasonably be expected to be seen of an arbitrary project’s measured attributes is no doubt dependent on a number of other factors that influence a free software project’s success, such as the understandability of the initial version, the existence of other alternative projects with similar or identical functionality etc. While this framework insists that the repository is an important driver of determining project evolution (especially at the macro level), for the individual project it is one of a number of factors. When considering the consequences of a repository’s effects, this contextual detail determines how the framework may be useful.&lt;/p&gt;
&lt;p&gt;Understandably, a software developer is expected to be primarily interested in how their own individual project may be influenced, yet within this framework that is informed by measurement of a collection of projects. The range of values of a metric observed act as some indicator of the expected value for a repository type, or even a specific repository. It is feasible that any desired quantifiable attribute of a project can be measured and built up into a set of values similarly to the work shown in previous posts. Critically, this provides a developer with quantifiable means for use in a comparative judgement of where a project is best placed for the project’s particular evolutionary needs, as well as for judging how and why a transition should be brought about in future. All the time this planning will need to be balanced with the typical participatory requirements of each repository type.&lt;/p&gt;
&lt;p&gt;For researchers it is useful to understand a repository’s influence at both the individual and collective project levels. When embarking upon a study involving empirical research of free software projects, knowledge of the expected evolutionary effects of a repository, or that typical of a repository type, on a project is useful as it may have a bearing on how results are interpreted.&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/computerfloss.wordpress.com/406/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/computerfloss.wordpress.com/406/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/computerfloss.wordpress.com/406/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/computerfloss.wordpress.com/406/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gofacebook/computerfloss.wordpress.com/406/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/computerfloss.wordpress.com/406/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gotwitter/computerfloss.wordpress.com/406/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/computerfloss.wordpress.com/406/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/computerfloss.wordpress.com/406/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/computerfloss.wordpress.com/406/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/computerfloss.wordpress.com/406/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/computerfloss.wordpress.com/406/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/computerfloss.wordpress.com/406/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/computerfloss.wordpress.com/406/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://stats.wordpress.com/b.gif?host=computerfloss.wordpress.com&amp;amp;blog=11433662&amp;amp;post=406&amp;amp;subd=computerfloss&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Mon, 06 Sep 2010 09:48:17 +0000</pubDate>
</item>
<item>
	<title>Nirmal Sasidharan: Filling the void</title>
	<guid isPermaLink="false">http://nirmalsasidharan.wordpress.com/?p=357</guid>
	<link>http://nirmalsasidharan.wordpress.com/2010/09/06/filling-the-void/</link>
	<description>The search… As Andreas blogged a while ago, we at itemis are working on a requirements editor as part of a public research project. Developing a full-fledged requirements management tool is not in the scope of the project. What is of interest is to have a solution to enable traceability from requirements to design, all [...]&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://stats.wordpress.com/b.gif?host=nirmalsasidharan.wordpress.com&amp;amp;blog=15543098&amp;amp;post=357&amp;amp;subd=nirmalsasidharan&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Mon, 06 Sep 2010 05:03:28 +0000</pubDate>
</item>
<item>
	<title>Dave Carver: Generating JavaDoc with Maven 3 and Tycho</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-1585332946379204379.post-6692296035807451796</guid>
	<link>http://intellectualcramps.blogspot.com/2010/09/generating-javadoc-with-maven-3-and.html</link>
	<description>One of my pet peeves are projects that don't provide some form of SDK information.  Whether this be documentation on extension points or javadoc.   This little peeve was irritated again when I was trying to find some information on some Mylyn WikiText API.  Unfortunately it is hit or miss using the content assistance and hover assistance.   Also, there was nothing generated API wise within the Mylyn Developer's help.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So to put my foot where my mouth is, I realized we don't publish current JavaDoc with the &lt;a href=&quot;https://hudson.eclipse.org/hudson/job/cbi-wtp-wst.xsl/&quot;&gt;XSL Tools&lt;/a&gt; or the &lt;a href=&quot;https://hudson.eclipse.org/hudson/job/cbi-wtp-wst.xsl.psychopath/&quot;&gt;PsychoPath Processor&lt;/a&gt; builds.  Adding Javadoc generation with Maven/Tycho is fairly easy, but not as easy as a straight maven based build.   There is an added twist.  Due to a bug in Tycho it doesn't pass the source directories to the the javadoc mojo when you execute it. Fortunately the following steps work well.  We'll use the PsychoPath Processor as our example.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;xml&quot; name=&quot;code&quot;&gt;&lt;br /&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;&lt;br /&gt;&amp;lt;project xmlns=&quot;http://maven.apache.org/POM/4.0.0&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;&lt;br /&gt;   xsi:schemaLocation=&quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd&quot;&amp;gt;&lt;br /&gt;   &amp;lt;modelVersion&amp;gt;4.0.0&amp;lt;/modelVersion&amp;gt;&lt;br /&gt;   &amp;lt;artifactId&amp;gt;org.eclipse.wst.xml.xpath2.processor&amp;lt;/artifactId&amp;gt;&lt;br /&gt;   &amp;lt;packaging&amp;gt;eclipse-plugin&amp;lt;/packaging&amp;gt;&lt;br /&gt;   &amp;lt;version&amp;gt;1.1.100-SNAPSHOT&amp;lt;/version&amp;gt;&lt;br /&gt;   &amp;lt;name&amp;gt;PsychoPath XPath 2.0 Processor&amp;lt;/name&amp;gt;&lt;br /&gt;&lt;br /&gt;   &amp;lt;parent&amp;gt;&lt;br /&gt;      &amp;lt;groupId&amp;gt;org.eclipse.wst.xml.xpath2&amp;lt;/groupId&amp;gt;&lt;br /&gt;      &amp;lt;artifactId&amp;gt;org.eclipse.wst.xml.xpath2-parent&amp;lt;/artifactId&amp;gt;&lt;br /&gt;      &amp;lt;version&amp;gt;2.0.0-SNAPSHOT&amp;lt;/version&amp;gt;&lt;br /&gt;      &amp;lt;relativePath&amp;gt;../../development/athena/org.eclipse.wst.xml.xpath2.releng&amp;lt;/relativePath&amp;gt;&lt;br /&gt;   &amp;lt;/parent&amp;gt;&lt;br /&gt;&lt;br /&gt;   &amp;lt;build&amp;gt;&lt;br /&gt;      &amp;lt;sourceDirectory&amp;gt;src&amp;lt;/sourceDirectory&amp;gt;&lt;br /&gt;      &amp;lt;plugins&amp;gt;&lt;br /&gt;         &amp;lt;plugin&amp;gt;&lt;br /&gt;            &amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;&lt;br /&gt;            &amp;lt;artifactId&amp;gt;maven-javadoc-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;            &amp;lt;version&amp;gt;2.7&amp;lt;/version&amp;gt;&lt;br /&gt;         &amp;lt;/plugin&amp;gt;&lt;br /&gt;      &amp;lt;/plugins&amp;gt;&lt;br /&gt;   &amp;lt;/build&amp;gt;&lt;br /&gt;&amp;lt;/project&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The key here is the &amp;lt;sourceDirectory&amp;gt; definition.  You need to specify where the maven-javadoc-plugin is to find the source.  Once this is done, it is as simple as executing the build with:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;   mvn clean install javadoc:aggregate&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This will generate the javadoc and place in the target/site/apidocs/ directory where your parent pom resides.&lt;br /&gt;&lt;br /&gt;As an added bonus, for those of you using Hudson, you can have the javadocs browseable using the JavaDoc plugin from hudson.&lt;br /&gt;&lt;br /&gt;Take a look at the PsychoPath Processor build for an &lt;a href=&quot;https://hudson.eclipse.org/hudson/job/cbi-wtp-wst.xsl.psychopath/&quot;&gt;example&lt;/a&gt;.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/1585332946379204379-6692296035807451796?l=intellectualcramps.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Sat, 04 Sep 2010 23:01:46 +0000</pubDate>
	<author>noreply@blogger.com (David Carver)</author>
</item>
<item>
	<title>Gunnar Wagenknecht: Better Than Open Source</title>
	<guid isPermaLink="false">http://wagenknecht.org/blog/?p=314</guid>
	<link>http://wagenknecht.org/blog/archives/2010/09/better-than-open-source.html</link>
	<description>&lt;p&gt;Yes, there are things that are better than Open Source. Way better sometimes. Very often you have to look outside of work. But they exist. For example, Ed’s pictures are one of those things. They always remind me of life and how close we connect it with work. Even though I’ll start a two weeks vacation on Monday, I’m pretty sure I’ll continue to participate in a community I got connected to through work that expanded well into my life. And there &lt;em&gt;is &lt;/em&gt;a really good reason for this vacation  I’m so excited about.&lt;/p&gt;
&lt;p&gt;Julius Wagenknecht&lt;br /&gt;
2010-09-04 03:40 UTC&lt;br /&gt;
49cm, 3090g&lt;/p&gt;
&lt;p&gt;At 5:40am local time my wife gave birth two our second child. It’s one of those few things that are way better than Open Source. They are both healthy. We spent most of the day together and began enjoying our new life as “party of four”.&lt;/p&gt;
&lt;p&gt;Picture below. &lt;img alt=&quot;:)&quot; class=&quot;wp-smiley&quot; src=&quot;http://wagenknecht.org/blog/wp-includes/images/smilies/icon_smile.gif&quot; /&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://wagenknecht.org/blog/wp-content/uploads/2010/09/julius_wagenknecht.jpg&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;alignnone&quot; height=&quot;480&quot; src=&quot;http://wagenknecht.org/blog/wp-content/uploads/2010/09/julius_wagenknecht.jpg&quot; title=&quot;Julius Wagenknecht&quot; width=&quot;480&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/eclipseguru?a=Cn-XXt8oYlA:po9FVPU6ubs:yIl2AUoC8zA&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://feeds.feedburner.com/~ff/eclipseguru?d=yIl2AUoC8zA&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/eclipseguru?a=Cn-XXt8oYlA:po9FVPU6ubs:qj6IDK7rITs&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://feeds.feedburner.com/~ff/eclipseguru?d=qj6IDK7rITs&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/eclipseguru?a=Cn-XXt8oYlA:po9FVPU6ubs:V_sGLiPBpWU&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://feeds.feedburner.com/~ff/eclipseguru?i=Cn-XXt8oYlA:po9FVPU6ubs:V_sGLiPBpWU&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/eclipseguru?a=Cn-XXt8oYlA:po9FVPU6ubs:D7DqB2pKExk&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://feeds.feedburner.com/~ff/eclipseguru?i=Cn-XXt8oYlA:po9FVPU6ubs:D7DqB2pKExk&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/eclipseguru?a=Cn-XXt8oYlA:po9FVPU6ubs:F7zBnMyn0Lo&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://feeds.feedburner.com/~ff/eclipseguru?i=Cn-XXt8oYlA:po9FVPU6ubs:F7zBnMyn0Lo&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/eclipseguru?a=Cn-XXt8oYlA:po9FVPU6ubs:gIN9vFwOqvQ&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://feeds.feedburner.com/~ff/eclipseguru?i=Cn-XXt8oYlA:po9FVPU6ubs:gIN9vFwOqvQ&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;</description>
	<pubDate>Sat, 04 Sep 2010 19:02:59 +0000</pubDate>
</item>
<item>
	<title>Nirmal Sasidharan: Signing Eclipse Plugins using Self-signed Certificates</title>
	<guid isPermaLink="false">http://nirmalsasidharan.wordpress.com/?p=300</guid>
	<link>http://nirmalsasidharan.wordpress.com/2010/09/04/signing_eclipse_plugins/</link>
	<description>Overview Signing an eclipse plugin refers to the process of stamping an eclipse plugin with a certificate, by which the plugin could reveal its authenticity to anyone who installs and executes it. Although, by default, eclipse generates unsigned plugins, starting 3.3, eclipse began verifying the integrity of plugins installed via update sites by checking for an [...]&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://stats.wordpress.com/b.gif?host=nirmalsasidharan.wordpress.com&amp;amp;blog=15543098&amp;amp;post=300&amp;amp;subd=nirmalsasidharan&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Sat, 04 Sep 2010 09:03:36 +0000</pubDate>
</item>
<item>
	<title>EclipseLive: Upcoming Event: Shipping your Eclipse Product: End Users Delivered in 5 Minutes</title>
	<guid isPermaLink="false">http://live.eclipse.org/970 at http://live.eclipse.org</guid>
	<link>http://live.eclipse.org/node/970</link>
	<description>Event Date: September 15, 2010 11:00 am GMT-8&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://live.eclipse.org/www2.gotomeeting.com/register/395803010&quot;&gt;Register Now&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;   

&lt;div class=&quot;field field-type-text field-field-author&quot; id=&quot;author&quot;&gt;
  &lt;span class=&quot;field-item&quot;&gt;Tim Webb&lt;/span&gt;
&lt;/div&gt;

&lt;div class=&quot;resource-icon&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://live.eclipse.org/files/ECLP_webinar.gif&quot; /&gt; &lt;/div&gt;  

&lt;div id=&quot;abstract&quot;&gt;
	&lt;span class=&quot;field-label&quot;&gt;Abstract:&lt;/span&gt;  
	&lt;div class=&quot;field field-type-text field-field-author&quot;&gt;
	  &lt;span class=&quot;field-item&quot;&gt;&lt;p&gt;An expert's review of real-world examples and discovered best practices that will help you quickly deliver and manage your Eclipse RCP applications for a local or global user base.&lt;/p&gt;&lt;/span&gt;&lt;br /&gt;
	  &lt;span class=&quot;field-item&quot;&gt;&lt;a href=&quot;http://del.icio.us/post?url=http%3A%2F%2Flive.eclipse.org%2Fnode%2F18&amp;amp;title=Webinar&quot; rel=&quot;nofollow&quot; title=&quot;Bookmark this post on del.icio.us.&quot;&gt;&lt;img alt=&quot;delicious&quot; src=&quot;http://live.eclipse.org/modules/service_links/delicious.png&quot; /&gt; delicious&lt;/a&gt; | &lt;a href=&quot;http://digg.com/submit?phase=2&amp;amp;url=http%3A%2F%2Flive.eclipse.org%2Fnode%2F18&amp;amp;title=Webinar&quot; rel=&quot;nofollow&quot; title=&quot;Digg this post on digg.com.&quot;&gt;&lt;img alt=&quot;digg&quot; src=&quot;http://live.eclipse.org/modules/service_links/digg.png&quot; /&gt; digg&lt;/a&gt; | &lt;a href=&quot;http://www.dzone.com/links/add.html?url=http%3A%2F%2Flive.eclipse.org%2Fnode%2F18&amp;amp;title=Webinar&quot; rel=&quot;nofollow&quot; title=&quot;Tag this post on DZone.&quot;&gt;&lt;img alt=&quot;dzone&quot; src=&quot;http://live.eclipse.org/modules/service_links/dzone.png&quot; /&gt; dzone&lt;/a&gt;&lt;/span&gt;
	&lt;/div&gt;
	
&lt;/div&gt;

&lt;div id=&quot;embedded&quot;&gt;
	  &lt;/div&gt;</description>
	<pubDate>Fri, 03 Sep 2010 17:57:12 +0000</pubDate>
	<author>jens@genuitec.com (EclipseLive)</author>
</item>
<item>
	<title>Aurelien Pupier: Acquire Heap Dump from MAT (Memory Analyzer Tool)</title>
	<guid isPermaLink="false">http://www.bonitasoft.org/blog/?p=1898</guid>
	<link>http://www.bonitasoft.org/blog/eclipse/acquire-heap-dump-from-mat/</link>
	<description>&lt;p&gt;&lt;a href=&quot;http://www.eclipse.org/mat/&quot; target=&quot;_blank&quot;&gt;MAT&lt;/a&gt;, which stands for Memory Analyzer Tool, is a fast and feature-rich &lt;strong&gt;Java heap analyzer&lt;/strong&gt; that helps you find memory leaks and reduce memory consumption.&lt;br /&gt;
The project got integrated into the release train with Helios and comes with great features. I will highlight one of them, which is pretty useful in debug/development mode. I’m talking about the ability to acquire Heap Dump directly inside &lt;a href=&quot;http://www.eclipse.org/mat/&quot; target=&quot;_blank&quot;&gt;MAT&lt;/a&gt;.&lt;span id=&quot;more-1898&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Starting the processus requires only two clicks. In the menu, choose “File-&amp;gt;Acquire Heap Dump…”&lt;br /&gt;
&lt;a href=&quot;http://www.bonitasoft.org/blog/wp-content/uploads/2010/09/menu.jpg&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;aligncenter size-full wp-image-1899&quot; height=&quot;92&quot; src=&quot;http://www.bonitasoft.org/blog/wp-content/uploads/2010/09/menu.jpg&quot; width=&quot;216&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;The wizard that will guide you prompts. You can see running java processes.&lt;br /&gt;
&lt;a href=&quot;http://www.bonitasoft.org/blog/wp-content/uploads/2010/09/runningProcesses.jpg&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;aligncenter size-medium wp-image-1900&quot; height=&quot;225&quot; src=&quot;http://www.bonitasoft.org/blog/wp-content/uploads/2010/09/runningProcesses-300x225.jpg&quot; width=&quot;300&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Click on &lt;em&gt;Configure…&lt;/em&gt; A new dialog will be displayed. You can specify here which provider to use to make the heap dump.&lt;br /&gt;
You will see that two providers are available by default:&lt;br /&gt;
- jmap tools (for Hotspot VM for instance)&lt;br /&gt;
- an helper IBM VM.&lt;br /&gt;
&lt;a href=&quot;http://www.bonitasoft.org/blog/wp-content/uploads/2010/09/providers.jpg&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;aligncenter size-medium wp-image-1901&quot; height=&quot;191&quot; src=&quot;http://www.bonitasoft.org/blog/wp-content/uploads/2010/09/providers-300x191.jpg&quot; width=&quot;300&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;I’m using an Hotspot VM, so I need to specify only the JDK_HOME of my JDK. (This step is required only the first time.)&lt;br /&gt;
&lt;a href=&quot;http://www.bonitasoft.org/blog/wp-content/uploads/2010/09/arguments.jpg&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;aligncenter size-medium wp-image-1902&quot; height=&quot;191&quot; src=&quot;http://www.bonitasoft.org/blog/wp-content/uploads/2010/09/arguments-300x191.jpg&quot; width=&quot;300&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;em&gt;Be careful: a JDK is required, a JRE is not enough. Are you really the end user that solves my memory issues?&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Apply&lt;/em&gt; the configuration of the Heap Dump Provider and click &lt;em&gt;OK&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Now you’re back to the first dialog, select the process that you want to analyze.&lt;br /&gt;
You will notice at the bottom that a path is automatically generated for the heap dump file. By the way I recommend to choose a folder containing only dumps. MAT generates a lot of other files aside it (for indexation purpose I assume). So if you don’t want that it pollutes your home folder (which is used by default), you know what you have to do &lt;img alt=&quot;;)&quot; class=&quot;wp-smiley&quot; src=&quot;http://www.bonitasoft.org/blog/wp-includes/images/smilies/icon_wink.gif&quot; /&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.bonitasoft.org/blog/wp-content/uploads/2010/09/specifyFolder.jpg&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;aligncenter size-medium wp-image-1904&quot; height=&quot;225&quot; src=&quot;http://www.bonitasoft.org/blog/wp-content/uploads/2010/09/specifyFolder-300x225.jpg&quot; width=&quot;300&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Click on Finish&lt;/li&gt;
&lt;li&gt;Wait for the heap dump to be written to the disk and parsed by MAT. These operations can take some time for huge java heap size.&lt;/li&gt;
&lt;li&gt;A new dialog prompts, for a quick overview, keep “Leak Suspects Report” checked.&lt;br /&gt;
&lt;a href=&quot;http://www.bonitasoft.org/blog/wp-content/uploads/2010/09/leakReports.jpg&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;aligncenter size-medium wp-image-1903&quot; height=&quot;253&quot; src=&quot;http://www.bonitasoft.org/blog/wp-content/uploads/2010/09/leakReports-300x253.jpg&quot; width=&quot;300&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Click Finish&lt;/li&gt;
&lt;li&gt;All right, you have the Heap Dump opened in MAT, ready to be analyzed!&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;In effect, this way requires that the process is still running. It is a debug/development use case. You still need dumps on OutOfMemoryError for production environment. You can find some information on the way to do that on the &lt;a href=&quot;http://wiki.eclipse.org/index.php/MemoryAnalyzer#Getting_a_Heap_Dump&quot; target=&quot;_blank&quot;&gt;MAT wiki&lt;/a&gt;.&lt;br /&gt;
To learn more things about MAT, I recommend you to follow the&lt;a href=&quot;http://live.eclipse.org/node/939&quot; target=&quot;_blank&quot;&gt; MAT webinar&lt;/a&gt; which happens on September 8th.&lt;/p&gt;</description>
	<pubDate>Fri, 03 Sep 2010 16:00:22 +0000</pubDate>
</item>
<item>
	<title>EclipseLive: Upcoming Event: Reminder - Memory Analyzer 1.0 - Not Only New, but Noteworthy</title>
	<guid isPermaLink="false">http://live.eclipse.org/969 at http://live.eclipse.org</guid>
	<link>http://live.eclipse.org/node/969</link>
	<description>Event Date: September 8, 2010 3:00 pm GMT-8&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://live.eclipse.org/spreadsheets.google.com/viewform?formkey=dEhyNWpucmE1NDVwclU5eEJXa0JQT0E6MQ&quot;&gt;Register Now&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;   

&lt;div class=&quot;field field-type-text field-field-author&quot; id=&quot;author&quot;&gt;
  &lt;span class=&quot;field-item&quot;&gt;Krum Tsvetkov (SAP), Andrew Johnson (IBM)&lt;/span&gt;
&lt;/div&gt;

&lt;div class=&quot;resource-icon&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://live.eclipse.org/files/ECLP_webinar.gif&quot; /&gt; &lt;/div&gt;  

&lt;div id=&quot;abstract&quot;&gt;
	&lt;span class=&quot;field-label&quot;&gt;Abstract:&lt;/span&gt;  
	&lt;div class=&quot;field field-type-text field-field-author&quot;&gt;
	  &lt;span class=&quot;field-item&quot;&gt;In this Eclipse webinar, the &lt;a href=&quot;http://www.eclipse.org/mat&quot; target=&quot;blank&quot;&gt;Memory Analyzer&lt;/a&gt; team will present some of most interesting and helpful features in the tool, cover some of the new features which were introduced with version 1.0 and touch on some of the future topics for the project.

&lt;p&gt;With a few slides and lots of live demonstrations the team will cover topics like:
&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Heap dumps – what they are, what types of dumps MAT can work with, how to acquire them and explore them&lt;/li&gt;
&lt;li&gt;How to easily troubleshoot an OutOfMemoryError&lt;/li&gt;
&lt;li&gt;Threads – what information heap dumps provide about threads and how the mixture of stacks and objects offers almost a debugger like functionality&lt;/li&gt;
&lt;li&gt;Other useful features of the tool&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Total running time will be approximately 1 hour&lt;/p&gt;

&lt;p&gt;8:00 am PDT / 11:00 am EDT / 3:00 pm UTC / 5:00 CEST - &lt;a href=&quot;http://www.timeanddate.com/worldclock/fixedtime.html?month=9&amp;amp;day=8&amp;amp;year=2010&amp;amp;hour=15&amp;amp;min=0&amp;amp;sec=0&amp;amp;p1=0&quot; target=&quot;&quot;&gt;Convert to other time zones&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thanks to Adobe for contributing their Adobe Acrobat Connect product to host this webinar.&lt;br /&gt;
&lt;img height=&quot;10&quot; src=&quot;http://live.eclipse.org/files/images/adobeconnect.jpg&quot; /&gt;&lt;/p&gt;
&lt;/span&gt;&lt;br /&gt;
	  &lt;span class=&quot;field-item&quot;&gt;&lt;a href=&quot;http://del.icio.us/post?url=http%3A%2F%2Flive.eclipse.org%2Fnode%2F18&amp;amp;title=Webinar&quot; rel=&quot;nofollow&quot; title=&quot;Bookmark this post on del.icio.us.&quot;&gt;&lt;img alt=&quot;delicious&quot; src=&quot;http://live.eclipse.org/modules/service_links/delicious.png&quot; /&gt; delicious&lt;/a&gt; | &lt;a href=&quot;http://digg.com/submit?phase=2&amp;amp;url=http%3A%2F%2Flive.eclipse.org%2Fnode%2F18&amp;amp;title=Webinar&quot; rel=&quot;nofollow&quot; title=&quot;Digg this post on digg.com.&quot;&gt;&lt;img alt=&quot;digg&quot; src=&quot;http://live.eclipse.org/modules/service_links/digg.png&quot; /&gt; digg&lt;/a&gt; | &lt;a href=&quot;http://www.dzone.com/links/add.html?url=http%3A%2F%2Flive.eclipse.org%2Fnode%2F18&amp;amp;title=Webinar&quot; rel=&quot;nofollow&quot; title=&quot;Tag this post on DZone.&quot;&gt;&lt;img alt=&quot;dzone&quot; src=&quot;http://live.eclipse.org/modules/service_links/dzone.png&quot; /&gt; dzone&lt;/a&gt;&lt;/span&gt;
	&lt;/div&gt;
	
&lt;/div&gt;

&lt;div id=&quot;embedded&quot;&gt;
	  &lt;/div&gt;</description>
	<pubDate>Fri, 03 Sep 2010 14:19:48 +0000</pubDate>
	<author>lynn.gayowski@eclipse.org (EclipseLive)</author>
</item>
<item>
	<title>Bob Balfe: Attachment Viewer on Steroids</title>
	<guid isPermaLink="true">http://blog.balfes.net/?p=1637</guid>
	<link>http://blog.balfes.net/?p=1637</link>
	<description>&lt;p&gt;Ok, maybe not steroids but Dojo and CSS!&lt;/p&gt;
&lt;p&gt;Lots of work on the attachment viewer.  Using Dojo, CSS and JavaScript I was able to give the viewer two new view modes with some eye candy in each.  I use CSS to have shadows and a tile mode.  Check out the three screen shots below, I will most likely be posting a video to show how the new views can be used.  Just remember, this is a 100% web based component in the Notes client.  You will notice I have three actions on the attachments – Open, View, and Share – which use the &lt;a href=&quot;http://dsdp.eclipse.org/help/latest/index.jsp?topic=/org.eclipse.platform.doc.isv/reference/api/org/eclipse/swt/browser/BrowserFunction.html&quot;&gt;BrowserFunction&lt;/a&gt; to provide a custom experience in the rich client – otherwise it just uses the normal web semantics for launching.&lt;/p&gt;
&lt;p&gt;I used Dojo for the slide show view.  I use the &lt;a href=&quot;http://dojotoolkit.org/api/dijit/layout/StackContainer.html&quot;&gt;dijit.layout.StackContainer&lt;/a&gt; and then each attachment is placed into a &lt;a href=&quot;http://dojotoolkit.org/api/dijit/layout/ContentPane.html&quot;&gt;dijit.layout.ContentPane&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For the thumbnail view I use basic CSS to accomplish this.  The two classes, border and thumb, give the experience of them being “thumbnails” and as the mouse moves over the div block it “selects” it with a new background color using the &lt;strong&gt;hover&lt;/strong&gt; tag.&lt;/p&gt;
&lt;pre&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;div.border&lt;/span&gt; {
    border: 1px solid #A0ACC0;
    height: auto;
    float: left;
    overflow:hidden;
}
&lt;span style=&quot;color: #ff0000;&quot;&gt;div.thumb:hover&lt;/span&gt; {
   background-color: #ADD8E6;
   border: 1px solid #FFACC0;
}
&lt;/pre&gt;
&lt;p&gt;Here are some screen shots of the three support view modes:&lt;/p&gt;
&lt;div class=&quot;wp-caption aligncenter&quot; id=&quot;attachment_1638&quot; style=&quot;width: 310px;&quot;&gt;&lt;a href=&quot;http://blog.balfes.net/wp-content/uploads/2010/09/atviewer-film-9-3.jpg&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;size-medium wp-image-1638&quot; height=&quot;229&quot; src=&quot;http://blog.balfes.net/wp-content/uploads/2010/09/atviewer-film-9-3-300x229.jpg&quot; title=&quot;atviewer-film-9-3&quot; width=&quot;300&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;Film Strip&lt;/p&gt;&lt;/div&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;
&lt;/p&gt;&lt;div class=&quot;wp-caption aligncenter&quot; id=&quot;attachment_1639&quot; style=&quot;width: 310px;&quot;&gt;&lt;a href=&quot;http://blog.balfes.net/wp-content/uploads/2010/09/atviewer-slide-9-3.jpg&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;size-medium wp-image-1639&quot; height=&quot;229&quot; src=&quot;http://blog.balfes.net/wp-content/uploads/2010/09/atviewer-slide-9-3-300x229.jpg&quot; title=&quot;atviewer-slide-9-3&quot; width=&quot;300&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;Slide Show&lt;/p&gt;&lt;/div&gt;
&lt;div class=&quot;wp-caption aligncenter&quot; id=&quot;attachment_1640&quot; style=&quot;width: 310px;&quot;&gt;&lt;a href=&quot;http://blog.balfes.net/wp-content/uploads/2010/09/atviewer-thumb-9-3.jpg&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;size-medium wp-image-1640&quot; height=&quot;229&quot; src=&quot;http://blog.balfes.net/wp-content/uploads/2010/09/atviewer-thumb-9-3-300x229.jpg&quot; title=&quot;atviewer-thumb-9-3&quot; width=&quot;300&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;Thumbnails&lt;/p&gt;&lt;/div&gt;</description>
	<pubDate>Fri, 03 Sep 2010 14:00:00 +0000</pubDate>
</item>
<item>
	<title>Scott Kellicker: Using JSDT #4 : Adding Third Party Library</title>
	<guid isPermaLink="false">http://kellicker.wordpress.com/?p=285</guid>
	<link>http://kellicker.wordpress.com/2010/09/03/using-jsdt-4-adding-third-party-library/</link>
	<description>&lt;p&gt;&lt;a href=&quot;http://kellicker.files.wordpress.com/2010/08/javascript.png&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;48&quot; src=&quot;http://kellicker.files.wordpress.com/2010/08/javascript.png?w=48&amp;amp;h=48&amp;amp;h=48&quot; title=&quot;javascript&quot; width=&quot;48&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I’m documenting my experiences using the Eclipse JSDT.&lt;/p&gt;
&lt;p&gt;In this post I will add a 3rd party library.  I will describe a success (mooTools) and a failure (jQuery).&lt;/p&gt;
&lt;h2&gt;Previously&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://kellicker.wordpress.com/2010/08/17/jsdt-resources/&quot;&gt;#1: JSDT resources&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://kellicker.wordpress.com/2010/08/18/javascript-eclipse-ide-jsdt-getting-started/&quot;&gt; #2 : Run First Project&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://kellicker.wordpress.com/2010/08/19/eclipse-javascript-ide-jsdt-html5javascript-workarounds/&quot;&gt;#3 : HTML5 limitations&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Adding mooTools Library&lt;/h2&gt;
&lt;p&gt;MooTools is one JavaScript library I’ve been playing with lately.&lt;/p&gt;
&lt;p&gt;First download the uncompressed version (mooTools-1.2.4-core-nc.js) and save it somewhere.&lt;/p&gt;
&lt;p&gt;Now in Preferences, add the library. Make sure after adding the library, you also add the mooTools .js file you previously downloaded.  It should look like this:&lt;/p&gt;
&lt;p style=&quot;padding-left: 30px;&quot;&gt;&lt;a href=&quot;http://kellicker.files.wordpress.com/2010/09/jsdtuserlib2.jpg&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;alignnone size-full wp-image-289&quot; height=&quot;419&quot; src=&quot;http://kellicker.files.wordpress.com/2010/09/jsdtuserlib2.jpg?w=480&amp;amp;h=419&quot; title=&quot;jsdtUserLib2&quot; width=&quot;480&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;MooTools Content Assist&lt;/h2&gt;
&lt;p&gt;Now &lt;a href=&quot;http://kellicker.wordpress.com/2010/08/18/javascript-eclipse-ide-jsdt-getting-started/&quot;&gt;create a Static Web Project&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Expand the project in &lt;strong&gt;Project Explorer&lt;/strong&gt; and right click on &lt;strong&gt;JavaScript Resources &lt;/strong&gt;and select &lt;strong&gt;Properties&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;From this dialog, you can add MooTools.&lt;/li&gt;
&lt;li&gt;Add &lt;strong&gt;JavaScript Library&lt;/strong&gt; – &lt;strong&gt;User Library&lt;/strong&gt; – &lt;strong&gt;Next&lt;/strong&gt; – Select moo Library you already added.  Finish.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You should see this in Explorer:&lt;/p&gt;
&lt;p style=&quot;padding-left: 30px;&quot;&gt;&lt;a href=&quot;http://kellicker.files.wordpress.com/2010/09/jsdtmootools.jpg&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;alignnone size-full wp-image-291&quot; height=&quot;651&quot; src=&quot;http://kellicker.files.wordpress.com/2010/09/jsdtmootools.jpg?w=321&amp;amp;h=651&quot; title=&quot;jsdtMooTools&quot; width=&quot;321&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Content Assist&lt;/h2&gt;
&lt;div id=&quot;highlighter_432407&quot;&gt;
&lt;div&gt;
&lt;div&gt;Now create a JavaScript file in your project and try some Content Assist.&lt;/div&gt;
&lt;div&gt;Ah it can see the Cookie constructor!&lt;/div&gt;
&lt;div style=&quot;padding-left: 30px;&quot;&gt;&lt;a href=&quot;http://kellicker.files.wordpress.com/2010/09/jsdtca11.jpg&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;alignnone size-full wp-image-293&quot; height=&quot;328&quot; src=&quot;http://kellicker.files.wordpress.com/2010/09/jsdtca11.jpg?w=480&amp;amp;h=328&quot; title=&quot;jsdtCA1&quot; width=&quot;480&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;And variables and functions that start with $:&lt;/div&gt;
&lt;div style=&quot;padding-left: 30px;&quot;&gt;&lt;a href=&quot;http://kellicker.files.wordpress.com/2010/09/jsdtca2.jpg&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;alignnone size-full wp-image-294&quot; height=&quot;328&quot; src=&quot;http://kellicker.files.wordpress.com/2010/09/jsdtca2.jpg?w=480&amp;amp;h=328&quot; title=&quot;jsdtCA2&quot; width=&quot;480&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;And members:&lt;/div&gt;
&lt;div style=&quot;padding-left: 30px;&quot;&gt;&lt;a href=&quot;http://kellicker.files.wordpress.com/2010/09/jsdtca3.jpg&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;alignnone size-full wp-image-295&quot; height=&quot;328&quot; src=&quot;http://kellicker.files.wordpress.com/2010/09/jsdtca3.jpg?w=480&amp;amp;h=328&quot; title=&quot;jsdtCA3&quot; width=&quot;480&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;h2&gt;MooTools Problems&lt;/h2&gt;
&lt;div&gt;I should mention that I could not get this to work in a workspace I had been working in for awhile.  In fact I spent many hours trying to get it to work and finally determined the workspace I was working had been corrupted somehow.  From the .log, I had experienced several crashes, some related to AST parsing, in that workspace.  And no amount of removing user libraries and creating fresh projects would allow me to see MooTools Content Assist.&lt;/div&gt;
&lt;p&gt;Supposedly, if your 3rd party library uses jsDoc, the editor functionality is more robust.  MooTools does not seem to document with jsDoc.&lt;/p&gt;
&lt;h2&gt;jQuery Failure&lt;/h2&gt;
&lt;div style=&quot;padding-left: 30px;&quot;&gt;&lt;strong&gt;Update&lt;/strong&gt;: I’ve added &lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=324416&quot;&gt;bug 324416&lt;/a&gt; for this problem.&lt;/div&gt;
&lt;div style=&quot;padding-left: 30px;&quot;&gt;I followed the same steps to add jQuery (1.4.2 uncompressed from &lt;a href=&quot;http://docs.jquery.com/Downloading_jQuery&quot;&gt;the download page&lt;/a&gt;) as a user library. However, after adding it and opening it in Explorer, it seems that parsing has failed.  The AST is confused.&lt;/div&gt;
&lt;div style=&quot;padding-left: 60px;&quot;&gt;&lt;a href=&quot;http://kellicker.files.wordpress.com/2010/09/jsdtjquery.jpg&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;alignnone size-full wp-image-297&quot; height=&quot;666&quot; src=&quot;http://kellicker.files.wordpress.com/2010/09/jsdtjquery.jpg?w=253&amp;amp;h=666&quot; title=&quot;jsdtjQuery&quot; width=&quot;253&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;padding-left: 30px;&quot;&gt;According to Explorer, it seems to know about the jQuery variable though.  But when I try to get some CA for jQuery, even though the jQuery variable is listed, I get none.  Same for _load, add, etc.  Nada.&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;padding-left: 60px;&quot;&gt;&lt;a href=&quot;http://kellicker.files.wordpress.com/2010/09/jsdtjquery21.jpg&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;alignnone size-full wp-image-299&quot; height=&quot;402&quot; src=&quot;http://kellicker.files.wordpress.com/2010/09/jsdtjquery21.jpg?w=480&amp;amp;h=402&quot; title=&quot;jsdtjQuery2&quot; width=&quot;480&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;padding-left: 30px;&quot;&gt;
&lt;p&gt;&lt;strong&gt;&lt;br /&gt;
&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;Dojo? Prototype? YUI?&lt;/h2&gt;
&lt;p&gt;I’m wondering what experiences others have had adding 3rd party libraries or their own libraries.&lt;/p&gt;
&lt;/div&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/kellicker.wordpress.com/285/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/kellicker.wordpress.com/285/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/kellicker.wordpress.com/285/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/kellicker.wordpress.com/285/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gofacebook/kellicker.wordpress.com/285/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/kellicker.wordpress.com/285/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gotwitter/kellicker.wordpress.com/285/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/kellicker.wordpress.com/285/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/kellicker.wordpress.com/285/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/kellicker.wordpress.com/285/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/kellicker.wordpress.com/285/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/kellicker.wordpress.com/285/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/kellicker.wordpress.com/285/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/kellicker.wordpress.com/285/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://stats.wordpress.com/b.gif?host=kellicker.wordpress.com&amp;amp;blog=6950485&amp;amp;post=285&amp;amp;subd=kellicker&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Fri, 03 Sep 2010 11:20:01 +0000</pubDate>
</item>
<item>
	<title>Herman Lintvelt: Making Java GUI Development easier</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-1872922649370966015.post-5962973792403360336</guid>
	<link>http://hermanlintvelt.blogspot.com/2010/06/making-java-gui-development-easier.html</link>
	<description>I’ve been programming in Java for about 13 years now, and I’ve becoming more and more convinced that there should be a much easier way to create GUI applications than writing Java code.&lt;br /&gt;&lt;br /&gt;This might sound like a strange statement, especially coming from a huge Java fan like me.&lt;br /&gt;&lt;br /&gt;I see teams struggle daily to build GUIs. Not because Swing or SWT/RCP is bad -these are two great UI frameworks- but just because such a lot of code must be written. The code is also not necessarily the most inspiring kind of code; there are only so many ways that you can write data-binding code using JFace data-binding, or do layouts doing GridLayout (try using FormLayout: much more fun).&lt;br /&gt;&lt;br /&gt;Good GUI applications are difficult to write (in my view much more difficult than your typical server-side code), but - and this is the thing to think about - about 80% of the code should “just happen”. (Some people might call this the scaffolding code or donkey code).&lt;br /&gt;&lt;br /&gt;Over the years I started searching for this elusive technology that will help me make this 80% of the GUI code “just happen”. I want to think about my domain, practice some good domain-driven development, and then blink my eyes and the GUI must be there. Then I can spend the rest of project doing the more difficult 20% of the code...&lt;br /&gt;&lt;br /&gt;What an adventure it is to search for this Holy Grail in the software world...&lt;br /&gt;&lt;br /&gt;One’s journey will perhaps start off with one of the most obvious first quests to go for (and in some development environments the only available quest...): &lt;strong&gt;the visual designer/builder/drag&amp;amp;dropping tool&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;A next quest might lead you to the highest peaks of &lt;strong&gt;UI DSL&lt;/strong&gt;s. Technologies like Glimmer, Gryphon, XScalaWT, ScalaSWT, XWT, etc.&lt;br /&gt;&lt;br /&gt;No adventure would be complete without a quest  into the dungeons of &lt;strong&gt;code generation tools&lt;/strong&gt;, like spring-roo, but for the Desktop GUI world. XText is an exciting project in this and the DSL realm that warrants some exploration.&lt;br /&gt;&lt;br /&gt;The deepest of the dungeons might reveal code generators that actually generate XML... perhaps a XML-based UI DSL, like XWT. But XML always begs the question: is it fit for human consumption? What if something does go wrong with the tooling, would you want to go and hack UI code in XML?&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Back to the Basics...&lt;/strong&gt;&lt;br /&gt;In this adventure, as I went from quest to quest in search of that illusive  technology, I came to realise: probably the most important part of the GUI development process is a basic foundation of good practices and principles, to be applied no matter what technology you are using.&lt;br /&gt;&lt;br /&gt;And the first of these core principles: do not become bogged down with a particular GUI technology.&lt;br /&gt;&lt;br /&gt;Java offer a wide eco-system of technologies that play together very nicely. You do not even have to know Java to code great Java-based GUIs. Try out different approaches, different technologies. I know I’ve been playing very hard with various options, so I can avoid working hard writing donkey code.&lt;br /&gt;&lt;br /&gt;PS: I’m presenting a one-day workshop on this topic on the &lt;b&gt;8th of September&lt;/b&gt; in &lt;b&gt;Worcester&lt;/b&gt;, South Africa (near Cape Town). We’ll look at typical frustrations and issues with GUI development,  explore UI DSLs hands-on (yes, even straying away from Java in the process...), play with XText, talk about practices and principles, and generally have a lot of fun.&lt;br /&gt;&lt;a href=&quot;http://www.jtraining.co.za/ui/uicourses.html&quot;&gt;More info here.&lt;/a&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/1872922649370966015-5962973792403360336?l=hermanlintvelt.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Fri, 03 Sep 2010 09:49:31 +0000</pubDate>
	<author>noreply@blogger.com (Herman Lintvelt)</author>
</item>
<item>
	<title>Heiko Seeberger: SLF4S - Logging the Scala way</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-5453594210552123250.post-8931739648059375004</guid>
	<link>http://heikoseeberger.blogspot.com/2010/09/slf4s-logging-scala-way.html</link>
	<description>Do we need another logging framework in the Java/Scala world? Certainly not! As Scala is fully &quot;downward&quot; compatible to Java, we can use whatever Java logging solution we want. And there are many, aren't there?.&lt;br /&gt;&lt;br /&gt;So why &lt;a href=&quot;http://github.com/weiglewilczek/slf4s&quot;&gt;SLF4S&lt;/a&gt;? Well, SLF4S isn't another logging framework, but a very thin Scala wrapper around SLF4J which has emerged as the leading Java logging solution. Why do we need a Scala wrapper for SLF4S? Well, there are some nice Scala features that can make logging even easier and/or more performant.&lt;br /&gt;&lt;br /&gt;First, SLF4J &lt;span style=&quot;font-style: italic;&quot;&gt;Logger&lt;/span&gt;s use by-name parameters which are only evaluated if needed/accessed. When logging &quot;traditionally&quot;, we often create messages by concatenating Strings or using the &lt;span style=&quot;font-style: italic;&quot;&gt;String.format&lt;/span&gt; method, even if we don't need these messages in the end because the logging level is not enabled. Of course we could &quot;manually&quot; check whether the logging level is enabled, e.g. by calling &lt;span style=&quot;font-style: italic;&quot;&gt;logger.isDebugEnabled&lt;/span&gt;, but we often don't, because it's cumbersome. With by-name parameters we can simply call our log methods and let SLF4S check whether the log level is enabled. Just take a look at one example:&lt;br /&gt;&lt;pre&gt;def debug(msg: =&amp;gt; String) {&lt;br /&gt; if (slf4jLogger.isDebugEnabled) slf4jLogger debug msg&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;Second, SLF4S offers a &lt;span style=&quot;font-style: italic;&quot;&gt;Logging&lt;/span&gt; trait which can be mixed into any class to make a &lt;span style=&quot;font-style: italic;&quot;&gt;Logger&lt;/span&gt; instance available. That particular &lt;span style=&quot;font-style: italic;&quot;&gt;Logger&lt;/span&gt; will be initialized with the name of the class it is mixed into which is a common use case.&lt;br /&gt;&lt;pre&gt;class MyClazz extends SomeClazz with Logging&lt;br /&gt;  ...&lt;br /&gt;  logger debug &quot;SLF4S just rocks!&quot;&lt;br /&gt;  ...&lt;/pre&gt;&lt;br /&gt;Of course you can create &lt;span style=&quot;font-style: italic;&quot;&gt;Logger&lt;/span&gt;s with arbitrary names by calling &lt;span style=&quot;font-style: italic;&quot;&gt;Logger(&quot;SomeSpecialName&quot;)&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Last but not least, SLF4S offers implicit conversions from &quot;usual&quot; SLF4J &lt;span style=&quot;font-style: italic;&quot;&gt;Logger&lt;/span&gt;s into &quot;pimped&quot; SLF4S &lt;span style=&quot;font-style: italic;&quot;&gt;Logger&lt;/span&gt;s.&lt;br /&gt;&lt;br /&gt;Ah, and of course, SLF4S is &lt;a href=&quot;http://www.osgi.org&quot;&gt;OSGi&lt;/a&gt; compliant. But that's not a big surprise, taking into account that the authors are OSGi fanboys and SLF4J is OSGi compliant, too.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/5453594210552123250-8931739648059375004?l=heikoseeberger.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Fri, 03 Sep 2010 08:06:41 +0000</pubDate>
	<author>noreply@blogger.com (Heiko Seeberger)</author>
</item>
<item>
	<title>Peter Kriens: Easier Configuration Admin</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-18772002.post-7356098914189651050</guid>
	<link>http://www.osgi.org/blog/2010/08/easier-configuration-admin.html</link>
	<description>We are likely to introduce a new service that makes Configuration Admin significantly easier to use. How? By using the Java type machine. Though properties are nice and flexible, they tend to cause cluttered code because of the required checks and conversions. The new model therefore defines configuration types with interfaces. For example, this is how a simple configuration type for a web</description>
	<pubDate>Fri, 03 Sep 2010 07:43:22 +0000</pubDate>
	<author>noreply@blogger.com (Peter Kriens)</author>
</item>
<item>
	<title>Eclipse Labs - Most Active Project: Eclipse Labs Projects Update for the week of September 3rd 2010</title>
	<guid isPermaLink="true">http://code.google.com/a/eclipselabs.org/hosting/</guid>
	<link>http://code.google.com/a/eclipselabs.org/hosting/</link>
	<description>&lt;h2&gt;Most Active Projects&lt;/h2&gt;
		&lt;a href=&quot;http://code.google.com/a/eclipselabs.org/p/code-recommenders&quot;&gt;code-recommenders&lt;/a&gt; - IDE 2.0: Bringing Collective Intelligence into Software Development&lt;br /&gt;
		&lt;a href=&quot;http://code.google.com/a/eclipselabs.org/p/anyedittools&quot;&gt;anyedittools&lt;/a&gt; - AnyEdit plugin adds several new tools to the context menu of text based Eclipse editors, to Eclipse main menu and editor toolbar&lt;br /&gt;
		&lt;a href=&quot;http://code.google.com/a/eclipselabs.org/p/birt-functions-lib&quot;&gt;birt-functions-lib&lt;/a&gt; - A collection of BIRT Aggregate and Script Function Extensions for use in your project&lt;br /&gt;
		&lt;a href=&quot;http://code.google.com/a/eclipselabs.org/p/birt-controls-lib&quot;&gt;birt-controls-lib&lt;/a&gt; - A collection of BIRT ReportItems created through the ReportItem extension point.&lt;br /&gt;
		&lt;a href=&quot;http://code.google.com/a/eclipselabs.org/p/wascana&quot;&gt;wascana&lt;/a&gt; - Wascana Eclipse C/C++ IDE for Windows Developers&lt;br /&gt;
		&lt;a href=&quot;http://code.google.com/a/eclipselabs.org/p/ostool&quot;&gt;ostool&lt;/a&gt; - Central metadata repository for unstructured data supports records and knowledge management for small and medium-sized organisations.&lt;br /&gt;
		&lt;a href=&quot;http://code.google.com/a/eclipselabs.org/p/onotoa&quot;&gt;onotoa&lt;/a&gt; - Onotoa is a visual editor for the Topic Maps Constraint Language.&lt;br /&gt;
	&lt;br /&gt;&lt;br /&gt;
	&lt;h2&gt;New Projects&lt;/h2&gt;
		&lt;a href=&quot;http://code.google.com/a/eclipselabs.org/p/bubblefish1&quot;&gt;bubblefish1&lt;/a&gt; - Refactoring project&lt;br /&gt;
		&lt;a href=&quot;http://code.google.com/a/eclipselabs.org/p/srisc&quot;&gt;srisc&lt;/a&gt; - simple risc cpu simulator&lt;br /&gt;
		&lt;a href=&quot;http://code.google.com/a/eclipselabs.org/p/saidriod&quot;&gt;saidriod&lt;/a&gt; - Andriod game project&lt;br /&gt;
		&lt;a href=&quot;http://code.google.com/a/eclipselabs.org/p/cless2010-comp&quot;&gt;cless2010-comp&lt;/a&gt; - The compiler  for cless&lt;br /&gt;
		&lt;a href=&quot;http://code.google.com/a/eclipselabs.org/p/zerotix&quot;&gt;zerotix&lt;/a&gt; - study&lt;br /&gt;
		&lt;a href=&quot;http://code.google.com/a/eclipselabs.org/p/cadse&quot;&gt;cadse&lt;/a&gt; - Make a Computer Aided Domain Specific Engineering environments&lt;br /&gt;
		&lt;a href=&quot;http://code.google.com/a/eclipselabs.org/p/foxuml&quot;&gt;foxuml&lt;/a&gt; - uml eclipse plugin&lt;br /&gt;</description>
	<pubDate>Fri, 03 Sep 2010 04:59:00 +0000</pubDate>
</item>
<item>
	<title>Angelo Zerr: OSGi Equinox in a Servlet Container [step2]</title>
	<guid isPermaLink="false">http://angelozerr.wordpress.com/?p=3109</guid>
	<link>http://angelozerr.wordpress.com/2010/09/02/osgi-equinox-in-a-servlet-container-step2/</link>
	<description>&lt;p&gt;In &lt;a href=&quot;http://angelozerr.wordpress.com/2010/09/01/osgi-equinox-in-a-servlet-container-step1/&quot;&gt;[step1]&lt;/a&gt;, I have explained how use &lt;a href=&quot;http://www.eclipse.org/equinox/server/http_in_container.php&quot;&gt;Equinox in a Servlet Container&lt;/a&gt; with the provided &lt;strong&gt;bridge.war&lt;/strong&gt; and show the sample &lt;strong&gt;sample.http&lt;/strong&gt; in action with &lt;strong&gt;WTP Dynamic Web project&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;In this article, I will explain : &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;how &lt;a href=&quot;http://angelozerr.wordpress.com/feed/#bridge&quot;&gt;bridge WEB application works&lt;/a&gt; : explains the content of the &lt;a href=&quot;http://angelozerr.wordpress.com/feed/#web-xml&quot;&gt;web.xml&lt;/a&gt; which declare the servlet &lt;a href=&quot;http://angelozerr.wordpress.com/feed/#BridgeServlet&quot;&gt;BridgeServlet&lt;/a&gt; which is used to &lt;strong&gt;startup/shutdown the OSGi container&lt;/strong&gt; and &lt;strong&gt;retrieve the well Servlet from the OSGi services registry according to the request URI path&lt;/strong&gt; (ex : /hellowrd).
  &lt;/li&gt;
&lt;li&gt;how &lt;strong&gt;sample.http&lt;/strong&gt; works. To explains that, we will create from scratch with PDE Tools a new bundle &lt;a href=&quot;http://angelozerr.wordpress.com/feed/#sample-http2&quot;&gt;sample.http2&lt;/a&gt; which will provides a new Servlet with path &lt;strong&gt;/helloworld2&lt;/strong&gt;.
  &lt;/li&gt;
&lt;li&gt;how add OSGi Web console by using &lt;a href=&quot;http://angelozerr.wordpress.com/feed/#Webconsole&quot;&gt;OSGi Felix Webconsole&lt;/a&gt;.
  &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We will see several problems with &lt;strong&gt;OSGi Equinox in a Servlet Container&lt;/strong&gt; that we will fix in the next article &lt;a href=&quot;http://angelozerr.wordpress.com/2010/09/06/osgi-equinox-in-a-servlet-container-step3/&quot;&gt;[step3]&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;span id=&quot;more-3109&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&quot;download&quot;&gt;Download&lt;/h2&gt;
&lt;p&gt;You can download &lt;a href=&quot;http://dl.dropbox.com/u/2903680/wordpress-blog/tutoriels/eclipse/servletbridge/servletbridge_step2.zip&quot;&gt;servletbridge_step2.zip&lt;/a&gt; which contains following explained projects : &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;brige&lt;/strong&gt; which is a « Dynamic Web Project » of the the original &lt;a href=&quot;http://www.eclipse.org/equinox/server/downloads/bridge.war&quot;&gt;bridge.war&lt;/a&gt;. It contains too the JAR &lt;a href=&quot;http://angelozerr.wordpress.com/feed/#sample-http2&quot;&gt;sample.http2&lt;/a&gt; and &lt;a href=&quot;http://angelozerr.wordpress.com/feed/#Webconsole&quot;&gt;Felix OSGi Webconsole&lt;/a&gt;.
  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;sample.http&lt;/strong&gt; : eclipse bundle OSGi project of the original sample.http.
  &lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://angelozerr.wordpress.com/feed/#sample-http2&quot;&gt;sample.http2&lt;/a&gt; : eclipse bundle OSGi project that we will create.
  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Servers&lt;/strong&gt; which contains the configuration of the Tomcat 6.0 which was generated with &lt;a href=&quot;http://www.eclipse.org/webtools/&quot;&gt;WTP&lt;/a&gt;.
  &lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;bridge&quot;&gt;bridge&lt;/h2&gt;
&lt;p&gt;The bridge WEB Application is used to host some bundles and use Servlet with OSGi HTTP services.&lt;/p&gt;
&lt;h3&gt;Architecture&lt;/h3&gt;
&lt;p&gt;Here a sheme which explains how bridge WEB application works with &lt;a href=&quot;http://angelozerr.wordpress.com/feed/#BridgeServlet&quot;&gt;BridgeServlet&lt;/a&gt; : &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://angelozerr.files.wordpress.com/2010/09/servletbridge_bridgearchitecture.png?w=600&quot; /&gt;&lt;/p&gt;
&lt;p&gt;When bridge WEB Application is started with HTTP Server (in our case Tomcat), the BridgeServlet is created and BridgeServlet#init() is called. The sheme show you several steps : &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;(1) init()&lt;/strong&gt; : BridgeServlet#init() is called by HTTP server when server start the bridge WEB application. In this method, the &lt;strong&gt;Equinox OSGi container&lt;/strong&gt; (coming from the &lt;strong&gt;/plugins&lt;/strong&gt; folder) &lt;strong&gt;is started&lt;/strong&gt;  by calling org.eclipse.core.runtime.adaptor.&lt;strong&gt;EclipseStarter#startup()&lt;/strong&gt;.&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;the OSGi container start the whole OSGi bundles coming from the &lt;strong&gt;/plugins&lt;/strong&gt; folder.
      &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;(1.1) the sample.http start and register an HelloWorldServlet&lt;/strong&gt; in the OSGi services registry. More exactly it use HttpService coming from the OSGi services registry to register the servlet. The registration is done width an another servlet called ProxyServlet. When sample.http is stopped with OSGi console, it unregister the HelloWorldServlet.
      &lt;/li&gt;
&lt;/ul&gt;

&lt;li&gt;&lt;strong&gt;(2.1) service&lt;/strong&gt; : when BridgeServlet is called with HTTP request /helloworld (Bridge#service(HttpServletRequest req, HttpServletResponse resp)) :
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;(2.2) it search a Servlet registered with /helloworld&lt;/strong&gt; path from the OSGi registry services. More exactly it use ProxyServlet.
      &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;(2.3) it returns the Servlet founded&lt;/strong&gt; in our case HelloWorldServlet from the sample.http is founded.
      &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;(2.4) it calls HelloWorldServlet#service(HttpServletRequest req, HttpServletResponse resp)) &lt;/strong&gt;and HTTP server returns the HTTP response to the client.
      &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;(3) destroy()&lt;/strong&gt; : BridgeServlet#destroy() is called by HTTP server when server stop the bridge WEB application. In this method, the Equinox OSGi container is stopped by calling org.eclipse.core.runtime.adaptor.&lt;strong&gt;EclipseStarter#shutdown()&lt;/strong&gt;.&lt;/li&gt;

&lt;/ul&gt;
&lt;h3 id=&quot;web-xml&quot;&gt;web.xml&lt;/h3&gt;
&lt;p&gt;The &lt;strong&gt;web.xml&lt;/strong&gt; of the bridge WEB Application declare the &lt;a href=&quot;http://angelozerr.wordpress.com/feed/#BridgeServlet&quot;&gt;BridgeServlet – servlet » &lt;/a&gt; which is used to manage &lt;strong&gt;OSGi Equinox in a Servlet Container&lt;/strong&gt;. This servlet is used for several things :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;to start/stop OSGi container and dispatch to the well Servlet registered in the OSGi services registry
  &lt;/li&gt;
&lt;li&gt;process the whole commands /sp_* to control the Framework.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;BridgeServlet&quot;&gt;BridgeServlet – servlet&lt;/h4&gt;
&lt;p&gt;The BridgeServlet is declared with servlet XML element like this : &lt;/p&gt;
&lt;pre class=&quot;brush: xml;&quot;&gt;&amp;lt;servlet id=&quot;bridge&quot;&amp;gt;
  &amp;lt;servlet-name&amp;gt;equinoxbridgeservlet&amp;lt;/servlet-name&amp;gt;
  &amp;lt;display-name&amp;gt;Equinox Bridge Servlet&amp;lt;/display-name&amp;gt;
  &amp;lt;description&amp;gt;Equinox Bridge Servlet&amp;lt;/description&amp;gt;
  &amp;lt;servlet-class&amp;gt;org.eclipse.equinox.servletbridge.BridgeServlet&amp;lt;/servlet-class&amp;gt;
&amp;lt;/servlet&amp;gt;&lt;/pre&gt;
&lt;p&gt;The servlet-mapping map /* URL : &lt;/p&gt;
&lt;pre class=&quot;brush: xml;&quot;&gt;&amp;lt;servlet-mapping&amp;gt;
  &amp;lt;servlet-name&amp;gt;equinoxbridgeservlet&amp;lt;/servlet-name&amp;gt;
  &amp;lt;url-pattern&amp;gt;/*&amp;lt;/url-pattern&amp;gt;
&amp;lt;/servlet-mapping&amp;gt;

&amp;lt;!-- This is required if your application bundles expose JSPs. --&amp;gt;
&amp;lt;servlet-mapping&amp;gt;
  &amp;lt;servlet-name&amp;gt;equinoxbridgeservlet&amp;lt;/servlet-name&amp;gt;
  &amp;lt;url-pattern&amp;gt;*.jsp&amp;lt;/url-pattern&amp;gt;
&amp;lt;/servlet-mapping&amp;gt;&lt;/pre&gt;
&lt;p&gt;You can notice that with this mapping, every HTTP request are processed by the BridgeServlet. It cause the problem that it’s impossible to host some resources (Javascript, HTML, Servlet, JSP…) in the bridge WEB Application.&lt;/p&gt;
&lt;h4&gt;BridgeServlet – init-param&lt;/h4&gt;
&lt;p&gt;The BridgeServlet can be configured width XML init-param. The web.xml declare the following init-param (inside the servlet declaration) : &lt;/p&gt;
&lt;h5&gt;commandline&lt;/h5&gt;
&lt;p&gt;The &lt;strong&gt;commandline&lt;/strong&gt; init-param is used to configure the Equinox OSGi container and it is declared like this : &lt;/p&gt;
&lt;pre class=&quot;brush: xml;&quot;&gt;&amp;lt;init-param&amp;gt;
  &amp;lt;param-name&amp;gt;commandline&amp;lt;/param-name&amp;gt;
  &amp;lt;param-value&amp;gt;-console&amp;lt;/param-value&amp;gt;
&amp;lt;/init-param&amp;gt;&lt;/pre&gt;
&lt;p&gt;The &lt;strong&gt;-console&lt;/strong&gt; means that OSGi console must be launched when bridge is started. For more informations about the Equinox OSGi container configuration, please read &lt;a href=&quot;http://help.eclipse.org/helios/index.jsp?topic=/org.eclipse.platform.doc.isv/reference/misc/runtime-options.html&quot;&gt;The Eclipse runtime options&lt;/a&gt;.&lt;/p&gt;
&lt;h5&gt;enableFrameworkControls&lt;/h5&gt;
&lt;p&gt;The &lt;strong&gt;enableFrameworkControls&lt;/strong&gt; init-param  is setted like this : &lt;/p&gt;
&lt;pre class=&quot;brush: xml;&quot;&gt;&amp;lt;init-param&amp;gt;
	&amp;lt;param-name&amp;gt;enableFrameworkControls&amp;lt;/param-name&amp;gt;
	&amp;lt;param-value&amp;gt;true&amp;lt;/param-value&amp;gt;
&amp;lt;/init-param&amp;gt;&lt;/pre&gt;
&lt;p&gt;It means that /sp_* commands are available.&lt;/p&gt;
&lt;p&gt;There are another init-param like &lt;strong&gt;extendedFrameworkExports&lt;/strong&gt; (that I will explain in the future article) and &lt;strong&gt;frameworkLauncherClass&lt;/strong&gt; (that I have never used).&lt;/p&gt;
&lt;h2 id=&quot;sample-http2&quot;&gt;sample.http2&lt;/h2&gt;
&lt;p&gt;In this section we will create a new bundle called &lt;strong&gt;sample.http2&lt;/strong&gt; which will register a servlet with path &lt;strong&gt;/helloworld2&lt;/strong&gt; like &lt;strong&gt;sample.http&lt;/strong&gt;. The code of teh&lt;br /&gt;
&lt;strong&gt;sample.http2&lt;/strong&gt; will be (almost) the same than sample.http.&lt;/p&gt;
&lt;h3 id=&quot;CreateBundle&quot;&gt;Create Bundle&lt;/h3&gt;
&lt;p&gt;Here we create the bundle &lt;strong&gt;sample.http&lt;/strong&gt; with &lt;a href=&quot;http://www.eclipse.org/pde/&quot;&gt;PDE&lt;/a&gt; (Plug-in Development Environment). To do that go at menu &lt;strong&gt;File/New/Other&lt;/strong&gt; and &lt;strong&gt;Plug-in Development/Plug-in Project&lt;/strong&gt; : &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://angelozerr.files.wordpress.com/2010/09/servletbridge_newbundle1.png?w=600&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Click on &lt;strong&gt;Next&lt;/strong&gt; button, and :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;fill Project name field with &lt;strong&gt;sample.http2&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;select the radio button &lt;strong&gt;an OSGI framework&lt;/strong&gt; because we wish develop an OSGi bundle and select the combo &lt;strong&gt;standard&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;http://angelozerr.files.wordpress.com/2010/09/servletbridge_newbundle2.png?w=600&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Click on &lt;strong&gt;Next&lt;/strong&gt; button, the wizard page which configure the OSGi bundle is displayed :&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://angelozerr.files.wordpress.com/2010/09/servletbridge_newbundle3.png?w=600&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ID&lt;/strong&gt; field is the Bundle identifier (Bundle-SymbolicName: sample.http2).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Version&lt;/strong&gt; field is the Bundle version (Bundle-Version: 1.0.0.qualifier).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Name&lt;/strong&gt; field is the Bundle name (Bundle-Name: Sample Http 2).
        &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Execution Environment&lt;/strong&gt; set the minimal version of the JRE in order to the bundle can be executed (Bundle-RequiredExecutionEnvironment: J2SE-1.5).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;generate an activator, a Java class that controls the plug-in’s life cycle&lt;/strong&gt; option must be selected to generate a Bundle Activator&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Click on &lt;strong&gt;Finish&lt;/strong&gt; button to generate the OSGi bundle project.&lt;/p&gt;
&lt;p&gt;Your workspace looks like this : &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://angelozerr.files.wordpress.com/2010/09/servletbridge_newbundle4.png?w=600&quot; /&gt;&lt;/p&gt;
&lt;p&gt;The sample &lt;strong&gt;sample.http2&lt;/strong&gt; is generated. It contains :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A META-INF/MANIFEST.MF with contains OSGi bundles meta-data :
&lt;pre class=&quot;brush: plain;&quot;&gt;Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Sample Http 2
Bundle-SymbolicName: sample.http2
Bundle-Version: 1.0.0.qualifier
Bundle-Activator: sample.http2.Activator
Import-Package: org.osgi.framework;version=&quot;1.3.0&quot;
Bundle-RequiredExecutionEnvironment: J2SE-1.5&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;An Java class sample.http2.&lt;strong&gt;Activator&lt;/strong&gt; with this content :
&lt;pre class=&quot;brush: java;&quot;&gt;package sample.http2;

import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;

public class Activator implements BundleActivator {

	private static BundleContext context;

	static BundleContext getContext() {
		return context;
	}

	public void start(BundleContext bundleContext) throws Exception {
		Activator.context = bundleContext;
	}

	public void stop(BundleContext bundleContext) throws Exception {
		Activator.context = null;
	}

}&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When the OSGi bundle sample.http2 will be : &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;started with OSGi console, the Activator#start(BundleContext bundleContext) will be called.
  &lt;/li&gt;
&lt;li&gt;stopped with OSGi console, the Activator#stop(BundleContext bundleContext) will be called.
  &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The Activator class implements org.osgi.framework.&lt;strong&gt;BundleActivator&lt;/strong&gt; and is referenced in the META-INF/&lt;strong&gt;MANIFEST.MF&lt;/strong&gt; like this : &lt;/p&gt;
&lt;pre class=&quot;brush: plain;&quot;&gt;...
Bundle-Activator: sample.http2.Activator&lt;/pre&gt;
&lt;h3 id=&quot;CreateServlet&quot;&gt;Create Servlet&lt;/h3&gt;
&lt;p&gt;Now we must modify the Activator to :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;register a Servlet on Activator#start in the OSGi services registry.
  &lt;/li&gt;
&lt;li&gt;unregister the Servlet on Activator#stop in the OSGi services registry.
  &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;HelloWorldServlet&lt;/h4&gt;
&lt;p&gt;Before managing OSGi Servlet with OSGi registry, we create a basic Servlet &lt;strong&gt;HelloWorldServlet&lt;/strong&gt;  in the sample.http2 project like this : &lt;/p&gt;
&lt;pre class=&quot;brush: java;&quot;&gt;package sample.http2;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloWorldServlet extends HttpServlet {

	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		resp.setContentType(&quot;text/html&quot;);
		resp.getWriter().write(&quot;&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;Hello World 2-- sample 2 servlet&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&quot;); //$NON-NLS-1$
	}

}&lt;/pre&gt;
&lt;h4&gt;Import package javax.servlet&lt;/h4&gt;
&lt;p&gt;You will have a compilation problem with &lt;strong&gt;javax.servlet&lt;/strong&gt; package. To fix the problem we must import package &lt;strong&gt;javax.servlet&lt;/strong&gt;. To do that, open the META-INF/&lt;strong&gt;MANIFEST.MF&lt;/strong&gt; and go at the &lt;strong&gt;Dependencies&lt;/strong&gt; tab : &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://angelozerr.files.wordpress.com/2010/09/servletbridge_importpackage1.png?w=600&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Click on &lt;strong&gt;Add…&lt;/strong&gt; button of the list &lt;strong&gt;Imported packages&lt;/strong&gt; list. The &lt;strong&gt;Package Selection&lt;/strong&gt; dialog opens : &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://angelozerr.files.wordpress.com/2010/09/servletbridge_importpackage2.png?w=600&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Type &lt;strong&gt;javax.servlet&lt;/strong&gt; in the field and click on OK button : &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://angelozerr.files.wordpress.com/2010/09/servletbridge_importpackage3.png?w=600&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Save the editor and go to the MANIFEST.MF tab. The MANIFEST.MF has changed by adding javax.servlet : &lt;/p&gt;
&lt;pre class=&quot;brush: plain;&quot;&gt;Import-Package: javax.servlet;version=&quot;2.5.0&quot;,
 org.osgi.framework;version=&quot;1.3.0&quot;&lt;/pre&gt;
&lt;p&gt;You can notice that there is &lt;strong&gt;version= »2.5.0″&lt;/strong&gt; which means the bundle will works only with OSGi bundles which provides javax.servlet with Servlet 2.5. In our case our servlet is very simple, so we can remove this information : &lt;/p&gt;
&lt;pre class=&quot;brush: plain;&quot;&gt;Import-Package: javax.servlet,
 org.osgi.framework;version=&quot;1.3.0&quot;&lt;/pre&gt;
&lt;h4&gt;Import package javax.servlet.http&lt;/h4&gt;
&lt;p&gt;You will have the same compilation, problem with &lt;strong&gt;javax.servlet.http&lt;/strong&gt;, import the package javax.servlet.http and remove the version. Here the MANIFEST.MF : &lt;/p&gt;
&lt;pre class=&quot;brush: plain;&quot;&gt;Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Sample Http 2
Bundle-SymbolicName: sample.http2
Bundle-Version: 1.0.0.qualifier
Bundle-Activator: sample.http2.Activator
Import-Package: javax.servlet,
 javax.servlet.http,
 org.osgi.framework;version=&quot;1.3.0&quot;
Bundle-RequiredExecutionEnvironment: J2SE-1.5&lt;/pre&gt;
&lt;h3&gt;Register the servlet as an OSGi service&lt;/h3&gt;
&lt;p&gt;Now we can register our HelloWorldServlet in the OSGi services registry. The OSGi services registry is used to publish/retrieve some services. Some bundles publish X services and some bundles retrieve and consume the X services. In our case we must retrieve from the OSGi service sregistry, the HTTP service org.osgi.service.http.&lt;strong&gt;HttpService&lt;/strong&gt; which is an interface : &lt;/p&gt;
&lt;pre class=&quot;brush: java;&quot;&gt;package org.osgi.service.http;

import java.util.Dictionary;

import javax.servlet.Servlet;
import javax.servlet.ServletException;

/**
 * The Http Service allows other bundles in the OSGi environment to dynamically
 * register resources and servlets into the URI namespace of Http Service. A
 * bundle may later unregister its resources or servlets.
 *
 */
public interface HttpService {

	public void registerServlet(String alias, Servlet servlet,
			Dictionary initparams, HttpContext context)
			throws ServletException, NamespaceException;

	public void registerResources(String alias, String name,
			HttpContext context) throws NamespaceException;

	public void unregister(String alias);

	public HttpContext createDefaultHttpContext();
}&lt;/pre&gt;
&lt;p&gt;Once we will have this service we can: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;call HttpService#registerServlet on our Activator#start to register the servlet HelloWorldServlet.
  &lt;/li&gt;
&lt;li&gt;call HttpService#unregister on our Activator#stop to unregister the servlet HelloWorldServlet.
  &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;HttpServiceTracker&lt;/h4&gt;
&lt;p&gt;To retrieve a service from the OSGi services registry, we can use the org.osgi.util.tracker.&lt;strong&gt;ServiceTracker&lt;/strong&gt; which is used to track and retrieve a service from the OSGi services registry. Create the class sample.http2.&lt;strong&gt;HttpServiceTracker&lt;/strong&gt; like this : &lt;/p&gt;
&lt;pre class=&quot;brush: java;&quot;&gt;package sample.http2;

import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
import org.osgi.service.http.HttpService;
import org.osgi.util.tracker.ServiceTracker;

public class HttpServiceTracker extends ServiceTracker {

	public HttpServiceTracker(BundleContext context) {
		super(context, HttpService.class.getName(), null);
	}

	public Object addingService(ServiceReference reference) {
		HttpService httpService = (HttpService) context.getService(reference);
		try {
			httpService.registerServlet(&quot;/helloworld2&quot;, new HelloWorldServlet(), null, null); //$NON-NLS-1$
		} catch (Exception e) {
			e.printStackTrace();
		}
		return httpService;
	}		

	public void removedService(ServiceReference reference, Object service) {
		HttpService httpService = (HttpService) service;
		httpService.unregister(&quot;/helloworld2&quot;); //$NON-NLS-1$
		super.removedService(reference, service);
	}

}
&lt;/pre&gt;
&lt;p&gt;The HttpServiceTracker constructor (which extends ServiceTracker), set the required BundleContext and the name of the service that we wish retrieve (in our case HttpService).&lt;/p&gt;
&lt;pre class=&quot;brush: java;&quot;&gt;public HttpServiceTracker(BundleContext context) {
	super(context, HttpService.class.getName(), null);
}&lt;/pre&gt;
&lt;h5&gt;Register servlet&lt;/h5&gt;
&lt;p&gt;When HttpServiceTracker will be opened by calling : &lt;/p&gt;
&lt;pre class=&quot;brush: java;&quot;&gt;ServiceTracker#open();&lt;/pre&gt;
&lt;p&gt;it will track in the OSGi services registry the publish of the HttpService. When HttpService is published, the method &lt;/p&gt;
&lt;pre class=&quot;brush: java;&quot;&gt;ServiceTracker#addingService(ServiceReference reference) ;&lt;/pre&gt;
&lt;p&gt;is called. So in this method, we can get the service HttpService  and register our HelloWorldServlet width path /helloworld2 : &lt;/p&gt;
&lt;pre class=&quot;brush: java;&quot;&gt;public Object addingService(ServiceReference reference) {
  HttpService httpService = (HttpService) context.getService(reference);
  try {
    httpService.registerServlet(&quot;/helloworld2&quot;, new HelloWorldServlet(), null, null); //$NON-NLS-1$
  } catch (Exception e) {
    e.printStackTrace();
  }
  return httpService;
}&lt;/pre&gt;
&lt;h5&gt;Unregister servlet&lt;/h5&gt;
&lt;p&gt;When HttpServiceTracker will be closed by calling : &lt;/p&gt;
&lt;pre class=&quot;brush: java;&quot;&gt;ServiceTracker#close();&lt;/pre&gt;
&lt;p&gt;it will call the method :&lt;/p&gt;
&lt;pre class=&quot;brush: java;&quot;&gt;ServiceTracker#removedService(ServiceReference reference, Object service);&lt;/pre&gt;
&lt;p&gt;So in this method, we can get the service HttpService  and unregister our HelloWorldServlet width path /helloworld2 : &lt;/p&gt;
&lt;pre class=&quot;brush: java;&quot;&gt;public void removedService(ServiceReference reference, Object service) {
  HttpService httpService = (HttpService) service;
  httpService.unregister(&quot;/helloworld2&quot;); //$NON-NLS-1$
  super.removedService(reference, service);
}&lt;/pre&gt;
&lt;h5&gt;Import package org.osgi.service.http + org.osgi.util.tracker&lt;/h5&gt;
&lt;p&gt;At this step you will have compilation problem. To fix that, import the packages &lt;strong&gt;org.osgi.service.http&lt;/strong&gt; and &lt;strong&gt;org.osgi.util.tracker&lt;/strong&gt; : &lt;/p&gt;
&lt;pre class=&quot;brush: plain;&quot;&gt; org.osgi.service.http;version=&quot;1.2.1&quot;,
 org.osgi.util.tracker;version=&quot;1.4.0&quot;&lt;/pre&gt;
&lt;p&gt; Keep the bundles version generated, there is a problem with this declaration. We will see the problem at &lt;a href=&quot;http://angelozerr.wordpress.com/feed/#ImportPackagesProblem&quot;&gt;Import Packages Problem&lt;/a&gt; section and how fix it. &lt;/p&gt;
&lt;h4&gt;Activator&lt;/h4&gt;
&lt;p&gt;Here we can modify the Activator to call our HttpServiceTracker. Modify the Activator class like this : &lt;/p&gt;
&lt;pre class=&quot;brush: java;&quot;&gt;package sample.http2;

import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.util.tracker.ServiceTracker;

public class Activator implements BundleActivator {

	private static BundleContext context;
	private ServiceTracker httpServiceTracker;

	static BundleContext getContext() {
		return context;
	}

	public void start(BundleContext bundleContext) throws Exception {
		Activator.context = bundleContext;

		httpServiceTracker = new HttpServiceTracker(context);
		httpServiceTracker.open();
	}

	public void stop(BundleContext bundleContext) throws Exception {
		Activator.context = null;

		if (httpServiceTracker != null) {
			httpServiceTracker.close();
		}
		httpServiceTracker = null;
	}

}&lt;/pre&gt;
&lt;h3&gt;Install sample.http2&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://angelozerr.wordpress.com/2010/09/01/osgi-equinox-in-a-servlet-container-step1/#CreateJARAndDeployBundle&quot;&gt;create and deploy&lt;/a&gt;  the &lt;strong&gt;sample.http2_*.jar&lt;/strong&gt; You will notice that the &lt;strong&gt;JAR generated use the datetime &lt;/strong&gt;in the JAR name (ex : sample.http2_1.0.0.201009011521.jar). This behaviour is explained with the &lt;strong&gt;.qualifier&lt;/strong&gt; in the  &lt;strong&gt;MANIFEST.MF&lt;/strong&gt; which declare :
&lt;pre class=&quot;brush: plain;&quot;&gt;Bundle-Version: 1.0.0.qualifier&lt;/pre&gt;
&lt;p&gt;Remove the &lt;strong&gt;.qualifier&lt;/strong&gt; : &lt;/p&gt;
&lt;pre class=&quot;brush: plain;&quot;&gt;Bundle-Version: 1.0.0&lt;/pre&gt;
&lt;p&gt;Now if you &lt;a href=&quot;http://angelozerr.wordpress.com/2010/09/01/osgi-equinox-in-a-servlet-container-step1/#CreateJARAndDeployBundle&quot;&gt;create and deploy&lt;/a&gt;, you will have every time the &lt;strong&gt;sample.http2_1.0.0.jar&lt;/strong&gt;.
&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;modify the config.ini to add &lt;strong&gt;sample.http2@start&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Go at &lt;a href=&quot;http://localhost:8080/bridge/sp_redeploy&quot;&gt;http://localhost:8080/bridge/sp_redeploy&lt;/a&gt; to redeploy the JAR.&lt;/li&gt;
&lt;li&gt;restart the Tomcat server&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;ImportPackagesProblem&quot;&gt;Import packages Problem&lt;/h4&gt;
&lt;p&gt;Restart your server and type in the console View&lt;/p&gt;
&lt;div style=&quot;border: black solid 1px; background-color: #f6f6f6;&quot;&gt;&lt;code&gt;ss&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;The OSGi console display the Short Status of the bundles installed : &lt;/p&gt;
&lt;div style=&quot;border: black solid 1px; background-color: #f6f6f6;&quot;&gt;&lt;code&gt;&lt;br /&gt;
...&lt;br /&gt;
15	INSTALLED   sample.http2&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;sample.http2 is &lt;strong&gt;INSTALLED&lt;/strong&gt; but not &lt;strong&gt;RESOLVED&lt;/strong&gt;, which means that &lt;strong&gt;there is a problem&lt;/strong&gt;. Try to &lt;strong&gt;start the bundle&lt;/strong&gt; (in my case with command start 15) and you will see the error : &lt;/p&gt;
&lt;div style=&quot;border: black solid 1px; background-color: #f6f6f6;&quot;&gt;&lt;code&gt;osgi&amp;gt; start 15&lt;br /&gt;
org.osgi.framework.BundleException: The bundle could not be resolved. Reason: Missing Constraint: Import-Package: org.osgi.service.http; version=&quot;1.2.1&quot;&lt;br /&gt;
...&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;It means that  &lt;strong&gt;org.osgi.service.http&lt;/strong&gt; packages are not retrieved with version « 1.2.1″. It’s possible to &lt;strong&gt;display available packages with OSGi console&lt;/strong&gt;. To do that type : &lt;/p&gt;
&lt;div style=&quot;border: black solid 1px; background-color: #f6f6f6;&quot;&gt;&lt;code&gt;packages org.osgi.service.http&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;You will see on the console : &lt;/p&gt;
&lt;div style=&quot;border: black solid 1px; background-color: #f6f6f6;&quot;&gt;&lt;code&gt;osgi&amp;gt; packages org.osgi.service.http&lt;br /&gt;
org.osgi.service.http; version=&quot;1.2.0&quot;&lt;br /&gt;
  initial@reference:file:plugins/org.eclipse.equinox.http.servletbridge_1.0.0.200704022148.jar/ [3] imports&lt;br /&gt;
  initial@reference:file:plugins/org.eclipse.equinox.http.registry_1.0.0.200704022148.jar/ [4] imports&lt;br /&gt;
  initial@reference:file:plugins/sample.http_1.0.0.jar/ [5] imports&lt;br /&gt;
  update@plugins/org.eclipse.equinox.http.servlet_1.0.0.200704022148.jar [9] imports&lt;br /&gt;
  update@plugins/org.eclipse.osgi.services_3.1.100.200704022148.jar [12] imports&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;You will see that &lt;strong&gt;package exported is 1.2.0 &lt;/strong&gt;and NOT &lt;strong&gt;1.2.1&lt;/strong&gt;. There is the same problem with &lt;strong&gt;org.osgi.util.tracker&lt;/strong&gt; package. To fix the problem : &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;remove the versions of the MANIFEST.MF&lt;/strong&gt;
  &lt;/li&gt;
&lt;li&gt;OR change it your MANIFEST.MF with well version like this :
&lt;pre class=&quot;brush: plain;&quot;&gt;Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Sample Http 2
Bundle-SymbolicName: sample.http2
Bundle-Version: 1.0.0
Bundle-Activator: sample.http2.Activator
Import-Package: javax.servlet,
 javax.servlet.http,
 org.osgi.framework;version=&quot;1.3.0&quot;,
 org.osgi.service.http;version=&quot;1.2.0&quot;,
 org.osgi.util.tracker;version=&quot;1.3.3&quot;
Bundle-RequiredExecutionEnvironment: J2SE-1.5&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To understand the problem, see the Plug-in dependencies of the sample.http2 : &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://angelozerr.files.wordpress.com/2010/09/servletbridge_importpackagesproblem.png?w=600&quot; /&gt;&lt;/p&gt;
&lt;p&gt;You will notice that it use the JAR &lt;strong&gt;org.eclipse.osgi.services_3.2*.jar&lt;/strong&gt; from the Eclipse IDE and not the &lt;strong&gt;org.eclipse.osgi_3.3.0.200704022148.jar&lt;/strong&gt; from the WEB-INF/eclipse/plugins. We will in the next article &lt;a href=&quot;http://angelozerr.wordpress.com/2010/09/06/osgi-equinox-in-a-servlet-container-step3/#TargetPlatform&quot;&gt;[step3]&lt;/a&gt; how we can &lt;strong&gt;configure Eclipse to use bundles from the  WEB-INF/eclipse/plugins&lt;/strong&gt; and not from the Eclipse IDE.&lt;/p&gt;
&lt;h4&gt;Retry&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://angelozerr.wordpress.com/2010/09/01/osgi-equinox-in-a-servlet-container-step1/#CreateJARAndDeployBundle&quot;&gt;create and deploy&lt;/a&gt; &lt;strong&gt;sample.http2_1.0.0.jar&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Go at &lt;a href=&quot;http://localhost:8080/bridge/sp_redeploy&quot;&gt;http://localhost:8080/bridge/sp_redeploy&lt;/a&gt; to redeploy the JAR.&lt;/li&gt;
&lt;li&gt;restart the Tomcat server&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you go at &lt;a href=&quot;http://localhost:8080/bridge/helloworld2&quot;&gt;http://localhost:8080/bridge/helloworld2&lt;/a&gt; you will see  : &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://angelozerr.files.wordpress.com/2010/09/servletbridge_helloworld2.png?w=600&quot; /&gt;&lt;/p&gt;
&lt;p&gt;You can stop to check that the servlet will not available.&lt;/p&gt;
&lt;h2 id=&quot;Webconsole&quot;&gt;OSGi Felix Webconsole&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&quot;http://felix.apache.org/site/apache-felix-web-console.html&quot;&gt;Apache Felix Web Console&lt;/a&gt; is a simple tool to inspect and manage OSGi framework instances using your favourite Web Browser. In this section we will install to show you how it’s easy to install another bundles and more have I think it’s a cool feature to have OSGi Webconsole.&lt;/p&gt;
&lt;p&gt;To do that : &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Download Web Console &lt;strong&gt;org.apache.felix.webconsole-3.1.2.jar&lt;/strong&gt; at &lt;a href=&quot;http://felix.apache.org/site/downloads.cgi&quot;&gt; http://felix.apache.org/site/downloads.cgi&lt;/a&gt;.
  &lt;/li&gt;
&lt;li&gt;Copy the &lt;strong&gt;org.apache.felix.webconsole-3.1.2.jar&lt;/strong&gt; into the WEB-INF/eclipse/&lt;strong&gt;plugins &lt;/strong&gt;folder.
  &lt;/li&gt;
&lt;li&gt;Go at &lt;a href=&quot;http://localhost:8080/bridge/sp_redeploy&quot;&gt;http://localhost:8080/bridge/sp_redeploy&lt;/a&gt; to redeploy the JAR.&lt;/li&gt;
&lt;li&gt;restart the Tomcat server&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Type in the console View&lt;/p&gt;
&lt;div style=&quot;border: black solid 1px; background-color: #f6f6f6;&quot;&gt;&lt;code&gt;ss&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;The OSGi console display the Short Status of the bundles installed : &lt;/p&gt;
&lt;div style=&quot;border: black solid 1px; background-color: #f6f6f6;&quot;&gt;&lt;code&gt;...&lt;br /&gt;
7	RESOLVED    org.apache.felix.webconsole_3.1.2&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Start the Felix Webconsole with the command : &lt;/p&gt;
&lt;div style=&quot;border: black solid 1px; background-color: #f6f6f6;&quot;&gt;&lt;code&gt;start 7&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Go at &lt;a href=&quot;http://localhost:8080/bridge/system/console/&quot;&gt;http://localhost:8080/bridge/system/console/&lt;/a&gt; to display the OSGi console. This Webconsole is securized. A prompt dialog « OSGi Management Console » will display. Fill username/password like this : &lt;/p&gt;
&lt;table border=&quot;1&quot;&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;th&gt;Name&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;username&lt;/td&gt;
&lt;td&gt;admin&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;password&lt;/td&gt;
&lt;td&gt;admin&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;The OSGi Webconsole must be displayed : &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://angelozerr.files.wordpress.com/2010/09/servletbridge_felixwebconsole.png?w=600&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;In this article I have explained (a little) how &lt;strong&gt;bridge and sample.http works&lt;/strong&gt;. I have introduced several problems with using « OSGi Equinox in a Servlet Container » : &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;When bundle (ex : sample.http2) is developped, it use JAR coming from the Eclipse IDE and not from the WEB-INF/plugins/eclipse folder. You can have some problems when bundle is deployed ( with import packages was a sample). We will see in the next article &lt;a href=&quot;http://angelozerr.wordpress.com/2010/09/06/osgi-equinox-in-a-servlet-container-step3/#TargetPlatform&quot;&gt;[step3]&lt;/a&gt; how we can fix this problem with &lt;strong&gt;Target Platform&lt;/strong&gt;.
  &lt;/li&gt;
&lt;li&gt;It may that &lt;strong&gt;/sp_redeploy&lt;/strong&gt; doesn’t works (very rarely) with WTP Web Dynamic Project. In the next article &lt;a href=&quot;http://angelozerr.wordpress.com/2010/09/06/osgi-equinox-in-a-servlet-container-step3/#wtpwebapps&quot;&gt;[step3]&lt;/a&gt;, I will explain more how WTP deploy the WEB application.
  &lt;/li&gt;
&lt;li&gt;It’s impossible to &lt;strong&gt;use directly the OSGi bundle coming from the workspace&lt;/strong&gt;. You must create a JAR and copy/paste to the /plugins folder. I will explain how fix this problem in &lt;a href=&quot;http://angelozerr.wordpress.com/2010/09/08/osgi-equinox-in-a-servlet-container-step4/#workspace_loc&quot;&gt;[step4]&lt;/a&gt; with &lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=323707&quot;&gt;patch 323707&lt;/a&gt;.
  &lt;/li&gt;
&lt;li&gt;It’s &lt;strong&gt;impossible to host some resources&lt;/strong&gt; (HTML, Javascript, Servlet…) in the bridge WEB Application (when /* URL pattern is used). I will explain how fix this problem in &lt;a href=&quot;http://angelozerr.wordpress.com/2010/09/08/osgi-equinox-in-a-servlet-container-step4/#BridgeFilter&quot;&gt;[step4]&lt;/a&gt; with &lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=323707&quot;&gt;patch 323707&lt;/a&gt;.
&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;In the &lt;a href=&quot;http://angelozerr.wordpress.com/2010/09/06/osgi-equinox-in-a-servlet-container-step3/&quot;&gt;[step3]&lt;/a&gt; article I will show you how we can fix those 2 first problems.&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/angelozerr.wordpress.com/3109/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/angelozerr.wordpress.com/3109/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/angelozerr.wordpress.com/3109/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/angelozerr.wordpress.com/3109/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gofacebook/angelozerr.wordpress.com/3109/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/angelozerr.wordpress.com/3109/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gotwitter/angelozerr.wordpress.com/3109/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/angelozerr.wordpress.com/3109/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/angelozerr.wordpress.com/3109/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/angelozerr.wordpress.com/3109/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/angelozerr.wordpress.com/3109/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/angelozerr.wordpress.com/3109/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/angelozerr.wordpress.com/3109/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/angelozerr.wordpress.com/3109/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://stats.wordpress.com/b.gif?host=angelozerr.wordpress.com&amp;amp;blog=10338309&amp;amp;post=3109&amp;amp;subd=angelozerr&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Thu, 02 Sep 2010 22:18:04 +0000</pubDate>
</item>
<item>
	<title>Ian Skerrett: Eclipse Stories: Cell Biosciences</title>
	<guid isPermaLink="false">http://ianskerrett.wordpress.com/?p=1670</guid>
	<link>http://feedproxy.google.com/~r/IanSkerrett/~3/DkkM-nAnHWY/</link>
	<description>&lt;p&gt;As I &lt;a href=&quot;http://ianskerrett.wordpress.com/2010/09/01/tell-us-your-eclipse-story-win-a-pass-to-javaone/&quot;&gt;mentioned yesterday&lt;/a&gt;, we want to encourage people to tell their Eclipse story.  Last week Cell Biosciences told their story at the &lt;a href=&quot;http://wiki.eclipse.org/Eclipse_Day_At_Googleplex_2010&quot;&gt;Eclipse Day at the Googleplex&lt;/a&gt;.   You can &lt;a href=&quot;http://wiki.eclipse.org/images/9/93/CellbioEclipseDay.pdf&quot;&gt;view their entire presentation&lt;/a&gt; but I have added a summary on the &lt;a href=&quot;http://wiki.eclipse.org/Eclipse_Stories&quot;&gt;Eclipse Story wiki &lt;/a&gt;and below.&lt;/p&gt;
&lt;p&gt;btw, Cell Biosciences is looking a great Eclipse developer to join their team.  Check out the presentation for details.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Eclipse Story&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Title: Protein Analysis with Eclipse RCP&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Name:&lt;/strong&gt; Cell Biosciences&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.cellbiosciences.com/index.html&quot;&gt;Cell Biosciences&lt;/a&gt; is a company that provides instruments and software  to analyze the proteins in the human body.  Their systems help life  science researchers in research institutions and  pharmaceutical/biotechnology companies.&lt;/p&gt;
&lt;p&gt;Cell Bioscience uses Eclipse RCP to create desktop applications  to analyze the data sent from their imaging machines. The RCP based  application use allows researchers to setup, run and analyze data  experiments.  The applications feature graphs, images and tables of data  that can be sliced in different ways.&lt;/p&gt;
&lt;p&gt;In addition to RCP, Cell Bioscience uses Eclipse as their  development tool platform.  Their systems include Java, Python,  Javascript and C/C++ code.  To support their development needs they use  PyDev, Subclipse, Egit, JUnit, SWT Bot, TPTP Test and Performance, WTP  WSDL editing and Aptana for Javascript.&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/ianskerrett.wordpress.com/1670/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/ianskerrett.wordpress.com/1670/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/ianskerrett.wordpress.com/1670/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/ianskerrett.wordpress.com/1670/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gofacebook/ianskerrett.wordpress.com/1670/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/ianskerrett.wordpress.com/1670/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gotwitter/ianskerrett.wordpress.com/1670/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/ianskerrett.wordpress.com/1670/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/ianskerrett.wordpress.com/1670/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/ianskerrett.wordpress.com/1670/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/ianskerrett.wordpress.com/1670/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/ianskerrett.wordpress.com/1670/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/ianskerrett.wordpress.com/1670/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/ianskerrett.wordpress.com/1670/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://stats.wordpress.com/b.gif?host=ianskerrett.wordpress.com&amp;amp;blog=405862&amp;amp;post=1670&amp;amp;subd=ianskerrett&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Thu, 02 Sep 2010 20:10:36 +0000</pubDate>
</item>
<item>
	<title>Scott Lewis: Asynchronous Remote Services - choices, choices</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-20358640.post-6474893909504066442</guid>
	<link>http://eclipseecf.blogspot.com/2010/09/asynchronous-remote-services-choices.html</link>
	<description>In &lt;a href=&quot;http://www.eclipse.org/ecf&quot;&gt;ECF&lt;/a&gt;'s &lt;a href=&quot;http://www.eclipse.org/ecf/downloads.php&quot;&gt;Helios release&lt;/a&gt;, we released an implementation of the &lt;a href=&quot;http://wiki.eclipse.org/ECF#OSGi_4.2_Remote_Services&quot;&gt;OSGi remote services&lt;/a&gt; standard specification (chapter 13 in compendium).&lt;br /&gt;&lt;br /&gt;In addition to the full spec implementation...which is based upon synchronous remote service proxies...we added support for &lt;a href=&quot;http://wiki.eclipse.org/Asynchronous_Proxies_for_Remote_Services&quot;&gt;asynchronous remote services&lt;/a&gt;.  This provides non-blocking access to remote OSGi services.  This gives remote service consumers choices...allowing them to invoke remote services synchronously (i.e. by making a blocking method call on the proxy), and/or asynchronously (with a guarantee that the calling thread will not block).&lt;br /&gt;&lt;br /&gt;I think that one nice thing about this approach is that the service host implementer has to do exactly &lt;span style=&quot;font-weight: bold;&quot;&gt;nothing&lt;/span&gt; to make these consumer choices available.  The implementation of the service host is exactly the same.&lt;br /&gt;&lt;br /&gt;There are &lt;a href=&quot;http://eclipseecf.blogspot.com/2010/04/asynchronous-remote-services-future-or.html&quot;&gt;two styles of asynchronous&lt;/a&gt; access supported:  an asynchronous callback (like &lt;a href=&quot;http://code.google.com/webtoolkit/&quot;&gt;GWT&lt;/a&gt;), and a future result, from the &lt;a href=&quot;http://en.wikipedia.org/wiki/Actor_model&quot;&gt;Actor model&lt;/a&gt; of computation.  These two styles of of asynchronous access...along with the specified synchronous proxy...provides remote services consumers with some useful choices for creating reliable distributed systems and applications.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/20358640-6474893909504066442?l=eclipseecf.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Thu, 02 Sep 2010 14:56:05 +0000</pubDate>
	<author>noreply@blogger.com (Scott Lewis)</author>
</item>
<item>
	<title>Chris Aniszczyk: The Value of Documentation in Open Source</title>
	<guid isPermaLink="false">http://aniszczyk.org/?p=2655</guid>
	<link>http://aniszczyk.org/2010/09/02/the-value-of-documentation-in-open-source/</link>
	<description>&lt;p&gt;I’ve been starting a lot of documentation work lately for the &lt;a href=&quot;http://eclipse.org/egit&quot;&gt;EGit&lt;/a&gt;/JGit projects and happened to come across this timely &lt;a href=&quot;http://www.forbes.com/2010/08/07/customer-service-fulkerson-technology-documentation.html&quot;&gt;article&lt;/a&gt; from Forbes. If you don’t want to read it, the gist of it is that solid documentation is more important than you think… especially when it comes to attracting a user and developer base. Here are some quotes…&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;“I can report that my company receives 70% plus of our site traffic from  organic sources, and our documentation generates more than half of our overall site traffic. Furthermore, over half of our lead generation is driven by our documentation.”&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;While the article specifically mentions commercial software, I think the lesson of having solid and findable documentation apply to the open source realm. I mean, when’s the last time you’ve come across an open source project that you praised their documentation efforts? I can maybe count two total in my lifetime. As open source developers and project leads, we tend to put documentation last and our expectation is that users would pitch in to help. As users, we just want good documentation and don’t believe it’s our responsibility to help out necessarily…&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://aniszczyk.org/wp-content/uploads/2010/09/userexpectations.jpg&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;alignnone size-full wp-image-2658&quot; height=&quot;226&quot; src=&quot;http://aniszczyk.org/wp-content/uploads/2010/09/userexpectations.jpg&quot; title=&quot;user expectations&quot; width=&quot;300&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;So next time you’re working on that feature, weigh it versus taking some time to document things for your users. If you’re in Eclipse land, feel free to take a look at our &lt;a href=&quot;http://wiki.eclipse.org/DocumentationGuidelines&quot;&gt;documentation guidelines&lt;/a&gt; and some &lt;a href=&quot;http://wiki.eclipse.org/DocumentationGuidelines/Example&quot;&gt;examples&lt;/a&gt; on how to crowdsource your documentation efforts a bit.&lt;/p&gt;</description>
	<pubDate>Thu, 02 Sep 2010 14:52:25 +0000</pubDate>
</item>
<item>
	<title>Birt World: BIRT Image - Report Item</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-14521551.post-1124913252605750277</guid>
	<link>http://birtworld.blogspot.com/2010/09/birt-image-report-item.html</link>
	<description>BIRT has many ways to include images within a report.  Images can be used in BIRT styles, as watermarks, in text elements, and placed within the report using an image report item.  In this post I will cover some of the details needed to work with images that are inserted using the Image report item. &lt;br /&gt; &lt;br /&gt;The image report item can retrieve images in four different ways.  1 -Through a URI, 2 – as an image in the resource folder, 3 – as an embedded image, 4 -or by using a dynamic image.  Each of these methods is described below with examples.  In addition some of the examples use onCreate scripts written in JavaScript.  While these examples use JavaScript, they could also have been written in Java.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_GN1FyT5H8Kg/TH-wusVg6aI/AAAAAAAAAP4/-hYccM6JXKI/s1600/palette.png&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5512318785146644898&quot; src=&quot;http://4.bp.blogspot.com/_GN1FyT5H8Kg/TH-wusVg6aI/AAAAAAAAAP4/-hYccM6JXKI/s400/palette.png&quot; style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 400px; height: 262px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;URI Images&lt;/em&gt;&lt;br /&gt;The first way is to retrieve an image with the image report item is to use a URI specification.  This method is pretty straight forward and the value can be entered as a constant or as a JavaScript expression.  Constants are processed faster by the engine but are harder to make dynamic.  An example of a constant expression for a URI image would be as follows:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;http://www.eclipse.org/eclipse.org-common/themes/Nova/images/eclipse.png  &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Note: Do not put quotes around the expression unless JavaScript Syntax is selected.  An example of using a JavaScript expression is presented below.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;if( params[&quot;dynamicimage&quot;].value == true ){&lt;br /&gt;&quot;http://www.google.com/intl/en_ALL/images/srpr/logo1w.png&quot;;&lt;br /&gt;}else{&lt;br /&gt;&quot;http://www.eclipse.org/eclipse.org-common/themes/Nova/images/eclipse.png&quot;;&lt;br /&gt;}&lt;br /&gt;This expression checks the value of the dynamicimage report parameter, and then based on its value, sets the value of the URI.&lt;br /&gt;The URI can also be set using an onCreate event handler for the image report item.  The syntax for this approach would look like:&lt;br /&gt;this.URI = &quot;http://tomcat.apache.org/images/tomcat.gif&quot;;&lt;br /&gt;&lt;br /&gt;//for a local file use: &lt;br /&gt;//this.URI = &quot;file://C:/test/birtlogo.png&quot;;  &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;em&gt;Resource Folder Images&lt;/em&gt;&lt;br /&gt;BIRT uses a resource folder for storing report libraries, style sheets, images, jars, js files, properties files or virtually any file that you will need access to at runtime.  While in the design environment the resource folder location can be set using the Windows-&amp;gt;Preferences-&amp;gt;Report Design-&amp;gt;Resource setting.  This can be set for the entire workspace or on a per project basis.  At runtime you can set the resource folder in the web.xml if you are using the viewer.  If you are using the engine API you can set the resource folder using the  EngineConfig class’ setResourcePath method.   When using a resource folder image, all that is needed is to specify the image name as it is defined in the resource folder.  You can also set a JavaScript expression for the image name.  For example:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;if( row[&quot;QUANTITYORDERED&quot;] &amp;gt; 30 ){&lt;br /&gt;&quot;green.png&quot;;&lt;br /&gt;}else if( row[&quot;QUANTITYORDERED&quot;] &amp;gt; 25  &amp;amp;&amp;amp; row[&quot;QUANTITYORDERED&quot;] &amp;lt;= 30){&lt;br /&gt;&quot;yellow.png&quot;;&lt;br /&gt;}else{&lt;br /&gt;&quot;red.png&quot;;&lt;br /&gt;}  &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;This expression checks the row data to determine which resource folder image should be rendered.  The same type of checks can be made if you are using the onCreate script event for the image element.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;var myqty = this.getRowData().getColumnValue(&quot;QUANTITYORDERED&quot;);&lt;br /&gt;if( myqty &amp;gt; 30 ){&lt;br /&gt; this.file = &quot;green.png&quot;;&lt;br /&gt;}else if( myqty &amp;gt; 25  &amp;amp;&amp;amp; myqty &amp;lt;= 30){&lt;br /&gt; this.file =&quot;yellow.png&quot;;&lt;br /&gt;}else{&lt;br /&gt; this.file=&quot;red.png&quot;;&lt;br /&gt;}  &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;One thing to note in the above is that the column value QUANTITYORDERED is the binding column name, not the dataset column name.  See the binding tab on the table in the attached example.  &lt;br /&gt;Images can also be placed in jar files within the resource folder.  If your image exists in a jar file, you can use a script expression similar to the following to specify the image to retrieve.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;var jarfile = reportContext.getResource(&quot;birtimages.jar&quot;);&lt;br /&gt;myfulljarimage = &quot;jar:&quot;+jarfile.toString()+&quot;!/green.png&quot;;&lt;br /&gt;myfulljarimage;  &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;The getResource method of the reportContext object is used to return the location of a file in the resource folder.   Using the location of the file and the jar protocol, the image can be specified.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Embedded Images&lt;/em&gt;&lt;br /&gt;BIRT allows images to be encoded directly into the xml report design.  Images can be added by right clicking on the embedded images icon in the outline view of the report and selecting “New Embedded Image”.  After selecting the image, the outline view is updated and the data for the image is encoded in to the design.  You can also add embedded images to the report using the add image button of the image report item editor.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_GN1FyT5H8Kg/TH-zLX55xpI/AAAAAAAAAQA/0SBiuSFbW-k/s1600/embedded.png&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5512321476901586578&quot; src=&quot;http://4.bp.blogspot.com/_GN1FyT5H8Kg/TH-zLX55xpI/AAAAAAAAAQA/0SBiuSFbW-k/s400/embedded.png&quot; style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 400px; height: 184px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Once the images are embedded into the report, you can add the image report item to the desired location, choose the embedded image radial, select the image name and click the insert button.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_GN1FyT5H8Kg/TH-zctpUkMI/AAAAAAAAAQI/8FQtShUyHis/s1600/embedded2.png&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5512321774795395266&quot; src=&quot;http://4.bp.blogspot.com/_GN1FyT5H8Kg/TH-zctpUkMI/AAAAAAAAAQI/8FQtShUyHis/s400/embedded2.png&quot; style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 314px; height: 400px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you wish to change the image dynamically, this can be done using an onCreate script.  In the onCreate script specify the image name using the imageName property.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;this.imageName = &quot;eyellow.png&quot;;  &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Dynamic Images&lt;/em&gt;&lt;br /&gt;Dynamic images allow Blob images to be inserted into the report.  Typically this type of image is tied to a data set column through either the image’s dataset bindings, or the container element’s bindings (eg Table).  The sample database, which is delivered as part of BIRT, contains a Blob type column in the PRODUCTLINES table.  The example report used in the post has an example of using this column in conjunction with the image report item.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_GN1FyT5H8Kg/TH-z2st0mFI/AAAAAAAAAQQ/S8IXYoqBBgI/s1600/blob.png&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5512322221222434898&quot; src=&quot;http://4.bp.blogspot.com/_GN1FyT5H8Kg/TH-z2st0mFI/AAAAAAAAAQQ/S8IXYoqBBgI/s400/blob.png&quot; style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 400px; height: 334px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A developer can also use an onCreate event script to set the image data.  When doing this, the image data should be in a byte[].  Presented below is an onCreate script that uses the ImageIO class to read a file, a URL, an image from the resource folder, or an image in a jar file in the resource folder.   Uncomment the section of the script for the desired image location. &lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;importPackage(Packages.java.io);&lt;br /&gt;importPackage(Packages.java.lang);&lt;br /&gt;importPackage(Packages.java.net);&lt;br /&gt;importPackage(Packages.javax.imageio);&lt;br /&gt;&lt;br /&gt;//File Based&lt;br /&gt;//var myfile = new Packages.java.io.File(&quot;c:/test/green.png&quot;);&lt;br /&gt;//var img = ImageIO.read(myfile);  &lt;br /&gt;&lt;br /&gt;//URL Based&lt;br /&gt;//Jar image in resource folder&lt;br /&gt;var jarfile = reportContext.getResource(&quot;birtimages.jar&quot;);&lt;br /&gt;var myfulljarimagestr = &quot;jar:&quot;+jarfile.toString()+&quot;!/red.png&quot;;&lt;br /&gt;var myurl = new Packages.java.net.URL(myfulljarimagestr);&lt;br /&gt;&lt;br /&gt;//Image in resource folder&lt;br /&gt;//var myurl = reportContext.getResource(&quot;green.png&quot;);&lt;br /&gt;&lt;br /&gt;//Image at url&lt;br /&gt;//var myurl = new Packages.java.net.URL(&quot;http://www.eclipse.org/eclipse.org-common/themes/Nova/images/eclipse.png&quot;);&lt;br /&gt;&lt;br /&gt;var img = ImageIO.read(myurl);&lt;br /&gt;bas = new ByteArrayOutputStream();&lt;br /&gt;ImageIO.write(img, &quot;png&quot;, bas);&lt;br /&gt;this.data = bas.toByteArray();&lt;br /&gt;  &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The example used for this post is available at &lt;a href=&quot;http://www.birt-exchange.org/org/devshare/designing-birt-reports/1257-birt-image-examples/&quot;&gt;Birt-Exchange&lt;/a&gt;.  To setup the example, copy the birtimages.jar and the three supplied images to your resource folder.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/14521551-1124913252605750277?l=birtworld.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Thu, 02 Sep 2010 14:38:13 +0000</pubDate>
	<author>noreply@blogger.com (Jason Weathersby)</author>
</item>
<item>
	<title>Donald &amp; Ralph: Welcome SBB / CFF / FFS to the Eclipse Foundation</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-3398028944247640209.post-8850274460859473004</guid>
	<link>http://eclipse-membership.blogspot.com/2010/09/welcome-sbb-cff-ffs-to-eclipse.html</link>
	<description>&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://mct.sbb.ch/mct/en/headgrafik_umwelt.jpg&quot; style=&quot;float: left; margin: 0 10px 10px 0; cursor: pointer; cursor: hand; width: 630px; height: 71px;&quot; /&gt;&lt;br /&gt;&lt;br /&gt;The &lt;a href=&quot;http://mct.sbb.ch/mct/en/konzern.htm&quot;&gt;Swiss Railway SBB&lt;/a&gt; has just recently joined the Eclipse Foundation as an Associate Member.&lt;br /&gt;&lt;br /&gt;Transporting 327.5 million passengers and 50 million net tons of freight every year the company is by far the biggest travel and transport company in Switzerland.&lt;br /&gt;&lt;br /&gt;Having experienced their great services for the time I was living in Switzerland I appreciate very much that this very service oriented organization has become a large consumer of the Eclipse platform and Eclipse related services.&lt;br /&gt;&lt;br /&gt;We have seen presentations of their applications on various occasions such as the &lt;a href=&quot;http://eclipsesummit.org&quot;&gt;Eclipse Summit&lt;/a&gt;, and we look forward to an even closer relationship with SBB through the newly signed membership.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3398028944247640209-8850274460859473004?l=eclipse-membership.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Thu, 02 Sep 2010 13:13:13 +0000</pubDate>
	<author>noreply@blogger.com (Ralph Mueller)</author>
</item>
<item>
	<title>Nirmal Sasidharan: Split Packages – An OSGi nightmare</title>
	<guid isPermaLink="false">http://nirmalsasidharan.wordpress.com/?p=291</guid>
	<link>http://nirmalsasidharan.wordpress.com/2010/09/02/split-packages-an-osgi-nightmare/</link>
	<description>A “split package” is a pretty old Java term where you have packages in different libraries with the same name providing related (or sometimes unrelated functionality).  The classes in one package can access classes in the other package (with the same name) across library boundaries without any problem at both compile and runtime. This is [...]&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://stats.wordpress.com/b.gif?host=nirmalsasidharan.wordpress.com&amp;amp;blog=15543098&amp;amp;post=291&amp;amp;subd=nirmalsasidharan&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Thu, 02 Sep 2010 10:42:28 +0000</pubDate>
</item>
<item>
	<title>JFace Data Binding Team: A new direction for bindings?</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-1759528437624391151.post-2978583799469292489</guid>
	<link>http://fire-change-event.blogspot.com/2010/09/new-direction-for-bindings.html</link>
	<description>&lt;p&gt;I'm happy to report that I've been given company approval to port the relevant components of our Flex data binding library back to Eclipse Data Binding.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;I haven't started the actual port yet--there are still some concepts on the Flex side that are not a perfect match to Java and existing idioms in Eclipse Data Binding. You'll see what I mean.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;To avoid conflating the port to Java with the general API I'm going to just present what the Flex API looks like.&lt;br /&gt;&lt;/p&gt;&lt;pre&gt;  Bind.from(source, &quot;foo&quot;)&lt;br /&gt;      .to(target, &quot;bar&quot;);&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;This binding watches the source.foo property, and writes the new value to target.bar each time a change it detected. Now add some validation and conversion magic:&lt;br /&gt;&lt;/p&gt;&lt;pre&gt;  Bind.from(source, &quot;foo&quot;)&lt;br /&gt;      .validate(Validators.stringToNumber)&lt;br /&gt;      .convert(Converters.stringToNumber)&lt;br /&gt;      .validate(Validators.greaterEqual(0))&lt;br /&gt;      .validate(Validators.lessThan(10))&lt;br /&gt;      .to(target, &quot;bar&quot;);&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;Here we've added several additional steps in the pipeline.&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt; After source.foo changes, we first validate that the string can be converted to a number. If so the pipeline continues to the next step, and terminates otherwise.&lt;br /&gt;&lt;/li&gt;&lt;li&gt; Next we convert the string to a number&lt;br /&gt;&lt;/li&gt;&lt;li&gt; Now validate that the number is greater than or equal to zero. If so the pipeline continues to the next step, and terminates otherwise.&lt;br /&gt;&lt;/li&gt;&lt;li&gt; Now validate that the number is less than 10. If so the pipeline continues and the number, now verified to be in the range [0,10), is written to target.bar.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Now suppose our binding is misbehaving somehow, and we want to troubleshoot. We can add logging steps to the pipeline in between the other steps so we can see exactly what is going on:&lt;br /&gt;&lt;/p&gt;&lt;pre&gt;  Bind.from(source, &quot;foo&quot;)&lt;br /&gt;      .log(LogEventLeven.INFO, &quot;source.foo == {0}&quot;)&lt;br /&gt;      .log(LogEventLeven.INFO, &quot;validate {0} is a number&quot;)&lt;br /&gt;      .validate(Validators.stringToNumber)&lt;br /&gt;      .log(LogEventLeven.INFO, &quot;convert {0} to a number&quot;)&lt;br /&gt;      .convert(Converters.stringToNumber)&lt;br /&gt;      .log(LogEventLeven.INFO, &quot;validate {0} &amp;gt;= 0&quot;)&lt;br /&gt;      .validate(Validators.greaterEqual(0))&lt;br /&gt;      .log(LogEventLeven.INFO, &quot;validate {0} &lt;br /&gt;&lt;br /&gt;      .validate(Validators.lessThan(10))&lt;br /&gt;      .log(LogEventLeven.INFO, &quot;set target.bar = {0}&quot;)&lt;br /&gt;      .to(target, &quot;bar&quot;);&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;(In Flex, string formatting is done with {n} format instead of the %s syntax which Java inherited from C. The log statement passes the values in the pipeline as additional arguments which you can reference in log statements.)&lt;br /&gt;&lt;/p&gt;&lt;p&gt;These log steps are a real lifesaver for tracking down and squashing bugs in your binding code.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;If you've already worked with Eclipse Data Binding you may have noticed something else: you are no longer constrained to the standard data-binding pipeline. You are free to add steps in the pipeline wherever you like and in any order you like.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Next up is two-way bindings. The bind class provides a twoWay method which connects two bindings to the other one's starting point:&lt;br /&gt;&lt;/p&gt;&lt;pre&gt;  Bind.twoWay(&lt;br /&gt;      Bind.from(source, &quot;foo&quot;),&lt;br /&gt;      Bind.from(target, &quot;bar&quot;) );&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;is equivalent to:&lt;br /&gt;&lt;/p&gt;&lt;pre&gt;  var lock:Lock = new Lock();&lt;br /&gt;  Bind.from(source, &quot;foo&quot;)&lt;br /&gt;      .lock(lock)&lt;br /&gt;      .to(target, &quot;bar&quot;);&lt;br /&gt;  Bind.from(target, &quot;bar&quot;)&lt;br /&gt;      .lock(lock)&lt;br /&gt;      .to(target, &quot;foo&quot;);&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;Notice that each binding has a &quot;lock&quot; step in the pipeline. Only one binding can hold a lock at a time. This solves the common infinite loop problem:&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt; source.foo changes. binding one executes, writing the value to target.bar&lt;br /&gt;&lt;/li&gt;&lt;li&gt; target.bar changes. binding two executes, writing the value to source.foo&lt;br /&gt;&lt;/li&gt;&lt;li&gt; source.foo changes. binding one executes, writing the value to target.bar&lt;br /&gt;&lt;/li&gt;&lt;li&gt; ...&lt;br /&gt;&lt;/li&gt;&lt;li&gt; stack overflow!&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Since only one binding can hold the lock at a time, this is what happens instead:&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt; source.foo changes. binding one acquires the lock and executes, writing the value to target.bar&lt;br /&gt;&lt;/li&gt;&lt;li&gt; target.bar changes. binding two attempts to acquire the lock but it is already acquired. binding two aborts.&lt;br /&gt;&lt;/li&gt;&lt;li&gt; binding one releases the lock&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;em&gt;You should never add the same lock more than once to a single binding, since that would guarantee that the binding will never run.&lt;br /&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;Two-way bindings can use validations, conversions, logging, locks etc just like regular one-way bindings (since two-way bindings are just two one-way bindings wired up to eachother):&lt;br /&gt;&lt;/p&gt;&lt;pre&gt;  Bind.twoWay(&lt;br /&gt;      Bind.from(person, &quot;birthDate&quot;)&lt;br /&gt;          .convert(Converters.dateToString(dateFormat))&lt;br /&gt;      Bind.from(heightText, &quot;text&quot;)&lt;br /&gt;          .validate(Validators.stringToDate(dateFormat))&lt;br /&gt;          .convert(Converters.stringToDate(dateFormat))&lt;br /&gt;          .validate(Validators.lessEqual(now))&lt;br /&gt;      );&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;We usually leave out the validations in the model-to-UI bindings. It's usually only important to apply validations when you're copying data back from the UI to the model, to make sure domain constraints are satisfied, such as ensuring that a birth date occurred in the past.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;And now for my favorite part: binding from multiple sources, to multiple destinations. Raise your hand if you have ever had to wire up a UI form like this:&lt;br /&gt;&lt;/p&gt;&lt;pre&gt;  Is there a foo? (o) Yes  ( ) No &amp;lt;-- fooRadioGroup&lt;br /&gt;&lt;br /&gt;  Enter bar: ____________________ &amp;lt;-- barText&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;Requirements:&lt;br /&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt; fooRadioGroup.selectedItem is bound to model.foo (a boolean)&lt;br /&gt;&lt;/li&gt;&lt;li&gt; barText.text is bound to model.bar (a string)&lt;br /&gt;&lt;/li&gt;&lt;li&gt; barText must be enabled iff fooRadioGroup selection is Yes.&lt;br /&gt;&lt;/li&gt;&lt;li&gt; When the user clicks &quot;No,&quot; set model.bar to null but do not clear the text box. If the user clicks &quot;Yes&quot; again, set model.bar back to the contents of barText&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Requirements 1 and 3 are easy:&lt;br /&gt;&lt;/p&gt;&lt;pre&gt;  var fooLock:Lock = new Lock();&lt;br /&gt;  Bind.twoWay(&lt;br /&gt;      Bind.from(model, &quot;foo&quot;),&lt;br /&gt;      Bind.from(fooRadioGroup, &quot;selectedItem&quot;),&lt;br /&gt;      fooLock); // explicitly provide the lock, see more below&lt;br /&gt;&lt;br /&gt;  Bind.from(fooRadioGroup, &quot;selectedItem&quot;)&lt;br /&gt;      .to(barText, &quot;enabled&quot;);&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;Requirements 2 and 4 are kind of related to eachother. The model-to-UI binding is simple enough: just write the value straight across:&lt;br /&gt;&lt;/p&gt;&lt;pre&gt;  var barLock:Lock = new Lock();&lt;br /&gt;  Bind.from(model, &quot;bar&quot;)&lt;br /&gt;      .lock(barLock)&lt;br /&gt;      .to(barText, &quot;text&quot;);&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;However the inverse binding (UI-to-model) must also take fooRadioGroup.selectedItem into account to decide whether to write back barText.text (if Yes is selected) or null (if No is selected).&lt;br /&gt;&lt;/p&gt;&lt;p&gt;The Bind class has another trick up its sleeve:&lt;br /&gt;&lt;/p&gt;&lt;pre&gt;  Bind.fromAll(&lt;br /&gt;&lt;br /&gt;      Bind.from(fooRadioGroup, &quot;selectedItem&quot;)&lt;br /&gt;          .lock(fooLock),&lt;br /&gt;&lt;br /&gt;      Bind.from(barText, &quot;text&quot;)&lt;br /&gt;&lt;br /&gt;      )&lt;br /&gt;      .lock(barLock)&lt;br /&gt;      .convert(function(foo:Boolean, bar:String):String {&lt;br /&gt;        return foo ? bar : null;&lt;br /&gt;      })&lt;br /&gt;      .to(model, &quot;bar&quot;);&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;Look closely. The binding pipelines that we pass to fromAll(...) become the arguments, in the order they are provided, to the converter and validator functions further down the pipeline. The first pipeline is from fooRadioGroup.selectedItem and therefore that boolean value is the first argument to the converter. Likewise, the barText.text pipeline is provided second, so that string value becomes the second argument to the converter.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;The converter takes multiple values but returns only a single value. This is where those values get coalesced into a single value that we can write to the model--in this case, a String value or null.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;The outer pipeline adds a locking step on barLock, which is expected since we need to prevent infinite loops between the last two pipelines. However we are also locking on fooLock, on the first of the inner pipelines. We had a problem with our bindings overwriting values in the UI depending on the order things were initialized.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;It turned out that without that lock, if a new model object was set, then the foo binding would fire first. Thus model.foo was copied to fooRadioGroup.selectedItem. But that would trigger our last binding to execute, so if the new foo value was false, then the last binding would override anything in the text box and set null on the model.bar field, before the model.bar =&amp;gt; barText.text binding had a chance to execute!&lt;br /&gt;&lt;/p&gt;&lt;p&gt;A good rule of thumb is that any time you need to bind from multiple sources, you should make sure to create a lock to share between all the bindings to relate to the same field in the model.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Obviously there are several concepts that will have to be adapted to work elegantly with our existing APIs. Realms are a missing piece (Flex is single-threaded so we didn't even have to consider it). Also we would want to try to retrofit the existing binding classes to use this new API transparently, like we did with the transition from custom observables to custom properties.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;So there you have it. This is my current vision of what Eclipse Data Binding should evolve toward.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Comments?&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/1759528437624391151-2978583799469292489?l=fire-change-event.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Thu, 02 Sep 2010 09:14:03 +0000</pubDate>
	<author>noreply@blogger.com (Matthew Hall)</author>
</item>
<item>
	<title>Ian Bull: OSGi in Dublin</title>
	<guid isPermaLink="false">http://eclipsesource.com/blogs/?p=4712</guid>
	<link>http://eclipsesource.com/blogs/2010/09/02/osgi-in-dublin/</link>
	<description>&lt;p&gt;If anybody is going to be in Dublin next Thursday (Sept 9th), I’ll be talking about OSGi, Software Modularity and Single Sourcing.  Details of the event can be found &lt;a href=&quot;http://www.isa-skillnet.com/Training_Courses/88#ss162&quot;&gt;here&lt;/a&gt;. If anybody is going to be in the area, let me know. I’d love to catch up with some Eclipse folks over a few frosty beverages.&lt;/p&gt;</description>
	<pubDate>Thu, 02 Sep 2010 05:11:27 +0000</pubDate>
</item>
<item>
	<title>Ian Bull: Help, I’m looking for directions — Eclipse Active Help</title>
	<guid isPermaLink="false">http://eclipsesource.com/blogs/?p=4708</guid>
	<link>http://eclipsesource.com/blogs/2010/09/02/help-im-looking-for-directions-eclipse-active-help/</link>
	<description>&lt;p&gt;I know Eclipse ‘Help’ is not a very exciting topic, but today I found myself working with a little known secret of Help.  Most people know that you can setup context sensitive help (Press F1 and bring up help for the specific workbench part under focus).   However, did you now you do the opposite?  That is, activate code in your RCP application from a link in Help?&lt;/p&gt;
&lt;p&gt;Here’s the use case:  Say you have created a chat client built on the Eclipse RCP Platform.  Like any good software engineer, you’ve created extensive help content.  In addition to &lt;strong&gt;Instructions&lt;/strong&gt;, you want to provide links that actually open the dialogs, or perform the actions. &lt;strong&gt;Active Help&lt;/strong&gt; is the solution.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://eclipsesource.com/blogs/wp-content/uploads/2010/09/contact.png&quot;&gt;&lt;img alt=&quot;contact Help, Im looking for directions    Eclipse Active Help&quot; class=&quot;aligncenter size-full wp-image-4710&quot; height=&quot;328&quot; src=&quot;http://eclipsesource.com/blogs/wp-content/uploads/2010/09/contact.png&quot; title=&quot;contact&quot; width=&quot;553&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;In this example, I’ve added a link that opens the “Add Contact” dialog, directly from the “Adding a Contact” Help page.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;Doing this is extremely simple too. On the Java side, you simply need to implement the &lt;strong&gt;ILiveHelpAction&lt;/strong&gt;.  Then, on the help side you simply add the following JavaScript to your help contents:&lt;/p&gt;
&lt;pre&gt;&amp;lt;a href='javascript:liveAction(
	&quot;org.eclipsercp.hyperbola&quot;,
	&quot;org.eclipsercp.hyperbola.ActiveHelpOpenDialogAction&quot;,
	&quot;&quot;)'&amp;gt;Click here for a Message.&amp;lt;/a&amp;gt;&lt;/pre&gt;
&lt;p&gt;The only thing to keep in mind is that the Action is not executed on the UI thread, so you may need to synchronize this yourself.&lt;/p&gt;</description>
	<pubDate>Thu, 02 Sep 2010 04:13:40 +0000</pubDate>
</item>
<item>
	<title>Scott Kellicker: Contributing to JSDT #5: Launching the Product</title>
	<guid isPermaLink="false">http://kellicker.wordpress.com/?p=235</guid>
	<link>http://kellicker.wordpress.com/2010/09/01/contributing-to-jsdt-launching/</link>
	<description>&lt;p&gt;&lt;a href=&quot;http://kellicker.files.wordpress.com/2010/08/javascript.png&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;48&quot; src=&quot;http://kellicker.files.wordpress.com/2010/08/javascript.png?w=48&amp;amp;h=48&quot; title=&quot;javascript&quot; width=&quot;48&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I’ll continue my instructions regarding how to set up JSDT development infrastructure.&lt;/p&gt;
&lt;h2&gt;Previously&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://kellicker.wordpress.com/2010/08/30/contributing-to-jsdt-setting-up-build-target/&quot;&gt;I set up the build target&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://kellicker.wordpress.com/2010/08/30/jsdt-setting-up-dev-environment/&quot;&gt;I checked out the code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://kellicker.wordpress.com/2010/08/31/contributing-to-jsdt-3-build-targets-on-the-bleeding-edge/&quot;&gt;I updated to the latest debug plugins&lt;/a&gt; to resolve compilation issues.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://kellicker.wordpress.com/2010/08/31/contributing-to-jsdt-4-launching-the-unit-tests/&quot;&gt;I launched the unit tests&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Now run the product&lt;/h2&gt;
&lt;p&gt;When I work on Eclipse products, we typically provide a default launch config per product.  Although the nightly build is the ultimate authority of what encompasses the product, these version-controlled launch files provide a good point of comparison developer to developer.&lt;/p&gt;
&lt;p&gt;I could not find a public JSDT .launch file under CVS control.&lt;/p&gt;
&lt;p&gt;So I looked at the installed JSDT product to create my own.  It’s &lt;a href=&quot;https://sites.google.com/site/kellicker/home/plugins/eclipse-resources/jsdt.launch?attredirects=0&amp;amp;d=1&quot;&gt;here&lt;/a&gt; if you would like to download it.&lt;/p&gt;
&lt;p&gt;Just drop it into an active project in your Eclipse workspace, refresh the project, open ‘Run Configurations” and you should see a “jsdt” run config.&lt;/p&gt;
&lt;p&gt;You may want to tweak it a bit and verify that the set of selected plugins is correct.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://kellicker.files.wordpress.com/2010/08/jsdtlaunch.jpg&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;alignnone size-full wp-image-279&quot; height=&quot;339&quot; src=&quot;http://kellicker.files.wordpress.com/2010/08/jsdtlaunch.jpg?w=480&amp;amp;h=339&quot; title=&quot;jsdtLaunch&quot; width=&quot;480&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Then hit Run to see the JSDT.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://kellicker.files.wordpress.com/2010/08/jsdtwelcome.jpg&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;alignnone size-full wp-image-278&quot; height=&quot;360&quot; src=&quot;http://kellicker.files.wordpress.com/2010/08/jsdtwelcome.jpg?w=480&amp;amp;h=360&quot; title=&quot;jsdtWelcome&quot; width=&quot;480&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Disclaimer: I’m not on the JSDT team, so this may not be exactly how they do it.  But it’s what I’ve done to get it working.&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/kellicker.wordpress.com/235/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/kellicker.wordpress.com/235/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/kellicker.wordpress.com/235/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/kellicker.wordpress.com/235/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gofacebook/kellicker.wordpress.com/235/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/kellicker.wordpress.com/235/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gotwitter/kellicker.wordpress.com/235/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/kellicker.wordpress.com/235/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/kellicker.wordpress.com/235/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/kellicker.wordpress.com/235/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/kellicker.wordpress.com/235/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/kellicker.wordpress.com/235/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/kellicker.wordpress.com/235/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/kellicker.wordpress.com/235/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://stats.wordpress.com/b.gif?host=kellicker.wordpress.com&amp;amp;blog=6950485&amp;amp;post=235&amp;amp;subd=kellicker&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Wed, 01 Sep 2010 22:17:02 +0000</pubDate>
</item>
<item>
	<title>Ian Skerrett: Tell Us Your Eclipse Story: Win a Pass to JavaOne</title>
	<guid isPermaLink="false">http://ianskerrett.wordpress.com/?p=1667</guid>
	<link>http://feedproxy.google.com/~r/IanSkerrett/~3/WEC41EcYzbA/</link>
	<description>&lt;p&gt;Lots of people are doing incredible things with Eclipse. People are  building amazing applications that embedded Eclipse technology.   Companies have standardized on Eclipse as their development tools  platform. Students and researchers are using Eclipse for creating some very cool new technology.&lt;/p&gt;
&lt;p&gt;As with any open source community, sharing information is  critical to fostering  a healthy and strong community.  Sharing how you use  Eclipse will help other people realize the full potential of Eclipse  technology.  More people using Eclipse technology will lead to more potential contributors, more contributors mean more people working on Eclipse projects.&lt;/p&gt;
&lt;p&gt;We want you to share your Eclipse story with the community. I’ve started a &lt;a href=&quot;http://wiki.eclipse.org/Eclipse_Stories&quot;&gt;wiki page&lt;/a&gt; to allow individuals and companies to tell the  community how they use Eclipse.  Tell us what type of applications you  build, what Eclipse technology you use and what you like about Eclipse.    You can tell us your personal story or tell us what your company is  doing.  Just &lt;a href=&quot;http://wiki.eclipse.org/Eclipse_Stories&quot;&gt;tell us your story.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;To encourage early stories, the Eclipse Foundation will raffle  off a full pass to the upcoming JavaOne 2010 conference to all who submitted a story.  To be included  in the raffle you need to submit your story on the wiki by September 9,  2010 at 1:00pmET and send me an e-mail (ian at eclipse dot org)&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/ianskerrett.wordpress.com/1667/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/ianskerrett.wordpress.com/1667/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/ianskerrett.wordpress.com/1667/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/ianskerrett.wordpress.com/1667/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gofacebook/ianskerrett.wordpress.com/1667/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/ianskerrett.wordpress.com/1667/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gotwitter/ianskerrett.wordpress.com/1667/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/ianskerrett.wordpress.com/1667/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/ianskerrett.wordpress.com/1667/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/ianskerrett.wordpress.com/1667/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/ianskerrett.wordpress.com/1667/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/ianskerrett.wordpress.com/1667/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/ianskerrett.wordpress.com/1667/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/ianskerrett.wordpress.com/1667/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://stats.wordpress.com/b.gif?host=ianskerrett.wordpress.com&amp;amp;blog=405862&amp;amp;post=1667&amp;amp;subd=ianskerrett&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Wed, 01 Sep 2010 17:38:03 +0000</pubDate>
</item>
<item>
	<title>Chris Aniszczyk: AustinJUG and Eclipse 4.0</title>
	<guid isPermaLink="false">http://aniszczyk.org/?p=2648</guid>
	<link>http://aniszczyk.org/2010/09/01/austinjug-and-eclipse-4-0/</link>
	<description>&lt;p&gt;Last night I had the pleasure to speak at my local &lt;a href=&quot;http://austinjug.org/&quot;&gt;AustinJUG&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://aniszczyk.org/wp-content/uploads/2010/09/zx_austinjug.jpg&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;alignnone size-medium wp-image-2649&quot; height=&quot;225&quot; src=&quot;http://aniszczyk.org/wp-content/uploads/2010/09/zx_austinjug-300x225.jpg&quot; title=&quot;AustinJUG Aniszczyk&quot; width=&quot;300&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It was nice to catch up with some local folks and introduce people to some new Eclipse technology. In the end, we kind of got sidetracked and there was some good discussion about source control in the corporate environment versus what is going on in open source communities. Unfortunately, it seems Subversion has a stronghold in a lot of companies still. I hope our work in &lt;a href=&quot;http://eclipse.org/jgit&quot;&gt;JGit&lt;/a&gt; to make a &lt;a href=&quot;http://www.eclipse.org/org/documents/edl-v10.php&quot;&gt;liberally licensed&lt;/a&gt; Git library that runs everywhere will start swaying the tide…&lt;/p&gt;</description>
	<pubDate>Wed, 01 Sep 2010 15:38:14 +0000</pubDate>
</item>
<item>
	<title>Remy Suen: OSGi, language packs, and interval notations…</title>
	<guid isPermaLink="true">http://blog.hantsuki.org/2010/09/01/osgi-language-packs-and-interval-notations/</guid>
	<link>http://blog.hantsuki.org/2010/09/01/osgi-language-packs-and-interval-notations/</link>
	<description>&lt;p&gt;&lt;b&gt;Dunge:&lt;/b&gt; Hello there, sorry for the noob question. I installed Eclipse for Java (Helios) and JDK update 21, I’m trying to use the Blackberry SDK but when I install it it say I require org.eclipse.jdt.debug [3.5.0,3.6.0) first. I tried to find it in “install new software” or on the website, I can’t find anything&lt;br /&gt;
&lt;b&gt;rcjsuen:&lt;/b&gt; Dunge: That BB plug-in wants Galileo not Helios.&lt;br /&gt;
&lt;b&gt;rcjsuen:&lt;/b&gt; “require org.eclipse.jdt.debug [3.5.0,3.6.0)”&lt;br /&gt;
&lt;b&gt;rcjsuen:&lt;/b&gt; Dunge: 3.5.x corresponds to Galileo, 3.6.x corresponds to Helios&lt;br /&gt;
&lt;b&gt;Dunge:&lt;/b&gt; rcjsuen : you say 3.6.x for Helios, and they actually write 3.6.0 in the required message, so why should I revert to 3.5.0?&lt;br /&gt;
&lt;b&gt;rcjsuen:&lt;/b&gt; Dunge: You must not have taken Calculus, or forgot about it.&lt;br /&gt;
&lt;b&gt;rcjsuen:&lt;/b&gt; [x,y) means x inclusive, y exclusive&lt;br /&gt;
&lt;b&gt;rcjsuen:&lt;/b&gt; i.e. 3.5.0 &amp;lt;= x &amp;lt; 3.6.0&lt;br /&gt;
&lt;b&gt;Dunge:&lt;/b&gt; should be [x,y[&lt;br /&gt;
&lt;b&gt;rcjsuen:&lt;/b&gt; Dunge: I’ve never seen that notation. Where do they do that?&lt;br /&gt;
&lt;b&gt;Dunge:&lt;/b&gt; I just though it was a typo&lt;br /&gt;
&lt;b&gt;Dunge:&lt;/b&gt; hmm in my math classes? :)&lt;br /&gt;
&lt;b&gt;rcjsuen:&lt;/b&gt; [x,y[?&lt;br /&gt;
&lt;b&gt;Dunge:&lt;/b&gt; yeah&lt;br /&gt;
&lt;b&gt;rcjsuen:&lt;/b&gt; Dunge: And where do you live? That’s what I meant. :)&lt;br /&gt;
&lt;b&gt;Dunge:&lt;/b&gt; lol&lt;br /&gt;
&lt;b&gt;rcjsuen:&lt;/b&gt; Dunge: I am interested in where they use this notation, hence I asked.&lt;br /&gt;
&lt;b&gt;Dunge:&lt;/b&gt; I just asked the guy next to me and he’s saying it should be a [ too&lt;br /&gt;
&lt;b&gt;Dunge:&lt;/b&gt; I’m in Quebec&lt;br /&gt;
&lt;b&gt;rcjsuen:&lt;/b&gt; ah&lt;br /&gt;
&lt;b&gt;rcjsuen:&lt;/b&gt; in the &lt;a href=&quot;http://www.chaminade-stl.org&quot;&gt;States&lt;/a&gt; they used this&lt;br /&gt;
&lt;b&gt;rcjsuen:&lt;/b&gt; and I went to &lt;a href=&quot;http://www.uwaterloo.ca/&quot;&gt;U Waterloo&lt;/a&gt;, we used that there too&lt;br /&gt;
&lt;b&gt;Dunge:&lt;/b&gt; but I though it was a global notation&lt;br /&gt;
&lt;b&gt;rcjsuen:&lt;/b&gt; I shall ask other ppl when I get back to Ottawa on Sunday :)&lt;br /&gt;
&lt;b&gt;rcjsuen:&lt;/b&gt; Maybe that is what they use in France/Europe?&lt;br /&gt;
&lt;b&gt;njbartlett:&lt;/b&gt; rcjsuen: Possibly France, but certainly not other bits of Europe&lt;br /&gt;
&lt;b&gt;rcjsuen:&lt;/b&gt; That notation seems to be part of the ISO anyway &lt;a href=&quot;http://en.wikipedia.org/wiki/ISO_31-11#Sets&quot;&gt;http://en.wikipedia.org/wiki/ISO_31-11#Sets&lt;/a&gt;&lt;br /&gt;
&lt;b&gt;rcjsuen:&lt;/b&gt; Very interesting. You learn something new every day as I always say. :)&lt;br /&gt;
&lt;b&gt;njbartlett:&lt;/b&gt; Indeed, very interesting.&lt;br /&gt;
&lt;b&gt;rcjsuen:&lt;/b&gt; njbartlett: So I think we need language packs for fr_FR that uses different notation. :)&lt;br /&gt;
&lt;b&gt;njbartlett:&lt;/b&gt; I’ve given talks about OSGi in lots of countries, almost everywhere there’s at least one or two maths geeks who nods quietly when they see [,)&lt;br /&gt;
&lt;b&gt;rcjsuen:&lt;/b&gt; hahahaha&lt;/p&gt;</description>
	<pubDate>Wed, 01 Sep 2010 15:34:46 +0000</pubDate>
</item>
<item>
	<title>Madhu Samuel: BIRT 2.6 Data Analysis and Reporting</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-3399985190174266183.post-2955006607107603274</guid>
	<link>http://eclipse-info.blogspot.com/2010/09/birt-26-data-analysis-and-reporting.html</link>
	<description>&lt;br /&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;&lt;a href=&quot;https://www.packtpub.com/&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;Packt Publishin&lt;/span&gt;g&lt;/a&gt;&lt;/span&gt;, a UK based book publishing firm has send me a copy of their latest book &lt;a href=&quot;http://www.packtpub.com/birt-2-5-data-analysis-and-reporting/book?utm_source=eclipse-info.blogspot.com&amp;amp;utm_medium=bookrev&amp;amp;utm_content=blog&amp;amp;utm_campaign=mdb_004570&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;BIRT 2.6 Data Analysis and Reporting&lt;/span&gt;&lt;/a&gt; by John Ward to write a review. You can find the details of the book &lt;a href=&quot;http://www.packtpub.com/birt-2-5-data-analysis-and-reporting/book?utm_source=eclipse-info.blogspot.com&amp;amp;utm_medium=bookrev&amp;amp;utm_content=blog&amp;amp;utm_campaign=mdb_004570&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;here&lt;/span&gt;&lt;/a&gt;. I hope to publish an in-depth review about this book in a few weeks at  &quot;&lt;a href=&quot;http://blog.eclipsebible.com/&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;I Like Eclipse&lt;/span&gt;&lt;/a&gt;&quot;, the blog site of &lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;&lt;a href=&quot;http://eclipsebible.com/&quot;&gt;EclipseBible.com&lt;/a&gt;&lt;/span&gt;.&lt;/div&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;i&gt;madhu&lt;/i&gt;&lt;/div&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;i&gt;&lt;a href=&quot;http://eclipsebible.com/&quot;&gt;eclipseBible.com&lt;/a&gt;&lt;/i&gt;&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3399985190174266183-2955006607107603274?l=eclipse-info.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Wed, 01 Sep 2010 14:29:25 +0000</pubDate>
	<author>noreply@blogger.com (Madhu)</author>
</item>
<item>
	<title>Jonas Helming: EMFStore Project approved</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-5895345394045038548.post-1777205956002358061</guid>
	<link>http://unicase.blogspot.com/2010/09/emfstore-project-approved.html</link>
	<description>We are happy to announce that the EMFStore project has been accepted as an Eclipse Project.&lt;br /&gt;www.emfstore.org&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/5895345394045038548-1777205956002358061?l=unicase.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Wed, 01 Sep 2010 12:56:16 +0000</pubDate>
	<author>noreply@blogger.com (UNICASE)</author>
</item>
<item>
	<title>Jonas Helming: EMF Client Platform project approved</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-5895345394045038548.post-1441051046497363332</guid>
	<link>http://unicase.blogspot.com/2010/09/emf-client-platform-project-approved.html</link>
	<description>We are happy to announce that the EMF Client Platform project has been accepted as an Eclipse Project.&lt;br /&gt;www.emfcp.org&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/5895345394045038548-1441051046497363332?l=unicase.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Wed, 01 Sep 2010 12:55:35 +0000</pubDate>
	<author>noreply@blogger.com (UNICASE)</author>
</item>
<item>
	<title>Karl Beecher: We Have a Winner</title>
	<guid isPermaLink="false">http://computerfloss.wordpress.com/?p=566</guid>
	<link>http://computerfloss.wordpress.com/2010/09/01/we-have-a-winner/</link>
	<description>&lt;p&gt;&lt;img alt=&quot;Eclipse logo&quot; class=&quot;alignleft size-full wp-image-563&quot; height=&quot;91&quot; src=&quot;http://computerfloss.files.wordpress.com/2010/08/eclipse.png?w=171&amp;amp;h=91&quot; title=&quot;eclipse&quot; width=&quot;171&quot; /&gt;Not many votes (about 20 or so at time of reading), but Google App Engine seems to be a big favourite for Eclipse users, gathering half the votes by itself.&lt;/p&gt;
&lt;p&gt;Looks like I have some reading up on Google App Engine to do…&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/computerfloss.wordpress.com/566/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/computerfloss.wordpress.com/566/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/computerfloss.wordpress.com/566/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/computerfloss.wordpress.com/566/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gofacebook/computerfloss.wordpress.com/566/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/computerfloss.wordpress.com/566/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gotwitter/computerfloss.wordpress.com/566/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/computerfloss.wordpress.com/566/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/computerfloss.wordpress.com/566/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/computerfloss.wordpress.com/566/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/computerfloss.wordpress.com/566/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/computerfloss.wordpress.com/566/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/computerfloss.wordpress.com/566/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/computerfloss.wordpress.com/566/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://stats.wordpress.com/b.gif?host=computerfloss.wordpress.com&amp;amp;blog=11433662&amp;amp;post=566&amp;amp;subd=computerfloss&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Wed, 01 Sep 2010 08:56:13 +0000</pubDate>
</item>
<item>
	<title>Ed Burnette: How to build the perfect Android tablet, part 3: Market watch</title>
	<guid isPermaLink="true">http://www.zdnet.com/blog/burnette/how-to-build-the-perfect-android-tablet-part-3-market-watch/2073</guid>
	<link>http://www.zdnet.com/blog/burnette/how-to-build-the-perfect-android-tablet-part-3-market-watch/2073</link>
	<description>&lt;p&gt;&lt;img alt=&quot;&quot; class=&quot;alignnone size-full wp-image-2050&quot; height=&quot;328&quot; src=&quot;http://i.zdnet.com/blogs/perfect_android_tablet.jpg&quot; width=&quot;465&quot; /&gt;&lt;br /&gt;Continuing &lt;a href=&quot;http://www.zdnet.com/blog/burnette/how-to-build-the-perfect-android-tablet-part-1/2049&quot;&gt;our series&lt;/a&gt; on the &lt;a href=&quot;http://www.zdnet.com/blog/burnette/how-to-build-the-perfect-android-tablet-part-2-a-touch-of-class/2066&quot;&gt;perfect Android tablet&lt;/a&gt; ™, this latest entry is about software instead of hardware. Software applications will either make your tablet into a useful addition to your digital life, or an expensive ingredient in some eco-unfriendly compost pile. Finding the right software is crucial, and for that reason the number three feature on the perfect tablet is:&lt;/p&gt;&lt;p&gt;&lt;strong&gt;#3: Full Google software suite including the Android Market&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Many recently announced Android tablets come with an alternative application stores such as &lt;a href=&quot;http://appslib.com/&quot;&gt;AppsLib&lt;/a&gt;, &lt;a href=&quot;http://www.getjar.com&quot;&gt;GetJar&lt;/a&gt;, &lt;a href=&quot;http://slideme.org/&quot;&gt;SlideME&lt;/a&gt;, or &lt;a href=&quot;http://andappstore.com&quot;&gt;AndAppStore&lt;/a&gt;. Alternate markets are good to have for applications that are not allowed, for one reason or another, on Google’s mainstream Android capital-M &lt;a href=&quot;http://market.android.com&quot;&gt;Market&lt;/a&gt;. However, it’s the Market that has 100K+ applications and it’s the Market that is both the &lt;em&gt;de facto&lt;/em&gt; and &lt;em&gt;de jure&lt;/em&gt; center of the Android development universe.&lt;/p&gt;&lt;p&gt;For a one-time fee of $25, developers can get a publisher’s account on the Market and upload their free or paid applications. The Market is fraught with problems, such as tons of spam, a stingy 325-character limit on descriptions, and a woefully lacking list of supported countries. Google has been ever-so-slowly improving the Market over the last couple of years, for example by adding the amazingly innovative ability to post screenshots (insert sarcasm here). The fact that it’s flawed, though, doesn’t change the crucially important role of the Market in the Android ecosystem.&lt;/p&gt;&lt;p&gt;As a developer, I want to submit my application to one place and have it reach all users. I can do that with the iPhone, so why not on Android? (Of course Apple brooks no alternatives on the iPhone, so it’s not a fair comparison, but still there should be a default market that covers everyone.) Each additional place I have to publish is another place I have to make a publishing agreement with, keep up to date for each upgrade, and manage for marketing. More potential users with less friction for the developer equals more income and more interest in creating exciting games and applications.&lt;/p&gt;&lt;p&gt;Perhaps the greatest impediment to the universal Market is a somewhat nebulous list of &lt;a href=&quot;http://source.android.com/compatibility/android-2.1-cdd.pdf&quot;&gt;restrictions and requirements&lt;/a&gt; that Google imposes which limits what types of devices can and can’t have the Market and other Google apps. Some of the restrictions I can understand, like requiring an accelerometer. Others make no sense, such as the need to include a telephone (with its requisite expensive monthly fee). Google needs to change these rules ASAP or at least show some flexibility to accommodate devices (such as as the 5 announced this week from Archos) that aren’t smartphones.&lt;/p&gt;&lt;p&gt;Along with the Market, the perfect tablet should have all the other parts of Google’s Android suite, including GMail, Maps, Navigation, Search, and so forth. The apps should either be pre-installed or available for download through the Market. This does not preclude a vendor from using, say, Bing search and Yahoo Mail by default to differentiate their offering. But Google’s suite is pretty good, and I ought to be able to use it if I want without having to search the fine print for the words, “with Google”.&lt;/p&gt;&lt;p&gt;What would you build into *your* perfect Android tablet? Share your thoughts in the comment area below. And check back next week to find out what’s next on my list.&lt;/p&gt;</description>
	<pubDate>Wed, 01 Sep 2010 02:26:27 +0000</pubDate>
</item>
<item>
	<title>Scott Kellicker: Contributing to JSDT #4 : Launching the unit tests</title>
	<guid isPermaLink="false">http://kellicker.wordpress.com/?p=269</guid>
	<link>http://kellicker.wordpress.com/2010/08/31/contributing-to-jsdt-4-launching-the-unit-tests/</link>
	<description>&lt;p&gt;&lt;a href=&quot;http://kellicker.files.wordpress.com/2010/08/javascript.png&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;48&quot; src=&quot;http://kellicker.files.wordpress.com/2010/08/javascript.png?w=48&amp;amp;h=48&quot; title=&quot;javascript&quot; width=&quot;48&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I’ll continue my instructions regarding how to set up JSDT development infrastructure.&lt;/p&gt;
&lt;h2&gt;Previously&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://kellicker.wordpress.com/2010/08/30/contributing-to-jsdt-setting-up-build-target/&quot;&gt;I set up the build target&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://kellicker.wordpress.com/2010/08/30/jsdt-setting-up-dev-environment/&quot;&gt;I checked out the code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://kellicker.wordpress.com/2010/08/31/contributing-to-jsdt-3-build-targets-on-the-bleeding-edge/&quot;&gt;I updated to the latest debug plugins&lt;/a&gt; to resolve compilation issues.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Run the unit tests&lt;/h2&gt;
&lt;p&gt;Now I want to verify that the unit tests for JSDT pass.  (TDD — we should launch the tests before the product, right?)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Nitin Dahyabhai&lt;/strong&gt;, the JSDT lead, &lt;a href=&quot;http://www.eclipse.org/forums/index.php?t=msg&amp;amp;goto=556351&quot;&gt;pointed out&lt;/a&gt; that the first project above, contains a launch config to run all of the JSDT unit tests.&lt;/p&gt;
&lt;p&gt;I will need to check out these additional projects from the webtools CVS repository.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;org.eclipse.jsdt/development/&lt;strong&gt;org.eclipse.wst.jsdt.unittests&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;sourceediting/tests/&lt;strong&gt;org.eclipse.wst.jsdt.web.core.tests&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;sourceediting/tests/&lt;strong&gt;org.eclipse.wst.jsdt.web.ui.tests&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;&lt;br /&gt;
&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The checked in launch config makes running easy.  Open &lt;strong&gt;Run Configurations&lt;/strong&gt; – select &lt;strong&gt;JSDT Tests&lt;/strong&gt;.  Hit &lt;strong&gt;Run&lt;/strong&gt;.  They all pass, so I see green:&lt;/p&gt;
&lt;p style=&quot;padding-left: 30px;&quot;&gt;&lt;a href=&quot;http://kellicker.files.wordpress.com/2010/08/jsdtgreenunittests.jpg&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;282&quot; src=&quot;http://kellicker.files.wordpress.com/2010/08/jsdtgreenunittests.jpg?w=480&amp;amp;h=282&quot; title=&quot;jsdtGreenUnitTests&quot; width=&quot;480&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;padding-left: 30px;&quot;&gt;
&lt;/p&gt;&lt;h2&gt;Next: &lt;a href=&quot;http://kellicker.wordpress.com/2010/08/30/contributing-to-jsdt-launching/&quot;&gt;Launching the Product&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Disclaimer: I’m not on the JSDT team, so this may not be exactly how they do it.  But it’s what I’ve done to get it working.&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/kellicker.wordpress.com/269/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/kellicker.wordpress.com/269/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/kellicker.wordpress.com/269/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/kellicker.wordpress.com/269/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gofacebook/kellicker.wordpress.com/269/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/kellicker.wordpress.com/269/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gotwitter/kellicker.wordpress.com/269/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/kellicker.wordpress.com/269/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/kellicker.wordpress.com/269/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/kellicker.wordpress.com/269/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/kellicker.wordpress.com/269/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/kellicker.wordpress.com/269/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/kellicker.wordpress.com/269/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/kellicker.wordpress.com/269/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://stats.wordpress.com/b.gif?host=kellicker.wordpress.com&amp;amp;blog=6950485&amp;amp;post=269&amp;amp;subd=kellicker&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Wed, 01 Sep 2010 01:17:19 +0000</pubDate>
</item>
<item>
	<title>Konstantin Komissarchik: Inconvenient process? Let’s fix it.</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-2913369703414801920.post-2437086252783456278</guid>
	<link>http://lt-rider.blogspot.com/2010/08/inconvenient-process-lets-fix-it.html</link>
	<description>&lt;p&gt;Some of you may have noticed the debate happening regarding proper entry expectations for WTP incubator project following &lt;a href=&quot;http://eclipsehowl.wordpress.com/2010/08/26/an-inconvenient-process/&quot;&gt;Holger’s veto&lt;/a&gt; of a committer election. Holger is acting well within the power granted to him by Eclipse Development Process (EDP), but is it a right and proper action?&lt;/p&gt;  &lt;p&gt;Every committer on a project has the veto power in an election. By extension, any entry criteria for a project (whether written or unwritten) is nothing more than a social convention. The reality is that every committer can choose to levy their own personal expectations. Most of the time it’s not a problem, except when it is. &lt;/p&gt;  &lt;p&gt;Here are some quotes from this particular event:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;“I found only some bug reports but not a single code contribution from any of the four nominated persons. Please attach the planned code contribution to a bug report. I'd like to vote for each of the nominated persons as soon as I know that the code is readable and covered by JUnit tests.”&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;“Have [snip] been asked if they like to become committers as individuals (and not only as employees of SAP)? Are these authors of the code or what is their motivation to maintain and enhance these editors?”&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;In a regular project with established code base, established team and well-defined scope, you can argue that giving every committer veto power over elections is appropriate. After all, there is an established code base to protect. The same considerations do not apply when a new component is proposed in an incubator.&lt;/p&gt;  &lt;p&gt;The WTP incubator project was started with the intention to provide a low entry barrier playground for people to come and experiment on new ideas while gaining experience and proving their merit to committers on the core projects that will eventually be asked to admit matured functions. Incubators make sense because they provide a quicker way to get started than a separate project proposal. Unfortunately incubators have to rely on a social convention that existing committers act in a welcoming fashion to newcomers. Most of the time that happens, except when it doesn’t.&lt;/p&gt;  &lt;p&gt;I would posit that there is no legitimate purpose served by holding a committer election when a new component is proposed for an incubator. The situation is supposed to be very similar to new project creation and we don’t hold elections there. The party proposing a project gets to designate a group of individuals to be the initial committers without anyone questioning their credentials or motives. A similar process is needed to make incubators work better.&lt;/p&gt;  &lt;p&gt;The last revision of EDP has formalized the concept of a persistent incubator. I propose that we build on those revisions and amend EDP to remove the committer vote requirement for incubator projects when a new component is being proposed. The project’s PMC would still have the oversight and ability to decline a new component proposal. This change would also fix the rather awkward problem of having to have “seeder” committers when creating incubator projects. &lt;/p&gt;  &lt;p&gt;Note that my suggestion is for persistent incubator projects rather than normal projects during incubation phase. I am also not suggesting that we remove committer vote entirely from incubators. Anyone wishing to join existing effort already underway in the incubator should still be subject to committer vote. &lt;/p&gt;  &lt;p&gt;Thoughts?&lt;/p&gt;  &lt;p&gt;PS.1 : This situation has served to highlight a process problem and it is the process that I seek to improve. I have no beef with Holger. I am sure he is acting on what he believes in.&lt;/p&gt;  &lt;p&gt;PS.2 : I am further confident that this particular storm will blow over, Holger’s objections will be met, another election held, etc. That doesn’t mean we shouldn’t try to improve the process so that such situations do not happen again and we continue to have vibrant incubator projects at Eclipse.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Update: &lt;/strong&gt;At Wayne’s request I &lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=324133&quot;&gt;created a bug&lt;/a&gt; to track this proposed improvement to Eclipse Development Process.&lt;/p&gt;  &lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/2913369703414801920-2437086252783456278?l=lt-rider.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Tue, 31 Aug 2010 20:48:18 +0000</pubDate>
	<author>noreply@blogger.com (Konstantin Komissarchik)</author>
</item>
<item>
	<title>Ian Skerrett: Wrap-up of Eclipse Day at the Googleplex</title>
	<guid isPermaLink="false">http://ianskerrett.wordpress.com/?p=1664</guid>
	<link>http://feedproxy.google.com/~r/IanSkerrett/~3/fyiXE76RyhE/</link>
	<description>&lt;p&gt;Last Thursday, Google was the host of the third &lt;a href=&quot;http://wiki.eclipse.org/Eclipse_Day_At_Googleplex_2010&quot;&gt;Eclipse Day at the Googleplex&lt;/a&gt;.  I look forward to this event each year and this year was another success.  Over 150 people attended the day long event that included 12 sessions related to Eclipse and Google technology.   The presentations are now &lt;a href=&quot;http://wiki.eclipse.org/Eclipse_Day_At_Googleplex_2010#Presentation_Slides&quot;&gt;available online&lt;/a&gt;.   There was lots of great information presented, like upcoming improvements to the Android SDK (based on Eclipse), Git support in Eclipse, a review of the Instantiations tools that Google just purchased and an introduction to the new Tools for Mobile Web project.&lt;br /&gt;
The event also included our first ever Eclipse Ignite session.  We had 9 speakers, each speaker had 5 minutes and 20 slides but the slides changed automatically every 15 seconds.  The speakers did a great job and lots of people really enjoyed the format.  Something to certainly try again.&lt;/p&gt;
&lt;p&gt;A special thanks to the Google Open Source Program Office for their sponsorship of the event.  These face to face events are really important to building the Eclipse community, so it is great to have Google’s support to make this event possible.&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/ianskerrett.wordpress.com/1664/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/ianskerrett.wordpress.com/1664/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/ianskerrett.wordpress.com/1664/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/ianskerrett.wordpress.com/1664/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gofacebook/ianskerrett.wordpress.com/1664/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/ianskerrett.wordpress.com/1664/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gotwitter/ianskerrett.wordpress.com/1664/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/ianskerrett.wordpress.com/1664/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/ianskerrett.wordpress.com/1664/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/ianskerrett.wordpress.com/1664/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/ianskerrett.wordpress.com/1664/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/ianskerrett.wordpress.com/1664/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/ianskerrett.wordpress.com/1664/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/ianskerrett.wordpress.com/1664/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://stats.wordpress.com/b.gif?host=ianskerrett.wordpress.com&amp;amp;blog=405862&amp;amp;post=1664&amp;amp;subd=ianskerrett&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Tue, 31 Aug 2010 18:00:41 +0000</pubDate>
</item>
<item>
	<title>Max Rydahl Andersen: Webinar tomorrow, Clouds and bringing life back to BPEL</title>
	<guid isPermaLink="true">http://in.relation.to/Bloggers/WebinarTomorrowCloudsAndBringingLifeBackToBPEL</guid>
	<link>http://in.relation.to/Bloggers/WebinarTomorrowCloudsAndBringingLifeBackToBPEL</link>
	<description>&lt;p class=&quot;wikiPara&quot;&gt;
The final re-post to remind you to use the feeds from JBoss Tools to get JBoss tooling news ;)
&lt;/p&gt;

&lt;p class=&quot;wikiPara&quot;&gt;
Blogging about upcoming webinar tomorrow, the Cloud efforts and bringng back life to a BPEL project.
&lt;/p&gt;

&lt;p class=&quot;wikiPara&quot;&gt;
See it at &lt;a href=&quot;https://community.jboss.org/en/jbosstools/blog/2010/08/31/webinar-tomorrow-clouds-and-bringing-life-back-to-bpel&quot;&gt;JBoss Tools Blog&lt;/a&gt;&lt;/p&gt;</description>
	<pubDate>Tue, 31 Aug 2010 17:51:36 +0000</pubDate>
</item>
<item>
	<title>Mickael Istria: How target platforms helped me to fix old bugs</title>
	<guid isPermaLink="false">http://www.bonitasoft.org/blog/?p=1817</guid>
	<link>http://www.bonitasoft.org/blog/uncategorized/how-target-platforms-helped-me-to-fix-old-bugs/</link>
	<description>&lt;p&gt;I’ve used target platforms to ensure that I only add dependencies that are available in our build platform. Until now, I found them useful, but I did not understand how powerful they really are. Here is a story that convinced me that target platforms are a master feature of RCP development.&lt;br /&gt;
&lt;span id=&quot;more-1817&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;A few days ago, I had to fix a bug on the 5.2.3 branch version of the Studio/RCP part of &lt;a href=&quot;http://www.bonitasoft.com/products/BPM_download.php&quot;&gt;Bonita Open Solution&lt;/a&gt;. The classes I needed to modify had been strongly refactored in trunk (5.3), so that the fix would be different on the trunk than on the branch, and it was impossible to simply propagate a fix.&lt;/p&gt;
&lt;p&gt;So I had to edit old code. But my workspace only contained trunk code, and the old code was not compiling because of several refactorings. I was wondering how the heck I would be able to easily work on code from the past…!&lt;br /&gt;
But I found an answer and it’s simple… &lt;a href=&quot;http://help.eclipse.org/helios/index.jsp?topic=/org.eclipse.pde.doc.user/concepts/target.htm&quot;&gt;TARGET PLATFORMS&lt;/a&gt; !&lt;/p&gt;
&lt;p&gt;Here is what I suggest to isolate the branch fix from trunk development:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt; Create a new workspace (workspaceBranch).&lt;/li&gt;
&lt;li&gt; Set the old version of your product (here the 5.2.2 version) as the target platform. This must be the version containing the bug.
&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;wp-caption aligncenter&quot; id=&quot;attachment_1828&quot; style=&quot;width: 310px;&quot;&gt;&lt;a href=&quot;http://www.bonitasoft.org/blog/wp-content/uploads/2010/08/target.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;size-medium wp-image-1828&quot; height=&quot;266&quot; src=&quot;http://www.bonitasoft.org/blog/wp-content/uploads/2010/08/target-300x266.png&quot; title=&quot;target&quot; width=&quot;300&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;The target platform is made up of all bundles of the product containing the bug&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt; Check out ONLY your old bugged bundle from the branch.
&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;wp-caption aligncenter&quot; id=&quot;attachment_1829&quot; style=&quot;width: 310px;&quot;&gt;&lt;a href=&quot;http://www.bonitasoft.org/blog/wp-content/uploads/2010/08/ws.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;size-medium wp-image-1829&quot; height=&quot;188&quot; src=&quot;http://www.bonitasoft.org/blog/wp-content/uploads/2010/08/ws-300x188.png&quot; title=&quot;ws&quot; width=&quot;300&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;A minimal and easy-to-use workspace&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt; Create your launch configuration which is made up of the product and your buggy bundle project from workspace.
&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;wp-caption aligncenter&quot; id=&quot;attachment_1831&quot; style=&quot;width: 310px;&quot;&gt;&lt;a href=&quot;http://www.bonitasoft.org/blog/wp-content/uploads/2010/08/launch.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;size-medium wp-image-1831&quot; height=&quot;236&quot; src=&quot;http://www.bonitasoft.org/blog/wp-content/uploads/2010/08/launch-300x236.png&quot; title=&quot;launch&quot; width=&quot;300&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://www.bonitasoft.org/blog/wp-content/uploads/2010/08/launch2.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;size-medium wp-image-1832&quot; height=&quot;238&quot; src=&quot;http://www.bonitasoft.org/blog/wp-content/uploads/2010/08/launch2-300x238.png&quot; title=&quot;launch2&quot; width=&quot;300&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;Configure your launch to use your product, with the patched bundle from your workspace&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt; Run and test your product to see the bug.&lt;/li&gt;
&lt;li&gt; Fix your old code.&lt;/li&gt;
&lt;li&gt; Test your fix.&lt;/li&gt;
&lt;li&gt; Commit your fix on the branch.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;With this trick, I avoided the headaches of mixing trunk and branch code. It made my work much easier and less risky.&lt;/p&gt;
&lt;p&gt;The only annoying thing is that you lose all your workspace preferences and Mylyn contexts during the time it takes to finish the fix, so this is not critical.&lt;/p&gt;
&lt;p&gt;I can now say it: I ♥ target platforms!&lt;/p&gt;</description>
	<pubDate>Tue, 31 Aug 2010 17:02:09 +0000</pubDate>
</item>
<item>
	<title>Dariusz Luksza: Merge support in JGit/EGit 0.9</title>
	<guid isPermaLink="false">http://luksza.org/?p=650</guid>
	<link>http://luksza.org/2010/08/31/merge-support-in-jgitegit-0-9/</link>
	<description>&lt;p&gt;According to &lt;a href=&quot;http://luksza.org/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2Rldi5lY2xpcHNlLm9yZy9taG9uYXJjL2xpc3RzL2VnaXQtZGV2L21zZzAxNDU2Lmh0bWw=&quot; target=&quot;&quot;&gt;this post of Christian Halstrick&lt;/a&gt; and those two commits: &lt;a href=&quot;http://luksza.org/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2VnaXQuZWNsaXBzZS5vcmcvdy8/cD1qZ2l0LmdpdDthPWNvbW1pdGRpZmY7aD00NWU3OWE1MjZjN2ZmZWJhZjhlNDc1OGE2Y2I2YjdhZjA1NzE2NzA3&quot; target=&quot;&quot;&gt;1&lt;/a&gt; &lt;a href=&quot;http://luksza.org/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2VnaXQuZWNsaXBzZS5vcmcvdy8/cD1qZ2l0LmdpdDthPWNvbW1pdGRpZmY7aD00N2Y0MTcxMzE1ZTFiNjVmMmE2ZTdmNWZjMzhmNTdkODFkZTVkYjE1&quot; target=&quot;&quot;&gt;2&lt;/a&gt;. The upcoming version of JGit and EGit would have merge support! The previous &lt;em&gt;stable&lt;/em&gt; version (0.8) had only support for fast-forward merge; all non fast-forward merges must be done using CGit, now all kinds of merge can be done using EGit UI.&lt;/p&gt;
&lt;p&gt;The 0.9 version would have more cool features eg. History view improvements, branch and tag dialog improvements and (of course) support for Synchronize view. Say tuned for a full list of new and noteworthy that will be published in upcoming days.&lt;/p&gt;
 &lt;img height=&quot;1&quot; src=&quot;http://luksza.org/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&amp;amp;post_id=650&quot; style=&quot;display: none;&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Tue, 31 Aug 2010 09:29:16 +0000</pubDate>
</item>
<item>
	<title>Matthias Sohn: First EGit content merge with new resolve merge strategy</title>
	<guid isPermaLink="false">http://dev.eclipse.org/blogs/msohn/?p=10</guid>
	<link>http://dev.eclipse.org/blogs/msohn/2010/08/30/first-egit-content-merge-with-new-resolve-merge-strategy/</link>
	<description>&lt;p&gt;Just tried the brand-new resolve merge strategy Christian Halstrick worked on hard in the last months which finally got submitted today after months of testing, reviewing and refining the implementation.&lt;/p&gt;
&lt;p&gt;I created a simple test project and changed a simple class in two different ways on the branches “first” and “second”. Then I successfully fast-forward merged branch “second” into branch “master”. Then I hit “Team &amp;gt; Merge” to run the shiny new resolve merge strategy to merge branch “first” into “master”. And here we go: the merge tried to merge the content and detected the conflict:&lt;/p&gt;
&lt;div class=&quot;wp-caption alignnone&quot; id=&quot;attachment_12&quot; style=&quot;width: 310px;&quot;&gt;&lt;a href=&quot;http://dev.eclipse.org/blogs/msohn/files/2010/08/egit-merge-with-conflict1.png&quot;&gt;&lt;img alt=&quot;EGit resolve merge with conflict&quot; class=&quot;size-medium wp-image-12&quot; height=&quot;225&quot; src=&quot;http://dev.eclipse.org/blogs/msohn/files/2010/08/egit-merge-with-conflict1-300x225.png&quot; width=&quot;300&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;EGit resolve merge with conflict&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Give it a try and let us know if you hit any problems, we will work &lt;span style=&quot;font-size: 13.1944px;&quot;&gt;on improving the user interface&lt;br /&gt;
and of course also plan to integrate it with a visual merge view. &lt;/span&gt;&lt;/p&gt;</description>
	<pubDate>Tue, 31 Aug 2010 02:13:46 +0000</pubDate>
</item>
<item>
	<title>Eclipse Announcements: Register for the Eclipse Fall Training Series</title>
	<guid isPermaLink="true">http://feedproxy.google.com/~r/eclipse/fnews/~3/ubRDUpaJJcA/20100830_training.php</guid>
	<link>http://feedproxy.google.com/~r/eclipse/fnews/~3/ubRDUpaJJcA/20100830_training.php</link>
	<description>The Eclipse Foundation and Eclipse member companies are pleased to announce the &lt;a href=&quot;http://www.eclipse.org/community/training/classes.php&quot;&gt;fall 2010
			training class series&lt;/a&gt;.  The training is an excellent opportunity for software
			developers and architects to learn more about Eclipse Rich Client Platform (RCP), BIRT and Modeling technologies.
			Eclipse experts	will lead the sessions, providing practical experience through classroom
			instruction and hands-on labs. Virtual and on-site classes have been scheduled in
			several countries from September 20 to November 5, 2010.&lt;img height=&quot;1&quot; src=&quot;http://feeds.feedburner.com/~r/eclipse/fnews/~4/ubRDUpaJJcA&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Mon, 30 Aug 2010 20:00:00 +0000</pubDate>
</item>
<item>
	<title>Andrew Eisenberg: Debuggable GSPs in SpringSource Tool Suite</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-6917071644715743308.post-5910177632861270118</guid>
	<link>http://contraptionsforprogramming.blogspot.com/2010/08/debuggable-gsps-in-springsource-tool.html</link>
	<description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;br /&gt;A basic trick of Groovy Server Page debugging that seasoned Grails developers know is that by adding &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: 'Courier New', Courier, monospace;&quot;&gt;?showSource=true&lt;/span&gt; to a URL for any of your GSPs you can view the Groovy translation of your GSP code.  For example, the vanilla create GSP (&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: 'Courier New', Courier, monospace;&quot;&gt;http://localhost:8080/TripPlanner/trip/create.gsp&lt;/span&gt;) gets rendered like this in the browser:&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_V6EKdLYBFpg/THQR-x57CDI/AAAAAAAAAB0/ZliT6RC3GJE/s1600/create-browser.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;200&quot; src=&quot;http://1.bp.blogspot.com/_V6EKdLYBFpg/THQR-x57CDI/AAAAAAAAAB0/ZliT6RC3GJE/s200/create-browser.png&quot; width=&quot;176&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;And altering the URL to this: &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: 'Courier New', Courier, monospace;&quot;&gt;http://localhost:8080/TripPlanner/trip/create.gsp?showSource=true&lt;/span&gt;, you can see the translated source:&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_V6EKdLYBFpg/THQSXUwxUsI/AAAAAAAAAB8/n0zp6kEVqM0/s1600/create-showSource.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://1.bp.blogspot.com/_V6EKdLYBFpg/THQSXUwxUsI/AAAAAAAAAB8/n0zp6kEVqM0/s320/create-showSource.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;There is a mapping between lines of code of the original GSP and the lines of code of the Groovy translation.  In fact, if you are using Grails 1.3.4 or above, and scroll to the bottom of the translation, you will see something like this:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt; 82: @org.codehaus.groovy.grails.web.transform.LineNumber(&lt;br /&gt;  83: &lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;lines = [3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 6, 6, 6, 7, 7, 8, 8, 9, 9, 9, 9, 9, 10, 10, 10, 11, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 17, 17, 18, 18, 19, 19, 20, 21, 23, 23, 23, 23, 25, 25, 26, 35, 35, 35, 35, 37, 37, 37, 39, 39, 39, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],&lt;br /&gt;  84: &lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;sourceName = &quot;create.gsp&quot;&lt;br /&gt;  85: )&lt;br /&gt;  86: class ___LineNumberPlaceholder { }&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This is the line mapping information and each element of the &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: 'Courier New', Courier, monospace;&quot;&gt;lines&lt;/span&gt; array maps a line from the translation (the array index) to a line in the original source code (the value at that index).  This is not particularly useful to humans, but it is to the SpringSource Tool Suite.&lt;br /&gt;&lt;br /&gt;Using this information, STS is finally able to provide some debugging support for GSP files.  You can set a breakpoint at a line in your GSP editor, and the debugger will pause at that line when it is reached while rendering the page:&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_V6EKdLYBFpg/THQU9nkvaEI/AAAAAAAAACE/enRFJt1LSuk/s1600/create-debug.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;197&quot; src=&quot;http://4.bp.blogspot.com/_V6EKdLYBFpg/THQU9nkvaEI/AAAAAAAAACE/enRFJt1LSuk/s400/create-debug.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;At this point, your GSP can be interacted with like any Groovy file.  For example, you can inspect the current state of variables in your page binding:&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_V6EKdLYBFpg/THQWmwR7XjI/AAAAAAAAACM/neENn0IgKf8/s1600/variables-pane.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;163&quot; src=&quot;http://1.bp.blogspot.com/_V6EKdLYBFpg/THQWmwR7XjI/AAAAAAAAACM/neENn0IgKf8/s640/variables-pane.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;And you can execute values in the display view (using Java syntax only for now):&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_V6EKdLYBFpg/THQZr9e084I/AAAAAAAAACU/Oyjdy1Iqpr0/s1600/display-pane.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;60&quot; src=&quot;http://2.bp.blogspot.com/_V6EKdLYBFpg/THQZr9e084I/AAAAAAAAACU/Oyjdy1Iqpr0/s640/display-pane.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;This feature has been fun to implement since it was my first foray into Eclipse's Java debug interface, but I am not sure how useful it is going to be.  Lines in a GSP are not executed sequentially.  Rather, many are executed out of order through closures inside of an &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: 'Courier New', Courier, monospace;&quot;&gt;invokeTag&lt;/span&gt; method call.  Also, I have not completely worked out how to determine if a breakpoint is at a valid location if Grails is not already running.  So, at this point it is possible to set a breakpoint on any blank line, but these breakpoints are only valid if they are set on a line containing a GSP tag or some other kinds of things.&lt;br /&gt;&lt;br /&gt;But, I do hope this is useful to you and if you are interested in trying this new feature out, then you can &lt;a href=&quot;http://www.springsource.com/developer/sts&quot;&gt;download STS 2.5.0M3&lt;/a&gt; and install the latest version of Grails tool support.  Enjoy!&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/6917071644715743308-5910177632861270118?l=contraptionsforprogramming.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Mon, 30 Aug 2010 17:48:43 +0000</pubDate>
	<author>noreply@blogger.com (Andrew Eisenberg)</author>
</item>
<item>
	<title>Lars Vogel: The JUG which lives – EGit presentation on 02.Sept. at the Majug</title>
	<guid isPermaLink="false">http://www.vogella.de/blog/?p=3091</guid>
	<link>http://www.vogella.de/blog/2010/08/30/egit-presentation/</link>
	<description>&lt;div style=&quot;float: right; width: 42px; padding-right: 10px; margin: 0 0 0 10px;&quot;&gt;
		
		&lt;/div&gt;&lt;p&gt;Since beginning of last year I participate more or less actively in the &lt;a href=&quot;http://jug-mannheim.mixxt.de&quot;&gt;Java User Group Mannheim&lt;/a&gt;. Unfortunately the former main contact of the Java User Group Mannheim &lt;a href=&quot;https://twitter.com/alexhanschke&quot;&gt;Alex Hanschke&lt;/a&gt; has moved out of the area.  &lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/bmuskalla&quot;&gt;Benjamin Muskalla&lt;/a&gt; and &lt;a href=&quot;https://twitter.com/vogella&quot;&gt;myself&lt;/a&gt; volunteered to help organize the JUG Events. Therefore Benny and I will as of now try to find great new speakers and setup cool events. I think we are starting very well, as we are proud to have &lt;a href=&quot;https://twitter.com/masohn&quot;&gt;Matthias Sohn&lt;/a&gt; and &lt;a href=&quot;https://twitter.com/stefanlay&quot;&gt;Stefan Lay&lt;/a&gt; speak about &lt;a href=&quot;http://www.vogella.de/articles/Git/article.html&quot;&gt;Git&lt;/a&gt; and &lt;a href=&quot;http://www.vogella.de/articles/EGit/article.html&quot;&gt;EGit&lt;/a&gt; on the 02.Sept.  Git is one of the leading distributed version control systems and EGit a team provider for Eclipse.&lt;/p&gt;
&lt;p&gt;Matthias and and Stefan are both committers in the EGit project. Details on Matthias and Stefan and the presentation can be found on the &lt;a href=&quot;http://jug-mannheim.mixxt.de/networks/events/show_event.23581&quot;&gt;Majug Event Announcement&lt;/a&gt;.  As usual we organize to have drinks after the event and hope Matthias and Stefan will be able to join so that you can bugger them with questions. The presentation will be in German. &lt;/p&gt;
&lt;p&gt;Rumors are that we will see a real merge via EGit &lt;a href=&quot;http://jug-mannheim.mixxt.de/networks/events/show_event.23581&quot;&gt;on this event&lt;/a&gt;… &lt;img alt=&quot;:-)&quot; class=&quot;wp-smiley&quot; src=&quot;http://www.vogella.de/blog/wp-includes/images/smilies/icon_smile.gif&quot; /&gt;  Hope to see you at their.&lt;/p&gt;
&lt;div style=&quot;clear: both;&quot;&gt; &lt;/div&gt;</description>
	<pubDate>Mon, 30 Aug 2010 14:34:56 +0000</pubDate>
</item>
<item>
	<title>BioClipse: Bioclipse 2.4.1 now on update site</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-19419978.post-4480438561551249199</guid>
	<link>http://bioclipse.blogspot.com/2010/08/bioclipse-241-now-on-update-site.html</link>
	<description>A new version can be found on the update site. The new versions of the features contain the latest fixes. New in this version is support for Jasper reports which are so far used by Bioclipse Decision Support and Bioclipse Brunn for generating printable reports.&lt;br /&gt;&lt;br /&gt;To update go to Help -&amp;gt; Software Updates... and select the features you want to install.&lt;br /&gt;&lt;br /&gt;Known problem: The splash screen erroneously shows version number to be 2.4.0 after update. (Technical information can be found at &lt;a href=&quot;http://pele.farmbio.uu.se/cgi-bin/bugzilla/show_bug.cgi?id=2084&quot;&gt;bug: 2084&lt;/a&gt; in our Bugzilla)&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/19419978-4480438561551249199?l=bioclipse.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Mon, 30 Aug 2010 13:00:45 +0000</pubDate>
	<author>noreply@blogger.com (Jonalv)</author>
</item>
<item>
	<title>Karl Beecher: Poll: Your favourite web application hosts/technology when using Eclipse</title>
	<guid isPermaLink="false">http://computerfloss.wordpress.com/?p=561</guid>
	<link>http://computerfloss.wordpress.com/2010/08/30/poll-your-favourite-web-application-hoststechnology-when-using-eclipse/</link>
	<description>&lt;p&gt;&lt;img alt=&quot;Eclipse logo&quot; class=&quot;alignleft size-full wp-image-563&quot; height=&quot;91&quot; src=&quot;http://computerfloss.files.wordpress.com/2010/08/eclipse.png?w=171&amp;amp;h=91&quot; title=&quot;eclipse&quot; width=&quot;171&quot; /&gt;I’m embarking on a pet project, in short: a Python-based web application using my favourite editor, Eclipse. Being quite new to this, I thought I would poll my readers, especially those Eclipse web app developers among you, for their opinions on the best solutions. I realise I’m giving very few details, but I simply want to know what’s popular, or even what is being used that I’m not aware of. Thanks.&lt;/p&gt;
&lt;a name=&quot;pd_a_3689275&quot;&gt;&lt;/a&gt;&lt;div class=&quot;PDS_Poll&quot; id=&quot;PDI_container3689275&quot; style=&quot;display: inline-block;&quot;&gt;&lt;/div&gt;
		&amp;lt;noscript&amp;gt;
		&amp;lt;a href=&quot;http://answers.polldaddy.com/poll/3689275/&quot;&amp;gt;View This Poll&amp;lt;/a&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&quot;font-size: 10px;&quot;&amp;gt;&amp;lt;a href=&quot;http://polldaddy.com/features-surveys/&quot;&amp;gt;online survey&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;
		&amp;lt;/noscript&amp;gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/computerfloss.wordpress.com/561/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/computerfloss.wordpress.com/561/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/computerfloss.wordpress.com/561/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/computerfloss.wordpress.com/561/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gofacebook/computerfloss.wordpress.com/561/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/computerfloss.wordpress.com/561/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gotwitter/computerfloss.wordpress.com/561/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/computerfloss.wordpress.com/561/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/computerfloss.wordpress.com/561/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/computerfloss.wordpress.com/561/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/computerfloss.wordpress.com/561/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/computerfloss.wordpress.com/561/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/computerfloss.wordpress.com/561/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/computerfloss.wordpress.com/561/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://stats.wordpress.com/b.gif?host=computerfloss.wordpress.com&amp;amp;blog=11433662&amp;amp;post=561&amp;amp;subd=computerfloss&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Mon, 30 Aug 2010 07:34:54 +0000</pubDate>
</item>
<item>
	<title>Neil Bartlett: OSGi Readiness — Loading Classes</title>
	<guid isPermaLink="false">http://njbartlett.github.com/2010/08/30/osgi-readiness-loading-classes</guid>
	<link>http://njbartlett.name/2010/08/30/osgi-readiness-loading-classes.html</link>
	<description>&lt;p&gt;In my previous post on “OSGi Compliance”, I discussed the idea of making libraries ready for OSGi without depending on OSGi directly. In light of BJ’s comment I will refer from now on to OSGi “Readiness” rather than Compliance, as the latter term is easily confused with the concept of a framework implementation that complies with the OSGi specification.&lt;/p&gt;
&lt;p&gt;In each of these blog posts, I will state a requirement and then look at options for satisfying that requirement in an OSGi Ready way.&lt;/p&gt;
&lt;h2&gt;Problem Statement&lt;/h2&gt;
&lt;p&gt;You are developing a Java library, “Framework X”. Occasionally you must load and instantiate a class dynamically by name, where the name may originate from a configuration file or be passed into the framework as a parameter to an &lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt; call. You would like the framework to work cleanly both in OSGi and other environments, i.e. there must be no dependency on OSGi.&lt;/p&gt;
&lt;p&gt;For example, suppose we are implementing an O/R mapping framework similar to Hibernate, and the user has supplied a configuration file such as the following:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;xml&quot;&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;or-mapping&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;nt&quot;&gt;&amp;lt;class&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;name=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;org.example.domain.Event&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;table=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;EVENTS&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;nt&quot;&gt;&amp;lt;id&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;name=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;id&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;column=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;EVENT_ID&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;/&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;nt&quot;&gt;&amp;lt;/class&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/or-mapping&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;This tells our framework to create an instance of &lt;code&gt;org.example.domain.Event&lt;/code&gt; for each row of the &lt;span class=&quot;caps&quot;&gt;EVENTS&lt;/span&gt; table. Therefore we must dynamically load and instantiate the &lt;code&gt;org.example.domain.Event&lt;/code&gt; class.&lt;/p&gt;
&lt;h2&gt;Discussion&lt;/h2&gt;
&lt;p&gt;To dynamically load a class in Java we require &lt;strong&gt;two&lt;/strong&gt; things: the fully qualified name of the class, and a &lt;code&gt;ClassLoader&lt;/code&gt; from which to request it. If we have both of these then we can trivially load a class irrespective of whether we are in OSGi or not.&lt;/p&gt;
&lt;p&gt;To reiterate: &lt;strong&gt;OSGi does not interfere with the standard Java class loading &lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt;&lt;/strong&gt;. If we have the fully qualified name of a class and a &lt;code&gt;ClassLoader&lt;/code&gt; that knows of that class, then we can always load and instantiate the class.&lt;/p&gt;
&lt;p&gt;Problems arise only when we do not know the correct &lt;code&gt;ClassLoader&lt;/code&gt;, and make the wrong guess about which one to use.&lt;/p&gt;
&lt;h3&gt;First Wrong Guess: Class.forName()&lt;/h3&gt;
&lt;p&gt;Java provides us with a way to load a class without explicitly specifying a &lt;code&gt;ClassLoader&lt;/code&gt;, using the single-argument version of the &lt;code&gt;Class.forName()&lt;/code&gt; method:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;java&quot;&gt;&lt;span class=&quot;n&quot;&gt;Class&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;clazz&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Class&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;forName&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;org.example.domain.Event&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;Since we don’t specify a &lt;code&gt;ClassLoader&lt;/code&gt;, this method uses the loader that loaded the class in which the line of code appears. In other words, it uses the same loader that loaded the framework. In a traditional Java SE environment this usually works just fine, because both the framework and domain classes are probably installed as JARs on the classpath, and the classpath is loaded by a single &lt;code&gt;ClassLoader&lt;/code&gt;, the so-called “system” loader.&lt;/p&gt;
&lt;p&gt;But in OSGi, the domain classes are likely to be supplied in a different bundle, because there is a clear modular separation between the O/R framework code and the domain model classes, and therefore they will be loaded by a different &lt;code&gt;ClassLoader&lt;/code&gt;. We can still make it work if the package &lt;code&gt;org.example.domain&lt;/code&gt; is listed as an import of the framework bundle like so:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;make&quot;&gt;&lt;span class=&quot;nf&quot;&gt;Import-Package&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;org.example.domain&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;m&quot;&gt; ...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;However this is unsatisfactory because &lt;code&gt;Import-Package&lt;/code&gt; is statically defined, and a general-purpose O/R framework does not know in advance which domain packages it will need to import.&lt;/p&gt;
&lt;p&gt;(&lt;strong&gt;NB&lt;/strong&gt; there are a couple of other workarounds for this problem in the case that the framework code cannot be changed. These include: &lt;code&gt;DynamicImport-Package&lt;/code&gt;; shipping the domain classes as a fragment hosted by the O/R framework; and using the Equinox-only “buddy loading” feature. However all of these workarounds have their own severe problems, which I shall not discuss in depth here because the purpose of the post is to document how to best implement a framework such that hackish workarounds are &lt;strong&gt;not&lt;/strong&gt; required.)&lt;/p&gt;
&lt;h3&gt;Second Wrong Guess: Thread Context Class Loader&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;Class.forName()&lt;/code&gt; approach fails not only in OSGi but also in other environments such as Java Enterprise Edition, for similar reasons. Because of this, another common pattern is to use the Thread Context Class Loader (&lt;span class=&quot;caps&quot;&gt;TCCL&lt;/span&gt;), which was introduced relatively recently (i.e. Java 1.2):&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;java&quot;&gt;&lt;span class=&quot;n&quot;&gt;ClassLoader&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;tccl&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Thread&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;currentThread&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;().&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;getContextClassLoader&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;();&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;Class&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;clazz&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Class&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;forName&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;org.example.domain.Event&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;tccl&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;Some libraries use the &lt;span class=&quot;caps&quot;&gt;TCCL&lt;/span&gt; exclusively, others use it as a last resort after failing to load from other candidate class loaders. Almost every library follows a different strategy because Java has provided almost no specification or guidance on when to use the &lt;span class=&quot;caps&quot;&gt;TCCL&lt;/span&gt;… to quote a &lt;a href=&quot;http://www.javaworld.com/javaworld/javaqa/2003-06/01-qa-0606-load.html&quot;&gt;classic JavaWorld article&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Those class and resource loading strategies must be the most poorly documented and least specified area of J2SE.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Even in J(2)EE the specifications do not lay out precisely which set of classes should be visible through the &lt;span class=&quot;caps&quot;&gt;TCCL&lt;/span&gt;. In practice, a J(2)EE application server is able to provide a sensible set of classes via the &lt;span class=&quot;caps&quot;&gt;TCCL&lt;/span&gt; because the programming model is highly constrained: each application runs in an isolated silo, is not allowed directly to create threads or network sockets, and threads cannot cross application boundaries. Because it controls all the entry points, the application server can provide a &lt;span class=&quot;caps&quot;&gt;TCCL&lt;/span&gt; that is appropriate for the running code.&lt;/p&gt;
&lt;p&gt;OSGi’s programming model is far less constrained. Bundles are free to create threads, to open network sockets, and to call APIs exposed by any other bundle. There is no way in Java to intercept a direct method call that happens to cross a bundle boundary, so the OSGi framework cannot ensure the &lt;span class=&quot;caps&quot;&gt;TCCL&lt;/span&gt; is relevant to the current code. As a result, the &lt;span class=&quot;caps&quot;&gt;TCCL&lt;/span&gt; is not defined by the OSGi specification, and it may be &lt;code&gt;null&lt;/code&gt;. Therefore, we cannot rely on the &lt;span class=&quot;caps&quot;&gt;TCCL&lt;/span&gt; for anything.&lt;/p&gt;
&lt;h2&gt;Solutions&lt;/h2&gt;
&lt;p&gt;Now let’s discuss possible solutions. To be clear, all of the following suggestions are intended to supplement rather than replace existing approaches. &lt;strong&gt;If your framework is working in J2SE/J2EE with &lt;code&gt;Class.forName()&lt;/code&gt; or TCCLs then you should continue to use those approaches&lt;/strong&gt;. But, please provide additional options for runtime environments such as OSGi where those approaches fail.&lt;/p&gt;
&lt;p&gt;If you feel these suggestions are trivial or obvious — that is exactly the point. There is nothing complicated about making frameworks that work well in OSGi. Indeed, you may find you prefer using one of these patterns as they reduce the complexity and testing burden of your code.&lt;/p&gt;
&lt;h3&gt;Option 1 — Instance Factory&lt;/h3&gt;
&lt;p&gt;The first option is to avoid dynamic by-name class loading altogether. Although not always practical, it may be possible in some cases to allow clients to supply their own callback or factory to create objects as required.&lt;/p&gt;
&lt;p&gt;For example our O/R mapper could define the following interface:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;java&quot;&gt;&lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;DomainObjectFactory&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;Object&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;createInstance&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;tableName&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;Clients could supply an instance of this factory when initialising a session, or we could wire it in with our favourite Dependency Injector. This has the advantage that clients can construct objects however they like, rather than placing restrictions on the permitted constructors in the domain classes.&lt;/p&gt;
&lt;p&gt;On the other hand it may be risky since a client factory implementation could return shared instances, whereas the framework expects new objects on each call to &lt;code&gt;createInstance()&lt;/code&gt;. So long as such requirements are documented, the framework should permit clients to do what they like.&lt;/p&gt;
&lt;h3&gt;Option 2 — Register Classes&lt;/h3&gt;
&lt;p&gt;Another option is to add &lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt; for clients to register loaded classes in advance. This is best illustrated in client code:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;java&quot;&gt;&lt;span class=&quot;n&quot;&gt;session&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;registerClassForTable&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;EVENTS&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Event&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;List&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;events&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;session&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;createQuery&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;from Event&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;list&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;Here the client code has direct visibility of the &lt;code&gt;Event&lt;/code&gt; domain class, so it can use a class-literal to pass a &lt;code&gt;Class&lt;/code&gt; to the framework &lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt;. The framework can now use the supplied class whenever it reads from the &lt;span class=&quot;caps&quot;&gt;EVENTS&lt;/span&gt; table.&lt;/p&gt;
&lt;p&gt;We can even register classes directly against their names:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;java&quot;&gt;&lt;span class=&quot;n&quot;&gt;session&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;registerClass&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;org.example.domain.Person&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Person&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;The framework can use the registered class whenever it needs to create an instance of &lt;code&gt;org.example.domain.Person&lt;/code&gt;, but fall back on &lt;code&gt;Class.forName()&lt;/code&gt;/&lt;span class=&quot;caps&quot;&gt;TCCL&lt;/span&gt; for unregistered names. No other changes are required in the framework.&lt;/p&gt;
&lt;p&gt;Note that with this option, the client loses some flexibility and control. By passing a class rather than instances, the client has no opportunity to construct objects in the way it wants them, but instead relies on the framework to construct them.&lt;/p&gt;
&lt;p&gt;This is not so bad in the running example of domain objects, but suppose we are talking about some kind of “service” object. Without control over instantiation, clients cannot make the service aware of its “environment” or “context”. Sometimes this forces us to use static fields, thread-local variables or other hack to get hold of our “context” after having been instantiated by a framework.&lt;/p&gt;
&lt;p&gt;If the framework allows pre-instantiated objects, then those objects can be pulled out of the OSGi service registry, a Dependency Injection container, or even generated on the fly. So when designing an &lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt;, please consider whether the framework really needs to take control of instantiation by requiring &lt;code&gt;Class&lt;/code&gt; objects — if not, at least allow the option of passing pre-instantiated objects.&lt;/p&gt;
&lt;h3&gt;Option 3 — Pass the Loader&lt;/h3&gt;
&lt;p&gt;This option is the conceptually the simplest, and also has the least impact on existing code: allow clients to pass a &lt;code&gt;ClassLoader&lt;/code&gt; into your &lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt;. The appropriate time to do this is highly dependent on the nature of the &lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt;, but in the O/R mapper it might be done during initialisation of a session:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;java&quot;&gt;&lt;span class=&quot;n&quot;&gt;SessionFactory&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;createSession&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MyClass&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;getClassLoader&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;());&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// ... OR ...&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;session&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;setDomainClassLoader&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MyClass&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;getClassLoader&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;());&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;To minimise the impact on existing code, this method can be overloaded with another version that takes no argument. Alternatively, clients could pass &lt;code&gt;null&lt;/code&gt; to indicate that the framework should attempt to find the right &lt;code&gt;ClassLoader&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Again there is a loss of flexibility for clients since this solution assumes all classes can be loaded from one class loader, which may not actually be the case, but in practice it doesn’t create any real problems.&lt;/p&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;Although this post has been rather long-winded, the message is very simple: &lt;strong&gt;stop guessing&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;If you are writing a library that performs dynamic by-name class loading, do not make assumptions about which &lt;code&gt;ClassLoader&lt;/code&gt; to use.&lt;/strong&gt; Allow client code to specify a class loader, or perform its own class loading. By all means retain your &lt;code&gt;Class.forName()&lt;/code&gt; or &lt;span class=&quot;caps&quot;&gt;TCCL&lt;/span&gt;-based lookups, but please provide an override for environments in which they will not work.&lt;/p&gt;</description>
	<pubDate>Mon, 30 Aug 2010 07:00:00 +0000</pubDate>
</item>
<item>
	<title>Fabian Steeg: Scala, object persistence, and the original NoSQL: XML</title>
	<guid isPermaLink="false">http://fsteeg.wordpress.com/?p=1251</guid>
	<link>http://fsteeg.wordpress.com/2010/08/30/scala-object-persistence-and-the-original-nosql-xml/</link>
	<description>&lt;p&gt;In our &lt;a href=&quot;http://fsteeg.wordpress.com/2010/04/18/an-eclipse-rcp-digitization-wiki-with-e4-and-scala/&quot;&gt;digitization wiki&lt;/a&gt; &lt;a href=&quot;http://github.com/spinfo/drc&quot;&gt;project&lt;/a&gt; based on &lt;a href=&quot;http://www.eclipse.org/eclipse4/&quot;&gt;Eclipse 4&lt;/a&gt; and &lt;a href=&quot;http://www.scala-lang.org/&quot;&gt;Scala&lt;/a&gt; it was time to find a persistence solution. As a quick overview of what it’s about, our app will basically allow a user to edit a digitized book page, showing the original scan as an image, with the selected word highlighted. It currently looks like this:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://fsteeg.files.wordpress.com/2010/08/drc-b1-m4.png&quot;&gt;&lt;img alt=&quot;A digitization wiki using Scala and Eclipse 4&quot; class=&quot;alignnone size-full wp-image-1252&quot; src=&quot;http://fsteeg.files.wordpress.com/2010/08/drc-b1-m4.png?w=250&quot; title=&quot;drc-b1-m4&quot; width=&quot;250&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;For the initial prototype implementation, we used XML files in zips to store the page content, combined with &lt;a href=&quot;https://truezip.dev.java.net/&quot;&gt;TrueZIP&lt;/a&gt;, a library which allows access to files in zips the way it should be: like files in a folder. So we could basically create and use the zip entries like this:&lt;/p&gt;
&lt;pre class=&quot;brush: scala;&quot;&gt;val zipEntry = new File(&quot;PPN345572629_0004.zip/0001.xml&quot;)
&lt;/pre&gt;
&lt;p&gt;The XML is created using &lt;a href=&quot;http://www.codecommit.com/blog/scala/working-with-scalas-xml-support&quot;&gt;Scala’s XML support&lt;/a&gt;, e.g. the top class in our domain model (Page) is serialized by specifying the root element and calling &lt;em&gt;toXml&lt;/em&gt; on each containing element (the words), like this:&lt;/p&gt;
&lt;pre class=&quot;brush: scala;&quot;&gt;def toXml:Elem = &amp;lt;page&amp;gt; { words.map(_.toXml) } &amp;lt;/page&amp;gt;
&lt;/pre&gt;
&lt;p&gt;The XML is deserialized with the reverse action, by passing the deserialized word elements contained in the root element to the Page factory method:&lt;/p&gt;
&lt;pre class=&quot;brush: scala;&quot;&gt;def fromXml(page:Elem) = Page( for(word &amp;lt;- (page \ &quot;word&quot;))
  yield Word.fromXml(word) )
&lt;/pre&gt;
&lt;p&gt;So that was basically our prototypical persistence mechanism. Of course, to actually collaboratively correct our digitized texts, we needed a central DB instance on some server. Or maybe not exactly: having &lt;a href=&quot;http://chaosradio.ccc.de/cre125.html&quot;&gt;heard good things about CouchDB&lt;/a&gt; (in german), it was the first option I looked into. The distributed nature of CouchDB sounded very interesting and seemed appropriate for our project – not for performance reasons, but to provide offline or decentralized editing as an option.&lt;/p&gt;
&lt;p&gt;So I looked into &lt;a href=&quot;http://couchdb.apache.org/&quot;&gt;CouchDB&lt;/a&gt; with &lt;a href=&quot;http://github.com/debasishg/scouchdb&quot;&gt;scouchdb&lt;/a&gt;, a Scala API to access it (&lt;a href=&quot;http://twitter.com/fsteeg/statuses/20551941141&quot;&gt;and a very welcoming project&lt;/a&gt;). After input from my colleague, I became aware that we’d lose quite a bit of installation ease if we pick a non-Java DB, so CouchDB was not really a client side option for offline storage, and therefore the strongest reason for us to consider it no longer there.&lt;/p&gt;
&lt;p&gt;Next I considered an embedded relational Java DB with some ORM or ORM-like access. A JPA solution like EclipseLink or Hibernate seemed overkill and not ideal for Scala. Instead I took a closer look at &lt;a href=&quot;http://github.com/szeiger/scala-query&quot;&gt;ScalaQuery&lt;/a&gt;, which uses Scala’s &lt;em&gt;for expressions&lt;/em&gt; for DB queries, which seems like the thing you want if you happen to use a language that basically has a query language built-in.&lt;/p&gt;
&lt;p&gt;For instance, in ScalaQuery, we could write a query to get all pairs of pages and words where the page contains the word and the original form of the word is &lt;em&gt;Bonifaci&lt;/em&gt; like this:&lt;/p&gt;
&lt;pre class=&quot;brush: scala;&quot;&gt;val bonifaci = for (page &amp;lt;- Pages; word &amp;lt;- Words;
  if page.id === word.pageId &amp;amp;&amp;amp; word.original === &quot;Bonifaci&quot;)
  yield (page, word)
&lt;/pre&gt;
&lt;p&gt;To allow this kind of queries, we need to define tables named &lt;em&gt;Pages&lt;/em&gt; and &lt;em&gt;Words&lt;/em&gt;. Defining the tables with ScalaQuery is quite elegant, e.g. our main table for pages could be defined like this:&lt;/p&gt;
&lt;pre class=&quot;brush: scala;&quot;&gt;object Pages extends Table[(String, java.sql.Blob)](&quot;pages&quot;) {
  def id = column[String](&quot;id&quot;, O PrimaryKey)
  def image = column[java.sql.Blob](&quot;image&quot;)
  def * = id ~ image
}
&lt;/pre&gt;
&lt;p&gt;However, this leads to either a duplication of our domain objects (have a table object as above and the original class) or a complete rewrite (use table objects like above as the domain objects), which both seemed wrong.&lt;/p&gt;
&lt;p&gt;Also, thinking about alternatives to our XML representation, I came to realize that we would want some form of XML export anyway to ensure long-term access to our data, which is in the public domain and a cultural asset. Of course it would be possible to implement this as some form of export, but if possible it would be just perfect if we could use a single persistence mechanism.&lt;/p&gt;
&lt;p&gt;I did remember there are some XML DBs around, but initially abandoned that idea since XML is only half of what we store (the other thing being the images used to correct the text, see screenshot above). But after being unhappy with these other solutions, I took a closer look at &lt;a href=&quot;http://exist.sourceforge.net/&quot;&gt;eXist-db&lt;/a&gt;, an XML DB licensed under the LGPL which by default runs on &lt;a href=&quot;http://eclipse.org/jetty/&quot;&gt;Jetty&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;And I learned that eXist actually supports both XML and binary data, which was just what we needed. With eXist, we also get XQuery support and various interfaces to the data. In our case, this is less of an immediate concern, given Scala’s XML support and &lt;em&gt;for expressions&lt;/em&gt; are a bit like built-in XQuery capabilities. For instance, a query on XML that is equivalent to the ScalaQuery from above could look like this:&lt;/p&gt;
&lt;pre class=&quot;brush: scala;&quot;&gt;val bonifaci = for (page &amp;lt;- xml\&quot;page&quot;; word &amp;lt;- page\&quot;word&quot;;
  if (word\&quot;@original&quot;).text == &quot;Bonifaci&quot;) yield (page, word)
&lt;/pre&gt;
&lt;p&gt;This is not only about as concise as the query above, but also allows to express the hierarchical nature of our data in the query (‘each word in the page’), instead of having to map the relational representation (‘all words with a certain page ID’). &lt;/p&gt;
&lt;p&gt;As we already deserialize the XML to page objects, what we actually do is query on these. For switching the serialization from entries in a zip file to the eXist DB and allow these queries, the only conceptual change was to store the XML and image files in the DB instead of using a File object, which allowed a really smooth transition.&lt;/p&gt;
&lt;p&gt;And with Scala’s rich semantics and XML support, our DB wrapper in Scala can be very &lt;a href=&quot;http://lamp.epfl.ch/~odersky/blogs/isscalacomplex.html&quot;&gt;simple&lt;/a&gt; and precise about what it offers in its API, namely XML documents for a collection ID (if found in the DB):&lt;/p&gt;
&lt;pre class=&quot;brush: scala;&quot;&gt;val xmls:Option[List[Elem]] = Db.xml(collection)
&lt;/pre&gt;
&lt;p&gt;Or binary data:&lt;/p&gt;
&lt;pre class=&quot;brush: scala;&quot;&gt;val imgs:Option[List[Array[Byte]]] = Db.bin(collection)
&lt;/pre&gt;
&lt;p&gt;The elements provided by the DB in this way can be passed to the original deserialization method of Page:&lt;/p&gt;
&lt;pre class=&quot;brush: scala;&quot;&gt;val pages:List[Page] = for(page &amp;lt;- Db.xml(collection))
  yield Page.fromXml(page)
&lt;/pre&gt;
&lt;p&gt;Given this, we can now use a plain Scala &lt;em&gt;for expression&lt;/em&gt; on the deserialized objects to query our data like this:&lt;/p&gt;
&lt;pre class=&quot;brush: scala;&quot;&gt;val bonifaci = for (page &amp;lt;- pages; word &amp;lt;- page.words;
  if word.original == &quot;Bonifaci&quot;) yield (page, word)
&lt;/pre&gt;
&lt;p&gt;At this point we have replaced the file storage with the DB, but are still creating the XML manually, using Scala’s XML literals. To avoid any duplication (each class parameter or field is represented again in the serialization logic), and basically eliminate all direct XML manipulation, we could use an XML binding library like &lt;a href=&quot;http://scalaxb.org/&quot;&gt;scalaxb&lt;/a&gt;, &lt;a href=&quot;https://jaxb.dev.java.net/&quot;&gt;JAXB-RI&lt;/a&gt; or &lt;a href=&quot;http://eclipse.org/eclipselink/moxy.php&quot;&gt;MOXy&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;On the other hand, the type safety of the Scala XML serialization code makes the duplication feel much less dangerous than traditional, string-based XML serialization (which can break easily unnoticed by the compiler). And being about as concise as some JAXB annotations and marshalling code would be, the disadvantages seem almost entirely theoretical, but we’ll see – swapping the serialization logic should be as easy as swapping the storage implementation was.&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/fsteeg.wordpress.com/1251/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/fsteeg.wordpress.com/1251/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/fsteeg.wordpress.com/1251/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/fsteeg.wordpress.com/1251/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gofacebook/fsteeg.wordpress.com/1251/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/fsteeg.wordpress.com/1251/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gotwitter/fsteeg.wordpress.com/1251/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/fsteeg.wordpress.com/1251/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/fsteeg.wordpress.com/1251/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/fsteeg.wordpress.com/1251/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/fsteeg.wordpress.com/1251/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/fsteeg.wordpress.com/1251/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/fsteeg.wordpress.com/1251/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/fsteeg.wordpress.com/1251/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://stats.wordpress.com/b.gif?host=fsteeg.wordpress.com&amp;amp;blog=7806130&amp;amp;post=1251&amp;amp;subd=fsteeg&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Mon, 30 Aug 2010 01:30:31 +0000</pubDate>
</item>
<item>
	<title>Carlos Valcarcel: Writing an Eclipse Plug-in (Part 24): Common Navigator: Configuring the submenus (Presentation…again)</title>
	<guid isPermaLink="false">http://cvalcarcel.wordpress.com/?p=1346</guid>
	<link>http://cvalcarcel.wordpress.com/2010/08/29/writing-an-eclipse-plug-in-part-24-common-navigator-configuring-the-submenus-presentation-again/</link>
	<description>When we last left our erstwhile travelers (that would be all of you) they were surfing the quantum wave on their way to a future refactoring of their past to allow them to simultaneously feel proud of their work and embarrassed that they were following some guy who is making it all up as he [...]&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://stats.wordpress.com/b.gif?host=cvalcarcel.wordpress.com&amp;amp;blog=4641976&amp;amp;post=1346&amp;amp;subd=cvalcarcel&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Sun, 29 Aug 2010 23:25:16 +0000</pubDate>
</item>
<item>
	<title>Andrei Loskutov: Ping from Ubuntu</title>
	<guid isPermaLink="true">http://www.jroller.com/andyl/entry/ping_from_ubuntu</guid>
	<link>http://www.jroller.com/andyl/entry/ping_from_ubuntu</link>
	<description>&lt;p&gt;
There was a long time no update from my side. Mostly because of &lt;b&gt;&lt;a href=&quot;http://www.jroller.com/andyl/entry/my_new_full_time_project&quot;&gt;my new full time project&lt;/a&gt;&lt;/b&gt;. Another reason was - I've played a bit with different &lt;b&gt;&lt;a href=&quot;http://distrowatch.com/&quot;&gt;Linux distributions&lt;/a&gt;&lt;/b&gt;.
&lt;/p&gt;
&lt;p&gt;
Finally I've decided to move to &lt;b&gt;&lt;a href=&quot;http://linuxmint.com/&quot;&gt;Mint&lt;/a&gt;&lt;/b&gt; (based on &lt;b&gt;&lt;a href=&quot;http://www.ubuntu.com/&quot;&gt;Ubuntu&lt;/a&gt;&lt;/b&gt;). This is a great distribution which is far easier to manage as Windows XP, even for complete beginners. I've also tried Windows 7, but it was not really better then XP except that it can address now all 8 GB of RAM I have in my PC. From the administration point of view, I found &lt;b&gt;&lt;a href=&quot;http://linuxmint.com/&quot;&gt;Mint&lt;/a&gt;&lt;/b&gt; (&lt;b&gt;&lt;a href=&quot;http://www.ubuntu.com/&quot;&gt;Ubuntu&lt;/a&gt;&lt;/b&gt;) much easier.
&lt;/p&gt;
&lt;p&gt;
So why this post? After switching to Ubuntu, first think I've stumbled upon was the HUGE toolbar size used by Eclipse. Horrible. So I had to tweak my &lt;a href=&quot;http://art.gnome.org/themes/gtk2&quot;&gt;GTK themes&lt;/a&gt; and also one of my plugins, to get this toolbar's to the proper dimensions. May be more about this later (I've patched one of Murrine themes), but as a result, I've released a new 1.5.6 version of the &lt;b&gt;&lt;a href=&quot;http://andrei.gmxhome.de/skins/index.html&quot;&gt;Extended VS Presentation&lt;/a&gt;&lt;/b&gt; plugin. Additionally it has a bugfix for the maximize/minimize actions which were not properly working on Linux in some cases.
&lt;/p&gt;
&lt;p&gt;
Enjoy.
&lt;/p&gt;</description>
	<pubDate>Sun, 29 Aug 2010 21:41:53 +0000</pubDate>
</item>
<item>
	<title>Sebastian Zarnekow: Fun with Xtext: Language Mixins</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-6255758224607466565.post-3879636950374995509</guid>
	<link>http://zarnekow.blogspot.com/2010/08/language-mixins-with-xtext.html</link>
	<description>There are rumors that &lt;a href=&quot;http://www.xtext.org&quot;&gt;Xtext&lt;/a&gt; does only have rudimentary support for language libraries or language reuse and does not allow to create 'advanced stuff'. And it is actually true, that Xtext has only first class support for extending only one other language. But with some creativity and customizing, it is easily possible to create really nice editors for intermixed languages. I've produced a small screencast that demonstrates how an editor for template proposals (read: a template language) may look like when it's aware of your target syntax.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Besides the smart editor for template proposals there is another interesting feature in this screencast: As template proposals are usually edited on a preference page, I implemented a small prototype that shows how a form field may leverage the features of a full blown Xtext editor.&lt;br /&gt;&lt;br /&gt;Both prototypic implementations are only based on Xtext 1.0 APIs and not yet publicly available. But I'ld assume that at least parts of them will be moved into the Xtext Indigo stream. Stay tuned!&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/6255758224607466565-3879636950374995509?l=zarnekow.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Sun, 29 Aug 2010 20:25:31 +0000</pubDate>
	<author>noreply@blogger.com (Sebastian Zarnekow)</author>
</item>
<item>
	<title>Stephan Herrmann: New Refactoring for OT/J: Change Method Signature</title>
	<guid isPermaLink="false">http://blog.objectteams.org/?p=62</guid>
	<link>http://blog.objectteams.org/2010/08/new-refactoring-of-otj-change-method-signature/</link>
	<description>&lt;h2&gt;IDE Innovation&lt;/h2&gt;
&lt;p&gt;Every now and then some folks report that the IDE they’re developing now supports this or that cool new feature. Sometimes I envy them for such progress - but more often than not I end up realizing that the &lt;a href=&quot;http://wiki.eclipse.org/Object_Teams_Development_Tooling&quot;&gt;OTDT&lt;/a&gt; already has that feature or something very similar. Is that just my personal bias (which certainly I have) or are we cheating in some way, or what?&lt;/p&gt;
&lt;p&gt;There’s a little detail in the design of the OTDT that turns out to make such a difference as normally can only achieved by cheating: by the way how the OTDT extends and adapts the JDT it is like saying we’re starting the race not at the line saying “START” but at the other one saying “FINISH” and run on from there. While many projects define “JDT-like user experience” as their long-term goal, the OTDT basically has this since the first release. How come? The OTDT basically &lt;strong&gt;is&lt;/strong&gt; the JDT, with adaptations.&lt;/p&gt;
&lt;p&gt;There’s a fine point in the word &lt;em&gt;basically&lt;/em&gt;. To tell the truth, every feature that the JDT supports for Java development is &lt;strong&gt;not&lt;/strong&gt; automatically fully available in the OTDT for OT/J development. In fact &lt;em&gt;most&lt;/em&gt; JDT features need adaptation to provide equal convenience for OT/J development. It’s just that all these adaptations can be brought into the system very very easily - thanks to the self-application of OT/Equinox. And now, here is actually an example of a JDT feature that lacked OT/J support - until yesterday:&lt;/p&gt;
&lt;h2&gt;Change Method Signature Refactoring&lt;/h2&gt;
&lt;p&gt;If you refactor mercilessly the “Change Method Signature” refactoring is certainly one of your friends. Add/rename/remove/reshuffle parameters of a method without (too easily) breaking existing code, cool. It knows about the connections from method invocation to method declaration and about overriding. That’s good enough for Java, but not good enough for OT/J since OT/J introduces method bindings (”callout” and “callin”) that create a wiring between methods of different objects. Obviously, if one of the methods being wired changes its signature so must the method binding.&lt;/p&gt;
&lt;p&gt;Technically, the JDT implementation of that refactoring bailed out when it asked a parameter/argument for its parent in the AST and found neither a method declaration nor a method invocation. The JDT refactoring does not know about OT/J method bindings, so it just failed to update those.&lt;/p&gt;
&lt;p&gt;After a little of coding this is what happens now when you apply “Change Method Signature” on a piece of OT/J code. Assume you have a plain Java class:&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;otj&quot; style=&quot;font-family: monospace;&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; BaseClass &lt;span style=&quot;color: #000000;&quot;&gt;{&lt;/span&gt;
	&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; bm&lt;span style=&quot;color: #000000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; i, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;boolean&lt;/span&gt; b&lt;span style=&quot;color: #000000;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;{&lt;/span&gt;
 
	&lt;span style=&quot;color: #000000;&quot;&gt;}&lt;/span&gt;
	&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; other&lt;span style=&quot;color: #000000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;{&lt;/span&gt;
		bm&lt;span style=&quot;color: #000000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;;&lt;/span&gt;
	&lt;span style=&quot;color: #000000;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #000000;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;and a TeamClass whose contained RoleClass is bound to BaseClass:&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
2
3
4
5
6
7
8
9
10
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre class=&quot;otj&quot; style=&quot;font-family: monospace;&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;team&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; TeamClass &lt;span style=&quot;color: #000000;&quot;&gt;{&lt;/span&gt;
	&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;protected&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; RoleClass &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;playedBy&lt;/span&gt; BaseClass &lt;span style=&quot;color: #000000;&quot;&gt;{&lt;/span&gt;
 
		&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; rm&lt;span style=&quot;color: #000000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; i2, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;boolean&lt;/span&gt; b2&lt;span style=&quot;color: #000000;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;after&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; bm&lt;span style=&quot;color: #000000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; i, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;boolean&lt;/span&gt; b&lt;span style=&quot;color: #000000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;;&lt;/span&gt;
 
		&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; rm&lt;span style=&quot;color: #000000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; i2, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;boolean&lt;/span&gt; b2&lt;span style=&quot;color: #000000;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;{&lt;/span&gt;
			&lt;span style=&quot;color: #000000; font-weight: normal;&quot;&gt;System&lt;/span&gt;.&lt;span style=&quot;color: #000000;&quot;&gt;out&lt;/span&gt;.&lt;span style=&quot;color: #000000;&quot;&gt;println&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(&lt;/span&gt;b2&lt;span style=&quot;color: #000000;&quot;&gt;?&lt;/span&gt;i2&lt;span style=&quot;color: #000000;&quot;&gt;:-&lt;/span&gt;i2&lt;span style=&quot;color: #000000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;;&lt;/span&gt;
		&lt;span style=&quot;color: #000000;&quot;&gt;}&lt;/span&gt;
	&lt;span style=&quot;color: #000000;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #000000;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Here the right-hand side of the callin binding in line 4 refers to the normal method &lt;code&gt;bm(int,boolean)&lt;/code&gt; defined in BaseClass.&lt;/p&gt;
&lt;p&gt;What happens if you start messing around with the signature of &lt;code&gt;bm&lt;/code&gt;?&lt;br /&gt;
Like:&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Change Singature - Edit Parameters&quot; class=&quot;aligncenter&quot; src=&quot;http://blog.objectteams.org/wp-uploads/2010/08/changesignature1.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;I.e., we are adding a parameter &lt;code&gt;str&lt;/code&gt; and also change the order of parameters (from i,b to b,str,i). I don’t have to tell you what this refactoring does to BaseClass, but here’s the preview of those changes affecting TeamClass:&lt;br /&gt;
&lt;a href=&quot;http://blog.objectteams.org/wp-uploads/2010/08/changesignature2.png&quot;&gt;&lt;br /&gt;
&lt;img alt=&quot;Change Signature - Preview TeamClass&quot; class=&quot;aligncenter&quot; src=&quot;http://blog.objectteams.org/wp-uploads/2010/08/changesignature2.png&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;em&gt;(sorry the screenshot is a bit wide, you may have to click to really see)&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;The preview shows that the refactoring will do three things:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Update the right-hand side of the method binding.&lt;/li&gt;
&lt;li&gt;Add a parameter mapping (the part starting with “&lt;code&gt;with&lt;/code&gt;“) to ensure that the role method &lt;code&gt;rm&lt;/code&gt; receives the arguments it needs, the way it needs them.&lt;/li&gt;
&lt;li&gt;Do &lt;strong&gt;not&lt;/strong&gt; update any part of the role implementation, because that’s what the parameter mapping is for: shield the role implementation from any outside changes.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Some words on these parameter mappings: each element like “&lt;code&gt;b2 &amp;lt;- b&lt;/code&gt;” feeds a value from the right-hand side (representing things at the baseclass side) into the parameter at the left-hand side (representing the role). The list of parameter mappings is not ordered, which means further swapping of base side parameters requires no further action. And indeed the current implementation of the refactoring does not attempt to adjust an existing parameter mapping (which might be a quite complex task). If adjustments are required which the refactoring cannot perform automatically, it will inform the user that perhaps a parameter mapping may need manual adjustment.&lt;/p&gt;
&lt;p&gt;The refactoring applies no AI to guess what the intended solution should look like, but it performs a number of obvious adaptations and gives note when these adaptations may not suffice and manual cleanup may be needed.&lt;/p&gt;
&lt;h2&gt;Implementation&lt;/h2&gt;
&lt;p&gt;Those who have read previous posts may (almost) know the kind of statistics that follows:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;299 LOC implementation&lt;/li&gt;
&lt;li&gt;315 LOC testcode&lt;/li&gt;
&lt;li&gt;170 LOC testdata&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I should really show one of these OT/J based implementation, one of these days. For this post I will just give you an Outline, literally:&lt;br /&gt;
&lt;img alt=&quot;Implementation Outline&quot; class=&quot;aligncenter&quot; src=&quot;http://blog.objectteams.org/wp-uploads/2010/08/changesignature3.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Role class Processor is bound to the JDT’s ChangeSignatureProcessor, and the nested roles OccurrenceUpdate and MethodSpecUpdate are bound to two inner classes of ChangeSignatureProcessor, which shows how even class nesting at the base level can be mapped to the team &amp;amp; role level. Instances of the innermost roles will only ever come into being, if a Processor role has detected that it needs to work in order to handle OT/J specific code. Inside each role - apart from regular fields and methods - you see those green arrow-things, denoting method bindings between a role and its base. The highlighted binding to &lt;code&gt;createOccurrenceUpdate&lt;/code&gt; is actually the initial entry into the logic of this module. Further down you see how the base behavior &lt;code&gt;reshuffleElements&lt;/code&gt; is intercepted to additionally add parameter mappings if needed (and yes, I’m hiding the details of role MethodSpecUpdate, but there are no secrets inside, I just more methods and more method bindings).&lt;/p&gt;
&lt;p&gt;Voilà, we indeed have a new refactoring for OT/J. I’ve been planning this one for a while but in the end it took me little more than a day &lt;img alt=&quot;:)&quot; class=&quot;wp-smiley&quot; src=&quot;http://blog.objectteams.org/wp-includes/images/smilies/icon_smile.gif&quot; /&gt;&lt;/p&gt;</description>
	<pubDate>Sun, 29 Aug 2010 19:54:31 +0000</pubDate>
</item>
<item>
	<title>Manuel Selva: Modify a file in response to IResourceChangeListener</title>
	<guid isPermaLink="false">http://manuelselva.wordpress.com/?p=343</guid>
	<link>http://manuelselva.wordpress.com/2010/08/27/modify-a-file-in-response-to-iresourcechangelistener/</link>
	<description>&lt;p&gt;Hi there,&lt;/p&gt;
&lt;p&gt;In the context of an &lt;a href=&quot;http://help.eclipse.org/helios/index.jsp?topic=/org.eclipse.platform.doc.isv/reference/api/org/eclipse/core/resources/IResourceChangeListener.html&quot;&gt;IResourceChangeListener&lt;/a&gt; I need to modify a given preference file in the workspace.  Because of&lt;em&gt; “Note that during resource change event notification, further changes  to resources may be disallowed.” &lt;/em&gt;the only solution to perform this change is to delay it on a future event (5 seconds later, on the next access to the file to be modified, on the next selection event, etc ..)&lt;/p&gt;
&lt;p&gt;I would be interested to know how do you handle such situation ?&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/manuelselva.wordpress.com/343/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/manuelselva.wordpress.com/343/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/manuelselva.wordpress.com/343/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/manuelselva.wordpress.com/343/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gofacebook/manuelselva.wordpress.com/343/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/manuelselva.wordpress.com/343/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gotwitter/manuelselva.wordpress.com/343/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/manuelselva.wordpress.com/343/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/manuelselva.wordpress.com/343/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/manuelselva.wordpress.com/343/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/manuelselva.wordpress.com/343/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/manuelselva.wordpress.com/343/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/manuelselva.wordpress.com/343/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/manuelselva.wordpress.com/343/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://stats.wordpress.com/b.gif?host=manuelselva.wordpress.com&amp;amp;blog=2529905&amp;amp;post=343&amp;amp;subd=manuelselva&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Fri, 27 Aug 2010 11:44:41 +0000</pubDate>
</item>
<item>
	<title>Mariot Chauvin: Search in eclipse forum</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-3193880670773749221.post-1980091716205876568</guid>
	<link>http://mariot-thoughts.blogspot.com/2010/08/search-in-eclipse-forum_9055.html</link>
	<description>If you would like to search in eclipse forum, here is a quick form which may help you.&lt;br /&gt;&lt;br /&gt;&lt;form action=&quot;http://www.google.com/search?q=&quot; method=&quot;GET&quot;&gt;&lt;br /&gt;&lt;br /&gt;Project name:&lt;input name=&quot;projectName&quot; type=&quot;text&quot; /&gt;&lt;br /&gt;Your search: &lt;input name=&quot;userSearch&quot; type=&quot;text&quot; /&gt;&lt;br /&gt;&lt;input name=&quot;as_sitesearch&quot; type=&quot;hidden&quot; value=&quot;eclipse.org&quot; /&gt;&lt;br /&gt;&lt;input name=&quot;template&quot; type=&quot;hidden&quot; value=&quot;Eclipse Community Forums: &quot; /&gt;&lt;br /&gt;&lt;input name=&quot;q&quot; type=&quot;hidden&quot; value=&quot;&quot; /&gt;&lt;br /&gt;&lt;input type=&quot;submit&quot; value=&quot;Search&quot; /&gt;&lt;br /&gt;&lt;/form&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3193880670773749221-1980091716205876568?l=mariot-thoughts.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Fri, 27 Aug 2010 10:32:47 +0000</pubDate>
	<author>noreply@blogger.com (Mariot Chauvin)</author>
</item>
<item>
	<title>Sven Efftinge: Will talk about Xtext in Antwerp and Stockholm soon.</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-24248206.post-3356067999977317003</guid>
	<link>http://blog.efftinge.de/2010/08/will-talk-about-xtext-in-antwerp-and.html</link>
	<description>I have the pleasure to present Xtext in two of the most beautiful european cities within the next two weeks. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;Belgian Eclipse Community Meeting (Antwerp)&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'll be in Antwerp next Tuesday and meet up with Belgian's Eclipse Community.&lt;/div&gt;&lt;div&gt;The event is free of charge and the details can be found &lt;a href=&quot;http://wiki.eclipse.org/Regional_Communities/Belgium&quot;&gt;here&lt;/a&gt;. There's also a presentation of EGit, which I'm looking forward to see (I'll have lots of questions :-)).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;&lt;b&gt;&quot;Developing Domain-Specific Languages with Xtext&quot; (Stockholm)&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A week later on Thursday, the 9th, I'll be in Stockholm. The event is sponsored by &lt;a href=&quot;http://www.jayway.se/&quot;&gt;Jayway&lt;/a&gt; and there will be two presentations. First I'll talk about Xtext and afterwards Patrik Nordwall and Andreas Källberg will present &lt;a href=&quot;http://sites.google.com/site/fornaxsculptor/&quot;&gt;Sculptor&lt;/a&gt;, which is an open-source framework/code generator based on textual DSLs implemented in Xtext.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The event is also free of charge. &lt;a href=&quot;http://jwsdsl09sep.eventbrite.com/&quot;&gt;Register here.&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/24248206-3356067999977317003?l=blog.efftinge.de&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Thu, 26 Aug 2010 21:03:13 +0000</pubDate>
	<author>noreply@blogger.com (Sven Efftinge)</author>
</item>
<item>
	<title>Blaise Doughan: EclipseLink 2.1.1 Patch Set Released</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-1710464868724994296.post-2079568165401506684</guid>
	<link>http://bdoughan.blogspot.com/2010/08/eclipselink-211-released.html</link>
	<description>&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;The first patch set for the EclipseLink 2.1 stream is now available.  EclipseLink 2.1.1 can be downloaded here:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;a href=&quot;http://www.eclipse.org/eclipselink/downloads/&quot;&gt;http://www.eclipse.org/eclipselink/downloads/&lt;/a&gt; &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;The following XML binding layer bugs were fixed:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;a href=&quot;https://bugs.eclipse.org/bugs/buglist.cgi?query_format=advanced;bug_status=RESOLVED;bug_status=VERIFIED;component=MOXy;classification=RT;product=EclipseLink;target_milestone=2.1.1&quot;&gt;MOXy Bug Fixes&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;&lt;a href=&quot;https://bugs.eclipse.org/bugs/buglist.cgi?query_format=advanced;bug_status=RESOLVED;bug_status=VERIFIED;component=SDO;classification=RT;product=EclipseLink;target_milestone=2.1.1&quot;&gt;SDO Bug Fixes&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;&lt;strong&gt;Notable Bugs Fixed&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;&lt;a href=&quot;https://bugs.eclipse.org/316014&quot;&gt;&lt;strong&gt;&lt;em&gt;Bug 316014&lt;/em&gt;&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&lt;em&gt; - Tweak MOXy's XMLStreamWriterRecord to work with Jettison's JSON/StAX support &lt;/em&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;With this fix you can use MOXy in Jersey to produce both XML and JSON messages, simply annotate your JAX-RS methods like:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;brush: java; toolbar: false; highlight: [3]&quot;&gt;@GET&lt;br /&gt;@Path(&quot;{id}&quot;)&lt;br /&gt;@Produces({&quot;application/xml&quot;, &quot;application/json&quot;})&lt;br /&gt;public Customer read(@PathParam(&quot;id&quot;) KeyType id) {&lt;br /&gt;    return entityManager.find(Customer.class, id);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;&lt;a href=&quot;https://bugs.eclipse.org/320513&quot;&gt;&lt;strong&gt;&lt;em&gt;Bug 320513&lt;/em&gt;&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&lt;em&gt; - Interfaces unneccessarily excluded from annotation processing&lt;/em&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;This fix enables you to map to interfaces as well as classes.  For an example check out the following:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;a href=&quot;http://bdoughan.blogspot.com/2010/07/moxy-jaxb-map-interfaces-to-xml.html&quot;&gt;MOXy JAXB - Map Interfaces to XML&lt;/a&gt; &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;&lt;a href=&quot;https://bugs.eclipse.org/317334&quot;&gt;&lt;strong&gt;&lt;em&gt;Bug 317334&lt;/em&gt;&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&lt;em&gt; - Dynamic JAXB - Problem with List Properties &lt;/em&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;In EclipseLink 2.1 we added a new feature &quot;Dynamic JAXB&quot;.  Dynamic JAXB allows you to interact with XML using generic objects instead of classes.  In this patch set we have addressed some issues specifically related to collection properties.  For more information see:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://wiki.eclipse.org/EclipseLink/Examples/MOXy/Dynamic&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;http://wiki.eclipse.org/EclipseLink/Examples/MOXy/Dynamic&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/1710464868724994296-2079568165401506684?l=bdoughan.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Thu, 26 Aug 2010 19:06:01 +0000</pubDate>
	<author>noreply@blogger.com (Blaise Doughan)</author>
</item>
<item>
	<title>Blaise Doughan: Using @XmlAnyElement to Build a Generic Message</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-1710464868724994296.post-3095025438031114511</guid>
	<link>http://bdoughan.blogspot.com/2010/08/using-xmlanyelement-to-build-generic.html</link>
	<description>&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;In this post we are building our own XML messaging framework.  We want to have a standard message object (similar to a SOAP envelope) that the framework can understand, and the ability to easily add domain specific payloads over time.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;strong&gt;Message Object&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Our message object needs to represent 3 things:&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;Who the message is from.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;Who the message is to.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;The body of the message.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;The first 2 items are easy enough to do, the 3rd is harder because we don't know what the payload of the message is going to be.  We will handle this by setting the type of the property to Object, and using the @XmlAnyElement annotation.  What this means is that when dealing with this property the @XmlRootElement of the referenced object will be used.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;brush: java; toolbar: false; highlight: [15]&quot;&gt;package message;&lt;br /&gt;&lt;br /&gt;import javax.xml.bind.annotation.*;&lt;br /&gt;&lt;br /&gt;@XmlRootElement&lt;br /&gt;@XmlAccessorType(XmlAccessType.FIELD)&lt;br /&gt;public class Message {&lt;br /&gt;&lt;br /&gt;    @XmlAttribute&lt;br /&gt;    private String to;&lt;br /&gt;&lt;br /&gt;    @XmlAttribute&lt;br /&gt;    private String from;&lt;br /&gt;&lt;br /&gt;    @XmlAnyElement&lt;br /&gt;    private Object body;&lt;br /&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;div class=&quot;brush: java; toolbar: false; highlight: [15]&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;strong&gt;Customer Payload&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;The Customer class will be the root type for the body of the message when the payload corresponds to customer information, so we need to annotate it as @XmlRootElement.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;brush: java; toolbar: false; highlight: [5]&quot;&gt;package customer;&lt;br /&gt;&lt;br /&gt;import javax.xml.bind.annotation.*;&lt;br /&gt;&lt;br /&gt;@XmlRootElement&lt;br /&gt;@XmlAccessorType(XmlAccessType.FIELD)&lt;br /&gt;public class Customer {&lt;br /&gt;&lt;br /&gt;    private String name;&lt;br /&gt;    private Address address;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre class=&quot;brush: java; toolbar: false&quot;&gt;package customer;&lt;br /&gt;&lt;br /&gt;import javax.xml.bind.annotation.*;&lt;br /&gt;&lt;br /&gt;@XmlAccessorType(XmlAccessType.FIELD)&lt;br /&gt;public class Address {&lt;br /&gt;&lt;br /&gt;    private String street;&lt;br /&gt;    private String city;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;strong&gt;Product Payload&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;The Product class will be the root type for the body of the message when the payload corresponds to product information, so we need to annotate it with @XmlRootElement.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;brush: java; toolbar: false; highlight: [5]&quot;&gt;package product;&lt;br /&gt;&lt;br /&gt;import javax.xml.bind.annotation.*;&lt;br /&gt;&lt;br /&gt;@XmlRootElement&lt;br /&gt;@XmlAccessorType(XmlAccessType.FIELD)&lt;br /&gt;public class Product {&lt;br /&gt;&lt;br /&gt;    private String name;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class=&quot;brush: java; toolbar: false; highlight: [5]&quot;&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;strong&gt;Creating the JAXBContext&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;brush: java; toolbar: false; highlight: [5]&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;brush: java; toolbar: false; highlight: [5]&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;We could create the JAXBContext on an array of classes, but our goal is to be able to easily add additional payloads over time.  Here we will create the JAXBContext using a context path:&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;brush: java; toolbar: false; highlight: [5]&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;pre class=&quot;brush: java; toolbar: false&quot;&gt;JAXBContext.newInstance(&quot;message:customer:product&quot;);&lt;/pre&gt;&lt;div class=&quot;brush: java; toolbar: false&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;brush: java; toolbar: false&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;The context path includes 3 package names seperated by the colon ':' character.  In each of these packages we need to include a file named jaxb.index with a list of files.  Below is an example of the jaxb.index file in the customer package:&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;pre class=&quot;brush: java; toolbar:false&quot;&gt;Address&lt;br /&gt;Customer&lt;br /&gt;&lt;/pre&gt;&lt;div class=&quot;brush: java; toolbar:false&quot;&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;When we want to add a model to represent orders to our framework we would extend our JAXBContext creation to like:&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;brush: java; toolbar:false&quot;&gt;&lt;/div&gt;&lt;pre class=&quot;brush: java; toolbar: false&quot;&gt;JAXBContext.newInstance(&quot;message:customer:product:order&quot;);&lt;/pre&gt;&lt;div class=&quot;brush: java; toolbar: false&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;brush: java; toolbar: false&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;brush: java; toolbar: false&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;strong&gt;Trying it Out&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;brush: java; toolbar: false&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;brush: java; toolbar: false&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Finally, we can verify that our example works with the following message.  The body of the message corresponds to a customer payload. &lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;brush: java; toolbar: false&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;pre&gt;&amp;lt;message to=&quot;john@example.com&quot; from=&quot;jane@example.com&quot;&amp;gt;&lt;br /&gt;    &amp;lt;customer&amp;gt;&lt;br /&gt;        &amp;lt;name&amp;gt;Sue Smith&amp;lt;/name&amp;gt;&lt;br /&gt;        &amp;lt;address&amp;gt;&lt;br /&gt;            &amp;lt;street&amp;gt;123 A Street&amp;lt;/street&amp;gt;&lt;br /&gt;            &amp;lt;city&amp;gt;Any Town&amp;lt;/city&amp;gt;&lt;br /&gt;        &amp;lt;/address&amp;gt;&lt;br /&gt;    &amp;lt;/customer&amp;gt;&lt;br /&gt;&amp;lt;/message&amp;gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Below is some sample code to handle this message.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre class=&quot;brush: java; toolbar: false&quot;&gt;import java.io.File;&lt;br /&gt;import javax.xml.bind.*;&lt;br /&gt;import message.Message;&lt;br /&gt;&lt;br /&gt;public class Demo {&lt;br /&gt;&lt;br /&gt;    public static void main(String[] args) throws Exception {&lt;br /&gt;        JAXBContext jc = JAXBContext.newInstance(&quot;message:customer:product&quot;);&lt;br /&gt;&lt;br /&gt;        Unmarshaller unmarshaller = jc.createUnmarshaller();&lt;br /&gt;        File file = new File(&quot;input.xml&quot;);&lt;br /&gt;        Message message = (Message) unmarshaller.unmarshal(file);&lt;br /&gt;&lt;br /&gt;        Marshaller marshaller = jc.createMarshaller();&lt;br /&gt;        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);&lt;br /&gt;        marshaller.marshal(message, System.out);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/1710464868724994296-3095025438031114511?l=bdoughan.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Thu, 26 Aug 2010 18:42:29 +0000</pubDate>
	<author>noreply@blogger.com (Blaise Doughan)</author>
</item>
<item>
	<title>Bob Balfe: Poll: Do you or your customers develop or use applications on salesforce.com?</title>
	<guid isPermaLink="true">http://blog.balfes.net/?p=1598</guid>
	<link>http://blog.balfes.net/?p=1598</link>
	<description>&lt;p&gt;I have been checking out developer.force.com this week and it is a pretty extensive cloud based solution for developing, deploying, and using applications in the cloud.  I checked out their Eclipse based development videos and the development environment looks pretty comprehensive.  I would like to hear if anyone who reads this blog has any real experiences they would like to share about it.  I am also interested to hear how many of my readers have real exposure to SalesForce.com.&lt;/p&gt;
&lt;p&gt;If you use SalesForce.com in any manner, application use, develop for, deploy on, integrate with or any of the above please take some time to post your answer below and possibly a comment on your experiences.&lt;/p&gt;
&lt;p&gt;If you are a Lotus customer I would like to hear how you integrate your XPages, Domino or Notes applications with SalesForce.com.&lt;/p&gt;
&lt;p&gt;Thanks in advance!&lt;/p&gt;
Note: There is a poll embedded within this post, please visit the site to participate in this post's poll.</description>
	<pubDate>Thu, 26 Aug 2010 12:30:25 +0000</pubDate>
</item>
<item>
	<title>Holger Voormann: An Inconvenient Process</title>
	<guid isPermaLink="false">http://eclipsehowl.wordpress.com/?p=513</guid>
	<link>http://eclipsehowl.wordpress.com/2010/08/26/an-inconvenient-process/</link>
	<description>&lt;p&gt;Today I vetoed the nomination of five potential committers. This is something I really disliked and hated doing but I believe I had to: all five nominated persons have reported a few bugs but have not (yet) contributed a single patch. They have been nominated because the company they work for is going to contribute &lt;a href=&quot;http://wiki.eclipse.org/WTP/Service_Interface_and_Data_Types_Editors/Proposal&quot;&gt;a cool feature to the WTP Incubator&lt;/a&gt; project and these people are supposed to maintain the code. Unfortunately, the contribution is still outstanding and the code is not yet Open Source.&lt;/p&gt;
&lt;p&gt;What do you think? Should the Eclipse Process be changed so that everyone who likes to contribute and signs the &lt;a href=&quot;http://www.eclipse.org/legal/EclipseMemberCommitterAgreementFinal.pdf&quot;&gt;Member Committer Agreement&lt;/a&gt; automatically becomes a committer? We have &lt;del datetime=&quot;2010-08-30T19:19:33+00:00&quot;&gt;fewer than 500&lt;/del&gt; about 1,000 [see Wayne’s comment below] Eclipse committers and probably in every Eclipse project there is a need for more contributors and committers. To lower the hurdle of becoming a committer also means lowering the attractiveness of being one of a select group of Eclipse committers and this may have the opposite effect: less instead of more active committers.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; After the code had been made public as an attachment in Eclipse Bugzilla I restarted the nomination. The code really looks good and I’m happy that WTP Incubator will grow by an interesting feature and by five committers who deserve this status. Looking back, I think that when a nomination comes along with a contribution we should always demand that the contribution is made public before or at the very beginning of the nomination process (if it is not already Open Source). Unlike me, you should not only ask for it but also veto as soon as possible so that it is clear that this has to be fixed before the nomination ends (you can then change your vote from -1 to +1 or 0).&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/eclipsehowl.wordpress.com/513/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/eclipsehowl.wordpress.com/513/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/eclipsehowl.wordpress.com/513/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/eclipsehowl.wordpress.com/513/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gofacebook/eclipsehowl.wordpress.com/513/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/eclipsehowl.wordpress.com/513/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gotwitter/eclipsehowl.wordpress.com/513/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/eclipsehowl.wordpress.com/513/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/eclipsehowl.wordpress.com/513/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/eclipsehowl.wordpress.com/513/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/eclipsehowl.wordpress.com/513/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/eclipsehowl.wordpress.com/513/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/eclipsehowl.wordpress.com/513/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/eclipsehowl.wordpress.com/513/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://stats.wordpress.com/b.gif?host=eclipsehowl.wordpress.com&amp;amp;blog=11064764&amp;amp;post=513&amp;amp;subd=eclipsehowl&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Thu, 26 Aug 2010 12:10:34 +0000</pubDate>
</item>
<item>
	<title>Lars Vogel: Local Mylyn tasks distributed via git</title>
	<guid isPermaLink="false">http://www.vogella.de/blog/?p=3072</guid>
	<link>http://www.vogella.de/blog/2010/08/26/local-mylyn-tasks-distributed/</link>
	<description>&lt;div style=&quot;float: right; width: 42px; padding-right: 10px; margin: 0 0 0 10px;&quot;&gt;
		
		&lt;/div&gt;&lt;p&gt;I learned from &lt;a href=&quot;http://steffenpingel.de/&quot;&gt;Steffen Pingel&lt;/a&gt; and &lt;a href=&quot;http://ekkescorner.wordpress.com/&quot;&gt;Ekkehard Gentz&lt;/a&gt; that &lt;a href=&quot;http://www.vogella.de/articles/Mylyn/article.html&quot;&gt;Mylyn&lt;/a&gt; has the ability to save local tasks outside the workspace. This is hidden under advanced in the Preferences.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.vogella.de/blog/wp-content/uploads/2010/08/20.08-1.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;aligncenter size-full wp-image-3074&quot; height=&quot;669&quot; src=&quot;http://www.vogella.de/blog/wp-content/uploads/2010/08/20.08-1.png&quot; width=&quot;634&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This allows you to put your local tasks outside your workspace and versionize them with &lt;a href=&quot;http://www.vogella.de/articles/Git/article.html&quot;&gt;git&lt;/a&gt;. This way you can use git to move your local tasks between machines. I really like this as I frequently use different machines and now I can not only share source code betwee them but also my mylyn taslks.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.vogella.de/blog/wp-content/uploads/2010/08/20.08.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;aligncenter size-full wp-image-3076&quot; height=&quot;205&quot; src=&quot;http://www.vogella.de/blog/wp-content/uploads/2010/08/20.08.png&quot; width=&quot;270&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;As &lt;a href=&quot;http://steffenpingel.de/&quot;&gt;Steffen&lt;/a&gt; told me, simultanous access to the Mylyn tasks might cause task corruption but I don’t think that is an issue for me as Git takes care of conflicts and I do not have two machines writing to the same local file. &lt;/p&gt;
&lt;p&gt;Fun times with Git and Mylyn!&lt;/p&gt;
&lt;div style=&quot;clear: both;&quot;&gt; &lt;/div&gt;</description>
	<pubDate>Thu, 26 Aug 2010 11:46:01 +0000</pubDate>
</item>
<item>
	<title>Ed Burnette: How to build the perfect Android tablet, part 2: A touch of class</title>
	<guid isPermaLink="true">http://www.zdnet.com/blog/burnette/how-to-build-the-perfect-android-tablet-part-2-a-touch-of-class/2066</guid>
	<link>http://www.zdnet.com/blog/burnette/how-to-build-the-perfect-android-tablet-part-2-a-touch-of-class/2066</link>
	<description>&lt;p&gt;&lt;img alt=&quot;&quot; class=&quot;alignnone size-full wp-image-2050&quot; height=&quot;328&quot; src=&quot;http://i.zdnet.com/blogs/perfect_android_tablet.jpg&quot; width=&quot;465&quot; /&gt;&lt;br /&gt;If you could build the perfect Android tablet, what would it look like? That’s the question I asked myself last week when I started this series. The number 1 feature was, well, &lt;a href=&quot;http://www.zdnet.com/blog/burnette/how-to-build-the-perfect-android-tablet-part-1/2049&quot;&gt;you can go read about it yourself&lt;/a&gt; if you missed it. Now it’s time for the second most important feature:&lt;/p&gt;&lt;p&gt;&lt;strong&gt;#2: Capacitive touch screen with smooth 10+ finger multi-touch&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Recently I had the &lt;a href=&quot;http://twitter.com/eburnette/status/20431660139&quot;&gt;distinct&lt;/a&gt; &lt;a href=&quot;http://twitter.com/eburnette/status/20435022102&quot;&gt;displeasure&lt;/a&gt; of &lt;a href=&quot;http://www.laptopmag.com/review/tablets/augen-gentouch78.aspx&quot;&gt;trying out&lt;/a&gt; an el-cheapo &lt;a href=&quot;http://www.engadget.com/2010/07/30/augen-gentouch-78-preview/&quot;&gt;Android tablet from Augen&lt;/a&gt; that came with a resistive screen and, of all things, a stylus. Don’t let anybody fool you. Resistive screens are bad. Very bad. I’m serious about this. I don’t care how cheap they are — you should avoid them at all costs. Do. Not. Buy.&lt;/p&gt;&lt;p&gt;Now that that’s out of the way, let’s talk about multi-touch. For the first couple of years of Android history, Android phones were single-touch. Point, tap, drag, and that was about it. iPhones supported multi-touch gestures like pinch zoom, and Android fans suffered the indignity of having the competition do something better than their baby. Well, at least Android had cut-n-paste, so there.&lt;/p&gt;&lt;p&gt;About the time iPhone finally got cut-n-paste, Android got multi-touch. Sort of. Unfortunately the first implementation on the Nexus One was pretty bad. Aside from jerky low-res registration of finger movements, it often got the coordinates of tracked fingers confused. Partly this was because of limited digitizer hardware used by HTC, and partly this was because of, ahem, idiosyncrasies in the software stack. You can read more about it in my &lt;a href=&quot;http://www.zdnet.com/blog/burnette/how-to-use-multi-touch-in-android-2/1747&quot;&gt;multi-touch series&lt;/a&gt; and in various discussion groups and bug reports.&lt;/p&gt;&lt;p&gt;Anyhoo, newer phones, especially the Droid Sholes and successors from Motorola, included a better digitizer that fixed some, but not all, of the problems. Still, a fundamental issue remains: At its best, all Android devices on the market as I write this are limited to only tracking 2 fingers at once.&lt;/p&gt;&lt;p&gt;So sure, you can do pinch and zoom but you can forget about 3 finger swipes and more elaborate gestures that people have thought up. More importantly, only having 2 fingers rules out a whole class of applications like guitar and piano applications, synth controllers, chorded keyboards, and games that two or more people can play. Especially, say, on a larger screen, like a tablet.&lt;/p&gt;&lt;p&gt;A tablet practically begs for lots of fingers to touch it. I own an iPad, and one of my favorite programs there is called &lt;a href=&quot;http://magicpiano.smule.com/&quot;&gt;Magic Piano&lt;/a&gt; by Sonic Mule. I can use all 10 fingers at once to play any music that I could play on a real piano. Unfortunately, I can’t play a duet with a friend on the same iPad because it maxes out at 10 or 11 fingers. Any more than that, and the touch screen simply doesn’t register the touches.&lt;/p&gt;&lt;p&gt;Are you hearing this, HTC, Motorola, and Notion Ink? Paying attention, Asus and Samsung? To make the perfect tablet, please bring on that silky smooth capacitive goodness with support for *at least* 10 fingers caressing the screen at once, starting at the hardware level and going all the way through the Android software stack. And if you can, make it better than the iPad by supporting more than 10 fingers at once. My fledgling musical career depends on it.&lt;/p&gt;&lt;p&gt;What would you build into *your* perfect Android tablet? Share your thoughts in the comment area below. And check back next week to find out what’s &lt;a href=&quot;http://www.zdnet.com/blog/burnette/how-to-build-the-perfect-android-tablet-part-3-market-watch/2073&quot;&gt;next on my list&lt;/a&gt;.&lt;/p&gt;</description>
	<pubDate>Thu, 26 Aug 2010 03:31:24 +0000</pubDate>
</item>
<item>
	<title>Miles Sabin: Google Summer of Code 2010 @ Scala IDE</title>
	<guid isPermaLink="false">http://www.scala-ide.org/?p=239</guid>
	<link>http://www.scala-ide.org/2010/08/google-summer-of-code-2010/</link>
	<description>&lt;p&gt;&lt;b&gt;UPDATE: an update site including Jin’s GSoC work is now &lt;a href=&quot;http://download.scala-ide.org/&quot;&gt;available&lt;/a&gt;.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;I was lucky enough to be the mentor on a Scala IDE for Eclipse project which was selected for this year’s Google Summer of Code. &lt;a href=&quot;http://www.linkedin.com/in/jinmingjian&quot;&gt;Jin Mingjian&lt;/a&gt; was the student for this project, and it’s been wonderful to work with him over the last few months.&lt;/p&gt;
&lt;p&gt;Jin completed his Doctoral degree at the Institute of Electrical Engineering in the Chinese Academy of Sciences this summer … having to deal with his PhD defence at the same time as the GSoC project was quite a tall order!&lt;/p&gt;
&lt;p&gt;He had this to say about himself and about his project …&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;I have been involved with the Eclipse community for a long time. When I discovered Scala this year, I realized that it was the language that I need. The openness of Scala struck me, as much as the technical merits of the language itself. The Scala IDE community combines two great open source communities and this summer’s GSoC gave me the opportunity to work on it. I like being part of this community. Join us to help to create great Scala tools!&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Now that the GSoC &lt;a href=&quot;http://socghop.appspot.com/document/show/gsoc_program/google/gsoc2010/timeline&quot;&gt;‘pencils down’ date&lt;/a&gt; has arrived, it is time to report to the community about the achievements of my Scala IDE project. The goal of this project is to provide &lt;a href=&quot;http://www.scala-lang.org/gsoc2010&quot;&gt;Advanced Semantic Tools for the Scala IDE for Eclipse&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;First, I am very appreciative for lots of helpful suggestions, advice and encouragement from my mentor Miles Sabin and other guys in the community. Without their help, it would not have been possible to finish this project.&lt;/p&gt;
&lt;p&gt;There is a &lt;a href=&quot;http://www.assembla.com/wiki/show/scala-ide/Google_Summer_of_Code&quot;&gt;wiki page&lt;/a&gt; on the Scala IDE project site which explains some aspects of the features. Let me introduce them by starting with an example code snippet,&lt;/p&gt;
&lt;pre&gt;object String2Int {
  val a = &quot;1&quot;;
  var b: java.lang.String = &quot;3&quot;;
  implicit val somewords = new SomeWords(&quot;yeah!&quot;)

  implicit def string2Int(s: String) = {
    ((s.toInt)+1)
  }

  def main(args:Array[String]) {
    printInt(string2Int(&quot;3&quot;))
    printInt(a+b)
    printIntWithSomeWords(&quot;5&quot;)(new SomeWords(&quot;...&quot;))
    printIntWithSomeWords(2)

    val map = Map( 1 -&amp;gt;&quot;one&quot;,2-&amp;gt;&quot;two&quot;)
  }

  def printInt(a:Int) {
    println(a)
  }

  def printIntWithSomeWords(a: Int)(implicit sw: SomeWords) {
    println(a)
    println(sw.words)
  }

  class SomeWords(val words: String)
}
&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;This code stems from an example in &lt;a href=&quot;http://www.artima.com/shop/programming_in_scala&quot;&gt;Programming in Scala&lt;/a&gt;. But I modified it to be “more implicit”.&lt;/p&gt;
&lt;p&gt;When you open the editor, all the places where implicit conversions and implicit parameters occur (not the implicit definitions themselves) have been highlighted, as follows,&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.scala-ide.org/wp-content/uploads/2010/08/image-01.png&quot;&gt;&lt;img alt=&quot;Implicit visualization&quot; class=&quot;alignleft size-full wp-image-240&quot; height=&quot;459&quot; src=&quot;http://www.scala-ide.org/wp-content/uploads/2010/08/image-01.png&quot; title=&quot;image-01&quot; width=&quot;691&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Perhaps you don’t like the default green squiggly underlines as the visual indicator of implicit occurrences? Then you can customize the highlight style via &lt;i&gt;Windows -&amp;gt; Preferences -&amp;gt; Scala -&amp;gt; Editor -&amp;gt; Syntax Coloring&lt;/i&gt; as follows,&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.scala-ide.org/wp-content/uploads/2010/08/image-02.png&quot;&gt;&lt;img alt=&quot;Preferences&quot; class=&quot;alignleft size-full wp-image-241&quot; height=&quot;332&quot; src=&quot;http://www.scala-ide.org/wp-content/uploads/2010/08/image-02.png&quot; title=&quot;image-02&quot; width=&quot;595&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You can hide the highlighting by clearing the checkboxes and setting the underline style to “none”. In future we will add an enable/disable check box to simplify this process.&lt;/p&gt;
&lt;p&gt;Along with the visual annotation for implicits, we provide automation around the annotation, known in Eclipse terminology as “quick assists”. The default shortcut for quick assist is “Ctrl+1″. The following screenshot shows the quick assist for an implicit conversion,&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.scala-ide.org/wp-content/uploads/2010/08/image-03.png&quot;&gt;&lt;img alt=&quot;Implicit quick assist&quot; class=&quot;alignleft size-full wp-image-242&quot; height=&quot;361&quot; src=&quot;http://www.scala-ide.org/wp-content/uploads/2010/08/image-03.png&quot; title=&quot;image-03&quot; width=&quot;530&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;After applying this quick assist we get the explicit version of above implicit conversion,&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.scala-ide.org/wp-content/uploads/2010/08/image-04.png&quot;&gt;&lt;img alt=&quot;Inline expansion&quot; class=&quot;alignleft size-full wp-image-243&quot; height=&quot;69&quot; src=&quot;http://www.scala-ide.org/wp-content/uploads/2010/08/image-04.png&quot; title=&quot;image-04&quot; width=&quot;284&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The following screenshot shows the quick assist for implicit parameters,&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.scala-ide.org/wp-content/uploads/2010/08/image-05.png&quot;&gt;&lt;img alt=&quot;Implicti parameter quick assist&quot; class=&quot;alignleft size-full wp-image-244&quot; height=&quot;201&quot; src=&quot;http://www.scala-ide.org/wp-content/uploads/2010/08/image-05.png&quot; title=&quot;image-05&quot; width=&quot;580&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;After the applying the quick assist, we see the implicit arguments defined in the scope explicitly inlined as follows,&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.scala-ide.org/wp-content/uploads/2010/08/image-06.png&quot;&gt;&lt;img alt=&quot;After inlining&quot; class=&quot;alignleft size-full wp-image-245&quot; height=&quot;107&quot; src=&quot;http://www.scala-ide.org/wp-content/uploads/2010/08/image-06.png&quot; title=&quot;image-06&quot; width=&quot;348&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;One of Scala’s important features is support for type inference. With type inference we are not forced to write many tedious type decorations. However, Scala is a strongly type language and in some contexts it is better to declare the type explicitly, for example method return types.&lt;/p&gt;
&lt;p&gt;So we have added functionality which provides explicit type completion, activated automatically by typing “:”. The current implementation is limited to val and method definitions for which the type can be inferred.&lt;/p&gt;
&lt;p&gt;The following screenshot shows that I want to add an explicit type for val map. So I type the “:” after the map identifier. Then I get the inferred type quick assist here,&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.scala-ide.org/wp-content/uploads/2010/08/image-07.png&quot;&gt;&lt;img alt=&quot;Inferred type completion&quot; class=&quot;alignleft size-full wp-image-246&quot; height=&quot;56&quot; src=&quot;http://www.scala-ide.org/wp-content/uploads/2010/08/image-07.png&quot; title=&quot;image-07&quot; width=&quot;434&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;When I press Enter, we see the following,&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.scala-ide.org/wp-content/uploads/2010/08/image-08.png&quot;&gt;&lt;img alt=&quot;Inferred type completion after expansion&quot; class=&quot;alignleft size-full wp-image-247&quot; height=&quot;34&quot; src=&quot;http://www.scala-ide.org/wp-content/uploads/2010/08/image-08.png&quot; title=&quot;image-08&quot; width=&quot;629&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Currently the explicit type is a little long. In future we will allow the qualified part to be moved to the import section.&lt;/p&gt;
&lt;p&gt;It is a best practice to add explicit return types for methods (other than for methods which return Unit type). And sometimes you forget to add the “=” when defining a method. This makes the whole method return Unit unfortunately. With our new functionality and that best practice quick assist, you can find and fix this kind of mistake easily. For example, suppose you wanted to add the type for the method by “:” auto-completion. But you find that the proposed type is Unit. Then you will realize that you missed the “=”,&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.scala-ide.org/wp-content/uploads/2010/08/image-09.png&quot;&gt;&lt;img alt=&quot;Inferred return type completion&quot; class=&quot;alignleft size-full wp-image-248&quot; height=&quot;61&quot; src=&quot;http://www.scala-ide.org/wp-content/uploads/2010/08/image-09.png&quot; title=&quot;image-09&quot; width=&quot;357&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Correct it and add the right type again as follows,&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.scala-ide.org/wp-content/uploads/2010/08/image-10.png&quot;&gt;&lt;img alt=&quot;Inferred return type completion after expansion&quot; class=&quot;alignleft size-full wp-image-249&quot; height=&quot;61&quot; src=&quot;http://www.scala-ide.org/wp-content/uploads/2010/08/image-10.png&quot; title=&quot;image-10&quot; width=&quot;477&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Adding explicit types for val and method definition is a piece of cake now. In future we will improve explicit type completion to propose types from the classpath if the exact type cannot be inferred.&lt;/p&gt;
&lt;p&gt;What do you think about these new features? A build/update site of the GSoC branch will be available shortly and any feedback will be appreciated. When the features has been proven stable, we will merge them into the main distribution. Then everyone can try them out!&lt;/p&gt;</description>
	<pubDate>Wed, 25 Aug 2010 19:00:50 +0000</pubDate>
</item>
<item>
	<title>Blaise Doughan: @XmlTransformation - Going Beyond XmlAdapter</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-1710464868724994296.post-4271361533893925657</guid>
	<link>http://bdoughan.blogspot.com/2010/08/xmltransformation-going-beyond.html</link>
	<description>&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;XML Adapter is my favourite JAXB feature, which is why it was the topic of my first post &lt;a href=&quot;http://bdoughan.blogspot.com/2010/07/xmladapter-jaxbs-secret-weapon.html&quot;&gt;XmlAdapter - JAXB's Secret Weapon&lt;/a&gt;.  With it there is no such thing as an unmappable object in JAXB.  However today I came across a use case where the MOXy's transformation mapping was a much better fit.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;&lt;strong&gt;The Use Case&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;The user wanted to map the following XML to objects.  The interesting point is that they wanted to combine the values of the DATE/TIME elements into one java.util.Date object.  &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;brush: xml; toolbar: false; highlight: [2,3,5,6]&quot;&gt;&amp;lt;ELEM_B&amp;gt; &lt;br /&gt;    &amp;lt;B_DATE&amp;gt;20100825&amp;lt;/B_DATE&amp;gt; &lt;br /&gt;    &amp;lt;B_TIME&amp;gt;153000&amp;lt;/B_TIME&amp;gt; &lt;br /&gt;    &amp;lt;NUM&amp;gt;123&amp;lt;/NUM&amp;gt; &lt;br /&gt;    &amp;lt;C_DATE&amp;gt;20100825&amp;lt;/C_DATE&amp;gt; &lt;br /&gt;    &amp;lt;C_TIME&amp;gt;154500&amp;lt;/C_TIME&amp;gt; &lt;br /&gt;&amp;lt;/ELEM_B&amp;gt; &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;XmlAdapter would normally be a good fit here except for the following factors:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;The DATE/TIME pairings are repeated throughout the document, but each time the element names change (e.g.  B_DATE/B_TIME, and C_DATE/C_TIME).&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;Each pairing is missing a grouping element.  This means we would need to adapt the entire ElemB class.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;&lt;strong&gt;The Solution&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;In this case the transformation mapping concept in MOXy will make this use case much easier to map.  Let's look at how this looks:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;brush: java; toolbar: false; highlight: [16,17,18,19,20,21,27,28,29,30,31,32]&quot;&gt;import java.util.Date;&lt;br /&gt;&lt;br /&gt;import javax.xml.bind.annotation.XmlAccessType;&lt;br /&gt;import javax.xml.bind.annotation.XmlAccessorType;&lt;br /&gt;import javax.xml.bind.annotation.XmlElement;&lt;br /&gt;&lt;br /&gt;import org.eclipse.persistence.oxm.annotations.XmlReadTransformer;&lt;br /&gt;import org.eclipse.persistence.oxm.annotations.XmlTransformation;&lt;br /&gt;import org.eclipse.persistence.oxm.annotations.XmlWriteTransformer;&lt;br /&gt;import org.eclipse.persistence.oxm.annotations.XmlWriteTransformers;&lt;br /&gt;&lt;br /&gt;@XmlAccessorType(XmlAccessType.FIELD)&lt;br /&gt;@XmlRootElement(name=&quot;ELEM_B&quot;)&lt;br /&gt;public class ElemB {&lt;br /&gt;&lt;br /&gt;    @XmlTransformation&lt;br /&gt;    @XmlReadTransformer(transformerClass=DateAttributeTransformer.class)&lt;br /&gt;    @XmlWriteTransformers({&lt;br /&gt;        @XmlWriteTransformer(xpath=&quot;B_DATE/text()&quot;, transformerClass=DateFieldTransformer.class),&lt;br /&gt;        @XmlWriteTransformer(xpath=&quot;B_TIME/text()&quot;, transformerClass=TimeFieldTransformer.class),&lt;br /&gt;    })&lt;br /&gt;    private Date bDate;&lt;br /&gt;&lt;br /&gt;    @XmlElement(name=&quot;NUM&quot;)&lt;br /&gt;    private int num;&lt;br /&gt;&lt;br /&gt;    @XmlTransformation&lt;br /&gt;    @XmlReadTransformer(transformerClass=DateAttributeTransformer.class)&lt;br /&gt;    @XmlWriteTransformers({&lt;br /&gt;        @XmlWriteTransformer(xpath=&quot;C_DATE/text()&quot;, transformerClass=DateFieldTransformer.class),&lt;br /&gt;        @XmlWriteTransformer(xpath=&quot;C_TIME/text()&quot;, transformerClass=TimeFieldTransformer.class),&lt;br /&gt;    })&lt;br /&gt;    private Date cDate;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class=&quot;brush: java; toolbar: false; highlight: [15,16,17,18,19,20]&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;strong&gt;XML Read Transformer&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;brush: java; toolbar: false; highlight: [15,16,17,18,19,20]&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;brush: java; toolbar: false; highlight: [15,16,17,18,19,20]&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;An XML read transformer is responsible for constructing the object value from XML.&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;pre class=&quot;brush: java; toolbar: false; highlight: []&quot;&gt;import java.text.ParseException;&lt;br /&gt;import java.text.SimpleDateFormat;&lt;br /&gt;&lt;br /&gt;import org.eclipse.persistence.internal.helper.DatabaseField;&lt;br /&gt;import org.eclipse.persistence.mappings.foundation.AbstractTransformationMapping;&lt;br /&gt;import org.eclipse.persistence.mappings.transformers.AttributeTransformer;&lt;br /&gt;import org.eclipse.persistence.sessions.Record;&lt;br /&gt;import org.eclipse.persistence.sessions.Session;&lt;br /&gt;&lt;br /&gt;public class DateAttributeTransformer implements AttributeTransformer {&lt;br /&gt;&lt;br /&gt;    private AbstractTransformationMapping mapping;&lt;br /&gt;    private SimpleDateFormat yyyyMMddHHmmss = new SimpleDateFormat(&quot;yyyyMMddHHmmss&quot;);&lt;br /&gt;&lt;br /&gt;    public void initialize(AbstractTransformationMapping mapping) {&lt;br /&gt;        this.mapping = mapping;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public Object buildAttributeValue(Record record, Object instance, Session session) {&lt;br /&gt;        try {&lt;br /&gt;            String dateString = null;&lt;br /&gt;            String timeString = null;&lt;br /&gt;            &lt;br /&gt;            for(DatabaseField field : mapping.getFields()) {&lt;br /&gt;                if(field.getName().contains(&quot;DATE&quot;)) {&lt;br /&gt;                    dateString = (String) record.get(field);&lt;br /&gt;                } else {&lt;br /&gt;                    timeString = (String) record.get(field);&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;            return yyyyMMddHHmmss.parseObject(dateString + timeString);&lt;br /&gt;        } catch(ParseException e) {&lt;br /&gt;            throw new RuntimeException(e);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;div class=&quot;brush: java; toolbar: false; highlight: [15,16,17,18,19,20]&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;strong&gt;XML Write Transformer(s)&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;brush: java; toolbar: false; highlight: [15,16,17,18,19,20]&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;brush: java; toolbar: false; highlight: [15,16,17,18,19,20]&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;An XML write transformer is responsible for constructing an XML value from the object.  A transformation mapping may have multiple write transformers.  For this example we will have two.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;The first XML write transformer is responsible for writing out the year, month, and day information in the format yyMMdd.&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;pre class=&quot;brush: java; toolbar: false; highlight: []&quot;&gt;import java.text.SimpleDateFormat;&lt;br /&gt;import java.util.Date;&lt;br /&gt;&lt;br /&gt;import org.eclipse.persistence.mappings.foundation.AbstractTransformationMapping;&lt;br /&gt;import org.eclipse.persistence.mappings.transformers.FieldTransformer;&lt;br /&gt;import org.eclipse.persistence.sessions.Session;&lt;br /&gt;&lt;br /&gt;public class DateFieldTransformer implements FieldTransformer {&lt;br /&gt;&lt;br /&gt;    private AbstractTransformationMapping mapping;&lt;br /&gt;    private SimpleDateFormat yyyyMMdd = new SimpleDateFormat(&quot;yyyyMMdd&quot;);&lt;br /&gt;&lt;br /&gt;    public void initialize(AbstractTransformationMapping mapping) {&lt;br /&gt;        this.mapping = mapping;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public Object buildFieldValue(Object instance, String xPath, Session session) {&lt;br /&gt;        Date date = (Date) mapping.getAttributeValueFromObject(instance);&lt;br /&gt;        return yyyyMMdd.format(date);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;The second XML write transformer is responsible for writing out the hour, minute, and second information in the format HHmmss.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;brush: java; toolbar: false; highlight: []&quot;&gt;import java.text.SimpleDateFormat;&lt;br /&gt;import java.util.Date;&lt;br /&gt;&lt;br /&gt;import org.eclipse.persistence.mappings.foundation.AbstractTransformationMapping;&lt;br /&gt;import org.eclipse.persistence.mappings.transformers.FieldTransformer;&lt;br /&gt;import org.eclipse.persistence.sessions.Session;&lt;br /&gt;&lt;br /&gt;public class TimeFieldTransformer implements FieldTransformer {&lt;br /&gt;&lt;br /&gt;    private AbstractTransformationMapping mapping;&lt;br /&gt;    private SimpleDateFormat HHmmss = new SimpleDateFormat(&quot;HHmmss&quot;);&lt;br /&gt;&lt;br /&gt;    public void initialize(AbstractTransformationMapping mapping) {&lt;br /&gt;        this.mapping = mapping;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public Object buildFieldValue(Object instance, String xPath, Session session) {&lt;br /&gt;        Date date = (Date) mapping.getAttributeValueFromObject(instance);&lt;br /&gt;        return HHmmss.format(date);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;div class=&quot;brush: java; toolbar: false; highlight: []&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;brush: java; toolbar: false; highlight: []&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;strong&gt;jaxb.properties&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;brush: java; toolbar: false; highlight: []&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;brush: java; toolbar: false; highlight: []&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;In order to use the MOXy JAXB implementation you need to add a jaxb.properties file in which your model classes with the following entry:&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;pre&gt;javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory&lt;/pre&gt;&lt;div class=&quot;brush: java; toolbar: false; highlight: []&quot;&gt;&lt;div class=&quot;brush: java; toolbar: false; highlight: []&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;&lt;strong&gt;Demo&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;brush: java; toolbar: false; highlight: []&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;brush: java; toolbar: false; highlight: []&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;The following class can be used to demonstrate the mapping:&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;brush: java; toolbar: false; highlight: []&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;pre class=&quot;brush: java; toolbar: false&quot;&gt;import java.io.File;&lt;br /&gt;&lt;br /&gt;import javax.xml.bind.JAXBContext;&lt;br /&gt;import javax.xml.bind.Marshaller;&lt;br /&gt;import javax.xml.bind.Unmarshaller;&lt;br /&gt;&lt;br /&gt;public class Demo {&lt;br /&gt;&lt;br /&gt;    public static void main(String[] args) throws Exception {&lt;br /&gt;        JAXBContext jc = JAXBContext.newInstance(Root.class);&lt;br /&gt;&lt;br /&gt;        Unmarshaller unmarshaller = jc.createUnmarshaller();&lt;br /&gt;        File xml = new File(&quot;input.xml&quot;);&lt;br /&gt;        ElemB elemB = (ElemB) unmarshaller.unmarshal(xml);&lt;br /&gt;&lt;br /&gt;        Marshaller marshaller = jc.createMarshaller();&lt;br /&gt;        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);&lt;br /&gt;        marshaller.marshal(elemB, System.out);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class=&quot;brush: java; toolbar: false&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;strong&gt;Please Note&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;brush: java; toolbar: false&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;brush: java; toolbar: false&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;For this example I have specified the transformation mapping using the annotations that will be available in the upcoming EclipseLink 2.2 release.  You can try these out today by dowloading one of the nightly builds:&lt;/span&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;div class=&quot;brush: java; toolbar: false&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;&lt;a href=&quot;http://www.eclipse.org/eclipselink/downloads/nightly.php&quot;&gt;http://www.eclipse.org/eclipselink/downloads/nightly.php&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class=&quot;brush: java; toolbar: false&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;Equivalent functionality is available in all released versions of EclipseLink, if you are interested in how to configure it please contact me or leave a comment.&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/1710464868724994296-4271361533893925657?l=bdoughan.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Wed, 25 Aug 2010 18:16:47 +0000</pubDate>
	<author>noreply@blogger.com (Blaise Doughan)</author>
</item>
<item>
	<title>Ed Merks: Taking to the Clouds</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-3879044552984472733.post-4351490535994701078</guid>
	<link>http://ed-merks.blogspot.com/2010/08/taking-to-clouds.html</link>
	<description>I've been working hard these past weeks in my evil secret lair.  Well, maybe not so secret, given that the results are, in true open source fashion, open: &lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=323050&quot;&gt;323050&lt;/a&gt;.   But it's definitely evil: among my tasks this week has been rejecting 6 out of every 7 Eclipse Summit Europe modeling submissions.  I'm sure no one will take it personally and I'll remain ever so popular. Not!  In any case, I'm taking to the clouds today!&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://3.bp.blogspot.com/_rFZqMGOSYY8/THU1jaXep_I/AAAAAAAABpk/wbOzER4p3BY/s1600/FloatPlane.jpg&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5509368601647163378&quot; src=&quot;http://3.bp.blogspot.com/_rFZqMGOSYY8/THU1jaXep_I/AAAAAAAABpk/wbOzER4p3BY/s320/FloatPlane.jpg&quot; style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 260px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;That's right, I'm headed for Google's headquarters, with my brand new passport anxiously awaiting its first stamp of approval.  (Did you know that a trip through the washing machine will launder all evidence of ever having been to the states?)  It's &lt;a href=&quot;http://wiki.eclipse.org/Eclipse_Day_At_Googleplex_2010&quot;&gt;Eclipse Day at the Googleplex&lt;/a&gt; where I'll be unveiling my master plan: world domination for Eclipse Modeling. Resistance is futile.  Expect to be assimilated soon.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3879044552984472733-4351490535994701078?l=ed-merks.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Wed, 25 Aug 2010 15:38:38 +0000</pubDate>
	<author>noreply@blogger.com (Ed Merks)</author>
</item>
<item>
	<title>Eclipse Riena: Who wants closable SubModules?</title>
	<guid isPermaLink="true">http://www.compeople.eu/blog/?p=450</guid>
	<link>http://www.compeople.eu/blog/?p=450</link>
	<description>&lt;p&gt;After working on the Riena framework for nearly a year now, together with some colleagues I am challanged to use Riena to build a small Client Server Application for our team. I never thought what a refreshing eye opener this can be from time to time. It is one thing to sit in your closed framework environment where everything makes total sense, but suddenly sitting on the other side of the table often makes you want more.&lt;/p&gt;
&lt;h5&gt;The requirement&lt;/h5&gt;
&lt;p&gt;So while designing the structure for our application we came across a requirement for Riena: closable SubModules. Until then, only Modules and ModuleGroups were closable via the UI, but as soon as a SubModule was added to the navigation tree it was there until the parent Module was closed or until it was removed programmatically in another way.&lt;/p&gt;
&lt;h5&gt;The ideas&lt;/h5&gt;
&lt;p&gt;The first step was to think about solutions in our own application, so we put a close button on every view that should be closable. Now that was ugly! But it was the fastest way to get the functionality. Okay, now that we had the functionality we had some time to think about solutions that would flowlessly fit into the Riena design:&lt;/p&gt;
&lt;div class=&quot;wp-caption alignright&quot; id=&quot;attachment_466&quot; style=&quot;width: 182px;&quot;&gt;&lt;a href=&quot;http://www.compeople.eu/blog/wp-content/uploads/2010/08/close_navi.png&quot;&gt;&lt;img alt=&quot;close button in navigation&quot; class=&quot;size-full wp-image-466&quot; height=&quot;211&quot; src=&quot;http://www.compeople.eu/blog/wp-content/uploads/2010/08/close_navi.png&quot; title=&quot;close button in navigation&quot; width=&quot;172&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;Idea No. 1&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;1. Put the close button &lt;strong&gt;in the navigation tree&lt;/strong&gt; and let in only show up when the mouse is hovering over the node in the tree. This would have the advantage that it fits into Rienas design quite well, since the close buttons for the Modules are in the navigation as well. But the disadvantage was that we only have limited resources to work on our application and this solution would have taken quite a long time. There had to be an easier way.&lt;/p&gt;
&lt;div class=&quot;wp-caption alignleft&quot; id=&quot;attachment_498&quot; style=&quot;width: 177px;&quot;&gt;&lt;a href=&quot;http://www.compeople.eu/blog/wp-content/uploads/2010/08/close_titlebar.png&quot;&gt;&lt;img alt=&quot;Idea No. 3&quot; class=&quot;size-full wp-image-498&quot; height=&quot;170&quot; src=&quot;http://www.compeople.eu/blog/wp-content/uploads/2010/08/close_titlebar.png&quot; title=&quot;Close button in the title bar&quot; width=&quot;167&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;Idea No. 3&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;2. Put the close button &lt;strong&gt;underneath the title bar&lt;/strong&gt;. This would have been in the top right corner of the SubModuleView. But after some discussion this idea was dropped because it would have been a large change for all existing SubModuleViews now having to share the space with a little button.&lt;/p&gt;
&lt;p&gt;3. Put the close button &lt;strong&gt;in the title bar of the SubModule&lt;/strong&gt;. This is similar to the close buttons in the Microsoft Office Suite, where a second button under the “application close button” closes only the document visible at the time. It isn’t as flawless as Idea No. 1, but very easy to accomplish because the SubModuleTitleBar renderer extends the renderer of all Modules. Yeah, that was nice.&lt;/p&gt;
&lt;h5&gt;The solution&lt;/h5&gt;
&lt;p&gt;As you probably already guessed, solution No. 3 was implemented. All we had to do was to give the SubModuleNode the attribute “closable” and move some code around to make the close button show up in the title bar of the SubModuleView. Perhaps in the future we can also implement solution No. 1 and let the application programmer choose which one to use as we did with the error decoration.&lt;/p&gt;
&lt;p&gt;What do you think? Would you use closable SubModules? Which solution would you have preferred?&lt;/p&gt;</description>
	<pubDate>Wed, 25 Aug 2010 12:18:10 +0000</pubDate>
</item>
<item>
	<title>Ankur Sharma: Headless Build for Beginners - part V</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-5914783.post-4465210355234542417</guid>
	<link>http://blog.ankursharma.org/2010/08/headless-build-for-beginners-part-v.html</link>
	<description>&lt;b&gt;Headless building Update Site&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;There is no easy way to achieve this. There have been some &lt;a href=&quot;http://dev.eclipse.org/newslists/news.eclipse.platform/msg25629.html&quot;&gt;discussions&lt;/a&gt; in past and the &lt;a href=&quot;http://www.eclipse.org/articles/Article-PDE-Automation/automation.html&quot;&gt;Build and Test Automation article&lt;/a&gt; too touched it in brief. But its all hacky. I tried various stuff but the closest I could get was build features and plug-ins using (mentioned in) a site.xml and generating the metadata for them. The site.xml can be placed with them manually but I could not find a way to (automatically) update the site.xml with the feature and plug-ins build qualifiers. (There are always hacks like having a dummy site.xml and do a find-replace in it. Or write a custom ant task that emits XML for ste.xml - none of the hack is very maintainable or scalable)&lt;br /&gt;&lt;br /&gt;After more investigation I realized may be I was trying to solve the wrong problem. We really don't need the update site (not if you are using Eclipse 3.4 or later). A p2 repository is not only easy to generate but is also the recommended way of distributing features and plug-ins.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Headless building a p2 repository&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Now a p2 repo can be generated either from a bunch of features and plug-ins or directly from a product configuration. Both explained in &lt;a href=&quot;http://help.eclipse.org/helios/index.jsp?topic=/org.eclipse.platform.doc.isv/guide/p2_publisher.html&quot;&gt;Eclipse help&lt;/a&gt;. We will here take a product configuration and build a p2 repository for it. The setup will be same as &lt;a href=&quot;http://blog.ankursharma.org/2010/07/headless-build-for-beginners-part-iii.html&quot;&gt;discussed before&lt;/a&gt;. However this time, we will copy all the files from &lt;i&gt;/org.eclipse.pde.build/templates/headless-build&lt;/i&gt; folder to our build configuration folder (&lt;i&gt;build\buildConfiguration&lt;/i&gt;). Thus, the build structure will now looks like this&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;brush:text&quot;&gt;&amp;lt;buildConfigurationDirectory&amp;gt;&lt;br /&gt;       allElements.xml&lt;br /&gt;       build.properties&lt;br /&gt;       customAssembly.xml&lt;br /&gt;       customTargets.xml&lt;br /&gt;&amp;lt;buildDirectory&amp;gt;&lt;br /&gt;       plugins/&lt;br /&gt;              com.example.helloworld&lt;br /&gt;              com.example.product&lt;br /&gt;                     example.product&lt;br /&gt;       features/&lt;br /&gt;              com.example.helloworld.feature&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The current setup will generate the product when build. We now need to add a hook for repository generation. This can be done in &lt;i&gt;customAssembly.xml&lt;/i&gt;. Open it in Eclipse or your favorite text editor and make the following changes in &lt;i&gt;post.gather.bin.parts&lt;/i&gt; target.&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;brush:xml&quot;&gt;&amp;lt;target name=&quot;post.gather.bin.parts&quot;&amp;gt;&lt;br /&gt; &amp;lt;p2.publish.featuresAndBundles&lt;br /&gt;  repository=&quot;file:/${buildDirectory}/repository&quot;&lt;br /&gt;  source=&quot;${buildDirectory}/tmp/${archivePrefix}&quot; &lt;br /&gt;  compress=&quot;true&quot;&lt;br /&gt; &amp;gt;&lt;br /&gt; &amp;lt;/p2.publish.featuresAndBundles&amp;gt;&lt;br /&gt;&amp;lt;/target&amp;gt;       &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Note that &lt;i&gt;p2.publish.featuresAndBundle&lt;/i&gt;s is just of the of ant task that can be used to generate metadata. There are &lt;a href=&quot;http://help.eclipse.org/helios/index.jsp?topic=/org.eclipse.platform.doc.isv/guide/p2_publishingtasks.htm&quot;&gt;more &lt;/a&gt;for different situations. The idea here was more to see how to add custom call in ant scripts.&lt;br /&gt;&lt;br /&gt;Run the build as before&lt;br /&gt;&lt;pre class=&quot;brush:text&quot;&gt;java -jar c:\eclipse\plugins\org.eclipse.equinox.launcher_1.1.0.v20100507.jar -application org.eclipse.ant.core.antRunner -buildfile c:\eclipse\plugins\org.eclipse.pde.build_3.6.0.v20100603\scripts\productBuild\productBuild.xml -Dbuilder=c:\build\buildConfiguration&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;This will create a p2 metadata repository in &lt;i&gt;file:/${buildDirectory}/repository&lt;/i&gt; folder. You can control the location using &lt;i&gt;repository&lt;/i&gt; property.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/5914783-4465210355234542417?l=blog.ankursharma.org&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Wed, 25 Aug 2010 11:30:00 +0000</pubDate>
	<author>sharma.ankur@gmail.com (Ankur Sharma)</author>
</item>
<item>
	<title>Marcel Bruch: Eclipse and Academia - Briding the Gap between Practitioners and Researchers? A project proposal...</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-1479535086136999079.post-5859063408095535052</guid>
	<link>http://code-recommenders.blogspot.com/2010/08/eclipse-and-academia-briding-gap.html</link>
	<description>&lt;span style=&quot;font-size: small;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: small;&quot;&gt;A few months ago Chris started a discussion about &lt;a href=&quot;http://aniszczyk.org/2010/03/11/eclipse-and-academia/&quot;&gt;Eclipse and Academia&lt;/a&gt; and how Eclipse could support research projects to participate in the Eclipse Ecosystem. Furthermore, the upcoming &lt;a href=&quot;http://it-republik.de/jaxenter/eclipse-magazin-ausgaben/&quot;&gt;Eclipse Magazin&lt;/a&gt; will also contribute to this discussion. However, the discussion how Eclipse could help and benefit from research projects is dangling. With this post, I would like to pick pick up Chris' blog post and present an idea how eclipse and research community could get together to create something (I think) very fancy... &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre style=&quot;font-family: inherit;&quot; wrap=&quot;&quot;&gt;In my last posts, I presented our preliminary work on improving IDEs leveraging the hidden knowledge available in example code that uses other APIs (visit &lt;a href=&quot;http://code.google.com/a/eclipselabs.org/p/code-recommenders/&quot;&gt;code-recommenders@eclipselabs&lt;/a&gt; and the &lt;a href=&quot;http://www.stg.tu-darmstadt.de/research/core/&quot;&gt;official project homepage&lt;/a&gt;  for more details). A few weeks ago we wrote down our vision of how future IDEs should work---which you can find and comment below. This post is basically the preprint version of this paper (which got accepted today at the Working Conference &quot;Future of Software Engieering Research&quot;) and we would love to get the &lt;i&gt;&lt;b&gt;your&lt;/b&gt;&lt;/i&gt; feedback to the vision we present here. As said above, we did a lot of work to get where we are today and the question is now: Should we continue to let the visions below come reality? Clearly, this vision will only work with a very vital community around the project - which I think can be found nowhere else than at Eclipse. But how do you feel about that? Just read the vision and tell us about your opinion (yes, I know it's longer than a standard post. Sorry for that but I hope it's worth reading ;-) ).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;font-size: x-large;&quot;&gt;IDE 2.0: Collective Intelligence in Software Development &lt;/span&gt;&lt;/b&gt;&lt;/pre&gt;&lt;div style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size: x-large;&quot;&gt;ABSTRACT &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Today’s Integrated Development Environments (IDEs) only integrate the tools and knowledge of a single user and workstation. This neglects the fact that the way in which we develop and maintain a piece of software and interact with our IDE provides a rich source of information that can help ourselves and other programmers to avoid mistakes in the future, or improve productivity otherwise. We argue that, in the near future, IDEs will undergo a revolution that will significantly change the way in which we develop and maintain software, through integration of collective intelligence, the knowledge of the masses. We describe the concept of an IDE based on collective intelligence and discuss three example instantiations of such IDEs. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-size: x-large;&quot;&gt;1 Introduction&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Under the right circumstances, groups are remarkably intelligent and are often better than the smartest person in them. &lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;div style=&quot;text-align: right;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;– James Surowiecki: Wisdom of the Crowds &lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;During the past decades, software systems have grown significantly in size and complexity, making software development and maintenance an extremely challenging endeavor. Integrated Development Environments (IDEs) greatly facilitate this endeavor by providing a convenient means to browse and manipulate a system’s source code and to obtain helpful documentation on Application Programming Interfaces (APIs). Yet, we argue that there is great space for improvement by exploiting collective intelligence, the knowledge of the masses. &lt;br /&gt;&lt;br /&gt;The leveraging of user data to build intelligent and user-centric web-based systems, commonly summarized as the Web 2.0, is the source of our inspiration. A Web 2.0 site allows its users to interact with each other as contributors to the website’s content, in contrast to websites where users are limited to the passive viewing of information that is provided to them. Web 2.0 examples include web-based communities, web applications, social-networking sites, video-sharing sites, wikis, blogs, mashups, and folksonomies. &lt;br /&gt;&lt;br /&gt;Amazon, for instance, creates recommendations based on purchase behaviors of its customers or finds interesting similar products based on how customers interact with search results. Netflix, a video-on-demand service, features a web application that leverages user ratings on movies to recommend likely interesting movies to other users. These systems have in common that they leverage crowds to continuously improve the quality of their services, either through implicit feedback (e.g., user click-through behaviors), explicit feedback (e.g., ratings for movies) or user-generated content (e.g., product reviews and movie critics). &lt;br /&gt;&lt;br /&gt;Today’s IDEs behave more like traditional “Web 1.0” applications in the way that they do not enable their users to contribute and share their knowledge with others, neither explicitly nor implicitly, and thus hinder themselves to effectively exchange knowledge among developers. What would it mean to bring collective intelligence into software development? Figure &lt;/span&gt;1a&lt;span style=&quot;font-size: small;&quot;&gt; shows the current state of the practice: software developers use IDEs that are “integrated” only in the sense that they integrate all tools necessary to browse, manipulate and build software on a single machine. If a programmer has a question about a particular piece of code, for instance an API, she has to browse the web for solutions—by hand. After she has found the solution and solved her problem, the newly gained knowledge is usually lost. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_HyaSneawrU8/THPjRQd5yrI/AAAAAAAAAnA/Ym75YYN7S6U/s1600/ide2.0.png&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;344&quot; src=&quot;http://4.bp.blogspot.com/_HyaSneawrU8/THPjRQd5yrI/AAAAAAAAAnA/Ym75YYN7S6U/s640/ide2.0.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Figure 1: Our vision: in the future, IDEs will be linked through global knowledge bases &lt;/span&gt;  &lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Figur&lt;/span&gt;e 1b sho&lt;span style=&quot;font-size: small;&quot;&gt;ws our vision of the near future: IDEs will support developers through integration with a global knowledge base. This knowledge base will receive information from implicit and explicit user feedback. By implicit feedback we mean anonymized usage data that the cross-linked IDEs will send to the knowledge base automatically and spontaneously (in the figure, we represent such spontaneous activity through dashed arrows). The knowledge base will also comprise explicit user feedback in the form of user-written documentation, error reports, manuals, etc. In this work, we will show that such data can help, for example, to improve ranking heuristics, or to focus developer activity. &lt;br /&gt;&lt;br /&gt;Crucially, the knowledge base itself is intelligent: it will use novel data-mining techniques to integrate the different sources of information to produce new information that has added value. For instance, if the knowledge base discovers that people who write an equals method in Java often write a hashCode method on the same type at the same time, or do so after a longer debugging session, then the knowledge base may be able to discover the important rule that, in Java, every type that implements equals should also implement hashCode, and that missing this rule likely causes bugs. &lt;br /&gt;&lt;br /&gt;The remainder of this paper is organized as follows. In Sec. 2, we materialize IDE 2.0 by discussing example intelligent IDE services that leverage implicit and explicit user feedback to aid programmers in everyday software-development tasks. We show that not only feedback data itself but in particular derived information, obtained through data mining, has the potential of greatly easing the software-development process as a whole. Moreover, as the data is persisted, it will survive over time, unlike today, where much information gets lost and needs to be re-discovered over and over again. In Sec.3, we materialize IDE 2.0 by drawing parallels between the main characteristics of IDE 2.0 and those of Web 2.0. Finally, Sec. 4 summarizes the paper.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size: small;&quot;&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-size: x-large;&quot;&gt;2 From IDE 1.0 towards IDE 2.0 &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In the following we give three examples of how research in collective intelligence can improve existing IDE services. We split the discussion of each example into three sections. IDE 1.0 sections describe the state-of-the-art in today’s IDEs. Under IDE 1.5, we briefly summarize current research to improve IDE 1.0 services. IDE 2.0 sections discuss how collective intelligence could solve some of the issues of these approaches. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Intelligent Code Completion &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;IDE 1.0:&lt;/b&gt; Code completion is a very popular feature of modern IDEs, a life without which many developers find hard to imagine. One major reason for its popularity is that developers are frequently unaware of what methods they can invoke on a given variable. Here, code completion systems (CCSs) serve as an API browser, allowing developers to browse methods and select the appropriate one from the list of proposals. However, current completions are either computed by rather simplistic reasoning systems or are simply hard-coded. For instance, for method completion, CCSs only consider the receiver’s declared type. This often leads to an overwhelming number of proposals. Triggering code completion on a variable of javax.swing.JButton results in 381 method proposals. Clearly, developers only need a fraction of the proposed methods to make their code work. Code templates are an example for hard-coded proposals. Templates (like the Eclipse SWT Code Templates) serve as shortcuts and documentation for developers. Manual proposal definitions are labor intensive and error prone. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;IDE 1.5:&lt;/b&gt; Researchers have recognized these issues. For instance, approaches exist that analyse client code to learn which methods the clients frequently use in certain contexts, and rearrange method proposals according to this notion of relevance [2]. Tools like XSnippet, Prospector and Parseweb [7 9 10] attempt to solve the issue of hard-coded code templates by also analyzing source code, identifying common patterns in code. Although obviously useful, these systems didn’t made it into current IDEs. We argue that the primary reason for this is the lack of a continuously growing knowledge base. To build reliable models, source-code based approaches require example applications and full knowledge about the execution environment (i.e., classpath, library versions etc.). However, finding a sufficiently large set of example projects is difficult and tedious, and creating models for new frameworks is too time-consuming yet. While such approaches can sufficiently support a few selected APIs, we argue that they do not scale when tens of thousands of APIs should be supported. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;IDE 2.0:&lt;/b&gt; So, how can we build continuously improving code completion systems then? To solve the scalability problem, code completion systems must allow users to share usage information among each other in an anonymized and automated way—from within the developer’s IDE. This continuous data sharing allows recommender systems to learn models for every API that developers actually use. IDEs are very powerful when it comes to extracting information: they have access to information about the execution environment and about user interactions, even with respect to certain APIs. But the new, massive data sets derived from this information pose a challenge. We will likely require new algorithms to find reliable and valuable patterns in this data. Whatever means future code completion systems will use to build better recommendation models, the systems will be based on shared data. It will be the users who provide this data, and it is important to realize that, as the user base grows, the recommendation systems will be able to continuously improve over time, making intelligent completions that are useful for novice developers and experts alike. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Example &amp;amp; Code-Snippet Recommendations &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;&lt;b&gt;IDE 1.0:&lt;/b&gt; Source-code examples appear to be highly useful to developers, whenever the documentation of the API at hand is insufficient [8]. This is evident by the raise of several code search engines (CSEs) over the last few years, like Google Codesearch, Krugle, and Koders, just to name a few. However, current CSEs almost exclusively use standard information-retrieval techniques that were developed for text documents. While source code is text, it also bears important inherent structure. Disregarding this structure causes less effective rankings and misleading code summaries. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;IDE 1.5:&lt;/b&gt; Researchers have presented a number of approaches [3 5 11] that improve certain aspects of CSEs. All these approaches exploit structure, like inheritance relations, method calls, type usages, control flow and more, however they face two severe problems. First, source code provides much more structure than text. Thus, ranking systems have to take into account many more features when building the final ranking for a search query. Consequently, it is hard to derive optimal weights for these features, so that the resulting scoring function will perform as well as possible. Often, a fixed scoring systems will perform &quot;well enough&quot; but not be optimal. Another issue with current CSEs is that they ignore the personal experience of the user who issued the query. Many current web search engines now support “personalized search”, which leverages the personal background and interests of a user to find documents that are likely to be interesting for this user, but not necessarily for others. Current CSEs lack such functionality. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;IDE 2.0:&lt;/b&gt; How can one improve ranking and realize personalized search in CSEs? The key to solving both problems is to leverage implicit user feedback. To solve the manual-weight-tweaking problem of search engines, recent work [4] has shown that leveraging observations of how users interact with the search results can significantly improve the precision of existing search engines. The authors used the information whether or not the user inspects a search result to automatically adjust feature weights. This produces an optimized ranking where all inspected results are listed above those that the user did not investigate. To implement personalized code search engines, one can infer the personal background (or experience) of a developer by the code she has already written. Then, CSEs could first display code examples that are similar to examples previously explored or, on demand, code examples that allow the developer to learn new information. We are certain that IDE services in general, not only those that we discussed, can greatly benefit from leveraging implicit user feedback. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Extended Documentation &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;IDE 1.0:&lt;/b&gt; Software engineers widely accept that documenting software is a tedious job. Especially open-source projects frequently lacks sufficient resources to produce comprehensive documentation. Both Sun and the Eclipse Foundation recently started to address this problem by opening their documentation platforms to their users. Eclipse asks its users to provide and update tutorials at the central Eclipse Wiki. Sun’s “Docweb” allows users to edit Javadoc API documentation, and to provide code examples or cross references to other interesting articles in the web. These tools aim to leverage a Wikipedia-style approach tailored to software documentation. Past experience has shown, however, that such systems often suffer from a lack of user participation. We believe that the primary cause for this lack of participation is the fact that people may not be willing to document APIs which they have no control over, because these APIs may change rapidly at any time: they may be completely outdated in just a few months. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;IDE 1.5:&lt;/b&gt; Recent research therefore addresses the problem from another angle, enriching existing documentation with automatically mined documentation [1 6]. Such approaches identify frequent patterns or interesting relations in code, and generate helpful guidelines from these relations. However, generated documentation may not always be helpful. Like text mining, documentation mining uncovers any relation between code elements, no matter whether or not this relation is useful to consider. The problem is aggravated by the fact that it is sometimes the surprising relations that are the most useful. Another drawback of mining approaches is that they cannot provide rationales for their observations, leaving it up to the developer to make sense of the data. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;IDE 2.0:&lt;/b&gt; How could collective intelligence address the issues mentioned above? The key to a solution is a mixture of explicit user feedback and user-provided content. In the future, we expect generated documentation to be judged by thousands of users, enabling people to evaluate the quality of their services immediately—tool developers and documentation providers alike. Furthermore, we expect collective intelligence to enable us to migrate documentation from older to newer versions more easily. For example, when a new version of an API becomes available, explicit user feedback will make apparent which parts of the documentation remain valid for the newer version and which parts require updating. Explicit user feedback will also allow users to attach rationale to mined documentation, allowing the documentation to not only state that users must follow a certain principle but why. &lt;br /&gt;&lt;br /&gt;These examples are just the tip of the iceberg. We are confident that the software engineering research community will invent many more interesting techniques to generate, judge, and complete documentation. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size: x-large;&quot;&gt;3 From Web 2.0 to IDE 2.0 &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;We have used the analogy to “Web 2.0” to indicate that this new generation of web applications and our view of future IDEs have something in common. In the following, we discuss the similarities between Web 2.0 and IDE 2.0 to make this analogy more concrete. &lt;br /&gt;&lt;br /&gt;In this section, we define a set of principles that we expect successful IDE 2.0 services to follow. Some of the concepts are paraphrased from Tim O’Reilly’s principles for successful Web 2.0, described in his article “What is Web 2.0?”. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;1. The Web as Platform.&lt;/b&gt; The web as platform is the core concept of Web 2.0. In various ways, clients and servers share data over the web. We expect the same to hold for future collaborative IDE 2.0 services. These services rely on client-side usage data and thus, the web is also fundamental to them. A notable difference between IDE 2.0 and Web2.0 is that IDEs offer a much larger spectrum of data and also allow for client-side pre-processing of data like static analysis code analysis. Such pre-processing may even be crucial to allow for proper privacy. Furthermore, one needs to distribute to clients recommendation models that are built on the server-side. Local databases or caches can increase the scalability of these systems; crucial, when dealing with millions of request per day. Whatever the particular technology may be, the web will be the platform for IDE 2.0. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;2. Data is key.&lt;/b&gt; Data is key to any IDE 2.0 service. However, here we fundamentally differ from Tim O’Reilly’s understanding of who owns this data. In Web 2.0, data is the key factor for the success of an application over its competitors. In contrast, we strongly believe in Open Data: all collected data is publicly available. This fosters a vital ecosystem around the concepts of IDE 2.0 and enables sustainable research. Successfully IDE 2.0 services will use both raw data and derived knowledge will facilitate innovation instead of locking in data or users. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;3. Harnessing Collective Intelligence.&lt;/b&gt; Leveraging the wisdom of the crowds is the third fundamental concept of successful Web 2.0 applications—and same holds for IDE 2.0. The examples introduced in the previous section used either user-provided content (like source code, updated documentation or code snippets), implicit feedback (like user click-through data used to improve rankings), or explicit feedback (like ratings for judging the quality of relevance of generated documentation) to build new kind of services. It is important to recognize that, while individuals may be able to build these services, these services cannot unleash their potential without the crowds sharing their knowledge. Only with collective intelligence, IDE services like intelligent code completion, example recommenders or even smart documentation systems become possible. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;4. Rich User Experiences.&lt;/b&gt; The appearance of AJAX gave web applications a new look and feel, bringing web applications much closer to desktop applications than ever before. In the context of IDE 2.0, intelligent, context-sensitive recommender systems will evolve that recommend relevant APIs or documentation where appropriate and help to reduce the clutter in IDEs at the same time. However, providing a rich user experiences is fundamental for users to accept such services. Similar to Google Search, simple and intuitive interfaces seamlessly integrated into existing IDE concepts like code completion, quick fixes etc. are the major key to success. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;5. Lightweight Programming Models.&lt;/b&gt; In web 2.0, mashups (applications that combine several other (web) applications to build new services on top of existing ones) evolved, building new services the application developers never considered. Excellent IDE 2.0 services will encourage others to build their services on top of existing ones by providing public and easy-to-use APIs. Clearly, in the early days we expect such services to be data-driven, i.e., they will leverage the same data for enhancing several aspects of current IDEs or to port existing services to other IDEs. Note that Open Data is necessary to enable such services. However, over time, services will use other services to build what we call IDE mashups. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-size: x-large;&quot;&gt;4 Summary &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The concepts behind Web 2.0 are a great fit for future IDE services and we expect future services to meet at least one if not almost all of these properties. However, the Software Engineering research community has to play a key role in unleashing the full power of the crowds. First, and most importantly, it has to provide an appropriate environment for building and evaluating IDE 2.0 services. Strong partners like the Eclipse Foundation or Sun/Oracle already support and promote such new IDE concepts today, and their help will be crucial to providing access to large user communities in the future. But there is an incentive for these partners: they will profit from new exciter features, making the IDE itself appear very innovative. &lt;br /&gt;&lt;br /&gt;Second, the Software Engineering research community is the connective link between practitioners and researchers in machine learning. Most IDEs only contain instances of rather primitive machine-learning algorithms. It will be our job to identify the problems that developers face in their day-to-day work, to provide appropriate data as input for machine learners, and to evaluate and reintegrate these results into IDEs. Thus, IDE 2.0 research will create new fascinating and challenging applications of machine learning aside the current markets. &lt;br /&gt;&lt;br /&gt;To sum up, IDE 2.0 services have much potential to improve developer productivity and provide a fantastic playground for new algorithms. They bring together several research communities at the same time, to solve a new generation of challenges in software engineering. When tackling the problem now and in a farsighted, IDE 2.0 will be one of the major research areas of the near future. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size: x-large;&quot;&gt;5 References &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;[1]     Marcel Bruch, Mira Mezini, and Martin Monperrus. Improving the quality of framework subclassing directives. InMSR, 2010. &lt;br /&gt;&lt;br /&gt;[2]     Marcel Bruch, Martin Monperrus, and Mira Mezini. Learning from examples to improve code completion systems.In FSE, 2009. &lt;br /&gt;&lt;br /&gt;[3]     Reid Holmes and Gail C. Murphy. Using structural context to recommend source code examples. In ICSE, 2005. &lt;br /&gt;&lt;br /&gt;[4]     Thorsten Joachims. Optimizing search engines using clickthrough data. In KDD, 2002. &lt;br /&gt;&lt;br /&gt;[5]     Erik Linstead, Sushil Bajracharya, Trung Ngo, Paul Rigor, Cristina Lopes, and Pierre Baldi. Sourcerer: mining andsearching internet-scale software repositories. Data Min. Knowl. Discov., 18(2), 2009. &lt;br /&gt;&lt;br /&gt;[6]     Fan Long, Xi Wang, and Yang Cai. Api hyperlinking via structural overlap. In FSE, 2009. &lt;br /&gt;&lt;br /&gt;[7]     David Mandelin, Lin Xu, Rastislav Bodík, and Doug Kimelman. Jungloid mining: helping to navigate the api jungle.In PLDI, 2005. &lt;br /&gt;&lt;br /&gt;[8]     Martin Robillard. What makes apis hard to learn? answers from developers. IEEE Software, 2009. &lt;br /&gt;&lt;br /&gt;[9]     Naiyana Sahavechaphan and Kajal Claypool. Xsnippet: Mining for sample code. In OOPSLA, 2006. &lt;br /&gt;&lt;br /&gt;[10]     Suresh Thummalapenta and Tao Xie. Parseweb: a programmer assistant for reusing open source code on the web.In ASE, 2007. &lt;br /&gt;&lt;br /&gt;[11]     Hao Zhong, Tao Xie, Lu Zhang, Jian Pei, and Hong Mei. Mapo: Mining and recommending api usage patterns. InECOOP, 2009. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size: small;&quot;&gt;(Please note, this list is by far incomplete but a 4 pages limitation requires you to select just a few publications) &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-size: x-large;&quot;&gt;6 Disclaimer ;-)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: small;&quot;&gt;This is a vision of what we want to achieve with the code recommenders project. So far you have seen preliminary versions of&lt;a href=&quot;http://code-recommenders.blogspot.com/2010/05/its-all-about-intelligent-code.html&quot;&gt; intelligent code completion&lt;/a&gt;, &lt;a href=&quot;http://code-recommenders.blogspot.com/2010/03/problem-of-incomplete-javadocs.html&quot;&gt;extendend javadocs&lt;/a&gt;, and &lt;a href=&quot;http://code-recommenders.blogspot.com/2010/07/why-is-google-codesearch-not-google-for.html&quot;&gt;example code search&lt;/a&gt;. In the pipeline is a API misuse detector we will present in a few weeks. However, we are currently starting to make all these tools &quot;ide 2.0-ready&quot; and would propose this project as Eclipse Incubator project. But this project would need your help in many ways to be successful! Thus:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Let us know whether you like the idea and would support this project when becoming an open source / open data Eclipse Project. And even if you would not support it: Tells us what would prevent you from using it. If it is a technical issue I'm sure we can fix it. In other cases we would love to learn what causes &quot;rumbling in the tummy&quot; ;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size: small;&quot;&gt;If you want to learn more about the project drop us a &lt;a href=&quot;mailto:bruch@cs.tu-darmstadt.de&quot;&gt;mail &lt;/a&gt;and/or visit the &lt;a href=&quot;http://www.stg.tu-darmstadt.de/research/core/&quot;&gt;project homepage&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: small;&quot;&gt;All the best,&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Marcel&lt;/span&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/1479535086136999079-5859063408095535052?l=code-recommenders.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Wed, 25 Aug 2010 10:53:37 +0000</pubDate>
	<author>noreply@blogger.com (Marcel Bruch)</author>
</item>
<item>
	<title>Litrik De Roy: Dynamic working sets</title>
	<guid isPermaLink="false">http://www.norio.be/162 at http://www.norio.be</guid>
	<link>http://www.norio.be/blog/2010/08/dynamic-working-sets</link>
	<description>&lt;p&gt;If you have a lot of projects in your Eclipse workspace you should check out the &lt;a href=&quot;http://marketplace.eclipse.org/content/javadude-dynamic-working-sets&quot;&gt;Dynamic Working Sets&lt;/a&gt; plug-in.&lt;/p&gt;
&lt;p&gt;It allows you to define working sets based on a regular expression. If a project name matches the regex it will be included in the working set.&lt;/p&gt;
&lt;p&gt;It sure beats adding new projects to existing working sets all the time. Really handy to keep your workspace organized.&lt;/p&gt;&lt;img height=&quot;1&quot; src=&quot;http://feeds.feedburner.com/~r/norio-eclipse/~4/RUASyPXkcZM&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Wed, 25 Aug 2010 10:28:41 +0000</pubDate>
</item>
<item>
	<title>Sven Efftinge: Parsing Expressions with Xtext</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-24248206.post-15407873014621817</guid>
	<link>http://blog.efftinge.de/2010/08/parsing-expressions-with-xtext.html</link>
	<description>Parsing simple XML-like, structural languages with Xtext is a no-brainer. However, parsing nested expressions is often considered a bit more complicated. This is because they are more complicated due to their recursive nature and also because with Xtext you have to avoid left recursive parser rules. As the underlying parser (generated by Antlr) uses a top-down approach it would recurse endlessly if you had a left recursive grammar.&lt;br /&gt;&lt;br /&gt;Let's have a look at parsing a simple arithmetic expression:&lt;pre&gt;2 + 20 * 2&lt;/pre&gt;If you know EBNF a bit and wouldn't think about avoiding left recursion, operator precedence or associativity, you'ld probably write a grammar like this:&lt;pre&gt;Expression :&lt;br /&gt; Expression '+' Expression |&lt;br /&gt; Expression '-' Expression |&lt;br /&gt; INT;&lt;/pre&gt;This grammar would be left recursive because the parser reads the grammar top down and left to right and would endlessly call the Expression rule without consuming any characters, i.e. altering the underlying state of the parser. While this kind of grammars can be written for bottom-up parsers, you'ld still have to deal with operator precedence in addition. That is define that a multiplication has higher precedence than an addition for example.&lt;br /&gt;&lt;br /&gt;In Xtext you define the precedence implicitly when left-factoring such a grammar. Left-factoring means you get rid of left recursion by applying a certain technique, which I will show in the following.&lt;br /&gt;&lt;br /&gt;So here is a left-factored grammar (not yet working with Xtext) for the expression language above  :&lt;br /&gt;&lt;pre&gt;Addition :&lt;br /&gt; Multiplication ('+' Multiplication)*;&lt;br /&gt;&lt;br /&gt;Multiplication:&lt;br /&gt; NumberLiteral ('*' NumberLiteral)*;&lt;br /&gt;&lt;br /&gt;NumberLiteral:&lt;br /&gt; INT;&lt;/pre&gt;As you can see the main difference is that we have three rules instead of one and if you look a bit closer you see, that there's a certain delegation pattern involved. The rule &lt;span style=&quot;font-style: italic;&quot;&gt;Addition&lt;/span&gt; doesn't call itself but calls &lt;span style=&quot;font-style: italic;&quot;&gt;Multiplication&lt;/span&gt; instead. The operator precedence is defined by the order of delegation. The later the rule is called the higher is its precedence. This is at least the case for the first two rules which are of a left recursive nature (but we've left-factored them now). The last rule is not left recursive which is why you can write them down without applying this pattern.&lt;br /&gt;&lt;br /&gt;We should allow users to explicitly adjust precedence by adding parenthesis, e.g. write something like &lt;span style=&quot;font-style: italic;&quot;&gt;(2 + 20) * 2&lt;/span&gt;.&lt;div&gt;So let's add support for that (note that the grammar is still not working with Xtext):&lt;pre&gt;Addition :&lt;br /&gt; Multiplication ('+' Multiplication)*;&lt;br /&gt;&lt;br /&gt;Multiplication:&lt;br /&gt; Primary ('*' Primary)*;&lt;br /&gt;&lt;br /&gt;Primary :&lt;br /&gt; NumberLiteral |&lt;br /&gt; '(' Addition ')';&lt;br /&gt;&lt;br /&gt;NumberLiteral:&lt;br /&gt; INT;&lt;/pre&gt;So once again: if you have some construct that recurses on the left hand side, you need to put it into the delegation chain according to their operator precedence. The pattern is always the same, the thing that recurses delegates to the rule with the next higher precedence.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Construction of an AST&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now that we know how to avoid left recursion, let's have a look at what the parser produces. In Xtext each rule returns some value. &lt;i&gt;&lt;a href=&quot;http://www.eclipse.org/Xtext/documentation/1_0_0/xtext.html#parser_rules&quot;&gt;Parser rules&lt;/a&gt;&lt;/i&gt; return AST nodes (i.e. &lt;span style=&quot;font-style: italic;&quot;&gt;EObject&lt;/span&gt; instances), &lt;i&gt;&lt;a href=&quot;http://www.eclipse.org/Xtext/documentation/1_0_0/xtext.html#EnumRules&quot;&gt;enum rules&lt;/a&gt;&lt;/i&gt; return enum literals and &lt;i&gt;&lt;a href=&quot;http://www.eclipse.org/Xtext/documentation/1_0_0/xtext.html#datatypeRules&quot;&gt;datatype rules&lt;/a&gt;&lt;/i&gt; as well as &lt;i&gt;&lt;a href=&quot;http://www.eclipse.org/Xtext/documentation/1_0_0/xtext.html#terminalRules&quot;&gt;terminal rules&lt;/a&gt;&lt;/i&gt; return simple values like strings and the like (&lt;i&gt;EDatatype&lt;/i&gt; in EMF jargon).&lt;br /&gt;Xtext can automatically infer whether some rule is a parser rule, i.e. constructs and returns an AST node or if it is a datatype rule. Above's grammars only consisted of datatype rules so all they would produce is a string.&lt;br /&gt;In order to construct an AST we need to add &lt;span style=&quot;font-style: italic;&quot;&gt;Assignments&lt;/span&gt; and &lt;span style=&quot;font-style: italic;&quot;&gt;Actions&lt;/span&gt;. But before we do that we need to talk about return types.&lt;br /&gt;&lt;br /&gt;The return type of a rule can be specified explicitly using the '&lt;i&gt;returns&lt;/i&gt;' keyword but can be inferred if the type's name is the same as the rule's name.&lt;br /&gt;That is&lt;pre&gt;NumberLiteral : … ;&lt;/pre&gt;is a short form of&lt;pre&gt;NumberLiteral returns NumberLiteral : …. ;&lt;/pre&gt;However in the case of the expressions grammar above, the rules all need to return the same type since they are recursive. So in order to make the grammar functional we need to add a common return type explicitly (but the grammar is still missing some bits):&lt;pre&gt;Addition returns Expression:&lt;br /&gt; Multiplication ('+' Multiplication)*;&lt;br /&gt;&lt;br /&gt;Multiplication returns Expression:&lt;br /&gt; Primary ('*' Primary)*;&lt;br /&gt;&lt;br /&gt;Primary returns Expression:&lt;br /&gt; NumberLiteral |&lt;br /&gt; '(' Addition ')';&lt;br /&gt;&lt;br /&gt;NumberLiteral:&lt;br /&gt; INT;&lt;/pre&gt;The AST type inference mechanism of Xtext will infer two types: &lt;span style=&quot;font-style: italic;&quot;&gt;Expression&lt;/span&gt; and &lt;span style=&quot;font-style: italic;&quot;&gt;NumberLiteral&lt;/span&gt;. Now we need to add assignments and Actions in order to store all the important information in the AST and to create reasonable subtypes for the two operations.&lt;br /&gt;&lt;br /&gt;In the following you see the &lt;span style=&quot;font-weight: bold;&quot;&gt;final fully working Xtext grammar&lt;/span&gt;:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Addition returns Expression:&lt;br /&gt; Multiplication ({Addition.left=current} '+' right=Multiplication)*;&lt;br /&gt;&lt;br /&gt;Multiplication returns Expression:&lt;br /&gt; Primary ({Multiplication.left=current} '*' right=Primary)*;&lt;br /&gt;&lt;br /&gt;Primary returns Expression:&lt;br /&gt; NumberLiteral |&lt;br /&gt; '(' Addition ')';&lt;br /&gt;&lt;br /&gt;NumberLiteral:&lt;br /&gt; value=INT;&lt;/pre&gt;Let's go through the grammar as the parser would do it for the expression &lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;&lt;b&gt;( 1 + 20 ) * 2&lt;/b&gt;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: x-small;&quot;&gt;(I'm sure it's pretty hard to follow what's going just by reading this text. Therefore I have prepared a small video where I visualize and explain what is going on. You can find it at the end of this section.)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The parser always starts with the first rule (&lt;i&gt;Addition&lt;/i&gt;). Therein the first element is an unassigned rule call to &lt;i&gt;Multiplication&lt;/i&gt; which in turn calls &lt;i&gt;Primary&lt;/i&gt;. &lt;i&gt;Primary&lt;/i&gt; now has two alternatives. The first on is calling &lt;i&gt;NumberLiteral&lt;/i&gt; which consists only of one assignment  to a feature called 'value' of what the &lt;i&gt;INT&lt;/i&gt; rule returns.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;But as the first token in the expression is an opening parenthesis '&lt;i&gt;(&lt;/i&gt;' the parser will take the second alternative in &lt;i&gt;Primary&lt;/i&gt;, consume the '(' and call the rue &lt;i&gt;Addition&lt;/i&gt;. Now the value '1' is the look ahead token and again &lt;i&gt;Addition&lt;/i&gt; calls &lt;i&gt;Multiplication&lt;/i&gt; and &lt;i&gt;Multiplication&lt;/i&gt; calls &lt;i&gt;Primary&lt;/i&gt;. This time the parser takes the first alternative because '1' was consumed by the &lt;i&gt;INT&lt;/i&gt; rule (which btw. is a reused library terminal rule). &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As soon as the parser hits an assignment it checks whether an AST node for the current rule was already created. If not it will create one based on the return type, which is &lt;i&gt;NumberLiteral&lt;/i&gt;. The Xtext generator will have created an EClass 'NumberLiteral' before which can now be instantiated. That type will also have a property called &lt;i&gt;value&lt;/i&gt; of type Integer, which will get the value '1' set. This is what the Java equivalent would look like:&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: monospace; font-size: 100%;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;white-space: pre; font-size: 13px;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Georgia, serif; font-size: 130%;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;white-space: normal; font-size: 16px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;pre&gt;// value=INT&lt;br /&gt;if (current == null)&lt;br /&gt; current = new NumberLiteral();&lt;br /&gt;current.setValue(ruleINT());&lt;br /&gt;...&lt;/pre&gt;Now that the rule has been completed the created EObject is returned to the calling rule &lt;i&gt;Primary&lt;/i&gt;, which in turn returns the object unchanged to its own caller. Within &lt;i&gt;Multiplication&lt;/i&gt; the call to &lt;i&gt;Primary&lt;/i&gt; has been successfully parsed and returned an instance of &lt;i&gt;NumberLiteral&lt;/i&gt;. The second part of the rule is a so called g&lt;i&gt;roup&lt;/i&gt; (everything within the parenthesis). The asterisk behind the closing parenthesis states that this part can be consumed zero or more times. The first token to consume in this part is the multiplication operator '*'. Unfortunately in the current situation the next token to consume is the plus operator '+', so the group is not consumed at all and the rule returns what they got from the unassigned rule call (the &lt;i&gt;NumberLiteral&lt;/i&gt;) .&lt;br /&gt;&lt;br /&gt;In rule &lt;i&gt;Addition&lt;/i&gt; there's a similar group but this time it expects the correct operator so the parser goes into the group.&lt;br /&gt;The first element in the group is a so called a&lt;i&gt;ction&lt;/i&gt;. As Xtext grammars are highly declarative and bi-directional it is not a good idea to allow arbitrary expression within actions as it is usually the case with other parser generators. Instead we only support two kinds of actions. This one will create a new instance of type &lt;i&gt;Addition&lt;/i&gt; and assign what was the to be returned object to the feature &lt;i&gt;left&lt;/i&gt;. In Java this would have been something like:&lt;pre&gt;// Multiplication rule call&lt;br /&gt;current = ruleMultiplication();&lt;/pre&gt;&lt;pre&gt;// {Addition.left=current}&lt;br /&gt;Addition temp = new Addition();&lt;br /&gt;temp.setLeft(current);&lt;br /&gt;current = temp;&lt;br /&gt;...&lt;/pre&gt;As a result the rule would now return an instance of &lt;i&gt;Addition&lt;/i&gt; which has a &lt;i&gt;NumberLiteral&lt;/i&gt; set to its property &lt;i&gt;left&lt;/i&gt;. Next up the parser consumes the '+' operator. We do not store the operator in the AST because we have an explicit &lt;i&gt;Addition&lt;/i&gt; type, which implicitly contains this information.&lt;br /&gt;The assignment ('right=Multiplication') calls &lt;i&gt;Multiplication&lt;/i&gt; another time and assigns the returned object (a &lt;i&gt;NumberLiteral&lt;/i&gt; of value=20) to the property named &lt;i&gt;right&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;If we now had an additional plus operation '+' (e.g. 1 + 2 + 3) the group would match another time and create another instance of &lt;i&gt;Addition&lt;/i&gt;. But we don't and therefore the rule is completed and returns the created instance of &lt;i&gt;Addition&lt;/i&gt; to its caller which was the second alternative in &lt;i&gt;Primary&lt;/i&gt;. Now the closing parenthesis is matched and consumed and the stack is reduced once more.&lt;br /&gt;&lt;br /&gt;We are now in rule &lt;i&gt;Multiplication&lt;/i&gt; and have the multiplication operator '*' on the look ahead. The parser goes into the group and applies the action. Finally it calls the Primary rule gets another instance of &lt;i&gt;NumberLiteral&lt;/i&gt; (value=2), assigns it as the 'right' operand of the &lt;i&gt;Multiplication&lt;/i&gt; and returns the &lt;i&gt;Multiplication&lt;/i&gt; to &lt;i&gt;Addition&lt;/i&gt; which in turn returns the very same object as there's nothing left to parse.&lt;br /&gt;&lt;br /&gt;The resulting AST looks like this:&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_Ii_da0jTxAY/THI1VxExhTI/AAAAAAAAAPU/VwS7vvE7wuU/s1600/expression_ast.png&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5508523942294422834&quot; src=&quot;http://1.bp.blogspot.com/_Ii_da0jTxAY/THI1VxExhTI/AAAAAAAAAPU/VwS7vvE7wuU/s400/expression_ast.png&quot; style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 400px; height: 209px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;The following video tries to explain what you just have read. The grammar is slightly different, but I'm sure this won't be problem for you ;-).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Associativity&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;There is still one topic I should mention, which is associativity. There is left and right associativity as well as none associativity. In the example we have seen left associativity. Associativity tells the parser how to construct the AST when there are two infix operations with the same precedence. The following example is taken from the corresponding &lt;a href=&quot;http://en.wikipedia.org/wiki/Operator_associativity&quot;&gt;wikipedia entry&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Consider the expression &lt;span style=&quot;font-style: italic;&quot;&gt;a ~ b ~ c&lt;/span&gt;. If the operator ~ has left associativity, this expression would be interpreted as &lt;span style=&quot;font-style: italic;&quot;&gt;(a ~ b) ~ c&lt;/span&gt; and evaluated left-to-right. If the operator has right associativity, the expression would be interpreted as &lt;span style=&quot;font-style: italic;&quot;&gt;a ~ (b ~ c)&lt;/span&gt; and evaluated right-to-left. If the operator is non-associative, the expression might be a syntax error, or it might have some special meaning.&lt;/blockquote&gt;We already know the most important form which is &lt;b&gt;left associativity&lt;/b&gt;:&lt;pre&gt;Addition returns Expression:&lt;br /&gt; Multiplication ({Addition.left=current} '+' right=Multiplication)*;&lt;/pre&gt;&lt;b&gt;Right associativity&lt;/b&gt; is done using the following pattern (note the quantity operator and the call to the rule itself at the end):&lt;pre&gt;Addition returns Expression:&lt;br /&gt; Multiplication ({Addition.left=current} '+' right=Addition)?;&lt;/pre&gt;And if you don't want to allow multiple usages of the same expression in a row (hence &lt;b&gt;non-associativity&lt;/b&gt;) you write:&lt;pre&gt;Addition returns Expression:&lt;br /&gt; Multiplication ({Addition.left=current} '+' right=Multiplication)?;&lt;/pre&gt;Note that sometimes it's better to allow associativity on parser level, but forbid it later using validation, because you can come up with a better error message. Also the whole parsing process won't be interrupted, so your tooling will generally be more forgiving.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;(This post has also been included into the &lt;a href=&quot;http://www.eclipse.org/Xtext/documentation&quot;&gt;Xtext User Guide&lt;/a&gt; since version 1.0.1)&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/24248206-15407873014621817?l=blog.efftinge.de&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Wed, 25 Aug 2010 08:24:23 +0000</pubDate>
	<author>noreply@blogger.com (Sven Efftinge)</author>
</item>
<item>
	<title>Denis Roy: Better (some?) Wifi coverage at ESE</title>
	<guid isPermaLink="false">http://dev.eclipse.org/blogs/eclipsewebmaster/?p=628</guid>
	<link>http://dev.eclipse.org/blogs/eclipsewebmaster/2010/08/24/better-some-wifi-coverage-at-ese/</link>
	<description>&lt;p&gt;I’ve never been to &lt;a href=&quot;http://eclipsesummiteurope.org/&quot;&gt;Eclipse Summit Europe&lt;/a&gt;.  I’m told it’s because there’s not enough beer in Germany to accommodate my lavish consumption.&lt;/p&gt;
&lt;p&gt;Regardless, I’ve started working with the conference organizers towards providing better/more Wifi coverage at the conference in a manner that would resemble what is provided at EclipseCon.&lt;/p&gt;
&lt;p&gt;This is where we play the game of estimating how much Internet bandwidth you’ll use up, double the number, then double it again, and then have our calculations be demonstrably wrong once the conference is in full swing.  But that’s part of the fun!&lt;/p&gt;</description>
	<pubDate>Tue, 24 Aug 2010 19:31:39 +0000</pubDate>
</item>
<item>
	<title>Miles Parker: Making Eclipse More Welcoming</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-1706439134994847071.post-5598398975426521950</guid>
	<link>http://feedproxy.google.com/~r/MetaBeta/~3/VmGC8bn5ZOw/making-eclipse-more-welcoming.html</link>
	<description>From the title you might be thinking I was going to talk about how we can encourage new-comers to get involved with and contribute to Eclipse, blah blah blah. But you'd be wrong. I'm actually going to talk about a thingie that shows up on your install when you first pull off the shiny shrink wrap of an Eclipse RCP / SDK Application / Product / Whatever.. Rather than get into the details -- the Eclipse documentation is quite good (as one hopes it would be!), and there are a number of &lt;a href=&quot;http://www.developer.com/java/ent/article.php/3698021/Eclipse-Tip-Making-a-Good-First-Impression.htm&quot;&gt;nice tutorials&lt;/a&gt; on it -- I'd like to discuss more generally what Eclipse offers, how it fits into the overall picture and discuss how it might be improved. There may be a few useful technical tidbits buried in here somewhere..&lt;br /&gt;&lt;br /&gt;I wrote most of this post back in February but have been too busy with other things to ever get back to it. But &lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=323452&quot;&gt;this bugzilla&lt;/a&gt; I received last night made me think that I wasn't the only one that has had trouble grasping the overall logic of the Eclipse User Assistance system, so I decided to spend the time to resurrect it. I hope it gets a little discussion going.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Drawing Users In&lt;/h3&gt;&lt;br /&gt;I've been thinking a lot about initial user experience lately as I've been getting ready to release more -- for lack of a better description -- consumer-oriented offerings. As much as I'd like to think otherwise, I keep getting corralled back to the view that no matter how well explained and functional P2 provisioning is or becomes a (large majority?) of people will want to click on a button on your website, download the software and run it. They don't care -- and in fact don't want to even know -- about the Swiss Army Knife. They just want the can opener. Maybe later they'll be happy to find out that they can also use it as a screwdriver (but anyway, isn't that what a butter knife is for?), but in the meantime it would be really nice if when they're rooting around in their drawers for it, it is labeled &quot;can opener&quot; in bright letters or better yet has some visual cues that make it look like it might be for opening cans.&lt;br /&gt;&lt;br /&gt;And while some people are like me (and probably you) in that they like to open everything up and experiment, other people like to take the direct route -- they'd like to pull the shrink wrap off of their new can opener box and have a nice little full color tri-folded diagram about how to use the can opener. So, while the rest of us are busy chatting on IRC about the most efficient way to saw the top off of a tomato soup can with a nail file, and writing bug reports requesting that the tooth pick be made out of mahogany rather than plastic (&quot;but mahogany has poor wear characteristics&quot;) they're sitting down for lunch. In the most brilliant marketing phrase out of the most brilliant marketing company of all time, these people are referred to as &quot;the rest of us&quot;, and they really aren't anything like &quot;us&quot;. If by us we mean, &quot;us software developers&quot;. When I'm in the kitchen, I prefer Can Openers too. And I use a Mac because there is a lot of technical noise and clutter I don't want or need to know about either.&lt;br /&gt;&lt;br /&gt;So, how to make a good first impression? How to lead your users into actually using your software? I don't want the results of all of my efforts to be the unused whatsit at the bottom of the drawer of lost gadgets. At the very least, I want users to tell me why my can opener is useless and send it back for a refund. In order to get to that point, I'm going to need them to use it to try to open just one can. And, if they've never seen a can before, along the way I need to let them know that food is stored in it, that they need to go and buy one at the store first (&quot;remember, you'll need to pay for it before leaving..you'll need money for that, which comes from..&quot;), etc.. And that's what I think initial user experience is all about. Not making assumptions about what users do and don't know while accommodating different levels of user interest, experience and curiosity.&lt;br /&gt;&lt;br /&gt;OK, enough technical blah blah blah -- to specifics. One of the many nice things about Eclipse is that it already has an enormous amount of infrastructure supporting User Assistance. And, one of the challenging things about Eclipse -- at least for me -- is that employing that infrastructure is going to involve some fiddly bits and dipping into a lot of different areas.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Help!!&lt;/h3&gt;&lt;br /&gt;You need some! Really. User's like it!&lt;br /&gt;&lt;br /&gt;There are many gaps in the overall Agent Modeling Platform, but the products I'm developing are focussed solely on developing Agent-Based Models and there is a lot to that -- users need to be able to figure out how to use the can opener, but they also need to now why and for what they might want to use one. We're lucky enough to have one Manual for an earlier related tool (written by Damon Centola), so I started with integrating that into the docs for Ascape a related tool I worked on for about ten years prior to moving to the Eclipse platform. That meant a lot of work just trying to parse a manual from Word to Apple Pages to HTML output to &lt;i&gt;readable, well-formatted&lt;/i&gt; HTML output --  and then moved on to write the Help as well as integrate that with other aspects of the system. Then I started in on creating some (pretty extensive and reasonably complete, I think) user documentation including design overviews, user tools, and examples. By the way, it sounds like an obvious point, but it's good to think a lot about how your documentation is organized. The basic documentation outline for the core Eclipse projects is very good, and while the overall design won't fit perfectly for every project, it's a good place to start and following the common outline provides a seamless experience to users as they move from one Eclipse related tool to another.&lt;br /&gt;&lt;br /&gt;The Eclipse TOC editor works quite well for all of this -- there is only one plug-in point to maintain and the maintaining hierarchical structures is easy. Even better, the Eclipse ecosystem now supports some really good tools for creating and most importantly maintaining help content and doing so in a distributed automated way. A number of months back I spent a great deal of time stealing and modifying XText's documentation system. Now we can write all of the AMP documentation in WikiText, launch an ant script, and get all kinds of docs automagically generated. When complete we had nearly two hundred pages of PDF text including the converted Ascape manual, as well as &lt;a href=&quot;http://eclipse.org/amp/documentation/contents/index.html&quot;&gt;online help&lt;/a&gt; and Eclipse integrated help.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Welcome!&lt;/h3&gt;&lt;br /&gt;The next piece is providing a way for users to be guided into actually using these cheat sheets, references and so on. For that, Eclipse has the welcome screen. The welcome screen is a really nice feature of Eclipse that is under-appreciated and a bit under-utilized. Part of that may be that it is surprisingly difficult to get up to speed with how to use it. There are a number of pieces that have to work together -- a theme I'll return to below -- and you have to poke around quite a bit to figure out where the points of integration are with other projects. For example, for my IDE build, I wanted to be able to turn off some help items that my users probably wouldn't need -- like plug-in development samples -- while keeping some they would, like for (the perennially problematic) SVN integration.&lt;img src=&quot;http://eclipse.org/amp/documentation/contents/images/users/WelcomeScreen.png&quot; style=&quot;float: right; margin: 20px;&quot; width=&quot;50%&quot; /&gt;&lt;br /&gt;&lt;br /&gt;What you end up with is really useful -- if users use it. But I've watched a fair number of neophyte users start out with the software from scratch, and what is the first they do when they launch the software? Click on the &quot;close&quot; button to get rid of the this weird view that is blocking the software! That's in large part due to the initial Eclipse start page that had a bunch of cool symbols on it but really, it's actually not at all apparent why it would be at all useful. So the first change to make for an IDE build is to change the style to Slate, which brings up the four or five main categories along with a description of why they might be useful.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Cheat Sheets&lt;/h3&gt;&lt;br /&gt;I'd already spent some time getting up to speed on Cheat Sheets. Cheat Sheets aren't something that I personally use a lot -- they are generally a bit to linear feeling for me -- but I'd probably benefit from doing so, just as I'd probably benefit from reading the damn manuals before blindly diving into implementation! My fellow developer and ABM tool user Ed Mackerrow has been pushing me to use them more as he's found that they work really well for easing people into tools.&lt;br /&gt;&lt;br /&gt;Now that I'm beginning to work with them a bit more, I'm starting to think of cheat sheets as less clingy versions of Wizards -- they walk you through doing something useful, but when you've done it a few times they don't hang around wanting to hold hands with you all of the time. And they're a lot easier to develop than Wizards.&lt;br /&gt;&lt;br /&gt;Generally the cheat sheet authoring process has been really straightforward. If you don't use them and have any kind of product or set of features involving getting people through two or more non-obvious steps, then you really need to try it. (Is there a cheat sheet cheat sheet?)&lt;br /&gt;&lt;br /&gt;But as with the Welcome system, the cheat sheet integration process is not so easy. There are some fiddly bits, things that seem more complex that they need to be. Most of that has to do with just mucking around with configuration stuff. In order to create and maintain a cheat sheets for multiple nested groups, one has to define separate cheat sheets for each sub-group, link those together, and then link those to plugin cheat sheet definitions. At each level, you create and maintain names and IDs. So for one group, we need:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Parent cheat sheet name and id&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Parent cheat sheet file name&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Group name&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Child cheat sheet names&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;i&gt;Plug-in&lt;/i&gt; id, name and client link.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;If you decide to change the name of one cheat sheet, that can can be one file name, three separate files, and seven text entries to maintain! For me this also creates a lot of cognitive dissonance. Coordinating these kinds of artifacts is a common problem in software design, especially within a large pluggable set of tools, but I think it comes up quite a bit in Eclipse infrastructure. I'll pick up on that general theme below. I'll also talk about how I think the user experience could be improved.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Connecting it all Together&lt;/h3&gt;&lt;br /&gt;One of the coolest and least appreciated aspects of bundled documentation is the ability to make the documentation interactive. You can call commands or refer to existing cheat sheets.&lt;br /&gt;&lt;h4&gt;Calling commands from Help&lt;/h4&gt;&lt;br /&gt;&lt;img src=&quot;http://eclipse.org/amp/documentation/contents/images/users/IntegratedModels.png&quot; style=&quot;float: right; margin: 20px;&quot; width=&quot;50%&quot; /&gt;If I'd known how easy this was, I would have done it much earlier. Something else you really should try, as it provides a nice solution that sits between cheat sheets and screenshot oriented tutorials in the suer experience. In my case, I thought it would be neat if user's could actually run example models while reading about them in the Documentation! So, here's how to call code directly from help.&lt;br /&gt;&lt;br /&gt;First you implement a live help action:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;public class ExecuteJavaModelAction implements ILiveHelpAction {&lt;br /&gt;&lt;br /&gt;    String javaPath;&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * Launch the Escap model.&lt;br /&gt;     * &lt;br /&gt;     * @see java.lang.Runnable#run()&lt;br /&gt;     */&lt;br /&gt;    public void run() {&lt;br /&gt;        IPath path = new Path(javaPath);&lt;br /&gt;        EclipseEscapeRunner eclipseRunner = new EclipseEscapeRunner();&lt;br /&gt;        IProject javaProject = ResourcesPlugin.getWorkspace().getRoot().getProject(path.segment(0));&lt;br /&gt;        IPath fullPath = path.removeFirstSegments(1);&lt;br /&gt;        try {&lt;br /&gt;            javaProject.open(null);&lt;br /&gt;            eclipseRunner.open(javaProject, fullPath.toPortableString(), fullPath.lastSegment());&lt;br /&gt;        } catch (CoreException e) {&lt;br /&gt;            throw new RuntimeException(e);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * Define the Java pah to the model node.&lt;br /&gt;     * &lt;br /&gt;     * @param data&lt;br /&gt;     * @see org.eclipse.help.ILiveHelpAction#setInitializationString(java.lang.String)&lt;br /&gt;     */&lt;br /&gt;    public void setInitializationString(String data) {&lt;br /&gt;        javaPath = data;&lt;br /&gt;    }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Here, since I need to refer to a model within a project within the workspace, I need to discover where that workspace and project are. Otherwise the code is very straightforward.Then, we just need to define an embedded javascript to actually execute it:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&amp;lt;a href='javascript:liveAction(&quot;org.eclipse.amp.escape.ide&quot;, &quot;org.eclipse.amp.escape.help.ExecuteJavaModelAction&quot;,&lt;br /&gt; &quot;org.ascape.escape.models.brook/edu.brook.sugarscape.GAS_II_1&quot;)'&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This is covered nicely in the Eclipse help (as one would hope it would be!) though why not have a working example here!&lt;br /&gt;&lt;h4&gt;Calling Cheatsheets from Help&lt;/h4&gt;&lt;br /&gt;It's pretty easy to get to Help from Cheat Sheets, but what about getting from Help to Cheatsheets? It's actually pretty easy though for some reason it was at first opaque to me and isn't actually spelled out in Help anywhere. Instead it's one of those things where you have to put two and two together but it can be difficult to locate where those two twos are to begin with. So here is how it is done:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;Please follow this &amp;lt;a href='javascript:liveAction(&quot;org.eclipse.ui.cheatsheets&quot;, &quot;org.eclipse.ui.cheatsheets.OpenCheatSheetFromHelpAction&quot;,&lt;br /&gt;&quot;org.eclipse.amp.escape.loadProjects&quot;)'&amp;gt;cheatsheet&amp;lt;/a&amp;gt;.&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;But cheat sheets still have some significant usability issues I think -- and like the other issues, they aren't really technical, but have to do with the overall design approach.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Hey, I still can't open this can!&lt;/h3&gt;&lt;br /&gt;Which brings us back to my reason for resurrecting this post. It's that whole can opener thing. The Eclipse user assistance capabilities, especially when compared to what's available on many platforms is quite complete. Overall, the Eclipse toolset and User Experience provides a powerful, world class set of user tools. There have been enormous efforts in improving the User Experience, most especially I think with provisioning -- but I still think we can do better. For example, it's hard to explain exactly why, but somehow the Eclipse User Assistance experience still seems a bit disjointed.&lt;br /&gt;&lt;br /&gt;Part of making the most of the tools is for all of us to (yeah, obvious, right) use them, and that means I think improving the tools for authoring and integrating help so that small teams can get up to speed on them quickly to produce good help. But part of it is being willing to rethink aspects of the user experience. And thinking clearly and in an unbiased way about how all of the different pieces fit together.&lt;br /&gt;&lt;br /&gt;How do we do that? I don't know exactly, but I've observed that one of the biggest challenges to the improvement of Eclipse is this attitude: &quot;We've always done it that way, and it makes sense to me..&quot; Well, of course it makes sense to you, you've been using the tool for five years! Then it's, &quot;Ok but, no one has ever complained about it, they should file a bugzilla&quot;. The last feedback you're going to get is from new users -- they don't know how to use the software, so how likely is it that they're going to know the culture of bug reporting? And so here's the problem with that response: new users don't complain, they just go somewhere else. Or, if they stick around, they quickly learn that that is just the way things are done and its not likely to change, because everyone is used to it. And more than anything else -- which constantly surprises me, knowing how imperfect most software really is -- they figure that they're just missing something that must be obvious to everyone else!&lt;br /&gt;&lt;br /&gt;Which is why I love the Bug that I mentioned at the beginning of the post. Here's a user that didn't get it, and let us know that he didn't get it. Now, I know Scott and he's not a dumb guy. He's actually a &lt;i&gt;really smart&lt;/i&gt; guy -- a Computer Science Ph.D. and just finished a postdoc at Caltech. And he's done a lot of development for ABM tools based on Objective C on OS X. So what's he missing? The issue he is having here is being directed to a cheat sheet from the welcome screen. &lt;img src=&quot;http://eclipse.org/amp/documentation/contents/images/users/CheatSheets.png&quot; style=&quot;float: right; margin: 20px;&quot; width=&quot;30%&quot; /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;The Eclipse developer (me) and platform (us) point of view: &lt;/b&gt; I've put together a great Welcome setup, and even included some sample models. All the user has to do is click on the Samples button, click on the Example Models button and he get's directed through the simple process of downloading and installing some example models from the version control system. Neat, huh?&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Scott's point of view: &lt;/b&gt; I clicked on a button and the window went away and nothing happened.&lt;br /&gt;&lt;br /&gt;Now Scott didn't know that he was being asked to use a cheat sheet. The Welcome screen just tells him that he's going to be able to load some example models. Well, if you've done this before, you know that you're gong to get a cheat sheet and you just need to follow the steps that are layed out for you. Once you know what a cheat sheet is, it's pretty clear what it's for. But what if you've never used one before? Cheat sheets actually open into a small window on the right side of your screen. They're surprisingly easy to miss. Not for you and me, but for a new user. Worse then all of this, loading some of the models (the one's I can't host on Eclipse for licensing reasons) requires SVN, and (as all long-time Eclipse users are only too painfully aware) if you haven't installed Subversion yourself, it won't work, and you won't know why. So even if the Cheat Sheet were obvious it still wouldn't work out of the box. Which means that I need to add something to the cheat sheet that says &quot;First you need to install Subversion..&quot;. Argh! I think it will actually be easier to just move the example models.&lt;br /&gt;&lt;br /&gt;Perhaps you have other User Experience examples to share. It's always a bit difficult to share examples because you end up critiquing a small aspect of work that someone has put a great deal of effort and thought into. But doing so is critical to having a culture of continual improvement. In that spirit, here are a couple of examples I've gleaned from users..&lt;br /&gt;&lt;br /&gt;What's the difference between Help Contents and Dynamic Help? And where does &quot;Search&quot; fit into that? Another one is the Eclipse downloads -- there have been improvements to the download page itself, but I still get questions all the time from users asking me what version of Eclipse they should download. Hey, that's easy, &lt;a href=&quot;http://eclipse.org/downloads/&quot;&gt;right&lt;/a&gt;? OK, for the Eclipse developers out there, we can find anything we need quickly and easily, but please imagine for a minute that you are a new user facing this matrix of choices. Now, there are all kinds of &lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=273930&quot;&gt;good rationales&lt;/a&gt; for not changing things --  (yep) that's the way we've always done it, and conversely the users need to learn to use what we're trying to give them, and -- but I'll go out on a limb and say that user experience trumps pretty much every one of these.&lt;br /&gt;&lt;br /&gt;Perhaps you've got some ideas you'd like to share. Or perhaps I'm making a mountain out of a speed bump on the entrance ramp to the exciting world of Eclipse, but I'll just suggest that before you think &quot;that's obvious&quot; put your self in the mind of a new user. And then ask yourself &quot;is that really obvious, or am I just used to it?&quot;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/1706439134994847071-5598398975426521950?l=milesparker.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;http://feedads.g.doubleclick.net/~a/b8FXw1VWe19EO8VVKvYYmy1PnHE/0/da&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;true&quot; src=&quot;http://feedads.g.doubleclick.net/~a/b8FXw1VWe19EO8VVKvYYmy1PnHE/0/di&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://feedads.g.doubleclick.net/~a/b8FXw1VWe19EO8VVKvYYmy1PnHE/1/da&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;true&quot; src=&quot;http://feedads.g.doubleclick.net/~a/b8FXw1VWe19EO8VVKvYYmy1PnHE/1/di&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img height=&quot;1&quot; src=&quot;http://feeds.feedburner.com/~r/MetaBeta/~4/VmGC8bn5ZOw&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Tue, 24 Aug 2010 19:26:00 +0000</pubDate>
	<author>noreply@blogger.com (Miles Parker)</author>
</item>
<item>
	<title>Bob Balfe: New Attachment viewer with ODF thumbnails and JAR file support</title>
	<guid isPermaLink="true">http://blog.balfes.net/?p=1596</guid>
	<link>http://blog.balfes.net/?p=1596</link>
	<description>&lt;p&gt;As promised in the &lt;a href=&quot;http://blog.balfes.net/?p=1576&quot;&gt;last post&lt;/a&gt;, here is a new updated widget for the attachment viewer.  You can download the latest source files from the &lt;a href=&quot;http://www.openntf.org/internal/home.nsf/release.xsp?action=openDocument&amp;amp;documentId=50D0F49087AA318E86257788006C263E&quot;&gt;OpenNTF project&lt;/a&gt;.  If you want to learn how to install this into Notes 8.5.1 and above check out the &lt;a href=&quot;http://blog.balfes.net/?p=1526&quot;&gt;video I posted&lt;/a&gt; to show how to do that.&lt;/p&gt;
&lt;p&gt;Here is a summary of the support and you can also watch a video &lt;a href=&quot;http://blog.balfes.net/?p=1576&quot;&gt;here&lt;/a&gt; or below:&lt;/p&gt;
&lt;p&gt;- ODF thumbnail support added, .odp, .odt, .docx, .dotx, .docm, .dotm, .xlsx, .xlsm, .xltx, .xltm, .pptx, .pptm, .potx&lt;br /&gt;
- Modified Zip file to limit embedded text files to show only first 20K&lt;br /&gt;
- JAR file support – extended the ZIP provider to include Jar files&lt;br /&gt;
- New Text File support – .mf, .properties&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://blog.balfes.net/sites/atviewer-pub/extension.xml&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;aligncenter size-full wp-image-1451&quot; height=&quot;41&quot; src=&quot;http://blog.balfes.net/wp-content/uploads/2010/07/extension-xml.jpg&quot; title=&quot;extension-xml&quot; width=&quot;121&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span id=&quot;more-1596&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;</description>
	<pubDate>Tue, 24 Aug 2010 12:00:26 +0000</pubDate>
</item>
<item>
	<title>Ankur Sharma: Headless Build for Beginners - part IV</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-5914783.post-2508007688980367675</guid>
	<link>http://blog.ankursharma.org/2010/08/headless-build-for-beginners-part-iv.html</link>
	<description>&lt;div style=&quot;text-align: left;&quot;&gt;&lt;b&gt;Customizing the build&lt;/b&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;Not always we want the build to happen according to the out-of-the-box scripts.In fact, customizations are almost always needed - be it fetching the sources or the way we wish to assemble them. PDE Build provides a set of templates which can be used to hook in the customize (add to and/or override) the default behavior.&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;These templates are available in PDE Build plug-in (inside&lt;i&gt; templates\headless-build&lt;/i&gt; folder of &lt;i&gt;org.eclipse.pde.build_&amp;lt;version&amp;gt;&amp;lt;qualifier&amp;gt;&lt;/i&gt;). The scripts and templates are one the main reason why PDE Build plug-in is a directory and not a jar.&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;The purpose and usage of these templates have been explained nicely in Eclipse help under the topic &lt;a href=&quot;http://help.eclipse.org/helios/index.jsp?topic=/org.eclipse.pde.doc.user/tasks/pde_customization.htm&quot;&gt;Customizing a Headless Build&lt;/a&gt;.&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;These templates are&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;customTargets,xml&lt;/li&gt;&lt;li&gt;allElements.xml&lt;/li&gt;&lt;li&gt;customAssembly.xml&lt;/li&gt;&lt;/ul&gt;&lt;div style=&quot;text-align: left;&quot;&gt;In short, the &lt;i&gt;customTargets.xml&lt;/i&gt; have various pre- and post- ant targets that &lt;i&gt;build.xml&lt;/i&gt; (or &lt;i&gt;productBuild.xml&lt;/i&gt; - in case you are building a product) calls before and after each process (like setup, source fetch, build, assemble, package, etc). Similarly, the targets in &lt;i&gt;allElements.xml&lt;/i&gt; and &lt;i&gt;customAssembly.xml&lt;/i&gt; gets delegated for various jobs.&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;To use these templates we need to copy them in the build configuration directory (&lt;i&gt;c:\build\buildConfiguration&lt;/i&gt; in our example) where we stored build.properties file in previous steps. And then modify the appropriate targets. This is what we will do for building an update site in next step.&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/5914783-2508007688980367675?l=blog.ankursharma.org&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Tue, 24 Aug 2010 11:30:00 +0000</pubDate>
	<author>sharma.ankur@gmail.com (Ankur Sharma)</author>
</item>
<item>
	<title>Neil Bartlett: OSGi Compliance Levels</title>
	<guid isPermaLink="false">http://njbartlett.github.com/2010/08/24/osgi-compliance-levels</guid>
	<link>http://njbartlett.name/2010/08/24/osgi-compliance-levels.html</link>
	<description>&lt;p&gt;Almost every week, I hear about new and existing Java libraries or frameworks becoming “OSGi Compliant”. This makes me happy as it indicates the traction that OSGi is getting as a platform. The only problem is that “OSGi Compliant” could mean almost anything… and therefore it means precisely nothing.&lt;/p&gt;
&lt;p&gt;For example, many libraries can be easily used in OSGi even if they don’t provide an OSGi descriptor (i.e., a &lt;code&gt;MANIFEST.MF&lt;/code&gt; containing &lt;code&gt;Bundle-SymbolicName&lt;/code&gt; etc.), so long as they steer clear of certain problematic coding patterns such as classpath scanning, unconstrained use of &lt;code&gt;Class.forName()&lt;/code&gt; and so on. Such libraries could reasonably be termed “compliant”. But another framework may have been deeply integrated into OSGi so that it can make use of services, receive configuration through Config Admin, and so on.&lt;/p&gt;
&lt;p&gt;It seems that we need a vocabulary that will help us distinguish these two cases, and those in between. We need to define, at least informally, some kind of Beaufort Scale for levels of OSGi compliance (if you’re feeling uncharitable towards OSGi you may prefer to call it a &lt;a href=&quot;http://en.wikipedia.org/wiki/Schmidt_Sting_Pain_Index&quot;&gt;Schmidt Pain Index&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;The purpose of the exercise would certainly not be to admonish authors of libraries that rate near the bottom of the scale, nor to congratulate those at the top. Rather, it would help authors to communicate the depth of their support for OSGi in a more precise way, and it would help the OSGi community communicate to library authors how they can make their products more useful to us.&lt;/p&gt;
&lt;p&gt;To get the ball rolling, here are my initial thoughts. I do this merely to invite feedback rather than to attempt to impose my own classification.&lt;/p&gt;
&lt;table&gt;
	&lt;tbody&gt;&lt;tr&gt;
		&lt;th&gt;Level&lt;/th&gt;
		&lt;th&gt;Name&lt;/th&gt;
		&lt;th&gt;Notes&lt;/th&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;-1&lt;/td&gt;
		&lt;td&gt;Non-compliant.&lt;/td&gt;
		&lt;td class=&quot;p&quot;&gt;Difficult or impossible to use in OSGi. May be possible to use via an adaption layer or patching of the sources or binaries. For example, the library may rely on classpath scanning or invalid assumptions about the classloading hierarchy.&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;0&lt;/td&gt;
		&lt;td&gt;Neutral.&lt;/td&gt;
		&lt;td class=&quot;p&quot;&gt;Ships as a plain (i.e., non-bundle) &lt;span class=&quot;caps&quot;&gt;JAR&lt;/span&gt;, but can be used straightforwardly in OSGi if wrapped as a bundle or added to &lt;code&gt;Bundle-ClassPath&lt;/code&gt;.&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;1&lt;/td&gt;
		&lt;td&gt;Compliant&lt;/td&gt;
		&lt;td class=&quot;p&quot;&gt;Shipped as one or more OSGi bundles with correctly defined &lt;code&gt;MANIFEST.MF&lt;/code&gt;s. All dependencies are also Compliant and either shipped with the library or available separately from a repository. Package versions follow the &lt;a href=&quot;http://www.osgi.org/wiki/uploads/Links/SemanticVersioning.pdf&quot;&gt;Semantic Versioning guidelines&lt;/a&gt; (pdf warning).&lt;/td&gt;
	&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;For many libraries, there is no need to go any higher than level 1. The higher levels are applicable to frameworks, which are more complex and may feature extensibility through plug-ins, custom configuration, logging, etc. Obviously I would like to see &lt;strong&gt;all&lt;/strong&gt; libraries reach at least level 1, but the OSGi community needs to do more to make this easier.&lt;/p&gt;
&lt;table&gt;
	&lt;tbody&gt;&lt;tr&gt;
		&lt;th&gt;Level&lt;/th&gt;
		&lt;th&gt;Name&lt;/th&gt;
		&lt;th&gt;Notes&lt;/th&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;2&lt;/td&gt;
		&lt;td&gt;OSGi-Assisted&lt;/td&gt;
		&lt;td class=&quot;p&quot;&gt;The framework is aware of OSGi, either in its core or via optional modules. Areas of the framework that are open to extensibility can use services for this, in addition to other mechanisms. The framework can cope with service dynamics without restarting the &lt;span class=&quot;caps&quot;&gt;JVM&lt;/span&gt;.&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;3&lt;/td&gt;
		&lt;td&gt;OSGi-Powered&lt;/td&gt;
		&lt;td class=&quot;p&quot;&gt;The framework is based on OSGi. It publishes services that may be used by other parts of our system. Its own services may be replaced by our own service implementations. It takes advantage of standard OSGi services such as Log Service, Config Admin, Event Admin, &lt;span class=&quot;caps&quot;&gt;HTTP&lt;/span&gt; Service. However, despite all this it may still provide a way to run in non-OSGi environments.&lt;/td&gt;
	&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;A key concern for many frameworks as they seek to rise this pyramid is to remain usable outside OSGi, which is a goal I support. There appears to be very little information available on how to develop frameworks that are able to take advantage of OSGi without introducing a hard dependency on it. This is something I hope to remedy in future posts.&lt;/p&gt;
&lt;p&gt;What do you think of this taxonomy? Is it useful, or a waste of time? Should there more levels, or fewer? Please comment below, or link to your own blog.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span class=&quot;caps&quot;&gt;UPDATE&lt;/span&gt;&lt;/b&gt; &lt;a href=&quot;http://tux2323.blogspot.com/2010/08/osgi-bundle-quality-or-bundle.html&quot;&gt;Christian Baranowski blogged&lt;/a&gt; some thoughts about independent verification of bundle compliance. That’s a great idea, but my initial goal is less ambitious, i.e. simply to allow library authors to assert something meaningful about their level of OSGi compliance. I think that is a prerequisite before looking to verify those assertions.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span class=&quot;caps&quot;&gt;UPDATE&lt;/span&gt; 2&lt;/b&gt; BJ makes some excellent points in the comments below, which I entirely agree with. Be sure to scroll down and take a look.&lt;/p&gt;</description>
	<pubDate>Tue, 24 Aug 2010 07:00:00 +0000</pubDate>
</item>
<item>
	<title>Ed Burnette: &quot;I am not a villain,&quot; says alleged Android Trojan creator</title>
	<guid isPermaLink="true">http://www.zdnet.com/blog/burnette/i-am-not-a-villain-says-alleged-android-trojan-creator/2058</guid>
	<link>http://www.zdnet.com/blog/burnette/i-am-not-a-villain-says-alleged-android-trojan-creator/2058</link>
	<description>&lt;p&gt;Max Lifshin, an Android developer living in Russia, says his &lt;a href=&quot;http://www.androlib.com/android.application.net-maxicom-android-snake-jwjAj.aspx&quot;&gt;Tap Snake&lt;/a&gt; program is not a Trojan or virus, despite a &lt;a href=&quot;http://www.symantec.com/connect/blogs/androidostapsnake-watching-your-every-move&quot;&gt;warning from security software maker Symantec&lt;/a&gt; last week. Lifshin has been &lt;a href=&quot;http://www.computerworld.com/s/article/9180844/Update_Android_gaming_app_hides_Trojan_security_vendors_warn?taxonomyId=17&amp;amp;pageNumber=1&quot;&gt;vilified&lt;/a&gt; &lt;a href=&quot;http://phandroid.com/2010/08/18/snake-clone-tap-snake-is-a-trojan-says-symantec/&quot;&gt;in&lt;/a&gt; &lt;a href=&quot;http://news.techworld.com/mobile-wireless/3235936/android-game-tap-snake-hides-trojan-virus/?olo=rss&quot;&gt;the&lt;/a&gt; &lt;a href=&quot;http://www.tgdaily.com/mobility-features/51144-android-tapsnake-trojan-tracks-your-every-move&quot;&gt;press&lt;/a&gt; &lt;a href=&quot;http://www.talkandroid.com/11321-tap-snake-application-is-really-a-trojan/&quot;&gt;for&lt;/a&gt; &lt;a href=&quot;http://techie-buzz.com/mobile-news/android-snake-trojan.html&quot;&gt;releasing&lt;/a&gt; the program, which was intended for parents to track their children’s whereabouts. Reached by ZDNet for comment, Lifshin insisted that his motivations were innocent:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;The app is no more malicious than a motion detection camera - everything depends on the user’s intentions. It gives all the proper warnings and requires a set up, a conscious action, to report location. It can be easily used by mothers worrying about their kids’ whereabouts. In fact, I suspect the majority of users were indeed the mothers.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;For the program to work, the parent or guardian downloads and installs the innocuous looking game on their kid’s phone. During the installation process, Android asks for permission to access location information and to send and receive information to the Internet. After accepting these terms, the parent must open up a menu option and activate the tracking service with a unique key. Then they give the phone back to their child. From that point on, the game will occasionally upload its location to a server, where only somebody with the key can view it. Lifshin says:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;The app is not really very different from Google’s Latitude. As any technology product, it can be put to either noble or malicious ends.&lt;/p&gt;&lt;/blockquote&gt;&lt;p class=&quot;MsoNormal&quot;&gt;The game can be uninstalled at any time. The program run by the parent to view location information isÂ called &lt;a href=&quot;http://www.androlib.com/android.application.net-maxicom-android-gpsspy-jwxCm.aspx&quot;&gt;GPS Spy&lt;/a&gt;. The Market description for GPS Spy openly explained how all this works, saying:&lt;/p&gt;&lt;blockquote&gt;&lt;p class=&quot;MsoNormal&quot;&gt;Download and install the free Tap Snake game from the Market to the phone you want to spy on. Press MENU and register the Snake with the service.Â Use the GPS Spy app on your phone with the same email/code to track the location of the other phone.&lt;/p&gt;&lt;/blockquote&gt;&lt;p class=&quot;MsoNormal&quot;&gt;However, the description of the Tap Snake game did not say anything about tracking, presumably so your child could look up the game for updates or reviews and be none the wiser. Until recently, Tap Snake was a free download and GPS Spy was $4.99. After the news came out, Google removed both apps from the Market. According to Lifshin,&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span&gt;What’s sad is that these “whistle blowers” have prompted Google to suspend the app and thus deprived me of income. They unfairly classified this app as a Trojan andÂ portrayed me as a villain, a malicious Russian developer working in the shadows.&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p class=&quot;MsoNormal&quot;&gt;What do you think: is this a dangerous Trojan or a useful safety device for parents? Was Google right to ban it? Speak up in the Talkback section below.&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;&lt;/p&gt;</description>
	<pubDate>Tue, 24 Aug 2010 00:00:58 +0000</pubDate>
</item>
<item>
	<title>Bob Brodt: LaMiPU (Part 2)</title>
	<guid isPermaLink="false">http://dev.eclipse.org/blogs/bpel/?p=23</guid>
	<link>http://dev.eclipse.org/blogs/bpel/2010/08/23/lamipu-part-2/</link>
	<description>&lt;p&gt;&lt;/p&gt;
&lt;h1 style=&quot;margin-top: 0.17in;&quot;&gt;&lt;span style=&quot;font-family: Liberation Sans,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Any resemblance to real applications, living or dead, is purely coincidental…&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;p style=&quot;margin-bottom: 0in;&quot;&gt;My &lt;a href=&quot;http://dev.eclipse.org/blogs/bpel/2010/08/18/lamipu/&quot;&gt;previous blog&lt;/a&gt;, described a business problem based on a &lt;a href=&quot;http://www.intalio.com/finnair&quot;&gt;case study&lt;/a&gt; by Intalio and one of its business partners. Before I go any further I should probably clarify the purpose of this blog, lest I be sued for misrepresentation.&lt;/p&gt;
&lt;p align=&quot;CENTER&quot; style=&quot;margin-bottom: 0in;&quot;&gt;DISCLAIMER&lt;/p&gt;
&lt;p style=&quot;margin-bottom: 0in;&quot;&gt;The case study and accompanying implementation presented here, while it may make references to actual implementations and case studies published by Intalio and/or its business partners, is entirely my own work and does not in any way intend to represent any actual original work performed by any business entity, anywhere on this planet or any other time/space continuum.&lt;/p&gt;
&lt;p style=&quot;margin-bottom: 0in;&quot;&gt;The reason for this blog is to promote BPEL technology by teaching web service integration concepts based on real-world implementations, using BPEL as the orchestration tool, and &lt;strong&gt;not &lt;/strong&gt;to rip off other people’s work. The actual implementations presented here are based solely on my observations, &lt;a href=&quot;http://www.merriam-webster.com/dictionary/gedankenexperiment&quot;&gt;Gedankenexperiments&lt;/a&gt; and reverse-engineering of these real-world business problems and their solutions.&lt;/p&gt;
&lt;p style=&quot;margin-bottom: 0in;&quot;&gt;I do not claim to be a Subject Matter Expert in the area of airline reservation systems, and the existence of any supporting systems described below is pure speculation on my part (based on life experience, internet searches and just plain &lt;a href=&quot;http://www.urbandictionary.com/define.php?term=pull%20things%20out%20of%20your%20ass&quot;&gt;pulling stuff out of thin air&lt;/a&gt; to suit my needs). The &lt;strong&gt;actual&lt;/strong&gt; availability, behaviour and capabilities of these systems may be much different than postulated here. As stated, the focus is on BPEL and web service orchestration, and any of these supporting services and resources will be “stubbed in” wherever necessary to present a working end-to-end solution.&lt;/p&gt;
&lt;p style=&quot;margin-bottom: 0in;&quot;&gt;There, I think that just about covers it. Now let’s have some fun…&lt;/p&gt;
&lt;h1 style=&quot;margin-top: 0.17in;&quot;&gt;&lt;span style=&quot;font-family: Liberation Sans,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Identifying the Resources&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;p style=&quot;margin-bottom: 0in;&quot;&gt;As mentioned in the first instalment of this series, the primary design goal is to use open source software whenever possible and resort to rolling our own only when necessary. This means that we’re going to use:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p style=&quot;margin-bottom: 0in;&quot;&gt;&lt;a href=&quot;http://eclipse.org/bpel&quot;&gt;Eclipse BPEL Designer&lt;/a&gt; and Eclipse 		IDE&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p style=&quot;margin-bottom: 0in;&quot;&gt;Eclipse WTP&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p style=&quot;margin-bottom: 0in;&quot;&gt;&lt;a href=&quot;http://jboss.org/riftsaw&quot;&gt;Riftsaw&lt;/a&gt; BPEL runtime&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p style=&quot;margin-bottom: 0in;&quot;&gt;Jboss Application Server&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p style=&quot;margin-bottom: 0in;&quot;&gt;some Jboss-compatible WS stack 		(native or CXF)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p style=&quot;margin-bottom: 0in;&quot;&gt;&lt;a href=&quot;http://community.jboss.org/wiki/JBossWS-JAX-WSTools&quot;&gt;JAX-WS&lt;/a&gt; for generating java 		services and clients&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;margin-bottom: 0in;&quot;&gt;To make all of this happen there are quite a few services and database resources that need to participate. At a minimum, we will need the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p style=&quot;margin-bottom: 0in;&quot;&gt;Seat Availability Notification 	System (SANS) - this is the “client” that kicks off the entire 	process, although the Flight Reservation System may already have 	this data available. Starting at one hour before the scheduled 	departure time, this system needs to send messages to the LaMiPU 	process, one for each premium seat still available for that flight. 	Since the response from LaMiPU may take several minutes (depending 	on how long the customer interaction takes), this will have to be an 	async request/response.  LaMiPU will respond with either “accepted” 	or “rejected” indicating whether the customer has accepted or 	rejected the seat upgrade. The process may also respond with a fault 	under certain situations (e.g. if the flight has already departed). 	If “accepted”, the client marks the seat as “occupied”, and 	the seat previously occupied by the passenger (presumably an 	“economy” seat) as available. This economy seat can then be made 	available to stand-by customers, but that’s out of scope for this 	project. Most likely this client is specific to the airline and will 	likely have to be cobbled together from existing resources.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p style=&quot;margin-bottom: 0in;&quot;&gt;Flight Reservation System (FRS) – 	this service returns the passenger list for a given flight. 	Passenger status includes whether or not they have already checked 	in for a flight.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p style=&quot;margin-bottom: 0in;&quot;&gt;Flight Scheduling Service (FSS) – 	this service returns the scheduled departure time for a given 	flight. A quick internet search for web services that already offer 	this functionality turns up quite a few hits, in particular: &lt;a href=&quot;http://flightaware.com/commercial/flightxml/documentation2.rvt&quot;&gt;http://flightaware.com/commercial/flightxml/documentation2.rvt&lt;/a&gt;&lt;a href=&quot;http://flightaware.com/commercial/flightxml/documentation2.rvt&quot;&gt; &lt;/a&gt;Not that our solution will use this service (because I didn’t 	want to be on the hook for subscribtion fees just so I could blog 	about BPEL) but it does provide a blueprint for an existing API that 	we can use. The airline will probably already have their own system, 	or subscribe to one.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p style=&quot;margin-bottom: 0in;&quot;&gt;Frequent Flyers Database (FFDB) – 	this system is used to look up checked-in passengers and find our 	“loyal customers”. Hmm, since we’re going to be using Riftsaw 	which is based on Apache ODE maybe we can take advantage of &lt;a href=&quot;http://ode.apache.org/external-variables-jdbc-mapping.html&quot;&gt;JDBC 	mapping&lt;/a&gt; of BPEL variables. Of course we’ll have to write a BPEL Editor extension to deal with this (another shameless plug for a future blog topic &lt;img alt=&quot;;)&quot; class=&quot;wp-smiley&quot; src=&quot;http://dev.eclipse.org/blogs/bpel/wp-includes/images/smilies/icon_wink.gif&quot; /&gt; )&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p style=&quot;margin-bottom: 0in;&quot;&gt;Credit Card Authorization System 	(CCAS) – used for credit card authorization and billing for 	upgrade fees. There are tons of these available, and the airline 	will have one or more which it uses regularly and which may already 	have a WSDL interface; our system just needs access to those 	services.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p style=&quot;margin-bottom: 0in;&quot;&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Interactive_voice_response&quot;&gt;IVR&lt;/a&gt; System – this 	is the fun stuff &lt;img alt=&quot;:)&quot; class=&quot;wp-smiley&quot; src=&quot;http://dev.eclipse.org/blogs/bpel/wp-includes/images/smilies/icon_smile.gif&quot; /&gt; check out &lt;a href=&quot;http://trixbox.org/&quot;&gt;http://trixbox.org&lt;/a&gt;&lt;a href=&quot;http://trixbox.org/&quot;&gt; &lt;/a&gt;LaMiPU will use IVR for interaction with passengers so we’ll 	write a web service using a top-down approach to building a java 	application. Hopefully we can get the &lt;a href=&quot;http://www.cstr.ed.ac.uk/projects/festival/&quot;&gt;text to speech&lt;/a&gt; feature 	working.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 style=&quot;margin-top: 0.17in;&quot;&gt;&lt;span style=&quot;font-family: Liberation Sans,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;The Work flow&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;p&gt;Here’s the basic sequence of events, disregarding possible failure or exception conditions for the moment:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;SANS client sends messages to LaMiPU, one for each available 	seat&lt;/li&gt;
&lt;li&gt;This message starts a LaMiPU process, using the flight# and 	seat# as the correlation key.&lt;/li&gt;
&lt;li&gt;LaMiPU sends a message to the FSS requesting departure time 	for the given flight#. If it’s too late to get the seat reassignment 	done before departure, LaMiPU replies to SANS with a fault message.&lt;/li&gt;
&lt;li&gt;LaMiPU contacts the FRS to get the list of passengers that 	have already checked in for a given flight.&lt;/li&gt;
&lt;li&gt;For each of the passengers returned in 4 that do &lt;strong&gt;not&lt;/strong&gt; already have a premium seat assignment (business or first class), 	LaMiPU searches the FFDB for those passengers. If the FFDB indicates 	that the passenger has &lt;strong&gt;not&lt;/strong&gt; already received a seat upgrade 	offer for this flight, LaMiPU prepares to contact that passenger 	using the IVRS. If there are no more passengers to contact, a fault 	is returned to the SANS client. NOTE: we could modify this logic a 	bit by offering seat upgrades to regular passengers at a much higher 	premium, but this is outside the scope of this project. Besides, the 	point of this exercise is not to sell out all premium seats but to 	demonstrate as many BPEL features as possible &lt;img alt=&quot;;)&quot; class=&quot;wp-smiley&quot; src=&quot;http://dev.eclipse.org/blogs/bpel/wp-includes/images/smilies/icon_wink.gif&quot; /&gt; &lt;/li&gt;
&lt;li&gt;For the passenger returned by 5, prepare a seat upgrade offer 	message for the IVRS consisting of the passenger’s name, the flight# 	and the price for the upgrade.&lt;/li&gt;
&lt;li&gt;If the passenger accepts the offer, bill his/her credit card 	and notify the FRS of the seat assignment change, wait for a 	response and send a verification message to the customer. Also 	update the FFDB to indicate that the customer has been contacted and 	accepted the seat upgrade. This becomes “interesting” 	information for marketing, and may lead to follow-on work to enhance 	the system ;). Finally, send a message back to the SANS with 	“accepted” status.&lt;/li&gt;
&lt;li&gt;If the passenger declines the offer, update the FFDB to 	indicate the customer has been contacted but has declined the 	upgrade. Send a message back to the SANS with “rejected” status.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This is just the basic “happy path” flow. Keep in mind that there are all kinds of failure modes here which have to be dealt with. I’ll get into these in more detail in my next blog.&lt;/p&gt;</description>
	<pubDate>Mon, 23 Aug 2010 21:14:10 +0000</pubDate>
</item>
<item>
	<title>Doug Schaefer: Hypervisors drive Heterogeneity</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-16474715.post-5750733306433325145</guid>
	<link>http://cdtdoug.blogspot.com/2010/08/hypervisors-drive-heterogeneity.html</link>
	<description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_X6Gz24BqUwI/THLXrN1I00I/AAAAAAAAACU/rj0BmLOx1M0/s1600/lab.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://1.bp.blogspot.com/_X6Gz24BqUwI/THLXrN1I00I/AAAAAAAAACU/rj0BmLOx1M0/s320/lab.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;I have put together a pretty neat little lab here under my desk. As I always say, you have to use the tools to understand the needs of the users. You have to get into their shoes and see what you like and don't like. Then you have a good chance of building tools they'll actually use and like.&lt;br /&gt;&lt;br /&gt;My lab includes two &quot;embedded&quot; systems on the right. The top is a board that has a Freescale PowerPC P4080 8-core chip in it. I have attached my Wind River ICE JTAG unit to it to test some really heavy duty multi-core scenarios. On the bottom right, I have what looks like a basic PC, and it is, but it runs Wind River's hypervisor hosting three operating systems: Wind River Linux, vxWorks, and of all things Windows. I don't have the P4080 system booted up yet, but my intention is to run the Hypervisor there too with random combinations of wrLinux and vxWorks.&lt;br /&gt;&lt;br /&gt;As I put this together, it really drove home the need for an IDE platform that is heterogeneous. That's a hard word to pronounce, but what I really mean is an IDE that can target any operating system that can run in a hypervisor configuration, which is pretty much all of them. And that means an IDE that has plug and play support that lets you create the source for applications that can run on them all, build that source for any and all of the target platforms, and debug the application as it runs on one ore more of them.&lt;br /&gt;&lt;br /&gt;And, you guessed it, the Eclipse CDT C/C++ IDE is a great platform to do that with. We have build and debug support for the GNU toolchain for Linux and from Wind River we have commercial support for vxWorks and Wind River Linux, and upcoming in the next release of CDT, we'll have support for Microsoft's Windows SDK which includes Visual C++.&lt;br /&gt;&lt;br /&gt;As well, I'm about to embark on a very interesting journey with the Target Communication Framework as we advance it's debug capabilities to cover all of these platforms as well. With a common framework for agents that run in all these environments, we'll have the ability to plug 'n play capabilities into these agents and come up with tooling we haven't even dared to consider before. Am I pumped about it? You betcha. We've long had the advantage of plug-in architectures with our Eclipse-based tooling, and now we'll get that advantage all the way down to the target as well.&lt;br /&gt;&lt;br /&gt;And it's really these hypervisor scenarios that have brought me here. It's finally a concrete example where you really need the heterogeneous capabilities that have driven my work on the CDT. And, it's something to sell our employers with too :).&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/16474715-5750733306433325145?l=cdtdoug.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Mon, 23 Aug 2010 20:20:16 +0000</pubDate>
	<author>noreply@blogger.com (Doug Schaefer)</author>
</item>
<item>
	<title>Sven Efftinge: Xtext 1.0.1 (SR1) release and git migration on Wednesday</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-24248206.post-7670537504361663701</guid>
	<link>http://blog.efftinge.de/2010/08/xtext-101-sr1-release-and-git-migration.html</link>
	<description>In the last two months Xtext got a great number of performance and memory footprint improvements, bug fixes and extensive documentation enhancements (most of them done by Sebastian while us others were on summer vacation :-)). We also fixed a couple of annoying bugs in Xpand's editor.&lt;br /&gt;&lt;br /&gt;You can find a detailed list of all &lt;b&gt;89 fixes&lt;/b&gt; in &lt;a href=&quot;http://bit.ly/drYYWl&quot;&gt;this bugzilla query&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;The upcoming Xtext 1.0.1 (Helios SR1) release will be built on Wednesday.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Migration to git&lt;/b&gt;&lt;br /&gt;We are also happy to announce that this will be our last CVS based release, since we will &lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=317923&quot;&gt;switch to git&lt;/a&gt; on the very same day. I also want to thank &lt;a href=&quot;http://www.ralfebert.de/&quot;&gt;Ralf Ebert&lt;/a&gt; for his excellent git training he gave us last week in exchange to an Xtext training. Git is cool! :-)&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/24248206-7670537504361663701?l=blog.efftinge.de&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Mon, 23 Aug 2010 15:11:14 +0000</pubDate>
	<author>noreply@blogger.com (Sven Efftinge)</author>
</item>
<item>
	<title>Eclipse Riena: Progress in a new bar</title>
	<guid isPermaLink="true">http://www.compeople.eu/blog/?p=427</guid>
	<link>http://www.compeople.eu/blog/?p=427</link>
	<description>&lt;p&gt;For a small scrum tool that we are currently developing on top of the &lt;a href=&quot;http://eclipse.org/riena/&quot; title=&quot;Eclipse Riena&quot;&gt;Riena&lt;/a&gt; framework, we wanted to visualize the progress of user stories and tasks carried out by a developer. We would usually use a ProgressBar widget to display such a progress. However, as we soon realized, this widget has a number of drawbacks.&lt;/p&gt;
&lt;p&gt;A ProgressBar is usually used to display the progress of a much shorter time span, a file operation for example. This assumption found its way into OS design decisions. For instance, since Vista, the ProgressBar on Windows features a highlight perpetually running back and forth to indicate that the process is still running. This is rather irritating when several ProgressBars are used on one view. Also, if a ProgressBar was hidden due to a scrolling operation and comes back into view, it gradually fills up to the value currently set. As with many other SWT widgets, the possibilities to alter color or design are very limited. We wanted to change the color when a task is completed to indicate the difference between “the estimated/allotted time has been used” and “the task has been completed”.&lt;/p&gt;
&lt;p&gt;Long story short, we wrote a new widget, the StatusMeter. It dynamically creates an image, giving us absolute control over all its properties.&lt;a href=&quot;http://www.compeople.eu/blog/wp-content/uploads/2010/07/currentstate.png&quot;&gt;&lt;img alt=&quot;Current state indicated by the new ProgressBar&quot; class=&quot;size-full wp-image-431 alignleft&quot; height=&quot;84&quot; src=&quot;http://www.compeople.eu/blog/wp-content/uploads/2010/07/currentstate.png&quot; style=&quot;margin: 5px;&quot; title=&quot;currentstate&quot; width=&quot;114&quot; /&gt;&lt;/a&gt; We now can change the color to reflect different states. There is a ridget in place so it feels like any other widget used in Riena. And since the main part of this widget is the image, it also gives us the opportunity to use it inside of table columns (for example via Riena’s ColumnFormatter). Thus we can now visualize percentages in table columns just as easy as we visualize boolean values with a checkbox.&lt;/p&gt;
&lt;p&gt;The widget is called StatusMeterWidget. If you want to use it in a table column, use StatusMeter directly to create just the image. Both are available via CVS. Feel free to send screenshots of how you use it in your application.&lt;/p&gt;</description>
	<pubDate>Mon, 23 Aug 2010 11:04:18 +0000</pubDate>
</item>
<item>
	<title>Ankur Sharma: Adding SpellChecking to custom editors</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-5914783.post-4852621545638572218</guid>
	<link>http://blog.ankursharma.org/2009/08/adding-spellchecking-to-custom-editors_19.html</link>
	<description>&lt;div style=&quot;text-align: justify;&quot;&gt;Eclipse provides a nice framework to use spell checking in dialog and editors. Chris has tipped about it &lt;a href=&quot;http://eclipsesource.com/blogs/2008/10/03/tip-spellchecking-in-eclipse/&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;. However, if you are using a custom editor then you have to put few pieces together yourself. Consider an XML editor. We would want the spelling check only for the string in attribute values and not the XML Tags.&lt;/div&gt;&lt;br /&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Let us try and implement this. We can start with the XML editor template provided by PDE.&lt;/div&gt;&lt;br /&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;1. Create a new plug-in using &quot;&lt;i&gt;Plug-in with an Editor&lt;/i&gt;&quot; template.&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_dqhq-tO9EaM/SvM3zlxQ9HI/AAAAAAAACR8/AhM0EE53Lb0/s1600-h/new_plugin_wizard_xmleditor.JPG&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://4.bp.blogspot.com/_dqhq-tO9EaM/SvM3zlxQ9HI/AAAAAAAACR8/AhM0EE53Lb0/s640/new_plugin_wizard_xmleditor.JPG&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div style=&quot;text-align: center;&quot;&gt;New Plug-in Wizard&lt;/div&gt;&lt;/blockquote&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;2.  This will create a simple XML Editor by extending &lt;a href=&quot;http://help.eclipse.org/galileo/index.jsp?topic=/org.eclipse.platform.doc.isv/reference/api/org/eclipse/ui/editors/text/TextEditor.html&quot; target=&quot;_blank&quot;&gt;TextEditor&lt;/a&gt;.&lt;/div&gt;&lt;br /&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;3. The XMLEditor uses XMLConfiguration to set the source viewer configuration.&lt;/div&gt;&lt;br /&gt;&lt;pre class=&quot;brush:java&quot;&gt;public XMLEditor() {&lt;br /&gt; super();&lt;br /&gt; colorManager = new ColorManager();&lt;br /&gt; setSourceViewerConfiguration(new XMLConfiguration(colorManager));&lt;br /&gt; setDocumentProvider(new XMLDocumentProvider());&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;Modify the constructor for XMLConfiguration and pass the preference store. It will be needed by its super class.&lt;/div&gt;&lt;br /&gt;&lt;pre class=&quot;brush:java&quot;&gt;public XMLEditor() {&lt;br /&gt; super();&lt;br /&gt; colorManager = new ColorManager();&lt;br /&gt; setSourceViewerConfiguration(new XMLConfiguration(colorManager, getPreferenceStore()));&lt;br /&gt; setDocumentProvider(new XMLDocumentProvider());&lt;br /&gt;} &lt;/pre&gt;&lt;pre class=&quot;brush:java&quot;&gt; &lt;/pre&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;4. The XMLConfiguration basically hooks various listeners, providers and assistants to the Editor. The template generated code will have it sub-classed from &lt;a href=&quot;http://help.eclipse.org/galileo/topic/org.eclipse.platform.doc.isv/reference/api/org/eclipse/jface/text/source/SourceViewerConfiguration.html&quot; target=&quot;_blank&quot;&gt;SourceViewerConfiguration&lt;/a&gt;. Change it to &lt;a href=&quot;http://help.eclipse.org/galileo/topic/org.eclipse.platform.doc.isv/reference/api/org/eclipse/ui/editors/text/TextSourceViewerConfiguration.html&quot; target=&quot;_blank&quot;&gt;TextSourceViewerConfiguration&lt;/a&gt;. The TextSourceViewerConfiguration provides out of the box spell checker, spelling annotation, problem hover text, quick fixes, etc.&lt;/div&gt;&lt;br /&gt;&lt;pre class=&quot;brush:java&quot;&gt;public class XMLConfiguration extends TextSourceViewerConfiguration { //SourceViewerConfiguration {&lt;br /&gt;...&lt;br /&gt;public XMLConfiguration(ColorManager colorManager, IPreferenceStore preferenceStore) {&lt;br /&gt; super(preferenceStore);&lt;br /&gt; this.colorManager = colorManager;&lt;br /&gt;}&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;The &lt;i&gt;preferenceStore&lt;/i&gt; will be used for checking dictionary and other preferences. They can be set from &lt;i&gt;Window &amp;gt; Preferences &amp;gt; General &amp;gt; Editors &amp;gt; Text Editors &amp;gt; Spelling &lt;/i&gt;.&lt;/div&gt;&lt;br /&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;5. Override the getReconciler function.  The implementation for &lt;a href=&quot;http://help.eclipse.org/galileo/topic/org.eclipse.platform.doc.isv/reference/api/org/eclipse/ui/editors/text/TextSourceViewerConfiguration.html#getReconciler%28org.eclipse.jface.text.source.ISourceViewer%29&quot; target=&quot;_blank&quot;&gt;getReconciler&lt;/a&gt; provided by TextSourceViewerConfiguration uses a &lt;a href=&quot;http://help.eclipse.org/galileo/topic/org.eclipse.platform.doc.isv/reference/api/org/eclipse/ui/texteditor/spelling/SpellingReconcileStrategy.html&quot; target=&quot;_blank&quot;&gt;SpellingReconcileStrategy&lt;/a&gt;. The SpellingReconcileStrategy will spell check the whole document. Since its an XML Editor, only quoted strings should be spell checked and the XML tags should be skipped.&lt;/div&gt;&lt;br /&gt;&lt;pre class=&quot;brush:java&quot;&gt;/**&lt;br /&gt;* Providing custom XMLSpellingReconcileStrategy to enable spell checking for only strings&lt;br /&gt;*/&lt;br /&gt;/* (non-Javadoc)&lt;br /&gt;* @see org.eclipse.jface.text.source.SourceViewerConfiguration#getReconciler(org.eclipse.jface.text.source.ISourceViewer)&lt;br /&gt;*/&lt;br /&gt;public IReconciler getReconciler(ISourceViewer sourceViewer) {&lt;br /&gt; XMLSpellingReconcileStrategy strategy = new XMLSpellingReconcileStrategy(sourceViewer, EditorsUI.getSpellingService());&lt;br /&gt; Reconciler reconciler = new Reconciler();&lt;br /&gt; reconciler.setReconcilingStrategy(strategy, XMLStringPartitionScanner.XML_STRING);&lt;br /&gt; reconciler.setDocumentPartitioning(XMLStringPartitionScanner.XML_STRING);&lt;br /&gt; return reconciler;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;6. XMLStringPartitionScanner will be our custom document partition scanner to identify the quoted string. The template generated code will make use of XMLPartitionScanner. This class specifies the rules for identifying the XML tags and comments. Since, the quoted string are part of XML Tag only, we can not use this partition scanner. Therefore, we write our custom document partition scanner and at supply it to the reconcile strategy.&lt;/div&gt;&lt;br /&gt;&lt;pre class=&quot;brush:java&quot;&gt;public class XMLStringPartitionScanner extends RuleBasedPartitionScanner {&lt;br /&gt;&lt;br /&gt; public final static String XML_STRING = &quot;__xml_string&quot;;&lt;br /&gt;&lt;br /&gt; public XMLStringPartitionScanner() {&lt;br /&gt;  IToken stringToken = new Token(XML_STRING);&lt;br /&gt;  IPredicateRule[] rules = new IPredicateRule[1];&lt;br /&gt;&lt;br /&gt;  rules[0] = new MultiLineRule(&quot;\&quot;&quot;, &quot;\&quot;&quot;, stringToken, '\\');&lt;br /&gt;  setPredicateRules(rules);&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;7. XMLSpellingReconcileStrategy will extend SpellingReconcileStrategy since it already knows how to collect spelling problem, etc. Only &lt;a href=&quot;http://help.eclipse.org/galileo/topic/org.eclipse.platform.doc.isv/reference/api/org/eclipse/ui/texteditor/spelling/SpellingReconcileStrategy.html#reconcile%28org.eclipse.jface.text.IRegion%29&quot; target=&quot;_blank&quot;&gt;reconcile &lt;/a&gt;is what needs to be overridden.&lt;/div&gt;&lt;br /&gt;&lt;pre class=&quot;brush:java&quot;&gt;public class XMLSpellingReconcileStrategy extends SpellingReconcileStrategy {&lt;br /&gt;&lt;br /&gt; public XMLSpellingReconcileStrategy(ISourceViewer sourceViewer, SpellingService spellingService) {&lt;br /&gt;  super(sourceViewer, spellingService);&lt;br /&gt; }&lt;br /&gt; ...&lt;br /&gt; public void reconcile(IRegion region) {&lt;br /&gt;&lt;br /&gt;  AbstractDocument document = (AbstractDocument) getDocument();&lt;br /&gt;  IDocumentPartitioner docPartitioner = document.getDocumentPartitioner(XMLStringPartitionScanner.XML_STRING);&lt;br /&gt;&lt;br /&gt;  IAnnotationModel model = getAnnotationModel();&lt;br /&gt;  if (region.getOffset() == 0 &amp;amp;&amp;amp; region.getLength() == document.getLength()) {&lt;br /&gt;  //reconciling whole document&lt;br /&gt;  super.reconcile(region);&lt;br /&gt;  deleteUnwantedAnnotations();&lt;br /&gt;  } else {&lt;br /&gt;   //partial reconciliation&lt;br /&gt;   //preserve spelling annotations first&lt;br /&gt;   Iterator iter = model.getAnnotationIterator();&lt;br /&gt;   Map spellingErrors = new HashMap(1);&lt;br /&gt;   while (iter.hasNext()) {&lt;br /&gt;    Annotation annotation = (Annotation) iter.next();&lt;br /&gt;    if (annotation instanceof SpellingAnnotation) {&lt;br /&gt;     SpellingAnnotation spellingAnnotation = (SpellingAnnotation) annotation;&lt;br /&gt;     Position position = model.getPosition(spellingAnnotation);&lt;br /&gt;     String contentType = docPartitioner.getContentType(position.getOffset());&lt;br /&gt;&lt;br /&gt;     if (XMLStringPartitionScanner.XML_STRING.equalsIgnoreCase(contentType)) {&lt;br /&gt;      spellingErrors.put(spellingAnnotation, model.getPosition(annotation));&lt;br /&gt;     }&lt;br /&gt;    }&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   //reconcile&lt;br /&gt;   super.reconcile(region);&lt;br /&gt;&lt;br /&gt;   //restore annotations&lt;br /&gt;   model = getAnnotationModel();&lt;br /&gt;   iter = spellingErrors.keySet().iterator();&lt;br /&gt;   while (iter.hasNext()) {&lt;br /&gt;    Annotation annotation = (Annotation) iter.next();&lt;br /&gt;    model.addAnnotation(annotation, (Position) spellingErrors.get(annotation));&lt;br /&gt;   }&lt;br /&gt;   deleteUnwantedAnnotations();&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; /**&lt;br /&gt; * Deletes the spelling annotations marked for XML Tags&lt;br /&gt; */&lt;br /&gt; private void deleteUnwantedAnnotations() {&lt;br /&gt;  AbstractDocument document = (AbstractDocument) getDocument();&lt;br /&gt;  IDocumentPartitioner docPartitioner = document.getDocumentPartitioner(XMLStringPartitionScanner.XML_STRING);&lt;br /&gt;  IAnnotationModel model = getAnnotationModel();&lt;br /&gt;  Iterator iter = model.getAnnotationIterator();&lt;br /&gt;&lt;br /&gt;  while (iter.hasNext()) {&lt;br /&gt;   Annotation annotation = (Annotation) iter.next();&lt;br /&gt;   if (annotation instanceof SpellingAnnotation) {&lt;br /&gt;    SpellingAnnotation spellingAnnotation = (SpellingAnnotation) annotation;&lt;br /&gt;    Position position = model.getPosition(spellingAnnotation);&lt;br /&gt;    String contentType = docPartitioner.getContentType(position.getOffset());&lt;br /&gt;    if (!XMLStringPartitionScanner.XML_STRING.equalsIgnoreCase(contentType)) {&lt;br /&gt;     model.removeAnnotation(spellingAnnotation);&lt;br /&gt;    }&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;8. Putting it all together&lt;/div&gt;&lt;br /&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;The XMLStringPartitionScanner is our document partition scanner. It uses the &lt;a href=&quot;http://help.eclipse.org/galileo/topic/org.eclipse.platform.doc.isv/reference/api/org/eclipse/jface/text/rules/MultiLineRule.html&quot; target=&quot;_blank&quot;&gt;MultiLineRule&lt;/a&gt; to locate the quoted string. XMLDocumentProvider adds it to the XML document.&lt;/div&gt;&lt;br /&gt;&lt;pre class=&quot;brush:java&quot;&gt;public class XMLDocumentProvider extends FileDocumentProvider {&lt;br /&gt;&lt;br /&gt; protected IDocument createDocument(Object element) throws CoreException {&lt;br /&gt;  IDocument document = super.createDocument(element);&lt;br /&gt;  if (document != null) {&lt;br /&gt;   IDocumentPartitioner partitioner = new FastPartitioner(new XMLPartitionScanner(), new String[] {XMLPartitionScanner.XML_TAG, XMLPartitionScanner.XML_COMMENT});&lt;br /&gt;   partitioner.connect(document);&lt;br /&gt;   document.setDocumentPartitioner(partitioner);&lt;br /&gt;&lt;br /&gt;   //Adding our string partition scanner to the document&lt;br /&gt;   partitioner = new FastPartitioner(new XMLStringPartitionScanner(), new String[] {XMLStringPartitionScanner.XML_STRING});&lt;br /&gt;   partitioner.connect(document);&lt;br /&gt;   ((AbstractDocument) document).setDocumentPartitioner(XMLStringPartitionScanner.XML_STRING, partitioner);&lt;br /&gt;  }&lt;br /&gt;  return document;&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;XMLPartitionScanner is generated by the template and it locates XML tags and comments. Since quoted strings are part of tags, we added XMLStringPartitionScanner too.&lt;/div&gt;&lt;br /&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;The XMLConfiguration finally wires all the content types to &lt;a href=&quot;http://help.eclipse.org/galileo/topic/org.eclipse.platform.doc.isv/reference/api/org/eclipse/jface/text/presentation/PresentationReconciler.html&quot;&gt;PresentationReconciler&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;9. After thoughts&lt;/div&gt;&lt;br /&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;All the infrastructure is already in place for enabling spell checking. But custom editors need some extra wiring. If finer control is needed on the quick fix assistant override &lt;a href=&quot;http://help.eclipse.org/galileo/topic/org.eclipse.platform.doc.isv/reference/api/org/eclipse/jface/text/source/SourceViewerConfiguration.html#getQuickAssistAssistant%28org.eclipse.jface.text.source.ISourceViewer%29&quot; target=&quot;_blank&quot;&gt;getQuickAssistAssistant&lt;/a&gt; function and for controlling the hover message &lt;a href=&quot;http://help.eclipse.org/galileo/topic/org.eclipse.platform.doc.isv/reference/api/org/eclipse/jface/text/source/SourceViewerConfiguration.html#getTextHover%28org.eclipse.jface.text.source.ISourceViewer,%20java.lang.String%29&quot; target=&quot;_blank&quot;&gt;getTextHover &lt;/a&gt;will do the trick.&lt;/div&gt;&lt;br /&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;10. Source code&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The archived project can be downloaded from &lt;a href=&quot;https://sites.google.com/site/eclipsepdeandme/attachments/org.example.xml.spelling.zip?attredirects=0&amp;amp;d=1&quot;&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;11. Disclaimer :-)&lt;/div&gt;&lt;br /&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;This code doesn't cover all the scenarios as it is just an example. These things I figured out while fixing the &lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=286203&quot; target=&quot;_blank&quot;&gt;bug #286203&lt;/a&gt;. Feel free to add your suggestions and point out any mistakes you see.Eclipse provides a nice framework to use spell checking in dialog and editors. Chris has tipped about it here. However, if you are using a custom editor then you have to put few pieces together yourself. Consider an XML editor. We would want the spelling check only for the string in attribute values and not the XML Tags.&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/5914783-4852621545638572218?l=blog.ankursharma.org&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Mon, 23 Aug 2010 05:21:14 +0000</pubDate>
	<author>sharma.ankur@gmail.com (Ankur Sharma)</author>
</item>
<item>
	<title>Steffen Pingel: Preview of Mylyn Hudson connector available</title>
	<guid isPermaLink="false">http://dev.eclipse.org/blogs/mylog/?p=29</guid>
	<link>http://dev.eclipse.org/blogs/mylog/2010/08/22/preview-of-mylyn-hudson-connector-now-available/</link>
	<description>&lt;p&gt;I am happy to announce that EGit is not the only Eclipse project that had a successful Summer of Code this year. Just as the program is wrapping up, a first version of the new &lt;a href=&quot;http://wiki.eclipse.org/Mylyn/Hudson_Integration_for_Mylyn&quot; target=&quot;_new&quot;&gt;Mylyn Hudson connector&lt;/a&gt; has been uploaded to the Mylyn weekly incubator update site. I had the pleasure to mentor Markus Knittig who did a great job over the summer in getting the connector into its current state. While there is still quite a bit of work to do, I have already been using the connector on a daily basis to monitor builds.&lt;/p&gt;
&lt;p&gt;The Hudson connector is based on the Mylyn Builds framework which provides common infrastructure for integrating build servers with Eclipse. Most importantly it provides a Builds view.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://dev.eclipse.org/blogs/mylog/files/2010/08/builds-view.png&quot;&gt;&lt;img alt=&quot;Mylyn Builds View&quot; class=&quot;size-full wp-image-37 aligncenter&quot; height=&quot;278&quot; src=&quot;http://dev.eclipse.org/blogs/mylog/files/2010/08/builds-view.png&quot; width=&quot;518&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The view shows the status and health for subscribed jobs. Red indicates a failed build, yellow failed tests and green means a build was successful. The weather icons in the Summary column show how a build has been doing in recent history following the Hudson web interface.&lt;/p&gt;
&lt;p&gt;One really neat feature is the decoration of the view icon which shows the overall status when the view is in fast-view mode. When auto refresh is enabled the decoration icon will show a black or red X once a builds fails very similar to how the JUnit view indicates failed tests.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://dev.eclipse.org/blogs/mylog/files/2010/08/builds-view-icon.png&quot;&gt;&lt;img alt=&quot;Builds in Fast View&quot; class=&quot;size-full wp-image-38 aligncenter&quot; height=&quot;48&quot; src=&quot;http://dev.eclipse.org/blogs/mylog/files/2010/08/builds-view-icon.png&quot; width=&quot;35&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Subscribing to jobs, which are called plans in the Builds framework, is straight forward from the build server properties page which closely follows the settings page for Mylyn task repositories. All selected plans are shown and monitored in the Builds view.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://dev.eclipse.org/blogs/mylog/files/2010/08/hudson-properties.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;aligncenter size-medium wp-image-39&quot; height=&quot;554&quot; src=&quot;http://dev.eclipse.org/blogs/mylog/files/2010/08/hudson-properties.png&quot; width=&quot;525&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you feel brave and want try out the Hudson connector add the following P2 repositories to Eclipse 3.5 or later:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;color: #666666;&quot;&gt;http://&lt;/span&gt;download.eclipse.org/tools/mylyn/update/weekly&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;&lt;span style=&quot;color: #666666;&quot;&gt;http://&lt;/span&gt;download.eclipse.org/tools/mylyn/update/weekly/incubator&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Note that the connector is still work in progress and it is likely that the data model will change in future versions possibly requiring re-configuration of servers. I recommend checking the weekly &lt;a href=&quot;http://eclipse.org/mylyn/new/weekly.php&quot; target=&quot;_blank&quot;&gt;Mylyn New &amp;amp; Noteworthy&lt;/a&gt; every once in a while which will lists any significant enhancements or changes.&lt;/p&gt;
&lt;p&gt;The Mylyn Bugzilla lists &lt;a href=&quot;https://bugs.eclipse.org/bugs/buglist.cgi?short_desc_type=allwordssubstr&amp;amp;short_desc=%5Bbuild%5D&amp;amp;product=Mylyn&amp;amp;long_desc_type=allwordssubstr&amp;amp;long_desc=&amp;amp;order=Importance&quot; target=&quot;_blank&quot;&gt;plenty of ideas&lt;/a&gt; how to move forward but I would love to hear from the community what features would be most valuable to you. Please feel free to file bugs against Mylyn or chime in on the discussion on one of the existing feature requests.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://bugs.eclipse.org/bugs/buglist.cgi?short_desc_type=allwordssubstr&amp;amp;short_desc=%5Bbuild%5D&amp;amp;product=Mylyn&amp;amp;long_desc_type=allwordssubstr&amp;amp;long_desc=&amp;amp;order=Importance&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;aligncenter size-full wp-image-42&quot; height=&quot;190&quot; src=&quot;http://dev.eclipse.org/blogs/mylog/files/2010/08/builds-buglist.png&quot; width=&quot;405&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;There has been talk about moving the Hudson connector in its own Eclipse sub-sub-project. Please drop me a line or comment on &lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=308040&quot; target=&quot;_blank&quot;&gt;bug 308040&lt;/a&gt; if you are interested in getting involved.&lt;/p&gt;</description>
	<pubDate>Mon, 23 Aug 2010 01:29:08 +0000</pubDate>
</item>
<item>
	<title>Robert Konigsberg: Presenting the Google/Eclipse/Enterprise talk in Reston VA Oct 13</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-8055871.post-16282380428422632</guid>
	<link>http://konigsberg.blogspot.com/2010/08/presenting-googleeclipseenterprise-talk.html</link>
	<description>Brief note: I'm excited to be presenting the talk &quot;&lt;a href=&quot;http://konigsberg.blogspot.com/2010/03/learn-about-how-google-uses-eclipse.html&quot;&gt;Eclipse in the Enterprise: Lessons from Google&lt;/a&gt;&quot; at &lt;a href=&quot;http://eclipse-ecosystem.blogspot.com/2010/08/eclipse-government-day-and-eclipse.html&quot;&gt;Eclipse Enterprise Days&lt;/a&gt; on Oct 13 in Reston, VA.&lt;br /&gt;&lt;br /&gt;This looks like a great conference for people who support large Eclipse user bases -- you know who you are -- if you attended the &lt;a href=&quot;http://www.eclipsecon.org/2010/sessions/?page=sessions&amp;amp;id=1633&quot;&gt;Eclipse in the Enterprise BoF at EclipseCon&lt;/a&gt;, this conference is for you. From the &lt;a href=&quot;http://wiki.eclipse.org/Eclipse_Enterprise_Days&quot;&gt;conference&lt;/a&gt; page:&lt;br /&gt;&lt;blockquote&gt;&quot;Attendees must be an employee or contractor of an &quot;Enterprise User&quot; of Eclipse technology. Enterprise users typically are responsible for the use of Eclipse by hundreds and even thousands of developers in their organizations.&quot;&lt;/blockquote&gt;Are you planning to attend this conference? Let me know.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/8055871-16282380428422632?l=konigsberg.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Sun, 22 Aug 2010 13:00:50 +0000</pubDate>
	<author>noreply@blogger.com (Robert Konigsberg)</author>
</item>
<item>
	<title>Dave Carver</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-1585332946379204379.post-429304812684438959</guid>
	<link>http://intellectualcramps.blogspot.com/2010/08/sometimes-we-try-to-take-short-cut-when.html</link>
	<description>&lt;div&gt;&lt;br /&gt;&lt;/div&gt;Sometimes we try to take the short cut when creating our Interfaces and methods.  For example, take the &lt;a href=&quot;http://help.eclipse.org/helios/index.jsp?topic=/org.eclipse.platform.doc.isv/reference/api/org/eclipse/core/resources/IWorkspaceRoot.html&quot;&gt;IWorkspaceRoot.delete&lt;/a&gt; method for an example.   &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It takes several different parameters:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;delete(boolean deleteContent, boolean force, IProjressMonitor monitor);&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Most of the time this is implemented in code as the following:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;workspaceRoot.delete(true, false, new NullProgressMonitor());&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It's a little difficult to understand just by looking at it without looking at the javadoc what it is doing.  The more parameters we add the more possibility for mistakes and more complicated the method's code.   There is a mindset that boolean parameters should be avoided.  That it is better to be more descriptive and create a few more method names:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So instead of the above we could have the following specific method names.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;deleteAll(IProgressMonitor monitor);&lt;/div&gt;&lt;div&gt;delete(IProgressMonitor monitor);&lt;/div&gt;&lt;div&gt;forceDeleteAll(IProgressMonitor monitor);&lt;/div&gt;&lt;div&gt;forceDelete(IProgressMonitor minitor);&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Yes it is four methods now, but each serves only one purpose.   The other method was doing at least four things depending on how the switches were set.   I'm sure others could come up with even better method names than I have.   It is important when we are designing API and interfaces to look at it from a user's point of view.   If it isn't clear from just looking at the method and its parameters what it is doing, then the method is too complicated and doing too much.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Resources:&lt;/b&gt;  &lt;a href=&quot;http://www.informit.com/articles/article.aspx?p=1375308&quot;&gt;Avoid Too Many Arguments&lt;/a&gt;.&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/1585332946379204379-429304812684438959?l=intellectualcramps.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Sun, 22 Aug 2010 02:07:30 +0000</pubDate>
	<author>noreply@blogger.com (David Carver)</author>
</item>
<item>
	<title>Matthias Sohn: EGit History View showing all branches</title>
	<guid isPermaLink="false">http://dev.eclipse.org/blogs/msohn/?p=3</guid>
	<link>http://dev.eclipse.org/blogs/msohn/2010/08/20/egit-history-view-showing-all-branches/</link>
	<description>&lt;p&gt;So far EGit’s History View could only display the commits reachable from the current HEAD.&lt;/p&gt;
&lt;p&gt;Here how this looks for the git.git repo when the branch remote/maint is checked out :&lt;/p&gt;
&lt;div class=&quot;wp-caption alignnone&quot; id=&quot;attachment_4&quot; style=&quot;width: 310px;&quot;&gt;&lt;a href=&quot;http://dev.eclipse.org/blogs/msohn/files/2010/08/egit-show-checkedout-branch.png&quot;&gt;&lt;img alt=&quot;git.git repo in EGit history view, origin/maint checked out&quot; class=&quot;size-medium wp-image-4&quot; height=&quot;123&quot; src=&quot;http://dev.eclipse.org/blogs/msohn/files/2010/08/egit-show-checkedout-branch-300x123.png&quot; width=&quot;300&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;git.git repo, origin/maint checked out&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Jens Baumgart today added a little toggle button which will do all the magic :&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://dev.eclipse.org/blogs/msohn/files/2010/08/show-all-branches1.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;alignnone size-medium wp-image-6&quot; height=&quot;28&quot; src=&quot;http://dev.eclipse.org/blogs/msohn/files/2010/08/show-all-branches1-300x28.png&quot; width=&quot;300&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Together with my still pending change &lt;a href=&quot;http://egit.eclipse.org/r/#change,1359&quot; title=&quot;my change 1359 currently in review&quot;&gt;http://egit.eclipse.org/r/#change,1359&lt;/a&gt;&lt;br /&gt;
to also show all remote tracking branches this becomes “gitk -all for Eclipse” :&lt;/p&gt;
&lt;div class=&quot;wp-caption alignnone&quot; id=&quot;attachment_7&quot; style=&quot;width: 310px;&quot;&gt;&lt;a href=&quot;http://dev.eclipse.org/blogs/msohn/files/2010/08/egit-show-all-branches.png&quot;&gt;&lt;img alt=&quot;git.git in EGit, showing all branches, branch origin/maint checked out&quot; class=&quot;size-medium wp-image-7&quot; height=&quot;83&quot; src=&quot;http://dev.eclipse.org/blogs/msohn/files/2010/08/egit-show-all-branches-300x83.png&quot; width=&quot;300&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;git.git in EGit, showing all branches, branch origin/maint checked out&lt;/p&gt;&lt;/div&gt;</description>
	<pubDate>Sat, 21 Aug 2010 01:23:26 +0000</pubDate>
</item>
<item>
	<title>Birt World: BIRT Flash and Gadget Scripting</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-14521551.post-8207792429549444473</guid>
	<link>http://birtworld.blogspot.com/2010/08/birt-flash-and-gadget-scripting.html</link>
	<description>In my last post I blogged about how &lt;a href=&quot;http://birtworld.blogspot.com/2010/08/birt-charting-scripting-overview.html&quot;&gt;Chart Scripting&lt;/a&gt; works in BIRT. If you are using &lt;a href=&quot;http://www.birt-exchange.com/be/products/birt-report-designers/actuate-birt-report-designers/features/?articleid=17169&quot;&gt;Actuate BIRT&lt;/a&gt;, you also will have access to Flash Charts and Gadgets. Scripting for these two report items is very similar to the standard Chart scripting model.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_GN1FyT5H8Kg/TG6k8uZZ9OI/AAAAAAAAAPA/Gz6ckW5hknI/s1600/image1.png&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5507520757474391266&quot; src=&quot;http://4.bp.blogspot.com/_GN1FyT5H8Kg/TG6k8uZZ9OI/AAAAAAAAAPA/Gz6ckW5hknI/s400/image1.png&quot; style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 388px; height: 241px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Flash Charts&lt;/strong&gt;&lt;br /&gt;Currently Flash charts support 14 script event triggers that can be hooked to make chart modifications.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_GN1FyT5H8Kg/TG6lZQFoM2I/AAAAAAAAAPI/00TM_FM3gzg/s1600/image2.png&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5507521247554581346&quot; src=&quot;http://2.bp.blogspot.com/_GN1FyT5H8Kg/TG6lZQFoM2I/AAAAAAAAAPI/00TM_FM3gzg/s400/image2.png&quot; style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 400px; height: 263px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The event firing order is shown below.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_GN1FyT5H8Kg/TG6lkXz86sI/AAAAAAAAAPQ/3KXyehon3j4/s1600/flashchartorder.png&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5507521438606486210&quot; src=&quot;http://2.bp.blogspot.com/_GN1FyT5H8Kg/TG6lkXz86sI/AAAAAAAAAPQ/3KXyehon3j4/s400/flashchartorder.png&quot; style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 400px; height: 323px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;As you can see the order is very similar to that of normal BIRT charts. The before and after dataset filled events are fired first for each dataset (category and value). Next the beforeRendering event is fired and then the before and after draw series events are fired for each series. Between the before and after draw series events the before and after draw data point events are fired for each point in the series. The before and after draw series events (and the events contained in them) are fired for each series in the chart. After all series are processed, the before and after draw effect events are fired for each effect in the chart. Effects can be used to alter the chart at runtime, allowing font manipulation, blurring, glowing, shadowing, beveling, and animation of different objects of the chart. Effects are added to the chart using the effects editor. &lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://3.bp.blogspot.com/_GN1FyT5H8Kg/TG6l6_gX8gI/AAAAAAAAAPY/NWMx6vvkw_M/s1600/effects.png&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5507521827218911746&quot; src=&quot;http://3.bp.blogspot.com/_GN1FyT5H8Kg/TG6l6_gX8gI/AAAAAAAAAPY/NWMx6vvkw_M/s400/effects.png&quot; style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 400px; height: 249px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Using the beforeDrawEffect event script you can alter any of the effects added to the chart. For example to turn off the shadow effect in the above chart you could use the following script.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;function beforeDrawEffect( effect, fcsc )&lt;br /&gt;{&lt;br /&gt;var effectName = &quot;MyTitleEffect&quot;;&lt;br /&gt;if ( effectName.equals( effect.getAction().getName() ) ){&lt;br /&gt;if( effect.getAction().getShadow() != null ){&lt;br /&gt;effect.getAction().getShadow().setEnabled(false);&lt;br /&gt;effect.getAction().getFont().setEnabled(false);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;The getEffect().getAction().getName() call returns the name of the effect as defined in the effect editor. This can be used to determine which effect definition your script is operating on. The getAction allows access to the different effect features. Note that if the effect is not enabled the getter method for the effect will return null. In the above script we first check to see if the getShadow method returns null before turning it off. &lt;br /&gt;&lt;br /&gt;Finally the afterRendering event is triggered.&lt;br /&gt;&lt;br /&gt;These events function much the same way as described in my earlier post. You will notice that event function prototypes are just a little different. For example instead of a chart and icsc parameter you will get a flashChart and fcsc parameter in certain events. For practical purposes these are just extended chart and icsc objects and still provide most of the standard object features. For example to set the chart title to the value of a report parameter using the reportContext, you could use a script like the following. &lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;function beforeRendering( flashChart, fcsc )&lt;br /&gt;{&lt;br /&gt;var parmChartTitle = fcsc.getExternalContext().getScriptable().getParameterValue(&quot;MyChartTitle&quot;);&lt;br /&gt;flashChart.getChart().getTitle().getLabel().getCaption().setValue(parmChartTitle)&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Flash Gadgets&lt;/strong&gt;&lt;br /&gt;BIRT Flash Gadget report items are used to display data in a unique dynamic graphic. Currently Actuate BIRT supports thermometer, cylinder, bullet, spark line, meter gauge or linear gauge gadgets. These gadgets also support server side scripting.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_GN1FyT5H8Kg/TG6m092-PcI/AAAAAAAAAPg/qgDjuCURAa0/s1600/gadget1.png&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5507522823209237954&quot; src=&quot;http://2.bp.blogspot.com/_GN1FyT5H8Kg/TG6m092-PcI/AAAAAAAAAPg/qgDjuCURAa0/s400/gadget1.png&quot; style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 400px; height: 374px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Twelve event triggers are supported and can be used to alter how the gadget is displayed. The events that are triggered will depend on the gadget and which features the gadget is using. For example this meter gadget:&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_GN1FyT5H8Kg/TG6nAxhkfmI/AAAAAAAAAPo/Tho9JkLLHac/s1600/examplegadget.png&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5507523026056674914&quot; src=&quot;http://4.bp.blogspot.com/_GN1FyT5H8Kg/TG6nAxhkfmI/AAAAAAAAAPo/Tho9JkLLHac/s400/examplegadget.png&quot; style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 400px; height: 206px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Produces the following event order.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_GN1FyT5H8Kg/TG6nODHAjRI/AAAAAAAAAPw/0KQjtRIHhIw/s1600/gadgeteventorder.png&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5507523254115405074&quot; src=&quot;http://1.bp.blogspot.com/_GN1FyT5H8Kg/TG6nODHAjRI/AAAAAAAAAPw/0KQjtRIHhIw/s400/gadgeteventorder.png&quot; style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 211px; height: 400px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The beforeRendering event is called first and can be used to modify the flash gadget before it is rendered. Next before and after draw region events are trigger for each of the three regions in the meter gadget. This gadget contains two thresholds, so the before and after threshold events are triggered next for each threshold. The gadget also contains two needles so the before and after draw needle events are fired. The threshold label contains a font effect and the threshold areas are animated. This produces before and after draw effect triggers for each. Finally the afterRendering event is triggered.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Retrieving Gadget Values&lt;/em&gt;&lt;br /&gt;BIRT Flash Gadgets use value definitions to link the gadget to a BIRT dataset.  The definitions are assigned in the Gadget Editor.  The runtime values for these definitions can be retrieved in script using the gadget object.  For example, in the beforeRendering you could use the following script:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;function beforeRendering( gadget, fgsc )&lt;br /&gt;{&lt;br /&gt; var vals=gadget.getResultValues();&lt;br /&gt; for( i = 0; i &amp;lt; vals.size(); i++ ){&lt;br /&gt;  if( vals.get(i).getValue() &amp;gt; 20 ){&lt;br /&gt;   //do something&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;The number of result values will depend on the gadget.  For example, In a Spark Line gadget there will be multiple values.  In a meter gadget, there will be a result value for each needle value.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Region Events&lt;/em&gt;&lt;br /&gt;You can customize the colors, transparency, labels, and range values of any region using the beforeRendering or beforeDrawRegion scripts.  See the example below.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;function beforeDrawRegion( region, fgsc )&lt;br /&gt;{&lt;br /&gt; if( region.getLabel().equals(&quot;A&quot;) ){&lt;br /&gt;  region.setColor(&quot;00ff00&quot;);&lt;br /&gt; } &lt;br /&gt;   //Display value range of region.   &lt;br /&gt;     region.setLabel( &quot;(&quot; + region.getStartValue() + &quot;, &quot; + region.getEndValue() + &quot;)&quot; ); &lt;br /&gt;    &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function beforeRendering( gadget, fgsc )&lt;br /&gt;{&lt;br /&gt; //First Region&lt;br /&gt; gadget.getRegion().get(0).setEndValue(25);&lt;br /&gt; //Second Region&lt;br /&gt; gadget.getRegion().get(1).setStartValue(25);&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Threshold Events&lt;/em&gt;&lt;br /&gt;Thresholds, like regions can also be customized using script.  Virtually anything that is set in the designer can be changed in an event trigger.  For example:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;function beforeDrawThreshold( threshold, fgsc )&lt;br /&gt;{&lt;br /&gt;  if( threshold.getLabel().equals(&quot;MyThreshold&quot;) ){&lt;br /&gt;   threshold.setShowValueInside(true);&lt;br /&gt;   threshold.setShowValueOnTop(false);&lt;br /&gt;   threshold.setStartValue(10);&lt;br /&gt;   threshold.setColor(&quot;0000ee&quot;);&lt;br /&gt;  // Display the value range of threshold.&lt;br /&gt;   threshold.setLabel( &quot;(&quot; + threshold.getStartValue() + &quot;, &quot; + threshold.getEndValue() + &quot;)&quot; );&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function beforeRendering( gadget, fgsc )&lt;br /&gt;{&lt;br /&gt; gadget.getThresholds().get(0).setMarkerColor(&quot;ff0000&quot;);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;In these scripts, we change the starting value, color, label and label location in the beforeDrawThreshold.  The marker color is also changed in the beforeRendering script.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;AddOn Events&lt;/em&gt;&lt;br /&gt;BIRT Gadgets support the concept of an AddOn.  An AddOn allows the designer to place images, text, and various shapes on top of the gadget.  If the gadget contains an AddOn the before and afterDrawAddOn events will be triggered, allowing you to customize the AddOn at runtime.  For example, the following script customizes two AddOns.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;function beforeDrawAddOn( addOn, fgsc )&lt;br /&gt;{&lt;br /&gt; // Change add-on styles. &lt;br /&gt; if ( addOn.getName().equals(&quot;TitleAddOn&quot;) )&lt;br /&gt; {&lt;br /&gt;  addOn.setLabel( &quot;Meter Gauge&quot; );&lt;br /&gt;  addOn.setFontColor( &quot;ff0000&quot; );&lt;br /&gt;  addOn.setFontSize( 28 );&lt;br /&gt;  addOn.setY( 35 );&lt;br /&gt; }&lt;br /&gt; else if ( addOn.getName().equals( &quot;ArcAddOn&quot; ) )&lt;br /&gt; {&lt;br /&gt;  addOn.setFillColor( &quot;ffff00&quot; );&lt;br /&gt; }&lt;br /&gt;} &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;AddOns can even be created and placed on the gadget at runtime.  For example the following script adds a text AddOn to the gadget using the beforeRendering event.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;function beforeRendering( gadget, fgsc )&lt;br /&gt;{&lt;br /&gt;  importPackage( Packages.com.actuate.birt.flash.gadgets );&lt;br /&gt;  importPackage( Packages.com.actuate.birt.flash.gadgets.impl );&lt;br /&gt;  &lt;br /&gt;  // Add a text add-on.&lt;br /&gt;  var textAddOn = GadgetsFactory.eINSTANCE.createTextAddOn();&lt;br /&gt;  textAddOn.setAddOnType( AddOnType.TEXT );&lt;br /&gt;  textAddOn.setName(&quot;DescAddOn&quot;);&lt;br /&gt;  textAddOn.setShowAddOn(true);&lt;br /&gt;  gadget.getAddOns().add( textAddOn );&lt;br /&gt;  gadget.setZOrderPosition(1);&lt;br /&gt; &lt;br /&gt; textAddOn.setLabel(&quot;This sample demonstrates how to add an add-on by scripting.&quot;);&lt;br /&gt; textAddOn.setX(2);&lt;br /&gt; textAddOn.setY(20);&lt;br /&gt; textAddOn.setFontSize( 12 );&lt;br /&gt; textAddOn.setHorizontalAlignment( HorizontalAlignmentType.LEFT );&lt;br /&gt; textAddOn.setVerticalAlignment( VerticalAlignmentType.TOP );&lt;br /&gt; textAddOn.setWrap( true );&lt;br /&gt; textAddOn.setTextBoxBorderColor(&quot;000000&quot;); //Black&lt;br /&gt; textAddOn.setTextBoxBackgroundColor(&quot;c0c0c0&quot;);&lt;br /&gt; textAddOn.setWrapMaxWidth( 30 );&lt;br /&gt; textAddOn.setWrapMaxHeight( 50 );&lt;br /&gt; &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;em&gt;Needle Events&lt;/em&gt;&lt;br /&gt;If your gadget contains a needle, the before and afterDrawNeedle events will be triggered.  Using script the needle can be customized.  The size, color, shape, and various other properties of the needle can be customized.  These events are passed a NeedleWrapper instance, which can be used to get the specific needle type.  For example the following two scripts differentiate between a normal gadget needle and a meter gadget needle.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;function beforeDrawNeedle( needleWrapper, fgsc )&lt;br /&gt;{&lt;br /&gt;   importPackage( Packages.com.actuate.birt.flash.gadgets );&lt;br /&gt;   importPackage( Packages.com.actuate.birt.flash.gadgets.impl );&lt;br /&gt;   // Change needle styles.&lt;br /&gt;   needleWrapper.getNeedle().setShape( Shape.DIAMOND );&lt;br /&gt;   needleWrapper.getNeedle().setFillColor(&quot;2cf83a&quot;);&lt;br /&gt;   needleWrapper.getNeedle().setBorderColor(&quot;007f00&quot;);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function beforeDrawNeedle( needleWrapper, fgsc )&lt;br /&gt;{  &lt;br /&gt;   //Set Needle size to 25%&lt;br /&gt;   needleWrapper.getMeterNeedle().setSize(25);&lt;br /&gt;   needleWrapper.getMeterNeedle().setBackgroundColor(&quot;ff0000&quot;);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Effect Events&lt;/em&gt;&lt;br /&gt;The effect events were described above in the flash charting section.&lt;br /&gt;&lt;br /&gt;Several examples used in this post are available at &lt;a href=&quot;http://www.birt-exchange.org/org/devshare/designing-birt-reports/1253-flash-chart-and-gadget-scripting/&quot;&gt;BIRT-Exchange&lt;/a&gt;.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/14521551-8207792429549444473?l=birtworld.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Fri, 20 Aug 2010 18:29:21 +0000</pubDate>
	<author>noreply@blogger.com (Jason Weathersby)</author>
</item>
<item>
	<title>Bob Brodt: The Eclipse BPEL Designer Project - what’s the deal here?</title>
	<guid isPermaLink="false">http://dev.eclipse.org/blogs/bpel/?p=16</guid>
	<link>http://dev.eclipse.org/blogs/bpel/2010/08/20/the-eclipse-bpel-designer-project-whats-the-deal-here/</link>
	<description>&lt;p&gt;Unless you have been stranded on a deserted island for the last few years you’re probably aware that JBoss/Red Hat has been making some huge contributions in the middleware technology space, both on the tooling and runtime side. The announcements of &lt;a href=&quot;http://www.jboss.org/tools&quot;&gt;JBoss Tools&lt;/a&gt; (the community supported edition) and &lt;a href=&quot;http://devstudio.jboss.com/&quot;&gt;JBoss Developer Studio&lt;/a&gt; (the fully supported, enterprise version) represent an impressive offering of developer tools, plug-ins, APIs, UI components and execution engines that make the SOA architect’s life worth living again. The tooling is built on top of the Eclipse Workbench as a collection of plug-ins and is compatible with the current “Helios” release of eclipse.&lt;/p&gt;
&lt;p&gt;JBoss Tools combines best-of-breed open source and in-house developed software and packages it all up in a neat little bundle so that you can be reasonably assured all of the pieces are going to play nice together. This is no small feat, considering that some of the bits of open source software have all kinds of different version interdependencies and conflicts, a problem which Eclipse plug-in developers have simply accepted as the price to be paid for the privilege of getting to play with &lt;a href=&quot;http://www.eclipsecon.org/2010/&quot;&gt;really cool stuff&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;One of these components, which “yours truly” has recently become very involved in, is the &lt;a href=&quot;http://eclipse.org/bpel&quot;&gt;BPEL Designer &lt;/a&gt;project. It seems that while there has been lots and lots of interest in the community for an editor (other than &lt;a href=&quot;http://en.wikipedia.org/wiki/Editor_war&quot;&gt;“vi” or “emacs”&lt;/a&gt;) that offers not just an enjoyable user experience but also handles validation reasonably well, there has been little progress over the past three years or so. The reasons for the seeming lack of interest in the developer community to contribute to a product that is obviously of great interest, are unknown and unimportant. What is important is that we as a community rekindle the spark and start moving this project forward again.&lt;/p&gt;
&lt;p&gt;Because of my previous &lt;a href=&quot;http://dev.eclipse.org/blogs/bpel/about/&quot;&gt;experience&lt;/a&gt; building EMF/GEF editors, middleware and the like, I have [been] volunteered to “take the helm” and try to help in sparking interest in the community. Over the past few weeks, &lt;a href=&quot;http://dev.eclipse.org/blogs/wayne/&quot;&gt;Wayne Beaton&lt;/a&gt; has been extremely helpful in making this happen (thanks Wayne!) and, hopefully, in the next few weeks we will see a renewed energy over at eclipse.org/bpel &lt;img alt=&quot;:)&quot; class=&quot;wp-smiley&quot; src=&quot;http://dev.eclipse.org/blogs/bpel/wp-includes/images/smilies/icon_smile.gif&quot; /&gt; &lt;/p&gt;
&lt;p&gt;Here are some ideas we’d like to see happen in the near future:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Stabilize the code. It’s “pretty good” currently and will even [almost] build and run on Helios, but there’s always room for improvement.&lt;/li&gt;
&lt;li&gt;Start doing nightly or snapshot builds at eclipse.org and make them available to the community.&lt;/li&gt;
&lt;li&gt;Migrate the existing CVS repository to Git to ease the pain of source code management.&lt;/li&gt;
&lt;li&gt;Get on the eclipse release train. It’s very painful trying to jump a plug-in by more than one major release of eclipse and making sure that we’re always compatible with the current release goes a long way in community acceptance.&lt;/li&gt;
&lt;li&gt;Strongly “encourage” committers to use &lt;a href=&quot;http://en.wikipedia.org/wiki/Test-driven_development&quot;&gt;TDD&lt;/a&gt; methodologies to ensure code quality: submitting a patch? submit a JUnit or SWTBot test along with it, and get a prize!&lt;/li&gt;
&lt;li&gt;Move the project out of incubation and into a top-level project (WTP? SOA? Any takers out there?)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If anyone in the community has any other suggestions, I’d be more than happy to discuss them. We’re always looking for suggestions and help with bug fixes or implementing new features. Please email me at bbrodt@redhat.com, or simply reply to this blog post.&lt;/p&gt;</description>
	<pubDate>Fri, 20 Aug 2010 18:18:22 +0000</pubDate>
</item>
<item>
	<title>Jeff, Paul &amp; Simon: Second printing on the way!</title>
	<guid isPermaLink="false">http://equinoxosgi.org/?p=190</guid>
	<link>http://equinoxosgi.org/2010/08/second-printing-on-the-way/</link>
	<description>&lt;p&gt;I’m pleased to announce that demand for the &lt;a href=&quot;http://equinoxosgi.org&quot;&gt;OSGi and Equinox book&lt;/a&gt; has been quite high. Certainly not NY Times bestseller material but in the 6 months since it has been out we have shipped almost 3500 copies. For context, we are told that selling a total of 10,000 copies for tech a book is a very reasonable number so this is a great start.  In any event, the publisher is running a second printing next week as they are almost out of copies. Paul, Simon and I are just finishing up a few editorial changes and corrections to incorporate reader feedback (thanks!) and then its off to the presses.  Again.&lt;/p&gt;</description>
	<pubDate>Fri, 20 Aug 2010 14:34:22 +0000</pubDate>
</item>

</channel>
</rss>
