duke-j2me-toolkit

… Java ME ins’t just about footprint. It’s also about a new way of looking at computing.” – Ray Rischpater

Hoje a linguagem Java pode ser encontrada em diversos locais e dispositivos comuns no nosso dia a dia: celulares, Smartphones, set-top boxes para TV digital, Blu-ray players, smart cards, smartpens, leitores de ebooks (Kindle da Amazon), em fotocopiadoras, em alguns sensores, e a lista continua.

Mesmo tendo grandes diferenças em sua forma e função, os dispositivos citados acima tem em comum o fato de não possuírem memória ou poder de processamento suficientes para acomodar uma versão completa da plataforma Java SE (Java Standard Edition). Então, para esses dispositivos, foi criada a plataforma Java ME (Java Micro Edition).

De uma maneira bem simples, Java ME é uma família de especificações que definem diferentes versões da plataforma Java SE reduzida capazes de rodar em dispositivos eletrônicos e embarcados, muitas vezes chamados de dispositivos de pequeno porte ou dispositivos pervasivos.

Os recursos dos dispositivos dentro da plataforma java ME podem variar bastante. Por exemplo, um celular comum comparado com um set-top box tem recursos muito mais escassos. Uma coisa interessante ao observar esses dispositivos, é que mesmo dispositivos que parecem semelhantes em tamanho e funcionalidades podem variar muito recursos. Um telefone celular ou PDA tem um tamanho físico reduzido, apesar de um telefone celular possuir uma tela com resolução bem menor e teclas mais espremidas do que um PDA. Tudo isso ainda é agravado pois, graças aos rápido avanços da tecnologia, está difícil definir uma divisão clara entre esses dispositivos (cada vez mais os celulares e PDAs estão se confundindo, por exemplo).

Para entendermos melhor com o Java ME irá acomodar essa ampla variedade de dispositivos e ao mesmo tempo irá se manter flexível à medida que a tecnologia avança, foram criados dois novos conceitos: Configurações (Configurations) e Perfis (Profiles).

Configurações

Uma configuração é uma especificação que define, segundo [2], três elementos básicos:

  1. Um conjunto de características da linguagem Java

  2. Um conjunto de características da Java Virtual Machine (JVM)
  3. Um conjunto de bibliotecas e APIs Java

De uma forma mais direta, podemos dizer que uma configuração define uma plataforma Java mínima para um conjunto de dispositivos.

Atualmente, como citado em [2], os criadores do Java ME dividiram a plataforma em duas configurações distintas:

  • Connected, Limited Device Configuration (CLDC) – celulares, PDAs e pagers, por exemplo.
  • Connected Device Configuration (CDC) – set-top boxes, Internet TVs, Sistemas de navegação/entretenimento para carros, por exemplo.
CLDC / CDC
Tipos de dispositivos que se enquadram em CDC ou CLDC

Para fazer essa divisão, como citado em [1], foram levados em conta três fatores:

  1. O tipo e a quantidade de memória disponível
  2. Características arquiteturais do processador e sua velocidade
  3. O tipo de conexão com redes disponível no dispositivo

Essas duas configurações são independentes, fazendo com que elas não possam ser utilizadas em conjunto em uma mesma plataforma.

Connected Device Configuration (CDC)

Nesta configuração estão os dispositivos com maior poder de processamento e com mais recursos para interfaces com usuário. Por possuírem um maior poder de processamento, a CDC disponibiliza um conjunto compatível com a plataforma Java SE, incluindo sua VM, que, segundo [1], nesse contexto, é chamada de Compact Virtual Machine (CVM).

CVM: a CVM, em resumo, é uma versão da VM da Java SE adaptada para dispositivos que se enquadram na CDC. Essa adaptação tem por objetivo oferecer as seguintes características, como descrito em [1] :

  • Portabilidade
  • Rápida sincronização
  • Execução de classes Java fora da memória ROM
  • Suporte nativo a threads
  • Classes de acesso remoto pequenas
  • Interfaces para comunicação e suporte a sistemas operacionais de tempo real (Real-time operation systems – RTOS)
  • suporte as seguintes características de J2SE: segurança, JNI (Java Native Interface), RMI (RemoteMethodInvocation), JVMDI (Java Virtual Machine Debugging Interface), weakreferences (chacedeobjetosrecentementeutilizados).

No link abaixo, você poderá ver as principais classes suportadas pela CDC:

http://java.sun.com/javame/reference/apis/jsr218/

Connected, Limited Device Configuration (CLDC)

A CLDC, como o a letra L diz na sigla, acomoda todos os dispositivos que tem algumas limitações em recursos em comparação com a CDC. Nessa configuração encontram-se aparelhos como celulares e PDAs.

Por causa da variedade de dispositivos que podem se enquadrar nessa configuração, a CLDC faz o mínimo de suposições sobre o ambiente (hardware e software base do dispositivo) em que eles se encontram. Como exemplo, citado em [1], em um dispositivo podemos encontrar um S.O. que suporte múltiplos processos concorrentes, outro pode ou não suportar um sistema de arquivo, e assim por diante.

Diferentemente da CDC, que possui suporte quase que por completo classes da plataforma Java SE, isso não pode ser aplicado a CLDC por causa das limitações impostas pelos dispositivos que a compõem. Por isso, uma nova JVM foi definida especialmente para essa plataforma com o nome de Kilobyte Virtual Machine, ou como é mais conhecida KVM (atualmente substituída CLDC HotSpot Virtual Machine, introduzida no Java ME SDK 3.0). Como é de se imaginar o K vem por causa da pequena quantidade de memória principal necessário para fazer essa Virtual Machine funcionar.

Em meio a tantas limitações, entra as características oferecidas pela CLDC estão:

  • Class loaders personalizados
  • Um pequeno conjunto de errors encontrados na plataforma Java SE
  • Esquema de segurança baseado no conceito de sandbox.
  • Verificação de integridade dos arquivos.

No link abaixo, você poderá ver as principais classes suportadas pela CLDC:

http://java.sun.com/javame/reference/apis/jsr139/

Perfis

Configurações não são suficientes para definir um ambiente de execução J2ME. Elas necessitam de um outro conceito: os Perfis (profiles).

Perfis complementam uma configuração adicionando classes que permitem desenvolver aplicações para um tipo particular de dispositivo. Segundo [1], do ponto de vista do programador, um perfil é necessário para fazer algo realmente interessante. Um perfil define a camada de abstração que contêm as APIs necessárias ao programador para que possa fazer o que sabe: escrever aplicações. Ambas as configurações, CDC e CLDC, possuem um ou mais perfis, que algumas vezes podem ser empilhados para fornecer uma API mais rica ao programador e um melhor serviço aos usuários.

O principal objetivo dos perfis é garantir interoperabilidade entre todos os dispositivos de uma mesma categoria, tornando a plataforma Java ME portável e flexível.

Atualmente os principais perfis para CLDC são:

1. Mobile Information Device Profile (MIDP): adiciona comunicação por rede pelo HTTP 1.1, componente de interface gráfica com o usuário simples e armazenamento local de dados. É o perfil mais conhecido da plataforma J2ME (MIDlets são aplicativos escritos para esse perfil). Atualmente encontra-se na versão 2.0.

2. PDA Profile (PDA) : muito similar ao MIDP, esse perfil é adaptado para que as facilidades encontradas em PDAs e SmartPhones sejam aproveitadas, principalmente na construção GUIs mais sofisticadas.

A CDC possui uma quantidade maior de perfis em comparação com a CLDC. Os pricipais são:

1. Foundation Profile: traz as principais bibliotecas do J2SE. Esse perfil é necessário para a utilização dos demais perfis CDC citados abaixo.

2. Personal Profile: adiciona bibliotecas gráficas ao Foundation Profile através de ambiente com total suporte a AWT. A intenção dos criadores desse perfil era possibilitar uma plataforma adequada para Applets.

3. RMI Profile: adiciona as bibliotecas RMI do J2SE ao Foundation Profile. Apenas o lada cliente dessa API é suportado.

Resumo

Como podemos perceber, a plataforma J2ME é encontrada em diversos dispositivos que utilizamos no nosso dia a dia, dispositivos com diferentes finalidades características que são acomodados por essa plataforma.

Para deixar a plataforma mais simples e flexível, os criadores do J2ME introduziam a noção de Configurações e Perfis.

Uma configuração define um conjunto de classes java básicas e uma JVM relacionada e, atualmente existem duas configurações na plataforma J2ME: a CDC e CLD, que são independentes.

Já os Perfis, que nada mais são do quê uma extensão de uma configuração, fornecem bibliotecas para um desenvolvedor escrever aplicativos para um tipo particular de dispositivo. Ambas as Configurações possuem seus perfis e o mais conhecido deles é o MIPD (Mobile Information Device Profile).

Referências

[1] Java – Wireless J2ME Platform Programming – Prentice Hall

[2] J2ME in a Nutshell

[3] http://www.ibm.com/developerworks/java/library/j-jtp11225/

[4] Core J2ME – Configuração e MIDP

[5] http://java.sun.com/javame/reference/apis.jsp

Anúncios