Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
This first of two articles on JNLP by Mauro Marinilli introduces the Java Network Launching Protocol and illustrates a simple Java application. This article and the second one in this series ("A JNLP Tutorial: Part 2An Example") cover the essentials of the Java Network Launching Protocol (JNLP). They are intended for a wide audience, mainly developers, and especially those new to this technology. At the end of this tutorial, you will have a clearer idea of this Java technology, and hopefully you will be able to use it directly in your applications.
A Web-Centered Protocol
Our story begins at the end. After your application is finished, you are ready to install it onto your client machines. This phase is called the software deployment phase. You should install the proper JRE and copy your JAR files on the client computers. Now, imagine that you publish all the JAR files on your Web site. Then, when everything is ready, you send an email to your customersasking them to point their Web browsers to a given URL. They do so, and after all needed installations take place automatically (the wanted JRE and your JAR files, plus all the other resources you need for your Java application to run), your clients can happily run your program. Then, whenever you update the JAR files on your Web server (say for the 1.2 release), they are automatically installed on client machines the next time your software is launched. So users always have the latest version of your applicationtransparently to them. Everything works through the Web browser and the MIME type mechanism. The very first time users click on your application URL the browser will ask if that associated plug-in is to be installed. That plug-in is a JRE, with a little native executable (the JNLP Client) that will manage the whole protocol on your client's machines. Sun provides this executable freely for the most popular platforms (it is called Java Web Start) but other vendors and open source initiatives provide similar software for all the major OS. Starting from the Java 2 version 1.4 on, it comes included with the standard JRE package.
use the input framework extension and those JAR files there." Or "If the client platform is 'Windows', launch this installer here before running the application." That would save a lot of coding effort (and such installation problems are very common), and would allow developers to have a great number of new unimagined capabilities. But there is a subtlety. Who will configure the JVM to launch your application this way? The most obvious answer is: another applicationa kind of launcher. This will prepare everything for the JVM to correctly execute your program. Remember that the JVM needs files copied locally on the file system in order to use them. The JNLP protocol consists basically of a set of rules that describe how this launching mechanism should be implemented. Instead of setting the classpath variable, you will write a special XML file (or more than one) that describes carefully what the launcher (called the JNLP Client) should do before setting up a JVM instance to run your application.
A First Look
Our first very simple JNLP file is shown in Listing 1.
16 </jnlp>
You will see this file better in the second article of this tutorial. Here you just receive an intuitive description of the basic JNLP file syntax. The jnlp element means that this XML file is a JNLP file. Sun provides all the details of the syntax (element definitions, schema, and so on) on its Web site. If you don't know about XML, try this site:http://www.xml.org/xml/. Anyway, you don't need any deep XML knowledge to use JNLP. Just run the following example, and try to modify it to your needs. JNLP is not a difficult protocol, and there are a number of free JNLP packaging tools around (see the links section at the end of the Part 2). The information element provides some data about your application to the JNLP Client program. At lines 1114, the resources element (the core of the protocol, as you will see later) describes all the files that compose your application. After having introduced a little taste of the JNLP syntax, you turn to its general mechanism.
Automatic installation of native code/libraries. Some Java programs may need some platformspecific support for running.
JNLP Client management console. Although not part of the specifications, the JNLP Client is providing to end users a form of graphical configuration console (for instance, the management console of Java Web Start).
The capability of using platform-dependent facilities such as shortcuts, accelerators, and the like. Deployed applications are integrated on the native OSproviding shortcuts and launching scripts or other platform-dependent mechanisms So your Java application will look like a native application with a little effort.
You will now see a simple yet complete example of JNLP at work.
An Example
You now create your first JNLP file that will launch a dummy application over the Web. If you don't have a Web server, you can modify the example in order to let it work from the local file system as well. The JNLP file in Listing 1 did that. Specifically, see line 3 for an example of how to use the local file system with JNLP.
The Application
Suppose you have an application, a common Java application that you have created before you knew about JNLP. The application is reported in Listing 2.
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
JPanel panel1 = new JPanel(); BorderLayout borderLayout1 = new BorderLayout(); JLabel jLabel = new JLabel(); JPanel southPanel = new JPanel(); JButton okButton = new JButton();
public Example(Frame frame, String title, boolean modal) { super(frame, title, modal); try { initUI(); pack(); } catch(Exception ex) { ex.printStackTrace(); } }
void initUI() throws Exception { panel1.setLayout(borderLayout1); jLabel.setHorizontalAlignment(SwingConstants.CENTER); jLabel.setHorizontalTextPosition(SwingConstants.CENTER); jLabel.setLabelFor(okButton); jLabel.setText("<html><body><h1>Hello JNLP!"); okButton.setToolTipText("close the example dialog"); okButton.setText("<html><body><tt>OK"); okButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { dismiss(); } }); setTitle("Example Dialog"); addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(WindowEvent e) { dismiss();
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 } 75
} }); getContentPane().add(panel1); panel1.add(jLabel, BorderLayout.NORTH); panel1.add(southPanel, BorderLayout.SOUTH); southPanel.add(okButton, null); pack(); setVisible(true); }
/** * the Main method */ static public void main(String[] args) { Example e = new Example(); }