卡片上的每个小应用程序由一个application标识符(AID)唯一标识。 定义在ISO 7816 - 5中的AID是一段5到16字节之间的序列。 所有的小应用程序必须扩展Applet抽象基本类,这个类定义了JCRE使用的方法来控制小应用程序的生存周期,如图10概括:
图表1. java Card小应用程序生命周期方法
小应用程序生存周期在小应用程序被下载到卡片中并且JCRE调用小应用程序的static Applet.install ()方法的时候开始,并且小应用程序通过调用Applet.register ()在JCRE中注册。 一旦小应用程序被安装并且注册,它处于未选择的状态,可以进行选择并且处理APDU。 图表11.总结小应用程序方法的操作。
(图片较大,请拉动滚动条观看)
图表2、使用 Java Card小应用程序方法
当处在未选择的状态的时候,小应用程序是非激活状态。当主应用程序要求JCRE选择一个卡片中特定的小应用程序的时候(通过指示读卡器发送一个SELECT APDU或者MANAGE CHANNEL APDU),一个小应用程序被选择进行APDU处理。为了通知这个小应用程序主应用程序已经选择了它,JCRE调用它的select()方法;小应用程序一般执行相应的初始化来为进行APDU处理做预备。
一旦选择,JCRE传送输入的APDU命令到小应用程序,通过调用它的PRocess()方法来进行处理。JCRE捕捉任何小应用程序没能捕捉的异常。
当主应用程序告诉JCRE选择另一个小应用程序的时候,前一个小应用程序取消选择。 JCRE通知活动的小应用程序,它已经通过调用它的deselect()方法被取消了选择,小应用程序回到不活动的未经选择的状态。
Java Card会话和逻辑通道
卡片会话是卡片被加电并且和读卡器交换APDU的一段时间。
Java Card 2.2支持逻辑通道(logical channels)的概念,答应最多智能卡中的16个应用程序会话同时开启,每个逻辑通道一个会话。因为卡片中的APDU的处理不能中断,并且每个APDU包含一个到逻辑通道(在CLA字节)的引用,变动的APDU可以拟同步地访问卡片上的许多小应用程序。你可以设计一个小应用程序被多次选择;也就是说,每次和一个以上逻辑通道通信。多选的小应用程序必须实现javacard.framework.MultiSelectable接口和相应方法。
在一些卡片部署中,一个默认小应用程序可以被定义为在卡片复位以后被自动地选择,用于在基本逻辑通道(通路0)上通信。Java Card 2.2答应你定义默认小应用程序,但是不指定的如何做;其机理由厂家特定。进入讨论组讨论。