| // |
| // Licensed to the Apache Software Foundation (ASF) under one |
| // or more contributor license agreements. See the NOTICE file |
| // distributed with this work for additional information |
| // regarding copyright ownership. The ASF licenses this file |
| // to you under the Apache License, Version 2.0 (the |
| // "License"); you may not use this file except in compliance |
| // with the License. You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, |
| // software distributed under the License is distributed on an |
| // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| // KIND, either express or implied. See the License for the |
| // specific language governing permissions and limitations |
| // under the License. |
| // |
| |
| = Краткое руководство пользователя по разработке приложений Java Card |
| :jbake-type: tutorial |
| :jbake-tags: tutorials |
| :jbake-status: published |
| :icons: font |
| :syntax: true |
| :source-highlighter: pygments |
| :toc: left |
| :toc-title: |
| :description: Краткое руководство пользователя по разработке приложений Java Card - Apache NetBeans |
| :keywords: Apache NetBeans, Tutorials, Краткое руководство пользователя по разработке приложений Java Card |
| |
| image::images/java-smart-card-sm.jpg[] |
| |
| _Составитель: Тим Бодро (Tim Boudreau), редактор: Рут Кастерер (Ruth Kusterer)_ |
| |
| Java Card – интересная для работы платформа JVM, работающая на link:http://en.wikipedia.org/wiki/Smart_card[+смарт-картах+] и небольших устройствах, помещающихся на ладони. Java Card 3.0 существует в двух вариантах: |
| |
| *Классический*:: Такой же, как и более ранние версии Java Card. Платформа крайне ограничена. Например, отсутствует ``java.lang.String`` , нет метода ``java.lang.Object.hashCode()`` , и не поддерживаются числа с плавающей точкой. |
| *Расширенный*:: Новые, более мощные смарт-карты - все это новые возможности Java Card 3.0. Поддерживается более полная реализация платформы Java. Наиболее любопытна встроенная поддержка сервлетов. Можно написать веб-приложение с помощью хорошо знакомого интерфейса API, которое будет выполняться на смарт-карте. |
| |
| |
| |
| |
| |
| == Требования |
| |
| *Для работы с этим учебным курсом требуются программное обеспечение и ресурсы, перечисленные ниже.* |
| |
| image::../../../images_www/articles/69/netbeans-stamp.gif[title="Содержимое этой страницы применимо к IDE NetBeans 6.8 и 6.9"] |
| |
| |=== |
| |Программное обеспечение или материал |Требуемая версия |
| |
| |link:https://netbeans.org/downloads/index.html[+IDE NetBeans+] |6.9 |
| |
| |link:http://java.sun.com/javacard/downloads/index.jsp[+Пакет Java Card SDK+] |3.02 |
| |
| |Подключаемый модуль Java Card для среды NetBeans |1.3 |
| |
| |link:http://www.oracle.com/technetwork/java/javase/downloads/index.html[+Комплект для разработки приложений на языке Java+] (JDK) |Версия 6 |
| |=== |
| |
| |
| == Настройка среды проекта |
| |
| Поскольку у смарт-карты отсутствует пользовательский интерфейс, требуется либо иметь устройство чтения смарт-карт для чтения и записи карт, либо использовать эмулятор, включенный в Java Card Reference Implementation (RI). В этом учебном курсе будет использоваться эмулятор. |
| |
| *Примечание.* Подключаемый модуль Java Card работает в любой операционной системе, но эмулятор Java Card Reference Implementation доступен только для Windows. Тем не менее, можно настроить его как платформу Java на других операционных системах, указав в среде NetBeans на RI, установленный в разделе Windows, в системах Mac или Linux, однако в таком случае не будет возможности запуска приложений. |
| |
| |
| === Установка подключаемых модулей в IDE NetBeans |
| |
| 1. Загрузите и установите IDE NetBeans 6.9. |
| 2. После установки в меню "Сервис" выберите пункт "Подключаемые модули". |
| 3. Под заголовком Available Plugins находятся два подключаемых модуля, связанных с Java Card: Java Card и Java Card Runtime Bundle. |
| * Java Card представляет собой подключаемый модуль, добавляющий поддержку проектов Java Card к IDE NetBeans. |
| * Java Card 3.0.2 Runtime Bundle требуется только при отсутствии установленной копии Java Card Reference Implementation. |
| |
| image::images/install-javacard-plugins.png[] |
| |
| 4. После установки подключаемого модуля требуется перезапустить среду IDE, а затем продолжить выполнение учебного курса. |
| |
| |
| === Регистрация платформы Java Card |
| |
| Если Java Card 3.0.2 Runtime Bundle был загружен с помощью диспетчера подключаемых модулей, то пакет Java Card SDK уже настроен в качестве платформы. Однако, если платформа была загружена с веб-сайта link:http://java.sun.com/javacard/devkit/[+java.sun.com+], можно использовать меню Tools > Java Platforms, чтобы добавить платформу Java Card в среду IDE так же, как добавляется любая платформа Java. |
| |
| image::images/installPlatform.png[] |
| |
| После настройки платформа Java Card появляется на вкладке "Службы" в среде IDE. Если вкладка "Службы" не отображается, выберите пункт "Службы" в меню "Окна". |
| |
| image::images/services-tab.png[] |
| |
| На одной "платформе" может быть несколько "устройств". Проект развертывается на конкретном устройстве конкретной платформы. |
| |
| |
| == Общие сведения о типах проектов Java Card |
| |
| В меню "Файл" выберите пункт "Создать" и выберите категорию Java Card. Можно создавать несколько типов проектов Java Card. Все они собираются с помощью link:http://ant.apache.org/[+Apache Ant+], так же, как проекты NetBeans Java SE. |
| |
| image::images/choose-project-type.png[] |
| |
| Классический апплет — традиционный апплет Java Card для небольших устройств, как апплеты в Java Card 2.0 и ранее. Классическая библиотека подобна классическим проектам апплетов, но без апплета, просто код, который нужно поместить на устройство, который может разделяться между апплетами. |
| |
| Расширенный апплет и библиотека — то же самое с расширенным API Java Card 3.0, т.е. с возможностью использования java.lang.String и прочего. Загрузочный путь к классам различается для классических и расширенных проектов, поэтому, например, автозавершение кода не будет предлагать java.lang.String в классических проектах, но будет в расширенных. |
| |
| image::images/create-applet-app.png[] |
| |
| Проекты веб-приложений - это наиболее интересная и захватывающая функция Java Card 3.0. Пользователи получают проект схемы с реализованным сервлетом и доступ к полному API сервлета. С этими приложениями проще работать, чем с апплетами — на стороне клиента не требуется дополнительный код для взаимодействия с устройством, достаточно веб-браузера. Приложения можно тестировать локально с помощью Reference Implementation и веб-браузера. |
| |
| image::images/create-web-app.png[] |
| |
| |
| == [[Работа с проектом]] |
| |
| В этом учебном курсе будет создан веб-проект. |
| |
| В новом веб-проекте введите имя проекта "Веб-приложение Card" и укажите путь к проектам NetBeans. Нажмите кнопку "Готово". Проект отображается на вкладке "Проект". |
| |
| Щелкните правой кнопкой мыши узел проекта на вкладке "Проект" и выберите в контекстном меню пункт "Свойства". В разделе "Выполнить" окна "Свойства проекта" можно изменить платформу и устройство для развертывания проекта. Нажмите кнопку "Закрыть" для сохранения изменений. |
| |
| Работа с веб-приложением Java Card похожа на работу с любым веб-приложением, развертываемом в контейнере сервлетов. Нажмите кнопку "Выполнить" на панели инструментов для запуска примера "Hello World". При запуске веб-приложения Java Card открывается веб-браузер с выходным сообщением сервлета: ``Hello from webapplication1.MyServlet`` . |
| |
| image::images/editor.png[] |
| |
| При запуске проектов с типом апплетов в IDE NetBeans можно использовать два удобных интерфейса: вывод данных в командной строке и консоль Java Card. Консоль используется для взаимодействия с апплетом. Можно отправлять данные в шестнадцатеричном формате и получать ответные сообщения. |
| |
| Совет. RI содержит дополнительные образцы проектов, которые готовы к открытию и запуску в IDE NetBeans. |
| |
| image::images/run-customizer.png[] |
| |
| |
| == [[Использование особых возможностей подключаемых модулей]] |
| |
| Java Card включает два "магических" понятия, отсутствующих в других платформах Java: |
| |
| *Идентификаторы приложений (AID)*:: Эти уникальные идентификаторы выглядят следующим образом: //aid//720A75E082/0058AEFC20. Первая часть шестнадцатеричного кода — идентификатор поставщика (его можно получить в link:http://iso.org/[+International Standards Organization (ISO)+]); вторая часть — уникальное значение, выбранное разработчиком. Идентификаторы AID используются для идентификации классов апплетов, пакетов Java (только для классических апплетов и библиотек), уникальных экземпляров апплетов (можно развертывать один апплет многократно на одном устройстве — идентификатор AID экземпляров будет использоваться для выбора апплета). |
| *Сценарии APDU*:: Это сценарии отправки данных апплету. Они содержат большое количество набранного вручную шестнадцатеричного кода; сценарий должен выбрать конкретный экземпляр апплета и отправить ему данные. Вместо написания сценария можно использовать консоль Java Card. |
| |
| Хотя эти два момента довольно сложны, подключаемые модули NetBeans помогают абстрагироваться от этих сложностей следующим образом: |
| |
| * При создании проекта автоматически создаются корректные значения AID апплета, AID классического пакета и один AID экземпляра. |
| |
| * При переходе на вкладку 'Апплеты' диалогового окна 'Свойства проекта', проект сканирует его путь к классам для всех найденных подклассов апплета карт Java Card: |
| |
| image::images/customize-applets-pre.png[] |
| |
| * После их обнаружения можно выбрать в диалоговом окне апплеты, которые действительно развертываются, и настроить значения AID, параметры развертывания и так далее. Введенные значения проверяются средой IDE, поэтому ввести некорректные данные сложно. |
| |
| image::images/customize-applets.png[] |
| |
| * Если требуется развертывать два экземпляра одного апплета, можно настроить и такое поведение. Однако в простых случаях, когда нужно развертывать только один экземпляр, нет необходимости задумываться об этом. |
| |
| image::images/customize-instances.png[] |
| |
| * Для тестирования апплетов не нужно писать вручную сценарии APDU — можно использовать консоль для прямого взаимодействия с апплетами. |
| |
| image::images/open-console.png[] |
| |
| image::images/shell.png[] |
| |
| * "AID пакета" для классических проектов (в которых может быть только один пакет Java) также обрабатывается средой IDE, но есть возможность настройки. |
| |
| image::images/create-project-package-aid.png[] |
| |
| * Часть всех значений AID в проектах — присвоенный организацией ISO ID поставщика (RID). Для ускорения начала работы среда IDE генерирует случайное значение RID, пригодное для разработки и тестирования. При наличии официального RID, можно ввести его в меню "Сервис > Параметры", и оно будет использоваться для всех новых проектов. Нажмите кнопку "Создать" в окне "Свойства проекта" для обновления значений в существующих проектах. |
| |
| image::images/global-rid.png[] |
| |
| |
| == [[Взаимодействие с пакетами SDK сторонних поставщиков]] |
| |
| В настоящее время средствами поддерживается только Java Card 3.0.2 Reference Implementation, но они имеют расширяемый API для интеграции карт поставщиков. Определения платформы и устройства — простые файлы свойств, импортируемые сценарием сборки. |
| |
| Развертывание осуществляется с помощью задач Ant, предоставляемых поставщиком смарт-карт. Это означает, что созданные проекты могут выполняться вне среды IDE и жесткая привязка к среде отсутствует. Исходный код задач Ant, являющихся частью Java Card RI, можно загрузить на link:http://kenai.com/projects/javacard[+портале проекта Java Card+] вместе с примерами проектов NetBeans. |
| |
| Вы поставщик смарт-карт и создали средства развертывания Java Card? Обратитесь к автору подключаемого модуля link:mailto:tboudreau@sun.com[+Тиму Бодро (Tim Boudreau)+] для получения сведений link:http://wiki.netbeans.org/JavaCardPlatformIntegration[+об интеграции смарт-карт+]. Интеграция может осуществляться на нескольких уровнях, в зависимости от потребностей в поддержке карты в среде IDE. |
| |
| link:/about/contact_form.html?to=6&subject=NetBeans%20Java%20Card%20Development%20Quick%20Start%20Guide[+Отправить отзыв по этому учебному курсу+] |
| |
| |
| |
| == Дополнительные ссылки |
| |
| * Авторами этих модулей по большей части является link:https://blogs.oracle.com/javacard/[+Анки Нелатуру (Anki Nelaturu)+] и остальные члены команды Java Card. |
| * link:http://java.sun.com/javacard[+Официальный портал Java Card Sun+] — новости, инструментарии разработчика, справочные ресурсы, спецификации, разделы часто задаваемых вопросов. |
| * link:http://kenai.com/projects/javacard/pages/Home[+Портал проекта Java Card+] — исходный код, примеры проектов, форумы, документация. |
| * link:http://wiki.netbeans.org/JavaCardPlatformIntegration[+Интеграция платформы для поставщиков карт+] |
| * link:http://java.sun.com/developer/technicalArticles/javacard/javacard-servlets/[+Развертывание сервлетов на смарт-картах: переносные веб-серверы с Java Card 3.0+] |