J2ME - This is the end?!
02 Nov 2007
Este mês uma das principais atrações que mais chamou atenção dos desenvolvedores de dispositivos móveis, não partiu nem do Google e Apple, mas sim de James Gosling que provocou um verdadeiro alarde entre os mais incautos.Em entrevista, tratada com uma pitada de drama e encarada com mesmo teor por alguns, ele citou os próximos passos em mobilidade da Sun, um deles consiste na tentativa de cobrir a especificação JSE para aparelhos celulares e TV Digital. O principal candidato a substituir o JME, será o JavaFX Mobile que possivelmente deverá incorporar as características JSE.
Este anúncio, confirma uma tendência quase que inevitável, os dispositivos móveis tem evoluído rapidamente consequentemente as especificações da SUN também precisam, alguns problemas já estão sanados na especificação MIDP 3.0, como:
- Bibliotecas compartilhadas, também chamadas LIBlets;
- Comunicação entre MIDlets;
- Inteface para jogos mais ricas;
- MIDlets rodando em background;
- Múltiplas MIDlets rodando na mesma máquina virtual;
- Otimização de segurança no RMS;
- MIDlets poderão desenhar em Display(s) secundários;
- Localização e Internacionalização;
- IPv6;
Algumas dessas características já existem em outras plataformas, no Java ME estas funcionalidades poderão ser implementadas quando os fabricantes realizarem o upgrade de seus hardwares para MIDP 3.0. Esta atitude da SUN é mais do que positiva, uma vez que o futuro (ou talvez possamos dizer, o presente) converge pra mobilidade, empresas de conteúdo já se preparam através da WEB 2.0, fabricantes de processadores e até as distribuições Linux estão buscando seu ponto de congruência.
Um dos problemas, citados pela SUN, no qual o JSE se propõe a resolver seria a fragmentação existente no JME. O que seria essa fragmentação?
Algumas definições, JME atualmente se divide em dois tipos de configurações CLDC (Connected Limited Device Configuration), utilizado em dispositivos muito limitados estabelece um core mínimo e bem básico como: java.lang, java.io e java.util sem a garantia de todos as classes e métodos contidos na versão JSE sobre esses pacotes, pra se ter uma idéia nem a classe String foi poupada e o conjunto de métodos não é o mesmo da usada pra desktops.
O outro tipo de configuração, o CDC (Connected Device Configuration), é bem menos restrito e já possui um número maior de classes, foi projetado para equipamentos com maior poder de processamento e armazenamento.
Estas definições por si só já caracterizam um problema de fragmentação, pois não existe uma única configuração para dispositivos móveis, mas isso é apenas a ponta do iceberg.
Vamos a um exemplo típico, nem toda aplicação Java pra microdispositivos é capaz de ser executada em qualquer aparelho. "Mas pera aí! Java não executa até em geladeira?!" Sim e não, vamos a situação atual, os fabricantes possuem em suas VMs versões das implementações de CLDC e MIDP, que compõem um core mínimo para execução de aplicações JME, sendo assim temos dispositivos que implementam determinadas JSRs e outros não.
Temos então no mercado aparelhos que suportam CLDC 1.0/MIDP 1.0, CLDC 1.0/MIDP 2.0, CLDC 1.1/MIDP 2.0, essas seriam algumas das configurações existentes, não tendo por garantia que sua aplicação execute em qualquer um, pois a VM que possui suporte a CLDC 1.0 não executa aplicação para CLDC 1.1 por exemplo.
Outro fator é que nem todas as JSRs estão nos dispositivos, um exemplo disso é a JSR de criptografia. Este ano construí uma aplicação na qual utilizava essa especificação e fui executar em dois equipamentos relativamente caros com todas as parafernalhas cibernéticas que um bom aparelho possa ter, em um a aplicação foi executada normalmente, no outro não, exatamente pela falta dessa JSR na VM no dispositivo.
Resolvendo este problema através da definição de algo que seja padrão entre os dispositivos móveis, irá poupar a queda de cabelo de arquitetos e desenvolvedores que trabalham com mobilidade, sem essa variedade de implementações, assim a SUN conseguirá trazer de volta para dispositivos móveis algo já existente nas plataformas JEE e JSE, portabilidade.
Gosling deixa claro em seu blog, para os totalmente equivocados: "Java ME is NOT dead!", apenas existirá a fusão futuramente de JME e JSE, felizmente, pois teremos aplicações muito mais ricas do que as atuais.
Fica claro que essas mudanças não serão do dia pra noite, mesmo porque seria loucura descontinuar algo que é executado em mais de dois bilhões de aparelhos no mundo, no caso o JME. Todas essas mudanças serão morosas de acontecer, pois dependerá da SUN finalizar e homologar essa versão, dos fabricantes implementarem em seus hardwares essa VM e claro, estes aparelhos atingirem um preço acessível ao consumidor, para que os aparelhos "legados" sejam renovados, até lá nós desenvolvedores ainda perderemos muitos fios de cabelo na construção de aplicações sobre esse ambiente limitado.