150 likes | 412 Views
Java Card Technology Ch04: Java Card Object. Instructors: Fu-Chiung Cheng ( 鄭福炯 ) Associate Professor Computer Science & Engineering Tatung University. Objects in the Java Card. JCRE and applets create objects to represent, store and manipulate data Object in in the Java Card:
E N D
Java Card TechnologyCh04: Java Card Object Instructors: Fu-Chiung Cheng (鄭福炯) Associate Professor Computer Science & Engineering Tatung University
Objects in the Java Card • JCRE and applets create objects to represent, store and manipulate data • Object in in the Java Card: • All the objects on the Java Card platform are instances of classes or array types, which have the same root class java.lang.Object. • Fields in a new object or components in a new array are set to their default values (zero, null, or false) unless they are initialized to some other values in the constructor.
Java Card Memory Model • Three kinds of memory: ROM, RAM, and EEPROM. • ROM: • read only memory where program and data were burned. • The least expensive • RAM and EEPROM can be read and written. • RAM is used for temporary storage; EEPROM is used for longer-lived data.
Persistent Objects (Ⅰ) • A persistent object is created by the new operator. • A persistent object holds states and values across CAD sessions. • Any update to single field in a persistent object is atomic. • A persistent object can be referenced by a field in a transient object. • A field in a persistent object can reference a transient object.
Persistent Objects (Ⅱ) • If a persistent object is not referenced by other objects, it becomes unreachable or can be garbage collected.
Transient Object • The term transient object is somewhat of misnomer. • It can be incorrectly interpreted to mean that the object itself is temporary: when the power is removed, the transient object is destroyed • In fact, the term transient object means that the contents of the fields of the object have a temporary nature • As with persistent objects, the space allocated for transient objects is reserved and cannot be reclaimed unless a garbage collector is implemented.
Transient Object • An applet should create a transient object only once during its lifetime and should save the object reference in a persistent field (see Figure 4.1 on page 51) • The next time the card is powered on, the applet use the same object reference to access the transient object (variable)
Transient objects • In Java Card 2.1, only arrays with primitive types or arrays with references to Object can be declared transient • The primitive type in Java Card platform are byte, short, int and boolean • Transient object == transient array
Properties of transient objects(Ⅰ) • A transient object is created by invoking the Java Card APIs. • A transient object does not hold states and values across CAD sessions. The fields of a transient object are cleared to their default value (zero,false, or null) at the occurrence of certain events. • Any update to a single field in a transient object is not atomic.
Properties of Transient Objects (Ⅱ) • A transient object can be referenced by a field in persistent objects. • A field in a transient object can reference a persistent object. • If a transient object is not referenced by other objects, it becomes unreachable or can be garbage collected. • Writes to the fields of a transient object do not have a performance penalty, because RAM has a much faster write cycle time than EEPROM
Transient Object Types • CLEAR_ON_RESET Transient objects are used for maintaining data that need to be preserved across applet selections but not across card resets. • Card master session key • CLEAR_ON_DESELECT transient objects are used for maintaining data that must be preserved as long as an applet is selected but not across applet selections or card resets. • Applet-owned session key
Creating Transient Objects • In Java Card technology, transient objects are created by using one of the factory methods in the JCSystem class. • Table 4.1 on page 53 • public static boolean[] makeTransientBooleanArray(short length, byte event) • makeTransientByteArray • makeTransientShortArray • makeTransientObjectArray
Creating Transient Objects • Length specifies the requested transient array length • Event indicates which kind of event clear the object (CLEAR_ON_RESET and CLEAR_ON_DESELECT) • Example: • byte[] buffer = JCSystem.makeTransientByteArray(BUFFER_LENGTH, JCSystem.CLEAR_ON_DESELECT)
Querying Transient Objects • An applet may need to access an object that is created by different applet. • JCSystem class provides a convenient query method for an applet to determine whether an object being accessed is transient • public static byte isTransient(Object theObject) • The method isTansient returns a constant (either CLEAR_ON_RESET or CLEAR_ON_DESELECT) or the constant JCSystem.NOT_A_TRANSIENT_OBJECT to indicate that the object is null or is a persistent object.
A Few Words about Objects Creation and Deletion • If there isn’t sufficient nonvolatile space available when an applet tries to create a persistent object using the new operator, the JCRE will throw a SystemException with the reason code JCSystem.NO_RESOURCE. • When an applet calls one of the make-transient-object and there is insuffient RAM space available, JCRE throws a SystemException with the reason code JCSystem.NO_TRANSIENT_SPACE