// 
//     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 potentes—este é 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/68/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.8 

|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.8.
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 &amp; 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:http://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+]
