blob: 58a529f95aaeeb83c8b5fb088d86b5e5a8eb0a4c [file] [log] [blame]
//
// 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.
//
= Guia de Início Rápido do Desenvolvimento de Java Card
:jbake-type: tutorial
:jbake-tags: tutorials
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Guia de Início Rápido do Desenvolvimento de Java Card - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Guia de Início Rápido do Desenvolvimento de Java Card
image::images/java-smart-card-sm.jpg[]
_Contribuição de Tim Boudreau, mantido por Ruth Kusterer_
O Java Card é uma plataforma interessante para trabalhar com - um JVM que executa em link:http://en.wikipedia.org/wiki/Smart_card[+smart cards+] e pequenos dispositivos que cabem na palma da mão. O Java Card 3.0, vem em dois tipos:
*Clássico*::: É o mesmo que as versões anteriores do Java Card. A plataforma é extremamente limitada. Por exemplo, o ``java.lang.String`` não existe, não tem nenhum método ``java.lang.Object.hashCode()`` e nenhum número de ponto flutuante.
*Estendido*::: Cartões inteligentes novos e mais potenteseste é novo no Java Card 3.0. Ele suporta uma implementação muito mais completa da Plataforma Java. Provavelmente, a melhor coisa sobre o suporte nativo para Servlets é que você pode realmente gravar uma aplicação Web utilizando APIs familiares, que podem ser executados em um cartão inteligente!
== Requisitos
*Para concluir este tutorial, são necessários os seguintes recursos e softwares:*
image::../../../images_www/articles/69/netbeans-stamp.gif[title="O conteúdo desta página aplica-se ao NetBeans IDE 6.8 e 6.9"]
|===
|Software ou Recurso |Versão Necessária
|link:https://netbeans.org/downloads/index.html[+NetBeans IDE+] |6.9
|link:http://java.sun.com/javacard/downloads/index.jsp[+Java Card SDK+] |3.02
|Plug-in Java Card para NetBeans |1.3
|link:http://www.oracle.com/technetwork/java/javase/downloads/index.html[+Java Development Kit+] (JDK) |Versão 6
|===
== Configurando o Ambiente do Projeto
Como um cartão inteligente não tem uma interface de usuário, é necessário um leitor de cartão inteligente para ler e gravar os dados nos cartões ou utilizar um emulador incluído na Implementação de Referência do Java Card (RI). Este tutorial utilizará o emulador.
*Observação:* o plug-in do Java Card funciona em qualquer sistema operacional, mas o emulador de Implementação de Referência do Java Card está disponível somente para Windows. Entretanto, é possível configurá-lo como uma Plataforma Java em outros sistemas operacionais ao apontar o NetBeans para uma instalação do RI em uma partição Windows nos sistemas Mac ou Linux, mas não é possível executar projetos utilizando essa configuração.
=== Instalando Plug-ins no NetBeans IDE
1. Faça o download e instale o NetBeans IDE 6.9.
2. Após a instalação, vá para o menu Ferramentas > Plug-ins.
3. Em Plug-ins Disponíveis existem dois plug-ins relacionados ao Java Card: Java Card e Pacote de Runtime do Java Card.
* O Java Card é o plug-in que adiciona o suporte ao projeto Java Card para o NetBeans IDE.
* O Pacote de Runtime Java Card 3.0.2 é necessário somente se você não possuir uma cópia da Implementação de Referência do Java Card instalada.
image::images/install-javacard-plugins.png[]
[start=4]
. É necessário reiniciar o IDE após a instalação dos plug-ins para continuar as etapas do tutorial a seguir.
=== Registrando a Plataforma do Java Card
Caso você faça o download do Pacote de Runtime do Java Card 3.0.2 do Gerenciador de Plug-in, o Java Card SDK já estará configurando como uma plataforma. Entretanto, caso a plataforma tenha sido transferida por download e instalada pelo link:http://java.sun.com/javacard/devkit/[+java.sun.com+] é possível utilizar o menu Ferramentas > Plataformas Java para adicionar a Plataforma do Java Card ao IDE da mesma forma que é feito o registro de qualquer plataforma Java.
image::images/installPlatform.png[]
Após a configuração da Plataforma Java Card, ela é listada na guia Serviços no IDE. Se a guia Serviços não estiver visível, selecione no menu Windows > Serviços.
image::images/services-tab.png[]
Uma "plataforma" pode conter vários "dispositivos". Um projeto é implantado para um dispositivo em uma plataforma específica.
== Entendendo os Tipos de Projeto do Java Card
Selecione Arquivo > Novo Projeto no menu e clique na categoria Java Card. Existem vários tipos de projetos Java Card que podem ser criados. Todos eles são construídos com o link:http://ant.apache.org/[+Apache Ant+], assim como projetos Java SE do NetBeans.
image::images/choose-project-type.png[]
Projetos Applet clássicos criam um applet Java Card tradicional para dispositivos menores, assim como applets utilizados no Java Card 2.0 e posterior. Projetos de biblioteca clássicos são como projetos Applet clássicos, mas sem o applet: é algum código que você espera que esteja no dispositivo e que pode ser compartilhado entre applets.
Projetos Biblioteca e Applet estendidos utilizam o API estendido no Java Card 3.0, então é possível utilizar java.lang.String e assim por diante. O classpath de inicialização será diferente para projetos Clássicos e Estendidos, então, por exemplo, a funcionalidade completar código não mostrará java.lang.String em projetos Clássicos, mas mostrará em projetos Estendidos.
image::images/create-applet-app.png[]
Projetos de Aplicações Web são provavelmente a funcionalidade mais legal do Java 3.0 Card. Você obtém o esqueleto de um projeto com um Servlet implementado, e caso você tenha acesso completo ao API do Servlet. É muito mais fácil trabalhar dessa maneira do que com uma das aplicações em estilo de Applet, pois não é necessário nenhum código especial no cliente para interagir com uma aplicação executada em um dispositivo, apenas um Web browser! É possível testar as aplicações localmente utilizando a Implementação de Referência e um Web browser de área de trabalho.
image::images/create-web-app.png[]
== Trabalhando Com um Projeto
Para este tutorial foi criado um novo Projeto Web.
No novo projeto Web, Digite "Aplicação Web Card" como nome do projeto e defina o local do projeto para o diretório NetBeansProject. Clique em Finalizar e o projeto aparecerá na guia Projeto.
Clique com o botão direito do mouse no nó do projeto na guia Projetos e selecione Propriedades no menu de contexto. Na seção Executar da janela Propriedades do Projeto, é possível alterar a plataforma e o dispositivo que o projeto implanta. Clique em Fechar para salvar suas alterações.
Trabalhar em uma aplicação Web Java Card é como trabalhar em qualquer outra aplicação Web implantada em um contêiner do servlet. Pressione o botão Executar na barra de ferramentas para executar a amostra do Hello World. Durante a execução de uma aplicação Web Java Card, uma janela do Web browser é aberta, mostrando a saída do servlet: ``Hello do webapplication1.MyServlet`` .
image::images/editor.png[]
Quando você executa projetos do tipo applet, o NetBeans IDE oferece duas interfaces úteis: linha de comandos de saída e a console Java Card. Utilize a console para interagir com o applet: é possível enviar dados em hexadecimal e ler as respostas.
Dica: o RI contém mais projetos de amostra que estão prontos para serem abertos e executados no NetBeans IDE.
image::images/run-customizer.png[]
== Utilizando Funcionalidades Especiais de Plug-in
O Java Card envolve dois pedaços de arcana que não são encontrados em outras plataformas Java:
*Identificadores de Aplicação (AID)*:: Esses são identificadores únicos que se parecem com //aid//720A75E082/0058AEFC20. A primeira parte do hexadecimal é um ID de vendedor (é possível obter uma na link:http://iso.org/[+Organização Internacional para Padronização (ISO)+]); a segunda parte é um valor único apresentado. AIDs são utilizados para identificar classes de applet, pacotes Java (apenas projetos de applet & clássico e biblioteca clássica) e instâncias únicas de applets (é possível implantar a mesma aplicação várias vezes em um dispositivo: o AID da instância é utilizado para selecionar qual applet receberá informações).
*scripts APDU*:: Estes são scripts que enviam dados para um applet. Isso envolve uma quantidade exorbitante de hexadecimais escritos, o script precisa selecionar uma instância de applet específica e, em seguida, envia dados para ela. É possível utilizar a console Java Card em vez de enviar um script pré-gravado.
Embora essas duas coisas sejam um pouco complicadas, os plug-ins do NetBeans fazem o que podem para abstrair a complexidade de lidar com elas, como a seguir:
* Quando você cria um projeto, valores razoáveis para o AID do Applet, AID de Pacote Clássico e um AID da Instância são gerados automaticamente.
* Quando você seleciona a guia Applets na caixa de diálogo Propriedades do Projeto, o projeto digitaliza o classpath para todas as subclasses do applet Java Card que localizar:
image::images/customize-applets-pre.png[]
* Uma vez localizadas, a caixa de diálogo permite selecionar quais applets são realmente implantados e personalizar os valores do AID utilizados, os parâmetros implantados e assim por diante. O IDE valida todos os dados inseridos, dificultando a inserção de dados inválidos:
image::images/customize-applets.png[]
* Se desejar implantar duas instâncias do mesmo applet, é possível configurar isso também; entretanto, para casos simples onde deseja apenas implantar uma instância de applet, não é necessário pensar sobre isso:
image::images/customize-instances.png[]
* Para testar applets em execução, não é necessário escrever um script APDU inteiro. É possível utilizar a console embutida para interagir com os applets implantados diretamente:
image::images/open-console.png[]
image::images/shell.png[]
* O "AID do pacote" para projetos Clássicos (permitidos para conter somente um pacote Java) também é tratado pelo IDE, mas é personalizável.
image::images/create-project-package-aid.png[]
* Parte de todos os valores de AID no seu projeto será um ID de vendedor de ISO designado (chamado RID). Para início rápido, o IDE gerará um valor aleatório para o RID, o que é bom para o desenvolvimento e teste. Caso tenha um RID oficial, é possível inseri-lo em Ferramentas > Opções para utilizá-lo em todos os novos projetos. Clique no botão Gerar em Propriedades do Projeto para atualizar os valores nos projetos existentes.
image::images/global-rid.png[]
== Integrando SDKs de Terceiros
Atualmente, as ferramentas suportam somente a Implementação de Referência do Java Card 3.0.2, mas têm um API extensível para cartões de vendedores integrados. As definições de dispositivos e plataforma são simplesmente arquivos de Propriedades, que são importados pelo script construtor.
A implantação é feita por meio de um grupo de tarefas Ant fornecido pelo vendedor de cartão. Isso significa que o projeto criado pode ser executado fora do IDE, pois não existe nenhum bloqueio. Os códigos-fonte para as tarefas Ant que são parte do RI do Java Card podem ser transferidas por download no link:http://kenai.com/projects/javacard[+portal do projeto Java Card+], assim como projetos de amostra prontos do NetBeans.
Você é um vendedor de cartões que criou as ferramentas de implantação Java Card? Contate o autor link:mailto:tboudreau@sun.com[+Tim Boudreau+] para obter detalhes sobre link:http://wiki.netbeans.org/JavaCardPlatformIntegration[+como integrar seu cartão+]! A integração pode ser feita em vários níveis, dependendo de quanto suporte você deseja fornecer dentro do IDE para o cartão.
link:/about/contact_form.html?to=6&subject=NetBeans%20Java%20Card%20Development%20Quick%20Start%20Guide[+Enviar Feedback neste Tutorial+]
== Links Relacionados
* Muito do crédito desses módulos vai para link:https://blogs.oracle.com/javacard/[+Anki Nelaturu+] e o resto da equipe do Java Card.
* link:http://java.sun.com/javacard[+Portal oficial do Sun Java Card+]: notícias, kits de desenvolvimento, referência, especificações, FAQ.
* link:http://kenai.com/projects/javacard/pages/Home[+Portal do projeto Java Card+]: fontes, projetos de amostra, fóruns, documentação.
* link:http://wiki.netbeans.org/JavaCardPlatformIntegration[+Integração da Plataforma para vendedores de Cartão+]
* link:http://java.sun.com/developer/technicalArticles/javacard/javacard-servlets/[+Implantando Servlets em Cartões Inteligentes: Servidores da Web Portáteis com Java Card 3.0+]