# Eclipse Mail Beispiel RCP Anwendung via Java Webstart ausführen



## Thomas Darimont (2. September 2008)

Hallo,

hier mal eine möglicher Weg wie man eine Eclipse RCP Anwendung
über Java Webstart ausführen lassen kann, veranschaulicht am Beispiel der RCP Mail 
Beispielanwendung.

Dazu müssen wir das die RCP Mail Beispielanwendung erst mal eine Produktkonfiguration anlegen und dann in ein Feature Packen. 
Anschließend müssen wir einen Keystore anlegen, da wir die verwendeten jars signieren müssen.
Danach exportieren wir das Feature ein Verzeichnis einer tomcat Webapp
und ändern die vom Eclipse Feature Export Wizzard generierte jnlp 

(Webstart Deployment Descriptor so ab, dass er auch funktioniert...)

In meinem Beispiel verwende ich das Eclipse 3.4 SDK, java version 

"1.6.0_10-beta" und Windows Vista.

1) Key Store anlegen (falls noch nicht vorhanden)
Wie man das macht findet man u.a. hier:
http://www.tutorials.de/forum/java/232026-textdateien-mit-applet-

auslesen.html

Der default Keystore befindet sich dann in eurem Home Verzeichnis als 

.keystore. Bei mir: C:\Users\Tom\.keystore

2) RCP Mail Beispiel Anwendung anlegen (Name: mail)
Wie man das Beispiel anlegt findet man u.a. hier:
http://www.eclipse.org/articles/Article-RCP-3/tutorial3.html

Anschließend fügen wir hier noch die Abhängigkeit zu
org.eclipse.equinox.launcher hinzu.

3) Nun legen wir eine Produkt Konfiguration an die auf Features basiert.
-> Mail Projekt markieren -> Kontextmenü -> New -> Product Configuration
-> und nennen es mail.product 
-> Zum Testen klicken wir nun im mail.product Overview auf Launch Eclipse Application.

4) Nun legen wir ein Feature an (Name: mailFeature)
   -> Hier sagen wir nun Intialize from a launch configuration
   -> hier mail.product auswählen.
   -> finish

5) Nun exportieren wir unser mailFeature
   -> als Deployable Features
   -> wir wählen unser mailFeature
   -> wir klicken auf den Tab destination
   -> dort geben wir unseren Zielordner an Beispielsweise:
   -> D:\stuff\apache-tomcat-6.0.18\webapps\jws\tutorials
   -> wir klicken auf den Tab options
   -> "Package as individual Jar archives"
   -> wir klicken auf den Tab Jar signing
   -> "Sign the jar archives using a keystore" auswählen
   -> entsprechende Keystore Location / Alias und Passwort eingeben.
   -> wir klicken auf den Tab java web start
   -> "Create JNLP manifests for the jar archives" auswählen
   -> Site URL: http://meinHostName:8080/jws/tutorials
   -> Bei JRE Version gebt ihr die gewünschte Mindest Java Version an:
   -> Im Beispiel 1.6+ 
   -> finish

6) Nun starten wir unseren Webserver (in meinem Fall tomcat) 

Anschließend wurde im Verzeichnis D:\stuff\apache-tomcat-6.0.18\webapps\jws\tutorials\features
Die Datei mailFeature_1.0.0.jnlp erzeugt.
Diese kopieren wir nach D:\stuff\apache-tomcat-6.0.18\webapps\jws\tutorials und benennen sie in start_mail.jnlp um.

Diese Datei hat folgenden Inhalt:

```
<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="http://meinHostName:8080/jws/tutorials/start.jnlp">
    <information>
        <title>MailFeature Feature</title>
        <offline-allowed/>
    </information>
    <security>
        <all-permissions/>
    </security>
    <component-desc/>
    <resources>
        <j2se version="1.6+" />
    </resources>
    <resources>
        <jar href="plugins/com.ibm.icu_3.8.1.v20080530.jar"/>
        <jar href="plugins/javax.servlet_2.4.0.v200806031604.jar"/>
        <jar href="plugins/mail_1.0.0.jar"/>
        <jar href="plugins/org.eclipse.core.commands_3.4.0.I20080509-2000.jar"/>
        <jar href="plugins/org.eclipse.core.contenttype_3.3.0.v20080604-1400.jar"/>
        <jar href="plugins/org.eclipse.core.databinding_1.1.0.I20080527-2000.jar"/>
        <jar href="plugins/org.eclipse.core.expressions_3.4.0.v20080603-2000.jar"/>
        <jar href="plugins/org.eclipse.core.jobs_3.4.0.v20080512.jar"/>
        <jar href="plugins/org.eclipse.core.runtime_3.4.0.v20080512.jar"/>
        <jar href="plugins/org.eclipse.core.runtime.compatibility.auth_3.2.100.v20070502.jar"/>
        <jar href="plugins/org.eclipse.core.runtime.compatibility.registry_3.2.200.v20080610.jar"/>
        <jar href="plugins/org.eclipse.equinox.app_1.1.0.v20080421-2006.jar"/>
        <jar href="plugins/org.eclipse.equinox.common_3.4.0.v20080421-2006.jar"/>
        <jar href="plugins/org.eclipse.equinox.launcher_1.0.100.v20080509-1800.jar"/>
        <jar href="plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.0.100.v20080509-1800.jar"/>
        <jar href="plugins/org.eclipse.equinox.preferences_3.2.200.v20080421-2006.jar"/>
        <jar href="plugins/org.eclipse.equinox.registry_3.4.0.v20080516-0950.jar"/>
        <jar href="plugins/org.eclipse.help_3.3.100.v20080610.jar"/>
        <jar href="plugins/org.eclipse.jface_3.4.0.I20080606-1300.jar"/>
        <jar href="plugins/org.eclipse.jface.databinding_1.2.0.I20080515-2000a.jar"/>
        <jar href="plugins/org.eclipse.osgi_3.4.0.v20080605-1900.jar"/>
        <jar href="plugins/org.eclipse.osgi.services_3.1.200.v20071203.jar"/>
        <jar href="plugins/org.eclipse.swt_3.4.0.v3448f.jar"/>
        <jar href="plugins/org.eclipse.swt.win32.win32.x86_3.4.0.v3448f.jar"/>
        <jar href="plugins/org.eclipse.ui_3.4.0.I20080610-1200.jar"/>
        <jar href="plugins/org.eclipse.ui.workbench_3.4.0.I20080606-1300.jar"/>
    </resources>
</jnlp>
```

Versucht man nun die Anwendung via Webstart über die URL: http://localhost:8080/jws/tutorials/start_mail.jnlp
aufzurufen sieht man, dass die generierte jnlp Datei doch noch nicht vollständig / lauffähig ist.

Wir müssen nun noch:
-> ein <vendor>-Element hinzufügen,
-> das <jar href="plugins/org.eclipse.equinox.launcher_1.0.100.v20080509-1800.jar"/> als ERSTEN <jar>-Eintrag der ressources Liste angeben (sonst startet es nicht -> Klasse org.eclipse.equinox.launcher.WebStartMain wird nicht gefunden ) Hier ist JWS anscheinend von der Reihenfolge abhängig

-> Die main-class und Eclipse / Equinox Spezifische Properties mitgeben:

```
<application-desc main-class="org.eclipse.equinox.launcher.WebStartMain">
    <argument>-nosplash</argument>
  </application-desc> 

    <resources>
        <j2se version="1.6+" />
              <property name="eclipse.product" value="mail.product"/> 
      <property 
        name="osgi.instance.area" 
        value="@user.home/Application Data/mail"/>
    <property 
        name="osgi.configuration.area" 
        value="@user.home/Application Data/mail"/>
    </resources>
```

Hier das komplette (funktionierende JNLP File)
start_mail.jnlp:

```
<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="http://meinHostName:8080/jws/tutorials">
    <information>
        <title>MailFeature Feature</title>
        <vendor>tutorials.de</vendor>
        <offline-allowed/>
    </information>
    <security>
        <all-permissions/>
    </security>
    <component-desc/>
    <application-desc main-class="org.eclipse.equinox.launcher.WebStartMain">
        <argument>-nosplash</argument>
    </application-desc> 
    <resources>
        <j2se version="1.6+" />
              <property name="eclipse.product" value="mail.product"/> 
      <property 
        name="osgi.instance.area" 
        value="@user.home/Application Data/mail"/>
    <property 
        name="osgi.configuration.area" 
        value="@user.home/Application Data/mail"/>
    </resources>
    <resources>
        <jar href="plugins/org.eclipse.equinox.launcher_1.0.100.v20080509-1800.jar"/>
        <jar href="plugins/com.ibm.icu_3.8.1.v20080530.jar"/>
        <jar href="plugins/javax.servlet_2.4.0.v200806031604.jar"/>
        <jar href="plugins/mail_1.0.0.jar"/>
        <jar href="plugins/org.eclipse.core.commands_3.4.0.I20080509-2000.jar"/>
        <jar href="plugins/org.eclipse.core.contenttype_3.3.0.v20080604-1400.jar"/>
        <jar href="plugins/org.eclipse.core.databinding_1.1.0.I20080527-2000.jar"/>
        <jar href="plugins/org.eclipse.core.expressions_3.4.0.v20080603-2000.jar"/>
        <jar href="plugins/org.eclipse.core.jobs_3.4.0.v20080512.jar"/>
        <jar href="plugins/org.eclipse.core.runtime_3.4.0.v20080512.jar"/>
        <jar href="plugins/org.eclipse.core.runtime.compatibility.auth_3.2.100.v20070502.jar"/>
        <jar href="plugins/org.eclipse.core.runtime.compatibility.registry_3.2.200.v20080610.jar"/>
        <jar href="plugins/org.eclipse.equinox.app_1.1.0.v20080421-2006.jar"/>
        <jar href="plugins/org.eclipse.equinox.common_3.4.0.v20080421-2006.jar"/>
        <jar href="plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.0.100.v20080509-1800.jar"/>
        <jar href="plugins/org.eclipse.equinox.preferences_3.2.200.v20080421-2006.jar"/>
        <jar href="plugins/org.eclipse.equinox.registry_3.4.0.v20080516-0950.jar"/>
        <jar href="plugins/org.eclipse.help_3.3.100.v20080610.jar"/>
        <jar href="plugins/org.eclipse.jface_3.4.0.I20080606-1300.jar"/>
        <jar href="plugins/org.eclipse.jface.databinding_1.2.0.I20080515-2000a.jar"/>
        <jar href="plugins/org.eclipse.osgi_3.4.0.v20080605-1900.jar"/>
        <jar href="plugins/org.eclipse.osgi.services_3.1.200.v20071203.jar"/>
        <jar href="plugins/org.eclipse.swt_3.4.0.v3448f.jar"/>
        <jar href="plugins/org.eclipse.swt.win32.win32.x86_3.4.0.v3448f.jar"/>
        <jar href="plugins/org.eclipse.ui_3.4.0.I20080610-1200.jar"/>
        <jar href="plugins/org.eclipse.ui.workbench_3.4.0.I20080606-1300.jar"/>
    </resources>
</jnlp>
```

Ruft man nun im Browser die entsprechende URL zum JNLP Deskriptor auf:
Beispielsweise: http://meinHostName:8080/jws/tutorials/start_mail.jnlp

So wird Java Web Start aktiv, lädt die Jars runter und fragt nach ob dem
Zertifkat der Anwendung getraut werden soll. Bestätigt man dies sollte
die RCP Mail Beispielanwendung ohne zu murren auf dem Bildschirm erscheinen.

Gruß Tom


----------



## firmadankt (12. September 2008)

Hallo Thomas,

meines Wissens müssen jar-files, die man via Webstart benutzen will, signiert werden. 

Gibt es da eine allgemeine Lösung, wie man auch unsignierte jars  von Drittanbietern benutzen kann?

Ich denke mir, dass es Probleme mit der Lizens geben kann, wenn man die jars von Drittanbietern signiert?!


----------



## freshmaker (14. November 2008)

Hallo Thomas,

um erste Erfahrungen mit javaws und RCP zu sammeln habe auch ich dein Beispiel eins zu eins nachgebaut. Leider ohne Erfolg...
Die Webstart Applikation wird gestart und auch im Cache gespeichert. Ich werde auch nach der Authentifizierung gefragt, jedoch passiert danach garnichts mehr!
Leider weiss ich nicht was ich Falsch gemacht habe. Vielleicht kannst du mir helfen.
(Ich nutze auch java 1.6 und eclipse sdk 3.4)

Hier mein Code:

<?xml version="1.0" encoding="UTF-8"?>
 <jnlp spec="1.0+" codebase="file:C:/site">    
 <information>        
 <title>MailFeature Feature</title>        
 <vendor>TestVenodr</vendor>        
 	<offline-allowed/>    
 </information>    
 <security>
 	<all-permissions/>    
 </security>    
 <component-desc/>    
 	<application-desc main-class="org.eclipse.equinox.launcher.WebStartMain">        
 <argument>-nosplash</argument>    
 </application-desc>     
 <resources>        
 <j2se version="1.6+" />             
	 <property name="eclipse.product" value="mail.product"/>       
	 <property name="osgi.instance.area" value="@user.home/Application Data/mail"/>    
 	<property name="osgi.configuration.area" value="@user.home/Application Data/mail"/>    
 </resources>    
 <resources>       
 	 <jar href="plugins/org.eclipse.equinox.launcher_1.0.100.v20080509-1800.jar"/>     
	 <jar href="plugins/com.ibm.icu_3.8.1.v20080530.jar"/>        
	 <jar href="plugins/javax.servlet_2.4.0.v200806031604.jar"/>        
	 <jar href="plugins/mail_1.0.0.jar"/>        
	 <jar href="plugins/org.eclipse.core.commands_3.4.0.I20080509-2000.jar"/>        
	 <jar href="plugins/org.eclipse.core.contenttype_3.3.0.v20080604-1400.jar"/>        
	 <jar href="plugins/org.eclipse.core.databinding_1.1.0.I20080527-2000.jar"/>        
	 <jar href="plugins/org.eclipse.core.expressions_3.4.0.v20080603-2000.jar"/>        
	 <jar href="plugins/org.eclipse.core.jobs_3.4.0.v20080512.jar"/>        
	 <jar href="plugins/org.eclipse.core.runtime_3.4.0.v20080512.jar"/>        
	 <jar href="plugins/org.eclipse.core.runtime.compatibility.auth_3.2.100.v20070502.jar"/>       
	  <jar href="plugins/org.eclipse.core.runtime.compatibility.registry_3.2.200.v20080610.jar"/>        
	  <jar href="plugins/org.eclipse.equinox.app_1.1.0.v20080421-2006.jar"/>        
	  <jar href="plugins/org.eclipse.equinox.common_3.4.0.v20080421-2006.jar"/>        
	  <jar href="plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.0.100.v20080509-1800.jar"/>        
	  <jar href="plugins/org.eclipse.equinox.preferences_3.2.200.v20080421-2006.jar"/>        
	  <jar href="plugins/org.eclipse.equinox.registry_3.4.0.v20080516-0950.jar"/>        
	  <jar href="plugins/org.eclipse.help_3.3.100.v20080610.jar"/>        
	  <jar href="plugins/org.eclipse.jface_3.4.0.I20080606-1300.jar"/>        
	  <jar href="plugins/org.eclipse.jface.databinding_1.2.0.I20080515-2000a.jar"/>        
	  <jar href="plugins/org.eclipse.osgi_3.4.0.v20080605-1900.jar"/>        
	  <jar href="plugins/org.eclipse.osgi.services_3.1.200.v20071203.jar"/>        
	  <jar href="plugins/org.eclipse.swt_3.4.0.v3448f.jar"/>        
	  <jar href="plugins/org.eclipse.swt.win32.win32.x86_3.4.0.v3448f.jar"/>        
	  <jar href="plugins/org.eclipse.ui_3.4.0.I20080610-1200.jar"/>        
	  <jar href="plugins/org.eclipse.ui.workbench_3.4.0.I20080606-1300.jar"/>    
  </resources>
  </jnlp> 

Danke!


----------



## thomasmalcom (24. Oktober 2011)

Ich habe das Problem, dass bei mir kein "feature" jnlp erzeugt wird.
ich verwende Eclipse 3.5 R2 unter Windows und bin genau nach der Anleitung vorgegangen
und verwende Tomcat 6.0.29.

in der Anleitung stand 

_6) Nun starten wir unseren Webserver (in meinem Fall tomcat) 

Anschließend wurde im Verzeichnis D:\stuff\apache-tomcat-6.0.18\webapps\jws\tutorials\features
Die Datei mailFeature_1.0.0.jnlp erzeugt."_

Entsteht das JNLP durch "hochfahren" des Tomcat oder durch den Eclipse Exporter Plugin? (bei mir entsteht es in keinem Fall)

Könnte es eventuell ein Eclipse Galileo Bug sein und ich sollte einfach ein neues Eclipse verwenden?

Vielen lieben Dank für die Hilfe.

Lg
 Thomas


----------

