기존에 어플리케이션 개발자들은 프로그램을 배포하고 유지 보수하는 일에 있으서 매우 골치아파하였다. 즉, 새로운 버젼의 소프트웨어가 출시되었을때 모든 사용자 컴퓨터에 설치된 소프트웨어를 업데이트하는 것은 쉽지 않은 작업이다. 이르 위해 선 마이크로시스템스에서는 자바 웹 스타트 기술을 개발하였으며 이 기술은 최종 사용자의 컴퓨터에 자바 어플리케이션을 배포하고, 유지보수하고, 업그레이드하는 작업을 획기적으로 간단하게 해 준다.
(2) 웹으로 어플리케이션 시작하기
자바 웹 스타트는 어플리케이션을 실행하기 위한 기본적인 툴로서 웹 브라우저를 사용하여 로컬에 선의 자바 런타임 환경에 포함되어 있는 자바 웹 스타트 클라이언트 프로그램을 이용하여 어플리케이션을 사용자의 컴퓨터에 설치한다. 사용자가 JNLP(Java Network Launching Protocol)파일을 엑세스할 때마다 자바 웹 스타트 클라이언트는 해당 어플리케이션을 자동으로 사용자의 컴퓨터에 다운로드하고 실행한다.
(3) 자바 웹 스타트 배포를 위한 보안 및 사이닝
SWT에서는 대부분의 실질적인 윈도우 그래픽 작업을 네이티브 운영체제에서 제공하는 기능을 그대로 사용하고 있어 로컬 컴퓨터의 파일 시스템, 시스템 라이브러리, 그리고 그래픽 자원과 같은 여러 시스템 자원을 엑세스할 수 있어야 하므로 이를 위해 어플리케이션을 구성하는 모든 JAR파일들을 반드시 디지털 사인을 해 주어야 한다. 따라서 상용제품은 공신력있는 베리사인 또는 서트 등과 같은 인증서 발급 회사로부터 인증서를 받기를 권장한다.
JDK에서 기본적으로 제공하는 툴을 이용하여 자체 인증서를 만들어 발급할 수 있다.
intsystem라는 사용자가 인증하는 인증서를 만들어 'certkey'파일에 저장한다.
keytool -genkey -keystore certkey -alias intsystem
keystore 암호를 입력하십시오: intsystem
이름과 성을 입력하십시오
[Unknown] : expert xml
조직 단위 이름을 입력하십시오.
[Unknown] : intsystem
조직 이름을 입력하십시오.
[Unknown] : RnD
구/군/시 이름을 입력하십시오.
[Unknown] : Seoul
시/도 이름을 입력하십시오.
[Unknown] : Seoul
이 조직의 두 자리 국가 코드를 입력하십시오.
[UnKnown] : 82
<intsystem>에 대한 키 암호를 입력하십시오.
(keystore 암호와 같은 경우 RETURN을 누르십시오.): intsystem0423
keystore 암호를 입력하십시오: intsystem
이름과 성을 입력하십시오
[Unknown] : expert xml
조직 단위 이름을 입력하십시오.
[Unknown] : intsystem
조직 이름을 입력하십시오.
[Unknown] : RnD
구/군/시 이름을 입력하십시오.
[Unknown] : Seoul
시/도 이름을 입력하십시오.
[Unknown] : Seoul
이 조직의 두 자리 국가 코드를 입력하십시오.
[UnKnown] : 82
<intsystem>에 대한 키 암호를 입력하십시오.
(keystore 암호와 같은 경우 RETURN을 누르십시오.): intsystem0423
※ certkey 인증서 파일 내의 목록을 리스트하여 보기
keytool -list -keystore intsystem
keystore 암호를 입력하십시오: intsystem0423
keystore 암호를 입력하십시오: intsystem0423
(4) JNLP 파일 만들기
SWT 어플리케이션을 개발, 배포, 배치를 위한 자바 네트워크 론칭 프로토콜(JNLP) 스펙은 JCP(Java Community Process)에 의해 관리된다.
JNLP 파일은 자바 웹 스타트에서 자동 배포될 모듈에 대한 정보 및 어떻게 배포될 것인가에 대한 정보를 기술해 주는 파일이다. 즉 자바 웹 스타트 클라이언트는JNLP파일을 열어보고, JNLP파일에 기술된 대로 자바 어플리케이션을 구성하는 JAR파일 및 자원들을 다운로드하고, 로컬 컴퓨터에 있는 자바 가상 머신에서 JNLP에 설정된 메인 클래스를 실행한다.
<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="1.0+" codebase="http://localhost:8080/fileviewer" href="index.jnlp">
<information>
<title>File Viewer</title>
<vendor>IBM developerWorks</vendor>
<homepage href="index.html"/>
<description>File Viewer</description>
<description kind="short">File Viewer</description>
</information>
<security>
<all-permissions />
</security>
<resources>
<j2se version="1.4" />
<jar href="lib/fileviewer.jar" />
<nativelib href="lib/nativelib/nativelib.jar" />
</resources>
<resources>
<jar href="lib/swt-win32.jar" />
</resources>
<resources>
<jar href="lib/swt-linux.jar" />
<jar href="lib/swt-pi.jar" />
</resources>
<!-- application-desc 엘리먼트 -->
<!-- 'main-class' 속성을 이용하여 배포하는 자바 어플리케이션의 메인 클래스를 지정 -->
<!-- 자바 웹 스타트 클라이언트는 이 메인 클래스를 실행하므로 반드시 지정해야 한다. -->
<application-desc main-class="org.eclipse.swt.examples.fileviewer.FileViewer" />
</jnlp>
<jnlp spec="1.0+" codebase="http://localhost:8080/fileviewer" href="index.jnlp">
<information>
<title>File Viewer</title>
<vendor>IBM developerWorks</vendor>
<homepage href="index.html"/>
<description>File Viewer</description>
<description kind="short">File Viewer</description>
</information>
<security>
<all-permissions />
</security>
<resources>
<j2se version="1.4" />
<jar href="lib/fileviewer.jar" />
<nativelib href="lib/nativelib/nativelib.jar" />
</resources>
<resources>
<jar href="lib/swt-win32.jar" />
</resources>
<resources>
<jar href="lib/swt-linux.jar" />
<jar href="lib/swt-pi.jar" />
</resources>
<!-- application-desc 엘리먼트 -->
<!-- 'main-class' 속성을 이용하여 배포하는 자바 어플리케이션의 메인 클래스를 지정 -->
<!-- 자바 웹 스타트 클라이언트는 이 메인 클래스를 실행하므로 반드시 지정해야 한다. -->
<application-desc main-class="org.eclipse.swt.examples.fileviewer.FileViewer" />
</jnlp>
셈플1. JNLP 구현파일 [출처: 이클립스 SWT, 성인당]
※ 웹서버에 있는 JNLP 파일을 제대로 클라이언트가 다운로드 하려면 JNLP 확장자의 파일에 대한 마임 타입을 설정해 주어야 한다.
application/x-java-jnlp-file JNLP