Introdução ao Java Card 3
Autor: Ricardo Massao | Publicado: 2014-03-01T07:56:00-08:00


Senhoras e Senhores, apresento a vocês o Java Card 3 e ele vem em 2 sabores Classic e Connected !



Já a algum tempo os mais entusiastas no assunto me perguntam sobre ele, e o que posso dizer é relaxem, mesmo hoje (2014) ele ainda se encontra muito a frente a seu tempo e bastante prematuro (poucas implementações em Hardware disponíveis) na sua versão Connected.



Não posso começar esse artigo sem antes citar alguns números, hoje (2014) Java Cards representam cerca de 5 Bilhões de Cartões (fonte Oracle), considerando que hoje temos cerca de 7 bilhões de pessoas no mundo isso quer dizer que 5 em cada 7 pessoas possui um Java Card, o que indica que você leitor é um forte candidato a ter um.



Estima-se que anualmente cerca de 1 Bilhão de Java Cards são emitidos, como eu já havia dito em artigos anteriores existe uma vasta gama de aplicações que utilizam Java Cards os mais comuns SIM Cards GSM, Cartões Bancários, Cartões para Certificação Digital, SAM (Security Access Module), identificação Pessoal, etc.



Com isso em mente fica fácil pensar porque foi definida 2 especificações de Java Card, não se pode mudar o mercado da noite para o dia e impor que todo um ecossistema se atualize para outra mais cara sem a real necessidade, sendo assim a versão Classic é destinada aos dias de hoje e a Connected para um futuro próximo onde tudo será conectado via IP inclusive sua carteira.

Tive a oportunidade de por as mãos em um Java Card 3.0.4 Classic, o que me motivou a apresentar a vocês melhor esse novo carinha.



CLASSIC EDITION



O que há de novo na versão Clássica?

- Nada que seja realmente relevante.



Isso mesmo, e nem deveria ser diferente, pois essa versão é muito próxima da especificação Java Card 2.2.2, e tem como missão manter o ecossistema já existente.



Foram corrigidos alguns bugs da versão anterior, adicionado suporte a alguns criptografadores, adequação a especificação ISO7816-4/2005, na API temos suporte a Objetos String (super limitado), Extended (usado para acesso a Memória externa como a da reservada a MiFare).



O Core da versão 3 é exatamente igual a versão 2, baseado em Microcontrolador de 8/16 bits e Virtual Machine de 16 Bits, herda todas as restrições da versão anterior como ausência de Threads, Garbage Collector, API muito Limitada.



A Versão 3 é totalmente compatível com as anteriores, o que quer dizer que basta pegar seu arquivo .CAP compilado em outras versões de instalar sem a necessidade de recompilação.&nbsp; 



CONNECTED EDITION



O que há de novo na versão Conectada?

- Tudo!



Essa edição é realmente o Java Card 3.0, nova especificação, nova Virtual Machine, nova API, novo Hardware, etc, etc e etc.


Arquitetura


A edição Connected provê Cartões high-end (alta tecnologia) capazes de prover conectividade e integração em qualquer Rede IP, a VM Java Card 3 é capaz de atuar como um nó seguro de rede, isso quer dizer que ela é capaz de prover serviços seguros de rede e acessar recursos de rede.

Isso tudo converge em um Smart Card capaz de manipular múltiplos serviços, comunicações concorrente sobre IP, contato (ISO7816) e sem contato (ISO14443).

Sua Virtual Machine é baseada na&nbsp;Connected Limited Device Configuration (CLDC) padrão amplamente usado em Celulares o que aproxima bastante a VM Java Card da VM JavaME, isso prove suporte a rica característica presente na linguagem Java.





Arquitetura Java Card 3 Connected Edition.



Acima podemos ver o diagrama de blocos da Arquitetura Java Card 3, da Direita para Esquerda, o Classic Applet é a camada compatível com as especificações anteriores, por exemplo 3.0 e 2.0 Classic, porém é necessário recompilar a aplicação sem nenhuma alteração no JCDK 3.0 Connected antes de usufruir desse recurso.

Extended Applet prove acesso as novas características como conectividade IP, multitheads, garbage collector, todos os tipos primitivos da linguagem Java exceto o float e o double e muito mais como veremos mais a adiante.

Servlet prove um servidor HTTP bem como um container Servlet, com isso podemos desenvolver aplicações ricas baseadas em páginas web, bem como a habilidade de se conectar a recursos web externos ao cartão.



Java Card 3 - I/O Interfaces


Para conseguir isso, o Java Card 3 poderá contar de inúmeros meios de conexões físicas ou sem contatos, como USB, MMC (MultiMediaCard similar aos SD Cards), o tradicional ISO7816, o sem contato ISO14443, etc.



Java Card 3 - Hardware Specs


Acima temos a evolução de Hardware da versão Connected a esquerda e a Classic a direita, essa tabela representa apenas o target (alvo), logo podemos esperar muito mais, como processador ARM, Megas de RAM, Gigas de Flash e muito mais.


A NOVA VIRTUAL MACHINE CONNECTED.
Como já havia falado, a Virtual Machine nova se assemelha bastante com a Micro Edition, o que quer dizer que cada vez mais o Java Card se aproxima de seu irmão Java Platform SE facilitando assim o desenvolvimento de aplicações Java Card.

Ela também foi concebida para rodar em processadores de arquitetura 32 bits, e agora é capaz de carregar um Class file diretamente, lembrem-se que na versão Classic utiliza-se a técnica de split VM, o que quer dizer que a VM está dividida entre o Host (Compilador) e o Cartão.

Esses novos Applets devem ser carregadas como um Extended Applet no Applet Container para usufruir das novidades contidas na versão Connected. 

Novas Características da versão Connected:

Multithreading - Múltiplas aplicações podem executar de forma concorrente bem como iniciar processos em background.
On-card bytecode verification - Os class files da aplicação são verificados se aproveitando do mapa de atributos de informações gerados pelo Java Development Kit (JDK).
Garbage Collection - Recursos temporários são automaticamente coletados e seus recursos liberados.
Data types - Objetos de dados tipo Char, Long e String.
Arrays Multidimensionais.
Wrapper de Classes Primitivas - Boolean, Integer e mais.
Classes de Manipulação String - StringTokenizer, StringBuffer, StringBuilder.
Classes I/O - Reader, Writer, e Stream.
Classes Network da Generic Connection Framework - Connector, Connection e mais.
Classes Collection - Vector, Hashtable, Stack , Iterator e mais.
Classes de Data e Tempo - Calendar, Date e TimeZone.
Classes de Internacionalização e Localização - Locale, ResourceBundle e mais.
Generics
Metadata
Assertions
Varargs
Static import
Acesso a Arquivos (Opcional). 

Como podem ter notado o modelo de programação se aproxima bastante da experiência de se programar no tradicional Java Development Kit (JDK). 


A Cereja do Bolo, Aplicações Web.


A versão Connected suporta um subset da Java Servlet API Specification 2.4 Web application model.

Ou seja aplicações Web são aplicativos que podem interagir com Clientes Web fora do cartão, via HTTP ou HTTPS.
Aqui cada serviço conhecido como Web App, deve ser carregado em um local especial chamado de Servlet Container.






No video acima você pode conferir um pouco mais sobre o poder da tecnologia.

Bom isso foi apenas uma pequena introdução ao Java Card 3 Connected Edition, existem mais novidades porém bastante técnicas que fogem do escopo desse artigo.

Um grande Abraço a todos e até a Próxima!