Guia de início rápido do desenvolvimento de Java Card
Contribuído por Tim Boudreau, mantido por Ruth Kusterer
Java Card é uma plataforma interessante para trabalhar com - um JVM que executa em smart cards e pequenos dispositivos que encaixam na palma da mão. Como o Java Card 3.0, ele vêm em dois tipos:
Clássico:
É o mesmo que as versões anteriores do Java Card. A plataforma é extremamente limitada. Por exemplo, java.lang.String não existe, não tem nenhum método java.lang.Object.hashCode() e nenhum número de ponto flutuante.
Estendido:
Para smart cards mais recentes e completos, isso é, novo no Java Card 3.0. Ele suporta uma implementação muito mais completa da Plataforma Java. Provavelmente, o melhor sobre o suporte nativo para Servlets é que você pode realmente escrever um aplicativo da Web utilizando APIs familiares, que executam em um smart card!
Como um smart card não tem uma interface de usuário, é necessário um leitor de smart card para ler e escrever 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.
Nota: o plug-in do Java Card trabalha 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
Baixe e instale o NetBeans IDE 6.9.
Após a instalação, vá para o menu Ferramentas > Plug-ins.
Em Plug-ins disponíveis, existem dois plug-ins relacionados ao Java Card: Java Card e pacote de tempo de execução do Java Card.
O Java Card é o plug-in que adiciona o suporte ao projeto Java Card para o NetBeans IDE.
O pacote de tempo de execução Java Card 3.0.2 é necessário somente se não possuir uma cópia da Implementação de referência do Java Card instalada.
É 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ê baixe o pacote de tempo de execução 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 baixada e instalada do java.sun.com é possível utilizar o menu Ferramentas > Plataformas Java para adicionar a plataforma do Java Card ao IDE da mesma forma que registrar qualquer plataforma IDE.
Uma vez que a plataforma Java Card é configurada, ela é listada na aba Serviços no IDE. Se a aba Serviços não estiver visível, escolha Windows > Serviços do menu.
Uma "plataforma" pode conter vários "dispositivos". Um projeto é implantado para um dispositivo em uma plataforma específica.
Entendendo tipos de projeto Java Card
Escolha Arquivo > Novo projeto do menu e clique na categoria Java Card. Existem vários tipos de projetos Java Card que possam ser criados. Todos eles são construídos com Apache Ant, assim como projetos NetBeans Java SE.
Projetos Applet clássicos criam um miniaplicativo Java Card para tradicional para dispositivos menores, assim como miniaplicativos utilizados em Java Card 2.0 e posterior. Projetos de biblioteca clássicos são como projetos Applet clássicos, mas sem o miniaplicativo: é algum código que você espera que esteja no dispositivo e que pode ser compartilhado entre miniaplicativos.
Projetos Biblioteca e Applet estendido 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, o autocompletar de código não mostrará java.lang.String em projetos clássicos, mas mostrará em projetos estendidos.
Os projetos de aplicativo da Web são provavelmente os melhores recursos do Java Card 3.0. Obtêm-se um projeto esqueleto com um Servlet implementado e é possível ter acesso ao API do Servlet completo. É muito mais fácil de trabalhar dessa maneira do que com um dos aplicativos de estilo Applet, pois não é necessário nenhum código especial do cliente para interagir com um aplicativo executando em um dispositivo, apenas um navegador da Web! É possível testar os aplicativos localmente utilizando a Implementação de referência e o navegador da Web de área de trabalho.
Trabalhando com um projeto
Para este tutorial é criado um novo Projeto da Web.
No novo projeto da Web, insira "Aplicativo da Web Card" como o nome do projeto e configure a localização do projeto para o diretório NetBeansProject. Clique em Terminar e o projeto aparece na aba Projeto.
Clique com o botão direito do mouse no nó do projeto na aba Projetos e escolha Propriedades do 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 um aplicativo da Web Java Card é como trabalhar em qualquer outro aplicativo da Web implantado em um contêiner servlet. Pressione o botão Executar na barra de ferramentas para executar a amostra do Olá Mundo. Ao executar um aplicativo da Web Java Card, uma janela do navegador da Web é aberta, mostrando a saída do servlet: Hello do webapplication1.MyServlet.
Ao executar os projetos do tipo miniaplicativo, o NetBeans IDE oferece duas interfaces úteis: linha de comando de saída e o console Java Card. Utilize o controle para interagir com o miniaplicativo: é 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.
Utilizando recursos de plug-in especiais
O Java Card envolve dois pedaços de arcana que não são encontrados em outras plataformas Java:
Identificadores de aplicativo (AID)
Esses são identificadores únicos que se parecem com //aid//720A75E082/0058AEFC20. A primeira parte do hexadecimal é uma ID de vendedor (é possível obter uma da Organização padrão internacional (ISO)); a segunda parte é um único valor apresentado. AIDs são utilizados para identificar classes de miniaplicativo, pacotes Java (projetos de miniaplicativo clássico e biblioteca clássica) e instâncias únicas de miniaplicativos (é possível implementar o mesmo aplicativo várias vezes em um dispositivo: o AID da instância é utilizado para selecionar qual miniaplicativo receberá informações).
scripts APDU
Esses são scripts para enviar dados para um miniaplicativo. Isso envolve uma quantidade exorbitante de hexadecimais escritos, o script necessita selecionar uma instância de miniaplicativo específica e, em seguida, envia dados para ela. É possível utilizar o console Java Card no lugar de enviar um script pré-escrito.
Embora essas duas coisas sejam um pouco complicadas, os plug-ins do NetBeans faz o seu melhor para abstrair a complexidade de lidar com elas, como a seguir:
Ao criar um projeto, valores razoáveis para AID do Applet, AID de pacote clássico e um AID da instância são gerados automaticamente.
Ao selecionar a aba Applets na caixa de diálogo Propriedades do projeto, o projeto digitaliza o classpath para todas as subclasses do miniaplicativo Java Card localizados:
Uma vez localizadas, a caixa de diálogo permite selecionar quais miniaplicativos são implantados de fato e personaliza os valores do AID utilizados, os parâmetros implantados e assim por diante. O IDE valida todos os dados inseridos, de maneira que fica difícil inserir dados inválidos:
Se desejar implantar duas instâncias do mesmo miniaplicativo, é possível configurar isso também; entretanto, para casos simples onde deseja apenas implantar uma instância de miniaplicativo, não é necessário pensar sobre isso:
Para testar miniaplicativos em execução, não é necessário escrever um script APDU inteiro, é possível utilizar o console embutido para interagir com os aplicativos implantados diretamente:
O "AID do pacote" para projetos clássicos (eles são permitidos para conter somente um pacote Java) também é cuidado pelo IDE, mas é personalizável.
Parte de todos os valores de AID no seu projeto será uma ID de vendedor de ISO atribuído (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 por todos os novos projetos. Clique no botão Gerar em Propriedades do projeto para atualizar os valores nos projetos existentes.
Integrando SDKs terceiros
Atualmente, as ferramentas suportam somente a implementação de referência 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 arquivos Propriedades simples, que são importados pelo script construtor.
A implantação é feita através 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. As fontes para as tarefas Ant que são parte do RI do Java Card podem ser baixadas do portal do projeto Java Card, junto com projetos de amostra prontos do NetBeans.
Você é um vendedor de cartões que criou as ferramentas de implantação Java Card? Contate o criador do plug-in
para detalhes em como integrar seu cartão! A integração pode ser feita em vários níveis, dependendo de quanto suporte deseja fornecer dentro do IDE para o cartão.