내용 목차
본 장에서는 JEUS에서 애플릿 프로그램의 작성 및 설정하고 실행하는 방법에 대해 설명한다.
애플릿은 웹 브라우저에서 실행되는 Java 애플리케이션이다.
웹 브라우저에서 실행되는 애플릿에서 JEUS의 Jakarta EE 서비스를 사용하기 위해서는 애플릿 컨테이너를 사용한다. 기본적으로 애플릿은 애플리케이션 클라이언트이지만 JEUS에서는 아직 경량 클라이언트 컨테이너를 제공하지 않기 때문에 JEUS의 라이브러리들에 바로 접근할 수 없는 애플릿은 컨테이너 없이 바로 JEUS의 Jakarta EE 서비스를 사용하는 방법으로 구현한다.
애플릿을 사용하면 브라우저에서 Java 애플리케이션을 수행할 수 있다. 더불어 JEUS의 기능을 사용하는 클라이언트로 동작할 수 있다.
애플릿이 구동되는 데 필요한 파일들은 웹 애플리케이션 내에 존재한다. HTML의 JAVA_CODEBASE가 "."으로 되어 있기 때문에 이 JAR 파일들은 HTML 문서가 deploy되는 웹 애플리케이션에서 HTML 문서와 같은 디렉터리에 존재해야 한다.
본 절에서는 사용자가 참고할 수 있는 샘플 예제를 설명한다.
애플릿 애플리케이션은 Applet 또는 JApplet 클래스를 상속받고, start() 메소드를 구현해야 한다.
다음 예제는 클라이언트 컨테이너를 통해서가 아닌 독립적으로 수행되는 클라이언트의 예이다. 따라서, Dependency Injection을 사용하지 않고 JNDI API를 사용하여 해당 EJB를 직접 Lookup하게 되어 있다.
앞의 클라이언트 컨테이너와 동일한 EJB를 사용하고 이 경우 EJB는 helloejb.Hello라는 인터페이스 이름을 바인딩 이름으로 사용한다.
[예 3.1] 애플릿 애플리케이션 : <<HelloClient.java>>
package helloejb; import javax.naming.Context; import javax.naming.InitialContext; import java.applet.Applet; import java.util.Hashtable; import java.awt.BorderLayout; import java.awt.Font; import java.awt.event.*; import javax.swing.*; public class HelloClient extends JApplet { public void start() { try { Hashtable env = new Hashtable(); env.put(Context.INITIAL_CONTEXT_FACTORY,"jeus.jndi.JNSContextFactory"); Context context = new InitialContext(env); Hello hello = (Hello) context.lookup("helloejb.Hello"); System.out.println("EJB output : " + hello.sayHello()); JLabel label = new JLabel(hello.sayHello()); label.setFont(new Font("Helevetica", Font.BOLD, 15)); getContentPane().setLayout(new BorderLayout()); getContentPane().add(label, BorderLayout.CENTER); setSize(500, 250); setVisible(true); } catch (Exception ex) { ex.printStackTrace(); } } }
EJB가 어떤 이름으로 JNDI에 바인딩되는가에 대한 자세한 내용은 "JEUS EJB 안내서"를 참고한다.
HTML 문서에는 어떤 애플릿을 호출하고 이 애플릿의 클래스들의 위치를 지정한다.
예제에서는 위의 애플리케이션 클래스와 helloejb.Hello EJB 인터페이스가 hello-client.jar에 포함되어 있다고 가정한다. jclient.jar는 JEUS_HOME\lib\client에 존재하는 클라이언트용 JEUS 라이브러리이다.
[예 3.2] HTML 예제 : <<index.html>>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Hello JavaEE</title>
</head>
<body>
<center>
<h1>Hello JavaEE Sample Applet!</h1>
<APPLET CODE = "helloejb.HelloClient" JAVA_CODEBASE = "."
ARCHIVE = "hello-client.jar,jclient.jar"
WIDTH = 300 HEIGHT = 300/>
</APPLET>
</center>
</body>
</html>
HTML 문서를 브라우저에 관계없이 사용하고 또한 브라우저가 실행되는 곳에 JDK가 설치되어 있지 않다면 이를 설치하도록 유도할 수 있다. HTML 문서로 변환하기 위해서는 JDK의 htmlconverter를 사용한다. 자세한 내용은 http://docs.oracle.com/javase/1.5.0/docs/guide/plugin/developer_guide/html_converter.html을 참고한다.
애플릿은 기본적으로 HTML 문서에서 접근하므로 이 HTML 문서를 웹으로 전송하기 위해서는 웹 애플리케이션이 필요하다. 애플릿을 실행하기 전에 웹 애플리케이션과 EJB의 deploy가 완료되어야 한다.
웹 애플리케이션 Deploy
웹 애플리케이션을 생성하고 HTML 문서 및 'ARCHIVE'에 지정된 JAR 파일들을 추가한다. 웹 애플리케이션의 생성과 deploy에 대한 자세한 내용은 "JEUS Application & Deployment 안내서"를 참고한다.
EJB Deploy
웹 애플리케이션 deploy가 완료되면 EJB 애플리케이션을 deploy한다.
웹 브라우저를 실행하고 HTML 문서 URL을 입력하여 애플릿을 실행한다. 애플릿의 경우 Java Security 모델에 따라 java.policy에 설정한 대로 Access control을 한다. 따라서 java.policy 파일에 애플릿에서 사용하는 클래스에 대해 permission을 제공해야 애플릿이 문제없이 수행된다.
java.policy 설정은 http://docs.oracle.com/javase/1.5.0/docs/guide/deployment/deployment-guide/security.html 문서를 참고한다.
웹 브라우저는 HTML 페이지 내의 <applet> 태그로 접속한다. 예제의 애플릿은 Swing을 사용하므로 다음의 주소로 웹 브라우저를 통해서 접근할 수 있다.
http://host1:8088/hello/index.html