# Appendix 3: Complete Example—Deploying Java Media Framework as Java Extension

This section covers the following topics:

- Introduction
- Creating the jar File to Be Installed
- Creating the Applet jar File
- Creating the HTML for the Applet
- Testing the Example

### Introduction

This is a complete, working example showing how to deploy a single jar file from Java Media Framework (JMF) as a Java Extension. The example uses `SimplePlayerApplet.java` and `jmf.jar` to play an `.avi` media file. It uses the raw installation method for installating a repackaged and signed version of `jmf.jar` called `s_my_jmf.jar`. Normally there are other jar files that are installed with JMF, but for `SimplePlayerApplet.java` only the functionality in `jmf.jar` is required.

For simplicity sake, this example makes the following assumptions:

- You are working on a Microsoft Windows system.
- You have intalled the 1.6 JDK in the following location on your computer: `C:\"Program Files"\Java\jdk1.6.0`
- For signing purposes you have set up a keystore in the following directory: `C:\plugin\keystores`
- The `keystore` name is `thawte.p12`
- The `storepass` and the `keypass` are the same: `mypass`
- The keystore alias is `"Sun Microsystems Inc.'s Thawte Consulting cc ID"`

### Creating the jar File to Be Installed

In this case there is no installer. All you need to do is obtain the required jar file, `jmf.jar`, that needs to be downloaded and copied into `<jre_location>/lib/ext`. Plug-in, in conjunction with the extension mechanism in the JRE, handles the installation (downloading and copying of the file) for you.

You can get `jmf.jar` by downloading the cross-platform installation zip file `jmf-2_1_1e-alljava.zip` from `http://java.sun.com/products/java-media/jmf/2.1.1/download.html`. Along with other jar files, the zip file contains `jmf.jar`, which you can extract from the zip.

Once you have obtained `jmf.jar`, you will want to extract `jmf.jar` itself into some directory, say `C:\plugin\extensions\workspace1`. Here you will want to delete the `META-INF` directory if it exists, as the `manifest.mf` file contains signing information that you do not want.

Next you need to create your own manifest file for the new jar file to be based on `jmf.jar`. The manifest file that we create we call jmf_manifest. It will be provided as input to the `jar` tool. Here is what is used in this example:

> `Extension-Name: javax.media.s_my_jmf
> Specification-Vendor: Sun Microsystems, Inc
> Specification-Version: 2.1
> Implementation-Vendor-Id: com.sun
> Implementation-Vendor: Sun Microsystems, Inc
> Implementation-Version: 2.1.1`

First we will jar the files in `jmf.jar` and rename the result `my_jmf.jar`. Then we will sign the result and call it `s_my_jmf.jar`.

In order to jar the files in `workspace1` with our new manifest file `jmf_manifest`, we `cd` to the location of `workspace1`, then we use the `jar` tool in the JDK as follows:

> `C:\plugin\extensions\workspace1>C:\"Program Files"\Java\jdk1.6.0\bin\jar cmf jmf_manifest my_jmf.jar *.class codecLib com javax jmapps`

Note that `codecLib`, `com`, `javax`, and `jmapps` are subdirectories that must be jar'd as well`as *.class`.

If you have a Thawte keystore called `thawte.p12` located in `C:\plugin\keystores` with the same password, `mypass`, for both `storepass` and `keypass`, and `storetype` `"pkcs12"` and keystore alias `"Sun Microsystems Inc.'s Thawte Consulting cc ID"`, then you can skip the next step and proceed to signing of `my_jmf.jar` and creating a signed jar file called `s_my_jmf.jar`.

You can create a keystore called `thawte.p12` with the same password, `mypass`, for both `storepass` and `keypass` and keystore alias `"Sun Microsystems Inc.'s Thawte Consulting cc ID"` by running the following command:

> `C:\plugin\keystores>C:\"Program Files"\Java\jdk1.6.0\bin\keytool -genkey -alias "Sun Microsystems Inc.'s Thawte Consulting cc ID" -keypass mypass -keystore thawte.p12 -storetype pkcs12 -storepass mypass`

`

In this example we use the `jarsigner` tool to sign the new jar file. Use

> `C:\plugin\extensions\workspace1>C:\"Program Files"\Java\jdk1.6.0\bin\jarsigner -keystore C:\plugin\keystores\thawte.p12 -storepass mypass -keypass mypass -storetype "pkcs12" -signedjar s_my_jmf.jar my_jmf.jar "Sun Microsystems Inc.'s Thawte Consulting cc ID"`

We can verify the new signed jar file as follows:

> `C:\plugin\extensions\workspace1>C:\"Program Files"\Java\jdk1.6.0\bin\jarsigner -verify s_my_jmf.jar`

We now have a signed jar file with the proper `manifest.mf` file for raw installation.

Next we need to create the applet jar file.

###
Creating the Applet jar file

The applet consists of a single file, `SimplePlayerApplet.class`, that can be used to playback a media file. The source code for the applet can be viewed here. What we need to do is create a manifest file called for the the applet, which we will call `applet_manifest`, jar the applet with the manifest, then sign the result..

The applet `applet_manifest` is as follows:

>     Extension-List: s_my_jmf
>     s_my_jmf-Extension-Name: javax.media.s_my_jmf
>     s_my_jmf-Specification-Version: 2.1
>     s_my_jmf-Implementation-Version: 2.1.1
>     s_my_jmf-Implementation-Vendor-Id: com.sun
>     s_my_jmf-Implementation-URL: http://java.sun.com/products/plugin/extensions/examples/jmf/s_my_jmf.jar

Note that the above manifest says that the extension jar, `s_my_jmf.jar`, can be downloaded from the `java.sun.com` web server at `http://java.sun.com/products/plugin/extensions/examples/jmf`

If the `SimplePlayerApplet.class` and `applet_manifest` are located in `C:\plugin\extensions\workspace2`, we can jar the applet with the manifest with the following command:

> `C:\plugin\extensions\workspace2>C:\"Program Files"\Java\jdk1.6.0\bin\jar cmf applet_manifest my_SimplePlayerApplet.jar *.class`

Again, we use `jarsigner` to sign the jar file:

> `C:\plugin\extensions\workspace2>C:\"Program Files"\Java\jdk1.6.0\bin\jarsigner -keystore C:\plugin\keystores\thawte.p12 -storepass mypass -keypass mypass -storetype "pkcs12" -signedjar s_my_SimplePlayerApplet.jar my_SimplePlayerApplet.jar "Sun Microsystems Inc.'s Thawte Consulting cc ID"`

and we verify it as follows:

> `C:\plugin\extensions\workspace2>C:\"Program Files"\Java\jdk1.6.0\bin\jarsigner -verify s_my_SimplePlayerApplet.jar`

We now have our signed applet jar file called `s_my_SimplePlayerApplet.jar`, whose manifest contains the correct information to trigger the installation of the required extension jar file, `s_my_jmf.jar` if no such file or an older version is found in `<jre_location>/lib/ext`.

Next we need to create the HTML for the applet.

### Creating the HTML for the Applet

We have several choices. We can use the conventional `APPLET` tag and assume those who visit the page have Java Plug-in version 1.3.1_01 or later installed on their systems. (To use Java Plug-in to launch an applet with the conventional applet tag requires 1.3.1_01 or later.) We can also use the HTML Converter, located in the JDK in the `bin` directory (`<sdk_location>/bin/HtmlConverter.exe`) to convert the applet to various forms. Here we use the conventional applet form shown below:

#### `SimplePlayerApplet-1.html`

>     <html>
>     <head>
>     <title>SimplePlayerApplet</title>
>     <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
>     </head>
>     <body bgcolor="#FFFFFF" text="#000000">
>     <applet code="SimplePlayerApplet.class" archive="s_my_SimplePlayerApplet.jar" width=320 height=300>
>     <param name="file" value="0720crt1.avi">
>     </applet>
>     </body>
>     </html>

Note that the media file is `0720crt1.avi`.

For this example the following files have been placed on the `java.sun.com` web server at`http://java.sun.com/products/plugin/extensions/examples/jmf`:

- `0720crt1.avi`
- `s_my_jmf.jar`
- `s_mySiplePlayerApplet.jar`
- `SimplePlayerApplet-1.html`

### Testing the Example

You can test the setup by pushing the button below:

When you point your browser at the URL, the applet jar will first be downloaded and cached; and, if the extension has not already been installed, you will see a Java Request Download dialog that says: 'The applet requires installation of optional package. Do you want to continue?'. You will have the options to continue or cancel. If you continue installation by pressing OK button, you will see the Security Warning dialog for the extension jar file. You can proceed with package installation by pressing Run button. The extension will be installed in `<jre_location>/lib/ext` and the applet will run.

`