Jason Robbins has implemented JNLP and/or Web Start for Argo/UML
<http://argouml.tigris.org/>.

Dan


Jon Stevens <[EMAIL PROTECTED]> writes:

> Parts of this sound like the PERFECT candidate for a framework for a CJAN.
> 
> It probably sucks though. Anyone use it?
> 
> -jon
> 
> From: "JDC Tech Tips" <[EMAIL PROTECTED]>
> Subject: JDC Tech Tips  May 30, 2001
> To: [EMAIL PROTECTED]
> Date: Wed, 30 May 2001 14:13:43 PDT
> 
>  J  D  C    T  E  C  H    T  I  P  S
> 
>                       TIPS, TECHNIQUES, AND SAMPLE CODE
> 
> 
> WELCOME to the Java Developer Connection(sm) (JDC) Tech Tips,
> May 30, 2001. This issue covers the Java(tm) Network Launching
> Protocol (JNLP) and its reference implementation, Java(tm)
> Web Start.
>         
> This tip was developed using Java 2 SDK, Standard Edition,
> v 1.3.
> 
> This issue of the JDC Tech Tips is written by Stuart Halloway,
> a Java specialist at DevelopMentor (http://www.develop.com/java).
> 
> You can view this issue of the Tech Tips on the Web at
> http://java.sun.com/jdc/JDCTechTips/2001/tt0530.html
> 
> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> THE JAVA NETWORK LAUNCHING PROTOCOL (JNLP) AND JAVA WEB START
> 
> During the early days of the Java Programming Language, much
> emphasis was placed on client-side development. Support in the
> language for applets and for the secure downloading of code
> seemed ideal for delivering function over the World Wide Web.
> However the reality is that the Java Programming Language's
> greatest success has been on the server side. The language's
> power and flexibility has won the hearts and minds of
> server-side developers. Meanwhile, development on the client
> side has lagged. Tricky deployment problems have limited the
> utility of applets, and developers have been forced to turn to
> browser-based "thin" clients.
> 
> The Java Network Launching Protocol (JNLP) promises to change all
> that. Developed through the Java Community Process as JSR-56,
> JNLP solves many of the previous problems in deploying Java
> function to the client. A JNLP client is an application or
> service that can launch applications from resources hosted on
> a network. If you package an application with JNLP, then a JNLP
> client can:
> 
> o Detect, install, and use the correct version of the Java
>   Runtime Environment for the application
> o Launch the application from the browser or the desktop
> o Automatically download newer versions of the application as
>   they become available
> o Cache classes used by the application locally for fast startup
> o Run as either an applet or an application
> o Download native libraries if necessary
> o Use local resources, such as the filesystem, in a secure way
> o Automatically locate and load external dependencies
> 
> Sun Microsystems provides a reference implementation of JNLP
> called Java Web Start. Let's use it to deploy a simple
> application that uses JFC Swing classes. To do this, you will
> need to download Java Web Start from
> http://java.sun.com/products/javawebstart.
> 
> Here's the code for the application:
> 
> //File HelloJNLP.java
> import javax.swing.*;
> import java.awt.*;
> import java.awt.event.*;
> 
> public class HelloJNLP extends JFrame {
>   public HelloJNLP() {
>     super("Hello JNLP");
>     String loadedFrom = this.getClass().getClassLoader().toString();
>     JLabel jl = new JLabel("loaded by " + loadedFrom);
>     JEditorPane jtp = new JEditorPane("text/plain",
>                                                   "Edit this text");
>     getContentPane().add(jl, BorderLayout.NORTH);
>     getContentPane().add(jtp, BorderLayout.CENTER);
>   }
> 
>   public static void main(String [] args) {
>     JFrame f = new HelloJNLP();
>     f.setBounds(100,100,325,250);
>     f.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
>     f.setVisible(true);
>     f.addWindowListener(new WindowAdapter() {
>       public void windowClosed(WindowEvent e) {
>         System.out.println("Shutting down...");
>         System.exit(0);
>       }
>     });
>   }
> }
> 
> At the core of JNLP is a deployment manifest. The deployment
> manifest is an XML file with the extension .jnlp (the JNLP
> specification simply calls it the "JNLP file"). To deploy the
> HelloJNLP application, you need to describe it with a JNLP file,
> like this:
> 
> <?xml version="1.0" encoding="UTF-8"?>
> <!-- file Hello.jnlp -->
> <jnlp codebase="http://staff.develop.com/halloway/TechTips/May2001";
> href="http://staff.develop.com/halloway/TechTips/May2001/Hello.jnlp";>
>         <information>
>     <title>Hello</title>
>     <vendor>Tech Tips Sample May 2001</vendor>
>     <icon href="HelloJNLP.jpg"/>
>   </information>
>   <resources>
>     <j2se version="1.2+"/>
>     <jar href="HelloJNLP.jar"/>
>   </resources>
>   <application-desc main-class="HelloJNLP"/>
> </jnlp>
> 
> This manifest contains all the information that a client needs
> to download and use the HelloJNLP application:
> 
> o The jnlp element's codebase attribute specifies the top-level
>   URL to search for application resources.
> o The information element specifies information that a JNLP user
>   interface can display to the client.
> o The j2se element specifies that the client must have
>   version 1.2 or later of J2SE(tm). (This is a big improvement
>   over applet deployment, which is often stuck with whatever
>   VM the browser supplies.)
> o The jar element specifies the location of the application JAR
>   file, relative to the jnlp codebase.
> o The application-desc element specifies the class to run. You
>   can add subelements to specify command line arguments or
>   system properties.
> 
> To deploy the application to a web server, you need to execute
> the following steps:
> 
> 1. Change the URLs in the jnlp codebase and href attributes to
>    appropriate URLs for your web server.
>     
> 2. Deploy the JNLP file to the web server.
> 
> 3. Compile and JAR the HelloJNLP.java file, and deploy it to the
>    web server. For example:
>    
>    jar cvf HelloJNLP.jar HelloJNLP.class HelloJNLP$1.class
>    
> 4. Create an icon HelloJNLP.jpg and install it on the web server.
>    You can use the one at
>    http://staff.develop.com/halloway/TechTips/May2001/HelloJNLP.jpg
>    
> 5. Set your web server's mime-type associations to map .jnlp to
>    the mime-type application/x-java-jnlp-file. For example, with
>    Apache, add the following to mime.types:
>    
>    application/x-java-jnlp-file    jnlp
>    
> 6. Restart the web server.
> 
> To execute the application from a client machine, first make sure
> that you have installed Java Web Start. Then simply point your
> browser to the URL for the jnlp file. The Java Web Start client
> will download the jnlp file, download the necessary resources,
> and launch the application. What you should see is the text "Edit
> this text" displayed in an editor. If you are having trouble
> configuring the web server, or do not have access to a web server,
> you can also launch this application from
> http://staff.develop.com/halloway/TechTips/May2001/Hello.jnlp
> 
> Notice that HelloJNLP is not running as an applet inside the
> browser, but as a separate, standalone application.
> 
> When you close the application, HelloJNLP uses System.out to
> print the message "Shutting down..." However, no console is
> visible. The console is one of many settings that Java Web Start
> sets to "off" by default. This is one of a pair of settings that
> you should change, as follows:
> 
> 1. Edit the javaws.cfg file in the Java Web Start install
>    directory. Add the line "javaws.cfg.forceUpdate=true". This
>    causes Java Web Start to automatically check for newer
>    versions before starting an application.
>    
> 2. Run the Java Web Start application. Under File->Preferences,
>    go to the Advanced Tab and select "Show Java Console". Also,
>    select "Log Output" and log output to a file of your choice.
>    This is very helpful when you are debugging and need to catch
>    System.out and System.err.
> 
> The HelloJNLP application displays an editor, but the editor's
> contents are lost when you close the application. Add the
> following code to HelloJNLP to automatically save the editor
> state to the client hard drive:
> 
> //changes to HelloJNLP.java
> import java.io.*;
> import java.net.*;
> import javax.jnlp.*;
> 
>   //replace the constructor with this new version:
>   JEditorPane jtp;
>   public HelloJNLP() {
>     super("Hello JNLP, Second Version");
>     String loadedFrom = this.getClass().getClassLoader().toString();
>     JLabel jl = new JLabel("loaded by " + loadedFrom);
>     jtp = new JEditorPane("text/plain", "Edit this text");
>     readEditorContents();
>     getContentPane().add(jl, BorderLayout.NORTH);
>     getContentPane().add(jtp, BorderLayout.CENTER);
> 
>     addWindowListener(new WindowAdapter() {
>         public void windowClosed(WindowEvent e) {
>           System.out.println("Shutting down...");
>           try {
>             writeEditorContents();
>           }
>           catch (Exception ex) {
>             System.out.println("Yoinks!");
>             ex.printStackTrace();
>           }
>           System.exit(0);
>         }
>       });
>   }
> 
>   //add these helper methods
>   private void writeEditorContents() throws
>                 UnavailableServiceException, IOException {
>       System.out.println("writeEditorContents");
>     PersistenceService ps = (PersistenceService)
>       ServiceManager.lookup("javax.jnlp.PersistenceService");
>     BasicService bs = (BasicService)
>       ServiceManager.lookup("javax.jnlp.BasicService");
>     URL baseURL = bs.getCodeBase();
>     System.out.println("CodeBase was " + baseURL);
>     URL editorURL = new URL(baseURL, "Editor");
>     try {
>       ps.create(editorURL, 1024);
>     }
>     catch (Exception e) {
>       e.printStackTrace();
>     }
>     FileContents fc = ps.get(editorURL);
>     DataOutputStream os = new DataOutputStream(
>                                  fc.getOutputStream(false));
>     String s = jtp.getText();
>     os.writeUTF(s);
>     os.flush();
>     os.close();
>   }
> 
>   private void readEditorContents() {
>     try {
>       PersistenceService ps = (PersistenceService)
>         ServiceManager.lookup("javax.jnlp.PersistenceService");
>       BasicService bs = (BasicService)
>         ServiceManager.lookup("javax.jnlp.BasicService");
>       URL baseURL = bs.getCodeBase();
>       URL editorURL = new URL(baseURL, "Editor");
>       FileContents fc = ps.get(editorURL);
>       DataInputStream is = new DataInputStream(fc.getInputStream());
>       jtp.setText(is.readUTF());
>       is.close();
>     }
>     catch (Exception e) {
>       e.printStackTrace();
>     }
>   }
> 
> 
> The JNLP API defines a set of services that bypass the security
> sandbox to enable some common client operations. In the
> writeEditorContents method, the BasicService discovers the
> application's codebase. Then, the PersistenceService caches the
> edit pane's contents on the local hard drive, keyed to a URL that
> is relative to the application's codebase. The name/value pairs
> provided by the PersistenceService are similar to browser
> cookies. The Java Web Start implementation honors this legacy by
> naming the pairs "muffins." Muffins are not appropriate for large
> data storage; they should be used to cache small identifiers on
> the client. These identifiers can then be used to locate larger
> pieces of information on the server.
> 
> Redeploy the changed application to the web server, and try
> running it from the client -- again by browsing to the URL. If
> you do not have a web server, you can run this version from the
> URL http://staff.develop.com/halloway/TechTips/May2001/Hello2.jnlp
> Java Web Start automatically detects that that application has
> changed and runs the newer version. You can confirm this by
> checking the title bar string, which now should say "Hello JNLP,
> Second Version." Make some changes to the contents of the editor,
> and then close it. When you launch the application again, your
> changes should be visible. (You may see an exception in the
> console output the first time you run the new version. This is
> expected behavior because readEditorContents will not find
> a muffin the first time.)
> 
> JNLP provides many more services than those shown here. For
> example, you can:
> 
> o Finely control how applications are downloaded
> o Describe dependency relationships between JARs
> o Download and run native code installers
> o Grant additional permissions to signed code
> o Request specific versions of applications or applets
> 
> To learn more about JNLP, download the JNLP specification at
> http://java.sun.com/products/javawebstart/download-spec.html
> 
> To learn more about Java Web Start, see the Java Web Start page
> at http://java.sun.com/products/javawebstart/
> 
> .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .
> 
> - NOTE
> 
> Sun respects your online time and privacy. The Java Developer
> Connection mailing lists are used for internal Sun Microsystems(tm)
> purposes only. You have received this email because you elected
> to subscribe. To unsubscribe, go to the Subscriptions page
> (http://developer.java.sun.com/subscription/), uncheck the
> appropriate checkbox, and click the Update button.
> 
> As of May  22, 2001, Sun Microsystems updated its Privacy Policy
> (http://sun.com/privacy) to give you a better understanding of
> Sun's Privacy Policy and Practice. If you have any questions,
> contact [EMAIL PROTECTED]
> 
> 
> - SUBSCRIBE
> 
> To subscribe to a JDC newsletter mailing list, go to the
> Subscriptions page (http://developer.java.sun.com/subscription/),
> choose the newsletters you want to subscribe to, and click Update.
> 
> 
> - FEEDBACK
> Comments? Send your feedback on the JDC Tech Tips to:
> 
> [EMAIL PROTECTED]
> 
> 
> - ARCHIVES
> You'll find the JDC Tech Tips archives at:
> 
> http://java.sun.com/jdc/TechTips/index.html
> 
> 
> - COPYRIGHT
> Copyright 2001 Sun Microsystems, Inc. All rights reserved.
> 901 San Antonio Road, Palo Alto, California 94303 USA.
> 
> This document is protected by copyright. For more information, see:
> 
> http://java.sun.com/jdc/copyright.html
> 
> 
> - LINKS TO NON-SUN SITES
> The JDC Tech Tips may provide, or third parties may provide,
> links to other Internet sites or resources. Because Sun has no
> control over such sites and resources, You acknowledge and agree
> that Sun is not responsible for the availability of such external
> sites or resources, and does not endorse and is not responsible
> or liable for any Content, advertising, products, or other
> materials on or available from such sites or resources. Sun will
> not be responsible or liable, directly or indirectly, for any
> damage or loss caused or alleged to be caused by or in connection
> with use of or reliance on any such Content, goods or services
> available on or through any such site or resource.
> 
> 
> JDC Tech Tips 
> May 30, 2001
> 
> Sun, Sun Microsystems, Java, and Java Developer Connection are
> trademarks or registered trademarks of Sun Microsystems, Inc.
> in the United States and other countries.
> 
> 
> 
> 
> 
> 
> 
> 
>     To use our one-click unsubscribe facility, select the following URL:
>     http://hermes.java.sun.com/unsubscribe?2237731759424750899
> 
> ----------
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to