<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>TechJava&#187; TechJava &#8211; Articles tagged by bundle</title>
	<atom:link href="http://www.techjava.de/topics/tag/bundle/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.techjava.de</link>
	<description>Journal on Java Technology</description>
	<lastBuildDate>Thu, 17 Jun 2010 10:41:29 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Launching Eclipse RCP via Java Web Start</title>
		<link>http://www.techjava.de/topics/2010/02/launching-rcp-via-jws/</link>
		<comments>http://www.techjava.de/topics/2010/02/launching-rcp-via-jws/#comments</comments>
		<pubDate>Wed, 03 Feb 2010 16:32:15 +0000</pubDate>
		<dc:creator>Simon Zambrovski</dc:creator>
				<category><![CDATA[eclipse]]></category>
		<category><![CDATA[enterprise systems]]></category>
		<category><![CDATA[rcp]]></category>
		<category><![CDATA[Application id not found]]></category>
		<category><![CDATA[bundle]]></category>
		<category><![CDATA[delivery]]></category>
		<category><![CDATA[export]]></category>
		<category><![CDATA[Java Web Start]]></category>
		<category><![CDATA[JNLP]]></category>
		<category><![CDATA[JWS]]></category>
		<category><![CDATA[osgi]]></category>
		<category><![CDATA[packaging]]></category>

		<guid isPermaLink="false">http://www.techjava.de/?p=582</guid>
		<description><![CDATA[The Eclipse RCP became a prominent platform for building client software. One of the delivery mechanisms supported by Eclipse RCP is Sun&#8217;s Java Web Start (JWS). Since Galileo Edition some changes has been introduced in the platform. This article provides some hints for creation of the RCP delivered by Java Web Start.
Packaging
In order to package [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.techjava.de/wp-content/uploads/eclipse-rcp.png" alt="" title="eclipse-rcp" width="237" height="237" style="float:right; margin:5px" />The Eclipse RCP became a prominent platform for building client software. One of the delivery mechanisms supported by Eclipse RCP is Sun&#8217;s Java Web Start (JWS). Since Galileo Edition some changes has been introduced in the platform. This article provides some hints for creation of the RCP delivered by Java Web Start.</p>
<h2>Packaging</h2>
<p>In order to package the RCP I suggest to use feature-based products as described in 
<a  href="http://www.techjava.de/topics/2009/07/packaging-eclipse-based-rcp-for-the-use-in-enterprise-context/">a previous article</a>. Following it, you should have a top-level plug-in (also refered as product-defining plug-in) and top-level feature, which is called &#8220;wrap&#8221;-feature in the context of the Java Web Start. </p>
<h3>Exporting the product</h3>
<p>Before you start with Java Web Start (JWS), export the product and make sure it starts as a standalone application. In doing so, you have to ensure that your references to the plug-ins are correct. One of the way of doing it is to hit the Validate button in the top left of the product editor. <img src="http://www.techjava.de/wp-content/uploads/validate-product.png" alt="" title="validate-product" width="196" height="79" style="float:right; margin:5px;" /> If the validation is successful, try to export the product. The PDE builder will run and create a distribution. The errors of the compiler/builder/assembler, if any, are reported to files zipped to the <code>logs.zip</code> file in the distribution directory. <span id="more-582"></span> A prominent error is</p>
<pre class="brush: plain; light: true;">
Compliance level '1.3' is incompatible with source level '1.6'. A compliance level '1.6' or better is required.
</pre>
<p>Which actually means that the plug-in classes has not been compiled at all. In order to avoid this error make sure to set the following properties in the <code>build.properties</code> file of the corresponding plug-in:</p>
<pre class="brush: plain; light: true;">
javacSource=1.3
javacTarget=1.3
</pre>
<h3>Exporting the wrap-feature</h3>
<p>After a successful export of the product, just export the top-level feature (the wrap-feature). Make sure to provide the signing information, since JWS requires all resources to be signed. If you are aiming to deliver for different platforms, make sure to define a target platform (<strong>Window > Preferences > Plug-in Development > Target Platform</strong>) which contains a Delta Pack. A Delta Pack is a set of plug-ins which can be downloaded separately on the 
<a  href="http://ww.eclipse.org/downloads/" onclick="javascript:pageTracker._trackPageview('/external/ww.eclipse.org/downloads/');" >Eclipse Homepage</a>. Also, don&#8217;t forget to switch over to the Java Web Start tab of the Feature Export Wizard, activate the checkbox &#8220;Create JNLP manifest for the JAR archives&#8221; and specify the site URL where the resulting JNLP will be located. Make sure all your features has the provider attribute set, since it is used as the &#8220;vendor&#8221; inside of the JNLP file, which is a mandatory attribute.</p>
<h3>Creating the main JNLP</h3>
<p>The PDE build will run and create a distribution in the specified directory. Along with the exported JARs in features and plug-ins, the packaging script will generate the JNLP descriptors for every feature. Still, the main JNLP file required for launching the application is missing and has to be provided separately. Here is, how it looks like:</p>
<pre class="brush: xml;">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;jnlp spec=&quot;1.0+&quot; codebase=&quot;http://localhost/app/&quot; href=&quot;app.jnlp&quot;&gt;
    &lt;information&gt;
        &lt;title&gt;application titel&lt;/title&gt;
        &lt;vendor&gt;provider&lt;/vendor&gt;
        &lt;offline-allowed/&gt;
    &lt;/information&gt;

    &lt;security&gt;
        &lt;all-permissions/&gt;
    &lt;/security&gt;

    &lt;application-desc main-class=&quot;org.eclipse.equinox.launcher.WebStartMain&quot;&gt;
	&lt;argument&gt;-product&lt;/argument&gt;
	&lt;argument&gt;de.techjava.app.webstart.productid&lt;/argument&gt;
	&lt;argument&gt;-application&lt;/argument&gt;
	&lt;argument&gt;de.techjava.app.webstart.appid&lt;/argument&gt;
    &lt;/application-desc&gt;

    &lt;resources&gt;
        &lt;j2se version=&quot;1.4+&quot; ax-heap-size=&quot;128m&quot; /&gt;
	&lt;jar href=&quot;plugins/org.eclipse.equinox.launcher_1.0.201.R35x_v20090715.jar&quot;/&gt;
	&lt;extension name=&quot;wrap feature&quot; href=&quot;features/wrap_feature_1.0.0.jnlp&quot; /&gt;
	&lt;!-- OSGI setup --&gt;
        &lt;property name=&quot;osgi.instance.area&quot; value=&quot;@user.home/app&quot;/&gt;
        &lt;property name=&quot;osgi.configuration.area&quot; value=&quot;@user.home/app&quot;/&gt;
    &lt;/resources&gt;
&lt;/jnlp&gt;
</pre>
<p>Important is to specify both, the <strong>product id</strong> and the <strong>applciation id</strong>, otherwise you will see the &#8220;Application id not found&#8221; exception. Of course you can specify 
<a  href="http://help.eclipse.org/galileo/topic/org.eclipse.platform.doc.isv/reference/misc/runtime-options.html" onclick="javascript:pageTracker._trackPageview('/external/help.eclipse.org/galileo/topic/org.eclipse.platform.doc.isv/reference/misc/runtime-options.html');" >additional options</a> as command-line arguments of the launcher itself. I found it useful to be able to let the OSGi running and then connect to it and query for loaded bundles. You can do it by adding the following arguments:</p>
<pre class="brush: xml;">
	&lt;argument&gt;-console&lt;/argument&gt;
	&lt;argument&gt;1234&lt;/argument&gt;
	&lt;argument&gt;-noExit&lt;/argument&gt;
</pre>
<p>This will allow to connect via telnet with running OSGi, even after the application finishes.<br />
This is basically it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.techjava.de/topics/2010/02/launching-rcp-via-jws/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>OSGi: Why Modularity is Important.</title>
		<link>http://www.techjava.de/topics/2008/09/osgi-why-modularity-is-important/</link>
		<comments>http://www.techjava.de/topics/2008/09/osgi-why-modularity-is-important/#comments</comments>
		<pubDate>Wed, 10 Sep 2008 10:16:18 +0000</pubDate>
		<dc:creator>Simon Zambrovski</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[bundle]]></category>
		<category><![CDATA[Event]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[Hamburg]]></category>
		<category><![CDATA[hotel east]]></category>
		<category><![CDATA[osgi]]></category>
		<category><![CDATA[peter kriens]]></category>

		<guid isPermaLink="false">http://www.techjava.de/?p=120</guid>
		<description><![CDATA[
Yesterday, the 
OSGi session took place in 
Hotel East in Hamburg. 
Peter Kriens, the OSGi evangelist showed a wonderful 
Zen Presentation on OSGi. I wrote a lot during his talk which happens to me very seldom. Here are the core statements I understood:

The core difference between usual plugin architectures and OSGi is that OSGi concentrates [...]]]></description>
			<content:encoded><![CDATA[<p><img style="border: 1px solid black; margin: 4px;" src="http://farm4.static.flickr.com/3250/2844821687_ea54b10e51_m.jpg" alt="OSGi HH" width="120" height="180" /><img style="border: 1px solid black; margin: 4px;" src="http://farm4.static.flickr.com/3172/2844822729_ed696da911_m.jpg" alt="OSGi HH" width="180" height="120" /><img style="border: 1px solid black; margin: 4px;" src="http://farm4.static.flickr.com/3012/2844827273_332a7c565e_m.jpg" alt="OSGi HH" width="120" height="180" /></p>
<p>Yesterday, the 
<a  href="http://www.techjava.de/topics/2008/09/osgi-session-in-east-hotel-hamburg/">OSGi session</a> took place in 
<a  href="http://www.east-hamburg.de/" onclick="javascript:pageTracker._trackPageview('/external/www.east-hamburg.de/');" >Hotel East</a> in Hamburg. 
<a  href="http://www.aqute.biz/Main/HomePage" onclick="javascript:pageTracker._trackPageview('/external/www.aqute.biz/Main/HomePage');" >Peter Kriens</a>, the OSGi evangelist showed a wonderful 
<a  href="http://www.presentationzen.com/" onclick="javascript:pageTracker._trackPageview('/external/www.presentationzen.com/');" >Zen Presentation</a> on OSGi. I wrote a lot during his talk which happens to me very seldom. Here are the core statements I understood:</p>
<ul>
<li>The core difference between usual plugin architectures and OSGi is that OSGi concentrates on collaboration of the components.</li>
<li>OSGi delivers a controlled environment, in which the question if a component runs or not can be answered in beforehand.</li>
<li>OSGi bundles use metadata (about versions, dependencies, etc) to predict an error, not discover it in runtime.</li>
<li>OSGi has a very narrow API containing the minimal common part.</li>
<li>OSGi consists of module, life cycle and services layers. The initially developed services layer required smart class loading mechanisms (module layer).</li>
</ul>
<ol>
<li>The module layer is desigend to control the class loading machanisms (e.G. structureal class loader hierarchies instead of a linear classpath)</li>
<li>Life cycle layer adds a management API (e.G. inform the others about installation event)</li>
<li>Separation of concerns is promoted by definition of services for different tasks.</li>
</ol>
<ul>
<li>Services are used for decoupling of system parts (This is a standard application of service-orientation).</li>
<li>OSGI makes dependencies explicit (private, import, export)</li>
<li>OSGI tries to make the system managable, taking dynamics and lifecycle as fisrst-class citizens</li>
<li>OSGI will be extended to support distribution: the team works on policies, SLAs, etc&#8230;</li>
</ul>
<p>I liked the talk and the way how Peter Kriens addressed the problems of OO. I was confirmed in some ideas about coupling that will be layed out in my thesis. After the presentation we had a delicious meal and wraped up the evening with interesting discussion about pros and contras of OSGi. 
<a  href="http://www.peterfriese.de/" onclick="javascript:pageTracker._trackPageview('/external/www.peterfriese.de/');" >Peter Friese</a> showed me some 
<a  href="http://r-osgi.sourceforge.net/" onclick="javascript:pageTracker._trackPageview('/external/r-osgi.sourceforge.net/');" >remote OSGi</a> staff, he was playing with. The lack of documentation in this area makes it a little difficult, but I hope he will post some news on it. As usual, you can find other pictures in my 
<a  href="http://www.flickr.com/photos/sza/sets/72157607211061354/" onclick="javascript:pageTracker._trackPageview('/external/www.flickr.com/photos/sza/sets/72157607211061354/');" >FlickR gallery</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.techjava.de/topics/2008/09/osgi-why-modularity-is-important/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
