2015-04-28 2 views
2

Я разработал апплет на Java-карте, и он отлично работает. Теперь я работаю над прочности этого апплета и более точно, что произойдет, если карта отключена во время выполнения апплета, например.Прочность апплета на Java-карте

Мне интересно, есть ли Исключение, которое обрабатывает такие вещи?

Я ищу что-то вроде:

try { 
... 
} 
// If the card is disconnected while the applet execution 
catch (Exception e) { 
... 
} 

Спасибо заранее.

ответ

4

Поскольку у смарт-карт нет батареи внутри, у вас не может быть try ... catch ... вот так. В качестве альтернативы вы можете воспользоваться преимуществами Transactions. API транзакций предоставляется только для вашей цели. Операции, которые находятся между beginTransation() и commitTransation() методами, применяются только в случае успешного завершения commitTransation(). И если Exeption/карта слезу или карта сброса происходит до commitTransation(), все возвращается в исходное состояние (т.е. в состояние, что он имеет перед тем beginTransaction())

Это походит на это:

. 
    . 
    JCSystem.beginTransaction(); 
    //put your critical code here. 
    JCSystem.commitTransaction(); 
    . 
    . 

Вы также можете использовать JCSystem.commitTransaction(); прервать транзакцию в конкретной ситуации следующим образом:

. 
    . 
    JCSystem.beginTransaction(); 

    //put your critical code here. 
    if (condition) { 
    JCSystem.commitTransaction(); 
    } 

    JCSystem.commitTransaction(); 
    . 
    . 

Обратите внимание, что:

  1. Сделки имеют ограниченный буфер в карточках. Таким образом, вы не можете поместить всю программу в транзакцию. Но для типичных критических методов он имеет достаточный размер буфера.
  2. Вы не можете использовать вложенные транзакции.
+0

Спасибо за ваш полный ответ :) – Raoul722

+1

@Abraham, приятное объяснение. Я хотел бы добавить еще один момент: Поскольку локальные переменные или элемент переходного массива не участвуют в транзакции, поэтому назначение объекта локальной переменной или переходному элементу массива должно быть тщательно рассмотрено, чтобы избежать генерации оборванных указателей. Всегда используйте транзакции при работе с критическими вещами, в которых нельзя допускать частичные обновления. – LearnAndHelp

+0

@ AnkitPandey действительно спасибо;) Вы правы. – Abraham

Смежные вопросы