MultiSelectable (Java Card API, Connected Edition)
Date: 2009-12-11

Overview | Package | Class | Tree | Deprecated | Index | Help
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

## javacard.framework
Interface MultiSelectable

    @TransactionType(value=NOT_SUPPORTED)
    public interface MultiSelectable

The `MultiSelectable` interface identifies the implementing Applet subclass as being capable of concurrent selections. A multiselectable applet is a subclass of `javacard.framework.Applet` which directly or indirectly implements this interface. All of the applets within an applet application group must be multiselectable. If they are not, then none of the applets can be multiselectable.

An instance of a multiselectable applet can be selected on one logical channel while the same applet instance or another applet instance from within the same application group is active on another logical channel.

The methods of this interface are invoked by the Java Card runtime environment only when:

- the same applet instance is still active on another logical channel, or
- another applet instance from the same application group is still active on another logical channel.

See Runtime Environment Specification, Java Card Platform, Classic Edition, chapter 4 for details.

Method Summary
`void` | `deselect(boolean appInstStillActive)` Called by the Java Card runtime environment to inform that this currently selected applet instance is being deselected on this logical channel while the same applet instance or another applet instance from the same application group is still active on another logical channel.
`boolean` | `select(boolean appInstAlreadyActive)` Called by the Java Card runtime environment to inform that this applet instance has been selected while the same applet instance or another applet instance from the same application group is active on another logical channel.

Method Detail

### select

    boolean select(boolean appInstAlreadyActive)

  Called by the Java Card runtime environment to inform that this applet instance has been selected while the same applet instance or another applet instance from the same application group is active on another logical channel.

  It is called either when the MANAGE CHANNEL APDU (open) command or the SELECT APDU command is received and before the applet instance is selected. SELECT APDU commands use instance AID bytes for applet selection. See Runtime Environment Specification, Java Card Platform, Classic Edition, chapter 4.5 for details.

  A subclass of `Applet` should, within this method, perform any initialization that may be required to process APDU commands that may follow. This method returns a boolean to indicate that it is ready to accept incoming APDU commands via its `process()` method. If this method returns false, it indicates to the Java Card runtime environment that this applet instance declines to be selected.

  Note:

  - The `javacard.framework.Applet.select(`) method is not called if this method is invoked.

  Parameters:
    `appInstAlreadyActive` - boolean flag is `true` when the same applet instance is already active on another logical channel and `false` otherwise
  Returns:
    `true` if the applet instance accepts selection, `false` otherwise

### deselect

    void deselect(boolean appInstStillActive)

  Called by the Java Card runtime environment to inform that this currently selected applet instance is being deselected on this logical channel while the same applet instance or another applet instance from the same application group is still active on another logical channel. After deselection, this logical channel will be closed or another applet instance (or the same applet instance) will be selected on this logical channel. It is called when a SELECT APDU command or a MANAGE CHANNEL (close) command is received by the Java Card runtime environment. This method is called prior to invoking either another applet instance's or this applet instance's `select()` method.

  A subclass of `Applet` should, within this method, perform any cleanup or bookkeeping work before another applet instance is selected or the logical channel is closed.

  Notes:

  - The `javacard.framework.Applet.deselect(`) method is not called if this method is invoked.
  - Unchecked exceptions thrown by this method are caught and ignored by the Java Card runtime environment but the applet instance is deselected.
  - The Java Card runtime environment does NOT clear any transient objects of `JCSystem.CLEAR_ON_DESELECT` clear event type owned by this applet instance since at least one applet instance from the same application group is still active.
  - This method is NOT called on reset or power loss.

  Parameters:
    `appInstStillActive` - boolean flag is `true` when the same applet instance is still active on another logical channel and `false` otherwise

Overview | Package | Class | Tree | Deprecated | Index | Help
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

Copyright (c) 2009 Sun Microsystems, Inc. All rights reserved.