Java 확장 기능의 배치 - xrath.com 에서 번역됨

# Java 확장 기능의 배치

주: Java 확장 기능은, 「옵션 패키지」, 「표준 확장 기능」, 또는 단지 「확장 기능」이라고도 불립니다.

이 섹션에서는, 다음의 토픽에 대해 설명합니다.

- 개요
- 애플릿 JAR 파일의 Manifest
- 각 확장 기능 JAR 파일의 Manifest
- `Implementation-URL` JAR 파일의 Manifest
  - raw 인스톨을 사용한 Java 확장 기능의 인스톨
  - Java 인스톨러를 사용한 Java 확장 기능의 인스톨
  - 네이티브 인스톨러를 사용한 Java 확장 기능의 인스톨
- 시큐리티
- 상세한 순서
- 기존의 제한과 그 외의 주의

Java 애플릿은, Java 확장 기능을 사용해 사용자에게 추가의 기능을 제공합니다. 애플릿은 Java Plug-in 를 사용해, 다양한 Java 확장 기능 (JavaHelp, Java 3 D, Java Media Framework 등)의 Java Runtime Environment 에의 인스톨을 트리거할 수 있습니다. 이 문서에서는, Java Plug-in 로「인스톨형 Java 확장 기능」(「번들형 Java 확장 기능」에 대립되는 것)을 배치하는 기본적인 순서를 나타냅니다. Java 확장 기능의 가동 방법의 자세한 것은,「Java 확장 기능 기구」를 참조해 주세요.

## 개요

확장 기능을 사용하는 애플릿은, Manifest를 포함한 서명 첨부의 JAR 파일로서 패키지화됩니다. Java Plug-in 는, 애플릿을 다운로드해 실행할 경우에, 애플릿 JAR 파일의 Manifest를 체크합니다. Manifest에는, 애플릿에 필요한 확장 기능의 일람이 포함되어 있습니다. 개개의 확장 기능은 1 개 이상의 JAR 파일로 구성되어 이러한 파일은 `<jre>/lib/ext` 디렉토리에 인스톨 됩니다.

일반적으로, 애플릿의 Manifest에는, 확장 기능 마다 확장 기능 JAR 파일의 이름, 벤더, 및 버젼 정보의 일람이 포함되어 있습니다. 또, JAR 파일이 `<jre>/lib/ext` 에 인스톨되어 있지 않은 경우나, 낡아지고 있는 경우를 위해서(때문에), JAR 파일 또는 그 인스톨 프로그램을 취득할 수 있는 URL 의 일람도 포함되어 있습니다. URL 에서는, 확장 기능 JAR 파일의 1 개를 직접 지정하는 일도, 일련의 확장 기능 JAR 파일을 인스톨 하는 인스톨 프로그램 (네이티브 또는 Java)을 지정할 수도 있습니다. 갱신이 필요한가 어떤가를 판단하는 규칙에 대해서는,「옵션 패키지의 버젼 관리」로 설명합니다.

Java Plug-in 를 사용해 Java 확장 기능을 배치하려면 , 확장 기능에 관한 정보를 다음의 3 개의 Manifest 파일로 지정할 필요가 있습니다.

1. 애플릿 JAR 파일의 Manifest

2. 각 확장 기능 JAR 파일의 Manifest

3. `Implementation-URL` JAR 파일의 Manifest

이러한 각 Manifest 파일에 대한 자세한 설명은 다음과 같습니다.

## 애플릿 JAR 파일의 Manifest

애플릿에 Java 확장 기능을 배치하려면 , 애플릿을 JAR 파일로서 패키지화할 필요가 있습니다. 또, 애플릿 JAR 파일의 Manifest 파일에는, 필요한 확장 기능의 일람, 확장 기능을 다운로드할 수 있는 URL, 및 확장 기능에 관한 그 외의 정보를,「옵션 패키지의 버젼 관리」에 따라 지정할 필요가 있습니다. 다음의 예는, 2 개의 확장 기능이 있는 경우의 Manifest 파일입니다.

>     Extension-List: RectangleArea RectanglePerimeter
>     RectangleArea-Extension-Name: com.mycompany.RectangleArea
>     RectangleArea-Specification-Version: 1.2
>     RectangleArea-Implementation-Version: 1.2
>     RectangleArea-Implementation-Vendor-Id: com.mycompany
>     RectangleArea-Implementation-URL: http://mycompany.com/RectangleArea.jar
>     RectanglePerimeter-Extension-Name: com.mycompany.RectanglePerimeter
>     RectanglePerimeter-Specification-Version: 1.2
>     RectanglePerimeter-Implementation-Version: 1.2
>     RectanglePerimeter-Implementation-Vendor-Id: com.mycompany
>     RectanglePerimeter-Implementation-URL: http://mycompany.com/RectanglePerimeter.jar

이 예에서는, 애플릿에 2 개의 확장 기능 `RectangleArea` 및 `RectanglePerimeter` 가 배치됩니다. 각각이 1 개의 JAR 파일을 가지고 있습니다. 이것들이 인스톨되어 있지 않은지, 갱신된 버젼이 필요한 경우, 지정한 `Implementation-URL` 로부터 적절한 버젼이 다운로드됩니다. `Implementation-URL` 는, 다음과 같은 JAR 파일을 지정하고 있을 필요가 있습니다.

- 필요한 확장 기능 JAR 파일 그 자체 (raw 인스톨의 경우)
- 확장 기능을 인스톨 하는 Java 인스톨 프로그램이 들어가 있는 것
- 확장 기능을 인스톨 하는 네이티브 인스톨 프로그램이 들어가 있는 것

이것에 대해서는, 후술의「`Implementation-URL` JAR 파일의 Manifest」로 자세하게 설명합니다.

### `Extension-List` 의 이름과 속성의 접두사

기본적인 시나리오는 2 개 있습니다. 확장 기능이 단일의 JAR 파일을 가지는 경우와 복수의 JAR 파일을 가지는 경우입니다. `Extension-List` 의 이름과 속성의 접두사에 대해, 이것들 2 개의 시나리오로 설명합니다.

> #### 단일의 JAR 파일을 가지는 확장 기능

> 상기의 예의 같게, 단일의 JAR 파일을 가지는 확장 기능의 경우,`Extension-List` 의 이름과 관련하는 Manifest 속성의 접두사는, 확장 기능 JAR 파일의 이름이 됩니다.

> #### 복수의 JAR 파일을 가지는 확장 기능

> 확장 기능이 복수의 JAR 파일로 구성되는 일도 있습니다. 예를 들어, Java 3D 확장 기능은, JAR 파일 `j3daudio.jar`,`j3dcore.jar`,`j3dutils.jar`, 및 `vecmath.jar` 로 구성되어 있습니다. 여기에서는, 2 개의 시나리오를 고려할 필요가 있습니다. 네이티브 인스톨 프로그램 또는 Java 인스톨 프로그램으로 JAR 파일을 인스톨 하는 경우와 인스톨 프로그램은 사용하지 않고 raw 인스톨에 의해 확장 기능 JAR 파일을 인스톨 하는 경우입니다.

> > 네이티브 인스톨 프로그램 또는 Java 인스톨 프로그램을 사용하는 경우는,`Extension-List` 에 JAR 파일의 이름을 1 개만 지정할 필요가 있습니다. 또, 그 이름을 접두사로서 속성을 1 세트만 지정할 수 있습니다. 일반적으로, 확장 기능에는 메인의 JAR 파일이 1 개 있습니다. 이 경우는, 그 이름을 `Extension-List` 로 지정해, 관련하는 Manifest 속성의 접두사라고 해도 사용합니다. 메인의 JAR 파일이 없는 경우는, 옵션 패키지에 있는 임의의 JAR 파일의 이름을 사용할 수 있습니다.

> > 다음의 예는,Java 3D 확장 기능의 애플릿의 Manifest입니다. `j3dcore.jar` 는 메인의 JAR 파일입니다.

> > > `Extension-List:j3dcore
> > > j3dcore-Extension-Name:javax.media.j3d``
> > > ``j3dcore-Specification-Version:1. 2
> > > j3dcore-Specification-Vendor:Sun Microsystems, Inc
> > > j3dcore-Implementation-Version:1. 2.1_03
> > > j3dcore-Implementation-Vendor-Id:com.sun
> > > j3dcore-Implementation-URL:http://<myserver>/native/java3d-win.jar`

> > 복수의 JAR 파일이 있는 경우,raw 인스톨의 순서는 다음과 같이 바뀝니다. 개개의 JAR 파일을 개별의 확장 기능인것 같이 취급해, 각 파일의 이름을 `Extension-List` 로 지정합니다. 지정한 JAR 파일 마다, 각각 Manifest 속성세트를 지정합니다. 이 때, 속성의 접두사로서 각 JAR 파일의 이름을 사용합니다.

## JAR 확장 기능의 식별에 관한 주의 사항

인스톨 된 확장 기능 `JAR` 파일에 대해, Java Plug-in 는 이하의 4 개의 Manifest 속성을 체크합니다.

- `Extension-Name`
- `Specification-Version`
- `Implementation-Version`
- `Implementation-Vendor-Id`

`Extension-Name` 와 `Implementation-Vendor-Id` 는, 애플릿의 Manifest 파일로 지정된 값과 정확하게 일치하지 않으면 안됩니다.

- Java Plug-in 에 의해 인스톨 된 확장 기능의 버젼 속성을 평가해, 새로운 확장 기능의 다운로드가 필요한가 어떤가를 판단하는 방법에 대해서는,「옵션 패키지의 버젼 관리」를 참조해 주세요.
- `Specification-Version` 및 `Implemenation-Version` 의 형식의 규칙에 대해서는,부록 6 「Sun 의 지원하는 `Specification-Version` 및 `Implemenation-Version` 의 형식」을 참조해 주세요.

## 각 확장 기능 JAR 파일의 Manifest

여기에서는,`Implemenation-URL` 로 지정된 URL 로부터 Plug-in 로 취득할 수 있는 JAR 파일에 대해 설명합니다. URL 로부터 취득 가능한 확장 기능 JAR 파일은, 직접 취득하는지 (raw 인스톨), Java 인스톨 프로그램 또는 네이티브 인스톨 프로그램을 통해 취득할 수가 있습니다. 어느 쪽의 경우도, JAR 파일은 `<jre>/lib/ext` 에 인스톨 됩니다.

애플릿에 필요한 확장 기능의 일람은, 애플릿의 Manifest로 지정되고 있습니다. 이것에 의해, 애플릿의 기동시에 Plug-in 는 `<jre>/lib/ext` 디렉토리에 있는 JAR 파일을 조사해 부족한 확장 기능이나 낡아진 확장 기능을 인스톨 할 필요가 있을지 어떨지를 판단할 수 있습니다.

일반적으로,`Implementation-URL` 를 통해 취득되는 확장 기능 JAR 파일의 Manifest에는, 각종의 이름, 버젼, 및 벤더 정보가 포함되어 있습니다. 이러한 확장 기능 JAR 파일이 인스톨 되면(자), Java Plug-in 는 나중에 이 정보를, 애플릿에 필요한 확장 기능에 관한 정보와 비교할 수 있습니다. 따라서, 확장 기능의 인스톨이나 업그레이드가 필요한가 어떤가를 판단할 수 있습니다. 애플릿이 확장 기능을 요구하기 전은,`<jre>/lib/ext` 에 확장 기능이 전혀 인스톨되어 있지 않은지, 인스톨 된 확장 기능 JAR 파일에 Manifest 정보가 전혀 없는, 혹은 불완전한 Manifest 정보 밖에 없는 경우가 많을 것입니다.

단일의 JAR 파일을 가지는 확장 기능의 경우, 그 JAR 파일에 서명이 붙어 있는 것으로, 다음의 속성을 가지는 Manifest 파일이 포함되어 있는 것이 필요합니다.

- `Extension-Name`
- `Specification-Vendor`
- `Specification-Version`
- `Implementation-Vendor-Id`
- `Implementation-Vendor`
- `Implemenation-Version`

### 례

> `Extension-Name:javax.help
> Specification-Vendor:Sun Microsystems, Inc
> Specification-Version:1. 0
> Implementation-Vendor-Id:com.sun
> Implementation-Vendor:Sun Microsystems, Inc
> Implementation-Version: 1.1. 3`

Java 확장 기능이 복수의 JAR 파일로 구성되어 네이티브 인스톨 프로그램 또는 Java 인스톨 프로그램에 의해 인스톨 되는 경우는, 애플릿 Manifest의 `Extension-List` 으로 지정되고 있는 JAR 파일인 만큼, 확장 기능의 정보 (`Extension-Name`,`Specification-Version` 등) 를 지정합니다. 인스톨 프로그램을 사용하지 않는 경우는, 모든 JAR 파일에 확장 기능의 정보를 포함할 필요가 있습니다.

이러한 속성의 자세한 것은,「옵션 패키지의 버젼 관리」를 참조해 주세요.

## `Implementation-URL` JAR 파일의 Manifest

이것은, 애플릿이 Manifest내의 `Implementation-URL` 속성을 사용해 참조하는 JAR 파일입니다. `<jre>/lib/ext` 에 확장 기능이 전혀 인스톨되어 있지 않은 경우나, 인스톨 되고 있는 확장 기능이 낡은 경우는, 이 URL 로부터 확장 기능을 취득할 수 있습니다.

`Implementation-URL` JAR 파일이 네이티브 인스톨 프로그램 또는 Java 인스톨 프로그램인 경우는, 다음의 2 개의 특별한 속성으로 나타납니다. `Main-Class` 는 Java 인스톨 프로그램을 나타내,`Extension-Installation` 는 네이티브 인스톨 프로그램을 나타냅니다. 인스톨 프로그램이 지정되어 있지 않은 경우,`Implementation-URL` JAR 파일은 확장 기능 JAR 파일 그 자체입니다. Java Plug-in 에서는, 다음의 3 통과해 방법으로 확장 기능을 인스톨 할 수 있습니다.

- raw 인스톨의 사용
- Java 인스톨러의 사용
- 네이티브 인스톨러의 사용

각방법에 대해, 다음에 설명합니다.

### raw 인스톨을 사용한 Java 확장 기능의 인스톨

확장 기능의 raw 인스톨에서는, 개개의 확장 기능 JAR 파일이 Java Plug-in 에 의해 `<jre>/lib/ext` 디렉토리에 인스톨 됩니다. Java 나 네이티브의 인스톨러는 사용되지 않고, Java Plug-in 가 각 JAR 파일의 「인스톨러」로서 기능합니다. 단일의 JAR 파일을 가지는 확장 기능의 경우, 그 JAR 파일의 URL 가 `Implementation-URL` 로서 애플릿의 JAR Manifest에 나타납니다. Java Plug-in 는, 확장 기능 JAR 파일의 Manifest에 `Main-Class` 속성도 `Extension-Installation` 속성도 포함되지 않은 것으로부터, raw 인스톨이다고 인식할 수 있습니다.

여기에서는,`javax.mediax` 라고 하는 확장 기능이, 단일의 JAR 파일 `mediax.jar` 로 구성되어 있다고 합니다. 애플릿 및 확장 기능의 JAR 파일은 다음과 같이 됩니다.

> #### 예:애플릿의 JAR Manifest

>     Extension-List: mediax
>     mediax-Extension-Name: javax.mediax
>     mediax-Specification-Version: 1.1
>     mediax-Implementation-Version: 1.1. 2
>     mediax-Implementation-Vendor-Id: com.sun
>     mediax-Implementation-URL: http://java.sun.com/products/plugin/extensions/examples/media/mediax.jar

> #### 예:확장 기능의 JAR Manifest

>     Extension-Name: javax. mediax
>     Specification-Vendor: Sun Microsystems, Inc
>     Specification-Version: 1.1
>     Implementation-Vendor-Id: com.sun
>     Implementation-Vendor: Sun Microsystems, Inc
>     Implementation-Version: 1.1. 2

> 2 개의 JAR 파일 `mediax_core.jar` 와 `mediax_codec.jar` 를 가지는 다른 버젼의 확장 기능 `javax.mediax-2` 가 있다고 합니다. 이 경우, 2 개의 JAR 파일을 개별의 확장 기능인것 같이 취급해, 애플릿의 JAR Manifest에 각 파일을 지정할 필요가 있습니다.

> #### 예:애플릿의 JAR Manifest

>     Extension-List: mediax_core mediax_codec
>     mediax_core-Extension-Name: javax.mediax_core
>     mediax_core-Specification-Version: 1.1
>     mediax_core-Implementation-Version: 1.1. 2
>     mediax_core-Implementation-Vendor-Id: com.sun
>     mediax_core-Implementation-URL: http://java.sun.com/products/plugin/extensions/examples/media/mediax_core.jar
>     mediax_codec-Extension-Name: javax.mediax_codec
>     mediax_codec-Specification-Version: 1.1
>     mediax_codec-Implementation-Version: 1.1. 2
>     mediax_codec-Implementation-Vendor-Id: com.sun
>     mediax_codec-Implementation-URL: http://java.sun.com/products/plugin/extensions/examples/media/mediax_codec.jar

> 예:확장 기능의 JAR Manifest

>     Extension-Name: javax. mediax_core
>     Specification-Vendor: Sun Microsystems, Inc
>     Specification-Version: 1.1
>     Implementation-Vendor-Id: com.sun
>     Implementation-Vendor: Sun Microsystems, Inc
>     Implementation-Version: 1.1. 2

>     Extension-Name: javax. mediax_codec
>     Specification-Vendor: Sun Microsystems, Inc
>     Specification-Version: 1.1
>     Implementation-Vendor-Id: com.sun
>     Implementation-Vendor: Sun Microsystems, Inc
>     Implementation-Version: 1.1. 2

### Java 인스톨러를 사용한 Java 확장 기능의 인스톨

Java 인스톨 프로그램을 통해 확장 기능을 인스톨 할 수도 있습니다. Java 인스톨 프로그램은, JAR 파일로서 번들 할 필요가 있습니다. 또, 생성된 JAR 파일을, 애플릿의 JAR Manifest 파일의 `Implementation-URL` 로 지정할 필요가 있습니다. 인스톨시에, JAR 파일의 다운로드 및 검증을 합니다. 그 후, JAR 파일내의 Java 인스톨 프로그램의 `Main-Class` 가 실행되어, 인스톨 프로그램이 기동합니다. Java 인스톨러에 의해, 인스톨러에 번들 되고 있는 확장 기능 JAR 파일이 Java Runtime 의 적절한 장소 (`<jre>/lib/ext`)에 카피됩니다.

이것은 어플리케이션의 JAR 파일입니다만, 그 Manifest내의 속성은, 애플릿 Manifest의 `Extension-List` 로 지정되고 있는 확장 기능 JAR 파일의 속성과 같게 됩니다. 다만,`Main-Class` 속성이 추가됩니다.

> #### 예:Java 인스톨러의 JAR Manifest

>     Extension-Name: javax.help
>     Specification-Vendor: Sun Microsystems, Inc
>     Specification-Version: 1.1
>     Implementation-Vendor-Id: com.sun
>     Implementation-Vendor: Sun Microsystems, Inc
>     Implementation-Version: 1.1. 3
>     Main-Class: com.sun.javahelp.installer

이 경우, Manifest에 `Main-Class` 가 존재하기 위해(때문에), JAR 파일은 Java 인스톨 프로그램으로서 다루어져`Main-class` 가 불려 갑니다. Java 인스톨러에 의해, 확장 기능 JAR 파일이 `<jre>/lib/ext` 디렉토리에 카피됩니다. 확장 기능의 개개의 JAR 파일에, 적절한 버젼 정보가 포함되어 있을 필요가 있습니다.

### 네이티브 인스톨러를 사용한 Java 확장 기능의 인스톨

네이티브 인스톨 프로그램을 통해 확장 기능을 인스톨 할 수도 있습니다. 네이티브 인스톨 프로그램은, JAR 파일로서 번들 할 필요가 있습니다. 또, 생성된 JAR 파일을, 애플릿의 JAR Manifest 파일의 `Implementation-URL` 로 지정할 필요가 있습니다. 인스톨시에 JAR 파일의 다운로드 및 검증을 해 다음에 네이티브 인스톨 프로그램이 기동합니다. 네이티브 인스톨러에 의해, 인스톨러에 번들 되고 있는 확장 기능 JAR 파일이 Java Runtime 의 적절한 장소 (`<jre>/lib/ext`)에 카피됩니다.

이것은 어플리케이션의 JAR 파일입니다만, 그 Manifest내의 속성은, 애플릿 Manifest의 `Extension-List` 로 지정되고 있는 확장 기능 JAR 파일의 속성과 같게 됩니다. 다만,`Extension-Installation` 속성이 추가됩니다.

> #### 예:네이티브 인스톨 프로그램의 JAR Manifest

>     Extension-Name: javax.media.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
>     Extension-Installation: jmf-2_1_1-win.exe

이 경우, Manifest에 `Extension-Installation` 가 존재하기 위해(때문에), JAR 파일은 네이티브 인스톨 프로그램으로서 다루어져 인스톨 프로그램 자체가 기동합니다. 네이티브 인스톨러에 의해, Java 확장 기능이 `<jre>/lib/ext` 디렉토리에 카피됩니다. Java 확장 기능의 개개의 JAR 파일에, 적절한 버젼 정보가 포함되어 있을 필요가 있습니다.

## 시큐리티

인스톨 되고 있는 확장 기능을 갱신할 필요가 있는 경우, 그 확장 기능의 다운로드 및 검증을 해, 확장 기능이 적정하게 서명되고 있는 것이 확인됩니다. 유효한 경우, Plug-in 에 의해 시큐리티 다이얼로그가 pop-up 해, 확장 기능의 인스톨을 속행할까 인스톨을 캔슬할까의 옵션이 제공됩니다.

사용자가 시큐리티 다이얼로그로 옵션을 선택하면(자), 대응하는 시큐리티 문맥내에서, 확장 기능 인스톨이 실행됩니다. 확장 기능이 올바르고 인스톨 되지 않는 이상 애플릿은 기동할 수 없습니다.

Java 확장 기능은 Java Runtime 의 `<jre>/lib/ext` 디렉토리에 다운로드 및 인스톨 되기 (위해)때문에, 각각 서명되고 있는 것이 필요합니다. 확장 기능의 인스톨 후에, 정책 파일을 개입시켜 Java 확장 기능에 적절한 액세스권이 부여됩니다.

## 상세한 순서

Java Plug-in 와 함께 사용하는 확장 기능을 설정하려면 , 다음의 순서에 따라 주세요.

### I. 애플릿에 필요한 확장 기능을 작성/취득한다

각 확장 기능은 1 개 이상의 JAR 파일로 구성됩니다. 각 JAR 파일에는, 버젼 정보가 들어간 Manifest 파일이 포함되어 있는 것으로 (「 각 확장 기능 JAR 파일의 Manifest」를 참조), 서명이 붙어 있는 것이 필요합니다. (네이티브 또는 Java 의 인스톨 프로그램에 의해 복수의 JAR 파일을 인스톨 하는 경우의 예외)

일련의 파일로부터 JAR 파일을 작성하려면 , 다음의 커멘드를 사용합니다.

> `% jar cmf my_manifest my_jar input_files`

`jar` 툴의 상세한 것에 대하여는, 플랫폼에 응한「JDK 툴과 유틸리티」문서를 참조해 주세요.

JAR 파일에 서명하는순서는 다소 복잡하게 됩니다. 순서의 개요는 다음과 같습니다.

1. `keytool -genkey` 옵션을 사용해 열쇠 페어를 생성합니다.
2. `keytool -certreq` 를 사용해, 인증국 (CA)에 대한 증명서 요구를 생성합니다. 인증국에는,VeriSign 나 Thawte 등이 있습니다. 이 요구를 CA 에 전자 메일로 보냅니다. CA 는, 요구자의 신분 정보를 확인한 뒤, 증명서 체인을 전자 메일로 반송합니다. 이 증명서 체인을 파일에 카피합니다.
3. `keytool -import` 옵션을 사용해, 체인을 키스토어내에 임포트 합니다.
4. `jarsigner` 툴을 사용해 JAR 파일에 서명해, 서명된 것을 `-verify` 옵션으로 확인합니다.

`keytool` 와 `jarsigner` 의 상세한 것에 대하여는, 플랫폼에 응한「JDK 툴과 유틸리티」문서를 참조해 주세요.

이 토픽의 상세와 예에 대해서는,「RSA 서명 첨부 증명서를 사용한 애플릿의 서명 방법」의 장을 참조해 주세요. 그 장에서는 애플릿의 JAR 파일에 서명하는 순서가 설명되고 있습니다만, 확장 기능의 JAR 파일에 서명하는 순서도 같습니다.

### II. `Implementation-URL` JAR 파일을 작성/취득한다

#### 인스톨 프로그램을 사용하지 않는 경우

순서 I 로 설명한 확장 기능 JAR 파일이 `Implementation-URL` JAR 파일입니다.

#### 인스톨 프로그램을 사용하는 경우

1. 인스톨 프로그램을 작성 또는 가져옵니다.
2. 인스톨 프로그램의 JAR 파일 및 거기에 번들 하는 확장 기능에 대해, Manifest를 작성합니다.
   - Java 인스톨 프로그램의 경우는, Manifest에 `Main-Class` 속성을 포함합니다.
   - 네이티브 인스톨 프로그램의 경우는,`Extension-Installation` 속성을 포함합니다.
3. 인스톨 프로그램, Manifest, 및 필요한 확장 기능을 번들 해 JAR 파일을 작성해, 그 JAR 파일에 서명합니다. JAR 파일의 작성과 서명의 순서는, 상기의 순서 I 와 같습니다.

#### 례

여기에서는, 애플릿으로 Sun 의 Java Advanced Imaging 를 확장 기능으로서 인스톨 할 필요가 있다고 합니다. 이것은 다음의 장소로부터 다운로드할 수 있습니다.

> `http://java.sun.com/products/java-media/jai/downloads/download.html`

「Windows JRE Install」버젼을 선택한다고 합니다. 다음의 파일이 다운로드됩니다.

> `jai-1_1_1_01-lib-windows-i586-jre.exe`

이 인스톨러에는, 다음의 JAR 파일이 번들 되고 있어 인스톨러에 의해 `<jre>/lib/ext` 디렉토리에 인스톨 됩니다.

- `jai_codec.jar`
- `jai_core.jar`
- `mlibwrapper_jai.core`

상기의 `. exe` 인스톨 프로그램이 들어간 JAR 파일의 Manifest를 작성해, JAR 파일에 서명합니다.

Manifest는 다음과 같이 됩니다.

>     Extension-Name: javax.media.jai
>     Specification-Vendor: Sun Microsystems, Inc
>     Specification-Version: 1.1
>     Implementation-Vendor-Id: com.sun
>     Implementation-Vendor: Sun Microsystems, Inc
>     Implementation-Version: 1.1. 1_01
>     Extension-Installation: jai-1_1_1-01-windows-i586-jre.exe

인스톨 프로그램과 Manifest 파일을,`jai_win.jar` 라고 하는 JAR 파일에 정리합니다. 확장 기능 JAR 파일을 포함할 필요는 없습니다. 이 예에서는, 이러한 파일은 `. exe` 인스톨 프로그램에 번들 되고 있기 (위해)때문에입니다. JAR 파일의 이름에는 반드시 확장자(extension) `. jar` 를 붙여 주세요.

`jai_win.jar` 에 서명합니다.

### III. 애플릿 JAR 파일을 작성한다

1. 애플릿의 Manifest 파일을 작성합니다. 다음의 예는, 네이티브 인스톨 프로그램을 사용하는 jai 의 Manifest 파일입니다.

> `Extension-List:jai_core
> jai_core-Extension-Name:javax.media.jai
> jai_core-Specification-Version:1. 1
> jai_core-Implementation-Version:1. 1.1_01
> jai_core-Implementation-Vendor-Id:com.sun
> jai_core-Implementation-URL:http://myserver.com/jai_win.jar`

옵션 패키지안에는, 오레이팅 시스템 마다 다른 JAR 파일내에 패키지 되는 것도 있습니다. 애플릿을 다른 OS 상에서 동작시키려면 ,`Implementation-URL` Manifest 속성으로 `$(os-name)$` 구조를 사용합니다. `$(os-name)$` (은)는, 애플릿이 실행되는 타겟 OS (SunOS, Linux, Windows-98, Windows-NT, Windows-2000, Windows-Me 등)에 변환됩니다.

> `optpkg-Implementation-URL:http://.../optpkg-$(os-name)$. jar`

2. `*. class` 파일, 애플릿에 필요한 그 외의 지원 파일, 및 애플릿의 Manifest 파일을 JAR 파일에 정리해 JAR 파일에 서명합니다. JAR 파일의 작성과 서명의 순서는, 전술의 순서와 같습니다. JAR 파일의 이름에는 반드시 확장자(extension) `. jar` 를 붙여 주세요.

### IV. 애플릿의 기동용 HTML 를 작성한다

애플릿의 HTML 페이지를 작성합니다. 수동으로 작성하는지, JDK 에 부속되어 있는 `HtmlConverter` 를 사용해 작성할 수 있습니다. `HtmlConverter` 를 사용하는 것을 추천합니다. 수동으로 작성하는 경우는, 순서에 대해「Java Plug-in 에서의 `OBJECT`,`EMBED`, 및 `APPLET` 태그의 사용」을 참조해 주세요. 애플릿 JAR 파일은,`archive` 속성안으로 지정할 필요가 있습니다.

애플릿의 이름이 `JaiApplet`, 작성한 애플릿 JAR 파일의 이름이 `JaiApplet.jar`, 메인 클래스가 `JaiApplet.class` 이다고 합니다.

원의 애플릿은 다음과 같은 것이다고 합니다.

>     <html>
>     <head>
>     <title>JaiApplet</title>
>     </head>
>     <body>
>     <APPLET code="JaiApplet.class" archive="JaiApplet.jar" align="absmiddle" WIDTH="400"HEIGHT="300"> </APPLET>
>     </body>
>     </html>

동적 버젼 관리를 위해서(때문에) `HtmlConverter` 를 사용해 이것을 변환하면(자), 다음과 같이 됩니다.

>     <html>
>     <head>
>     <title>JaiApplet</title>
>     </head>
>     <body>
>     <! --"CONVERTED_APPLET"-->
>     <! -- HTML CONVERTER -->
>     <OBJECT
>         classid = "clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
>         codebase = "http://java.sun.com/update/1. 6.0/jinstall-6-windows-i586.cab#Version=6, 0,0,99"
>         WIDTH = "400" HEIGHT = "300" ALIGN = "absmiddle" >
>         <PARAM NAME = CODE VALUE = "JaiApplet.class" >
>         <PARAM NAME = ARCHIVE VALUE = "JaiApplet.jar" >
>         <PARAM NAME = "type" VALUE = "application/x-java-applet;version=1. 6">
>         <PARAM NAME = "scriptable" VALUE = "false">
>         <COMMENT>
>     	<EMBED
>                 type = "application/x-java-applet;version=1. 6"
>                 CODE = "JaiApplet.class"
>                 ARCHIVE = "JaiApplet.jar"
>                 WIDTH = "400"
>                 HEIGHT = "300"
>                 ALIGN = "absmiddle"
>     	    scriptable = false
>     	    pluginspage = "http://java.sun.com/products/plugin/index.html#download">
>     	    <NOEMBED>
>                 </NOEMBED>
>     	</EMBED>
>         </COMMENT>
>     </OBJECT>
>     <! --
>     <APPLET CODE = "JaiApplet.class" ARCHIVE = "JaiApplet.jar" WIDTH = "400" HEIGHT = "300" ALIGN = "absmiddle">
>     </APPLET>
>     -->
>     <! --"END_CONVERTED_APPLET"-->
>     </body>
>     </html>

확장 기능이 인스톨되어 있지 않은 경우는, 애플릿의 실행시에 Java Plug-in 에 의해 Java Security Warning 가 표시되어 애플릿이 `http://myserver.com/jai_win.jar` 로부터의 확장 기능 `javax.media.jai` 의 인스톨을 필요로 하고 있는 것이 통지됩니다. 확장 기능을 인스톨 하는 액세스권이 부여되고 있는 경우는, 인스톨러에 의해 JAR 파일이 `<jre>/lib/ext` 디렉토리에 인스톨 됩니다. 인스톨이 완료하면(자) 애플릿을 실행할 수 있습니다.

Java Media Framework 를 Java 확장 기능으로서 배치하는 경우의, 실제로 동작하는 완전한 예에 대해서는,부록 5 「완전한 예 — Java 확장 기능으로서의 Java Media Framework 의 배치」를 참조해 주세요.

## 기존의 제한과 그 외의 주의

- `Implementation-URL` JAR 파일에 적절한 서명을 하지 않았던 경우, Java Plug-in 는 실패합니다만, 에러 메세지는 표시되지 않습니다.
- 확장 기능의 새로운 버젼에는, 적어도 이전의 버젼과 같은 JAR 파일명세트가 포함되는 것을 확인해 주세요. 그렇게 하지 않으면 새로운 확장 기능을 인스톨 해도, 이전의 확장 기능 JAR 파일이 덧쓰기되지 않고 남는 일이 있으므로, 다른 버젼의 확장 기능이 `<jre>/lib/ext` 에 혼재하게 됩니다. 이것은 예측 불가능한 결과를 가져옵니다.
- Java 인스톨러를 사용하는 경우, 인스톨이 종료할 때까지 프로그램이 `Main-class` 를 종료시키지 않는 것을 확인해 주세요. 경우에 따라서는, Java 인스톨러가 AWT 윈도우를 작성해 제어를 다른 thread로 전환해 그 후 곧 `Main-class` 에 돌아오는 일도 있습니다. `Main-class` 로부터 제어가 돌려주어지면(자), Java 인스톨러가 인스톨 처리중에서 만나도, 애플릿의 로드 및 기동이 즉석에서 행해집니다. 이 경우, 확장 기능이 인스톨되어 있지 않기 때문에, 애플릿의 로드에 실패합니다.