Java TV API는 Xlet application lifecycle이라 불리우는 application model을 정의한다. 이와 같은 lifecycle model을 사용하는 Java application은 Xlet이라 불리워 진다. Xlet application lifecycle은 기존의 application환경과 가상머신기술에 호환된다.
Xlet application lifecycle model은 Xlet과 이것의 환경과의 대화(protocol)을 다음과 같이 정의한다:
단순하고 잘 정의된 상태 머신
application 상태의 간결한 정의
상태들 간의 변화를 위한 신호 API
Xlet Application Lifecycle Definitions
다음에 정의된것들은 Xlet application lifecycle model에 사용되어진다:
Application manager ? Java application을 관리하는 디지털 텔레비전 수신기의 소프트웨어적인 운영환경의 한 부분. Application manager는 이것의 상태 변화 신호에 의해 Xlet의 lifecycle을 제어한다. Application manager는 수신기에서 필요하지만, 이것의 정확한 동작은 specific의 구현이다.
Xlet ? 디지털 텔레비전에서 동작되는 (일반적으로 download되는) Java Application.
Xlet states ? Xlet의 상태변화는 Xlet 자신에 의해 처리된다. Xlet은 오직 언제 상태가 성공적으로 변화되었는지를 안다. 네가지의 Xlet state는 Loaded, Active, Paused, Destryed이다. Xlet은 coallback을 통해 application manager와 통신한다. Xlet은 이와 같은 상태의 성공이나 실패를 callback의 리턴값으로 신호한다.
Xlet context ? Xlet 시스템안의 다른 facilitety를 접근하기 위해 사용하는 object. 각 Xlet은 하나의 xletContext object를 갖으며, 이것은 명시된 환경에 맞추어 질 수 있다.
Application Manager Requriements
Xlet application lifecycle은 application manager가 Xlet을 통틀어 행사할 수 있는 모든 제어를 address한다. Xlet위에 있는 Applicatin manager의 제어는 Xlet이 수신기에 있는 그래픽이나 공유자원과 같은 다른 자원의 접근을 허용하지는 않는다. Application manager는 순수하게 Java언어로 쓰여질 수 도, 아닐 수 도 있다.
Application manager 의 자세한 사항이 Java TV API의 영역을 벗어 난다 할지라도, Xlet application lifecycle model은 다음과 같은 원칙을 준수하는 application manager가 상주할 것을 요구한다:
Xlet은 언제든지 destry 될 수 있다.
Application manager는 Xlet위에서 결정적인 제어권을 갖는 디지털 텔레비전 수신기의 한 entity이다. 따라서, application manager는 Xlet을 언제든지 destroy할 수 있어야 한다.
Xlet의 현재 상태는 항상 보고되어야 한다.
Application manager는 Xlet에 관한 그들의 현재 상태를 신호해야할 책임이 있다. 하지만, Xlet은 자신의 상태를 또한 바꿀 수 있어서, 그들은 반드시 이와 같은 변화를 application manager에서 신호해야 한다.
Application manager는 Xlet의 상태를 바꿀 수 있다.
Application manager의 궁극적인 목적은 Xlet의 상태 변화를 명령하기 위해서 이다.
Application manager는 Xlet의 상태가 바뀌었다면 그것을 알아야 한다.
Xlet applicatio lifecycle API의 한 특징은 Xlet은 자신의 상태를 바꿀 수 있다는 것이다. 따라서, application manager는 반드시 이 상태 변화를 통지 받아서 Xlet의 상태를 추적 할 수 있어야 한다.
Xlet States
Xlet에 관한 lifecycle은 다음과 같다.
Table 4 Xlet States
상태 이름
설 명
Loaded
Xlet이 로드되고 아직 초기화 되지 않은 상태. 이 상태는 new를 이용해서 생성된 다음 들어 가게 된다. Xlet의 아규먼트없는 constructor을 호출하고 Exception없이 리턴된 경우. Xlet은 일반적으로 이 단계에서 거의 또는 전혀 초기화를 하지 않는다. 만약 Exception이 발생하면, Xlet은 즉시 Destroyed상태로 들어가며, 버려진다.
Note; 이 상태는 Xlet instance당 단 한번만 만날 수 있다.
Paused
Xlet이 초기화되고 정지된 상태. 이 상태는 어떤 공유 자원을 선점하거나 사용할 수 없다.
이 상태는 다음과 같은 상화에서 만나게 된다:
Loaded상태로부터 Xlet.init()메서드가 성공적으로 리턴한 다음 또는
Active 상태로부터 Xlet.pauseXlet() 메서드가 성공적으로 리턴한 다음 또는
Active 상태로부터
XletContext.notifyPaused()메서드가 성공적으로 리턴하기 전
Active
Xlet이 일반적인 기능을 하고 있으며, 서비스를 제공하는 상태. 이 상태는 Paused 상태에서 Xlet.startXlet()메서드가 정상적으로 리턴된후 들어 오게 된다.
Destryed
Xlet은 모든 자원을 반납하고 종결된다. 이 상태는 다음 상황에서 들어온다 :
DestroyXlet() 메서드가 성공적으로 리턴했을 때.
DestroyXlet()메서드는 모든 홀드하고 있는 자원을 반납하고 필요한 clean up을 실행하고 garbage collect당 할것이다. 또는,
Xlet은
XletContext.notifyDestoryed의 호출전에 반드시 Xlet.destryXlet()메서드와 동일한 수행을 해야 한다.
Note: 이 상태는 Xlet의 instance당 오직 단 한번만 만날 수 있다
Xlet state Machine
Xlet 상태 머신은 Xlet의 동작을 텔레비전 시청자가 기대하는 동작에 가능한 가깝게 설계되었다. 특히:
감지되는 Xlet의 startup 응답시간의 매우 짧을 것이다.
Xlet의 임시 정지를 서비스로 제공해야 하는 것이 가능하다.
Xlet의 destroy를 언제든 가능하게 한다.
그림 7은 Xlet에 대한 application 상태 머신을 그림으로 보여주고 있다.
Xlet Lifecycle Model
오직 Xlet 만이 설계된 서비스를 제공할 수 있는지를 결정할 수 있다. 따라서, application manager는 Xlet에게 서비스를 제공하라고 강요할 수 없다. 이것은 오직 Xlet이 그렇게 하라고 허락된 것을 가르킬 수 있다. 일반적인 Xlet 실행 순서는 다음과 같다:
Table5 Xlet Excution
Application Manager
Xlet
Application manager는 Xlet의 새로운 instance를 생성한다.
Xlet의 default constuctor(아규먼트 없는)가 호출되고 Loaded 상태에 있다.
Application manager는 Xlet을 실행시키기 위해 필요한 context object를 생성하고 Xlet을 초기화 시킨다.
Xlet은 context object를 이용하여 자신을 초기화 한다. Paused상태에 있다.
Application manager는 이 서비스를 실행하기 적절한 시간을 결정하고, Active 상태로 들어갈 것을 신호한다.
Xlet은 서비스를 실행하는데 필요한 모든 자원을 획득한다.
Application Manager은 더 이상 Xlet이 서비스를 실행하는 것을 필요치 않는다. 따라서 Xlet에게 서비스를 멈추라는 신호를 보낸다.
Xlet은 서비스 실행을 멈추고 현재 선점하고 있는 자원을 반납하는 선택을 하게 될것이다.
Application manager는 Xlet이 더 이상 필요치 않다고 결정하거나 보다 높은 우선순위를 위한 방을 만든다. 따라서 이것은 Xlet에게 destroy되는 신호가 된다.
만약 그렇게 하도록 설계되었다면 Xlet은 상태나 사용자 선호를 저장하거나 clean up을 실행한다.
Xlet Package
Xlet 패키지는 개발자에게 디지털 텔레비전 수신기 환경에서의 application lifecycle signaling API와 함께 제공된다. Xlet API는 Xlet과 그 환경을 나타내는 Xlet과
XletContext로 구성되어진다.(
JavaDoc에서 자세한 사항을 보거나 말거나..)
Xlet API는 상태변화 신호를 위해 callback 방법을 사용한다. Xlet의 상태는 application manager가 Xlet의 한 메서드를 호출하거나 Xlet이
XletContext object를 통해 내부적인 상태 변화의 application manager에게 통지에 의해 바뀔 수 있다. 정확하게 언제 그 상태의 변화가 일어나는지의 의미는 중요하다:
Call to Xlet
이 interface에 호출은 호출의 성공적인 리턴이 이루어 졌을때만 성공적인 상태변화를 가르킨다.
Call to
XletContext
이 interface에 호출은 상태변화가 입구에 있음을 나타낸다.
Xlet API는 다음의 원칙을 따른다:
Xlet API는 Xlet에게 상태변화가 요구될 때 신호를 보낸다.
궁극적인 Xlet API의 목적은 Xlet의 상태변화를 명령하는데 있다.
Xlet이 초기화될 때 context가 제공된다.
개별적인 Xlet은 적절한 실행을 할 수 있게 또는 없게 정의 할 수 있는 오직 개체(entity)일뿐이다. 따라서, Xlet은 원하는 실행을 더 이상 할수 없음을 발견하고 상태 변화를 선택 하게 될것이다.
Xlet은 모두 마쳤을 때 신호를 보낼수 있다.
Xlet은 자신의 작업을 모두 마쳤을 때, application manager에게 신호를 보낸다.