Você está na página 1de 6

J2ME-tutorial Author: Rossano Pablo Pinto Mon Apr 14 10:14:14 BRT 2003 1. Definies 1.

1 Configurations uma especificao que define o ambiente de software para uma faixa de dispositivos definidos por um conjunto de caractersticas que a especificao se baseia, geralmente caractersticas como: * Tipo e quantidade de memria disponvel * Tipo de processador e velocidade * Tipo de conexo de rede disponvel para o dispositivo Cada configurao consiste de uma mquina virtual Java e uma coleo de classes base que fornecem o ambiente de programao para as aplicaes de software. Atualmente o J2ME define 2 configuraes: * CLDC (Connected Limited Device Configuration) - Mnimo de 512 KB de memria - KVM (Kilobyte Virtual Machine) . No possui suporte aos tipos "float" e "double" . Garbage collector otimizado para ambientes com pouca memria . Possui implementao para dispositivos Palm (midp4palm) * CDC (Connected Device Configuration) - Mnimo de 2 MB de memria - CVM (CVM - no expande-se mais o acrnimo para "Compact VM") . S no inclui a tecnologia HotSpot e JIT . NO possui implementao para dispositivos Palm 1.2 Profiles Profiles permitem complementar uma configurao pela adio de classes que provem caractersticas apropriadas para um tipo particular de dispositivo ou segmento de mercado. Atualmente, as seguintes profiles esto disponveis: * MIDP (Mobile Information Device Profile) - Esta profile adiciona ao CLDC: . Networking . User Interface Components . Local Storage - Est completa (implementada) e disponvel (pacote mid4palm.zip) * PDAP (PDA Profile) - Mais pesada e completa que MIDP - Esta profile adiciona ao CLDC: . More sophisticated User Interface Library . Java-Based API for accessing useful features of the host O.S. - Voltada realmente para PDAs como dispositivos Palm e Handspring * Foundation Profile (FP) - Estende a configurao CDC incluindo praticamente toda a core API do Java 2 SE 1.3 - Para CDC - a base para toda profile CDC

* Personal Basis - Adiciona interface bsica de usurio ao FP - Para CDC - Est disponvel (Precisa fazer registro no Sun Download Center) Arquivo: j2me_pb-1_0-fcs-src-b45-linux-i686-15_jul_2002.zip * Personal Profile - Adiciona interface mais complexa de usurio ao FP . AWT completa . Applets . Xlet - Para CDC - Est disponvel em http://java.sun.com/products/personalprofile/j2me_pp-1_0-b in-linux-i686.zip * RMI Profile (Remote Method Invocation Profile) - Permite criar, SOMENTE, clientes RMI - Para CDC (Mas acredito que possa ser utilizada em cima de CLDC em dispositivos PDA, mas seria preciso utilizar FP tambm) - Est disponvel (Precisa fazer registro no Sun Download Center) Arquivo: j2me_rmiop-1_0-fcs-src-b52-30_May_2002.zip * Game Profile - Auto explicativa - Para CDC - Est em processo de especificao (no sabe-se se vai ser baseada na FP ou diretamente no CDC) * JDBC(TM) Standard Extension Binary 2.0 (Java Data Base Connectivity) - Est disponvel Arquivo: jdbc2_0-stdext.jar

2. Connected Limited Device Configuration A configurao mnima para o CLDC : * 128 KB de memria ROM, flash ou outra para armazenar a KVM e as classes CLDC * 32 KB de memria voltil para runtime OBS: Lembre-se que a KVM o nome da implementao de uma JVM CLDC da Sun Microsystems, inc. CLDC assume que o dispositivo NO possui (mas pode possuir): * teclado, mouse etc.. * local para armazenar dados da aplicao A mquina virtual da configurao CLDC especificada em termos do que no precisa ter da mquina virtual J2SE. Restries da KVM: * Suporte a ponto-flutuante - Operaes do byte-code no implementadas dadd daload dastore dcmpg dcmpl | | | | | dload dload_x dmul dneg drem | | | | | dsub d2f d2i d2l fadd | | | | | fcmpl fconst_0 fconst_1 fdiv fload | | | | | frem freturn fstore fstore_x fsub | | | | | i2d i2f l2d l2f newarray (double)

dconst_0 | dreturn | faload | fload_x | f2d dconst_1 | dstore | fastore | fmul | f2i ddiv | dstore_x | fcmpg | fneg | f2l

| newarray (float) | |

Com efeito, qualquer operao que envolva float ou double no podem ser executadas. J que estas operaes no so possveis, at as classes Float e Double no existem em CLDC. Mas como ento elas passam pela compilao? que a Sun NO fornece um compilador adicional para J2ME. O prprio compilador do J2SE utilizado para gerar as classes de uma aplicao J2ME. O problema s vai acontecer na hora do "class loading". Ah t. * Omisses de linguagem - Reflexo. Falta o pacote java.lang.reflect - Weak References. Falta o pacote java.lang.ref - Finalizao de Objeto. A classe java.lang.Object no possui o mtodo finalize() - Threading. No possvel criar uma "daemon thread" ou "thread groups" - Erros e Excees. .... - Java Native Interface. .... * Carregamento de Classes ........... Segurana * Uma CLDC VM roda as aplicaes em uma "sandbox" * Controle do carregamento de classes desabilitado * Verificao de classes executada em dois estgios: 1. ... 2. ... Pacotes do CLDC * * * * * javax.microedition.io javax.microedition.lang java.io java.lang java.util

Obs.: io, lang e util no possuem todos os elementos presentes no J2SE, por exemplo, java.util.Properties no est presente. 3. MIDP (Mobile Information Device Profile) Especificaes mnimas: - Display: 96x54 1 bit - Input: teclado e/ou touch screen - Memria: 32 KB voltil (Java runtime - heap); 128 KB no-voltil (componentes MIDP); 8 KB no voltil (dados persistentes de aplicao) - Rede: conexo two-way intermitente, geralmete sem fio, banda limitada Adies ao CLDC: - Gerenciamento do ciclo de vida das aplicaes (pacote javax.microedition.midlet) - Eventos e Interface de Usurio (pacotes javax.microedition.lcdui) - Conectividade de Rede (interface HttpConnection e implementao mnima do protocolo HTTP)

- Armazenamento de Dados no Dispositivo (pacote javax.microedition.rms - sistema de gerenciamento de base de dados baseado em registros) - Adio das classes java.lang.IllegalStateException, java.util.Timer e java.util.TimerTask MIDlets (Lembra o nome Applet n? Ento deduza algumas infos): - estados possveis: || \/ +-----> Paused ------+ | || | | \/ | pauseApp() startApp() | | ________ | +------| Active | | +----->|________| | | | destroyApp() destroyApp() | | +----- Destroyed <---+ - MIDlet suite . 2+ MIDlets empacotados no mesmo arquivo JAR. Estes MIDlets podem compartilhar os recursos empacotados no JAR . Cada MIDlet de um MSu pode ser considerado (a grosso modo) como um menu de uma aplicao de desktop, pois vai ser exibida uma tela de escolha do MIDlet para execuo: +------------------------------------------------+ | -----| | | ---> | Jogo da Cobra | | -----| | | | -----| | | ---> | Navegador WEB | | -----| | | | -----| | | ---> | Jogo da Memria | | -----| | | +------------------------------------------------+ . JAR Manifest - contm atributos que descrevem o contedo do arquivo JAR e servem para o software de gerenciamento de aplicao identificar e instalar o MIDlet suite. Atributos obrigatrios (j com exemplo de arquivo): MIDlet-1: RPP-Autentica, RPP-Autentica.png, wirelessBook.LoginMidlet MIDlet-Name: RPP-Autentica MIDlet-Vendor: Sun Microsystems MIDlet-Version: 1.0 MicroEdition-Configuration: CLDC-1.0 MicroEdition-Profile: MIDP-2.0 . JAD (Java Application Descriptor)

Utilizado pelo Java Application Manager para verificar se o arquivo JAR pode ser instalado no dispositivo alvo. Exemplo com os campos obrigatrios: MIDlet-1: RPP-Autentica, RPP-Autentica.png, wirelessBook.LoginMidlet MIDlet-Jar-Size: 2037 MIDlet-Jar-URL: RPP-Autentica.jar MIDlet-Name: RPP-Autentica MIDlet-Vendor: Sun Microsystems MIDlet-Version: 1.0 MicroEdition-Configuration: CLDC-1.0 MicroEdition-Profile: MIDP-2.0 - Esqueleto de um MIDlet import javax.microedition.midlet.*; public class MyMIDlet extends MIDlet { public MyMIDlet() { // Eu sou o construtor da classe, observe que no possuo um // tipo de retorno (nem mesmo void) } public void startApp() { // Sou responsvel em inicializar a aplicao. Eu fao o MIDlet // mover-se do estado PAUSED para ACTIVE. Tipicamente eu inicializo // os objetos que sero utilizados ao longo do ciclo de vida do // MIDlet e seto o display corrente. MAS OBSERVE QUE POSSO SER // CHAMADO MAIS DE UMA VEZ (TALVEZ OS OBJETOS QUE DEVEM SER // INICIALIZADOS APENAS UMA VEZ DEVAM SER COLOCADOS NO CONSTRUTOR) } public void pauseApp() { // Eu sou chamado quando o MIDlet est indo do estado ACTIVE para // o estado PAUSED. Isso "pausar" toda thread ativa e // opcionalmente setar o display que dever ser exibido na // prxima vez que o MIDlet tornar-se ativo. } public void destroyApp(boolean unconditional) { // Sou chamado para mudar o estado do MIDlet de PAUSED para // DESTROYED. Geralmente devo liberar todo recurso alocado. } } - The Application Manager (AMS) . um software pr-instalado em um dispositivo MIDP que funciona como um ambiente operacional. O AMS deve ser capaz de: .. Obter um MIDlet suite (MSu) de algum lugar, possivelmente atravs de uma conexo serial, infra-vermelha, bluetooth, etc.. .. Instalar um MSu no dispositivo .. Exercer gerenciamento de verso nos MSu instalados .. Executar um MIDlet de um MSu e prover o ambiente operacional para a KVM e as classes de sistema, MIDP ou CLDC .. Remover um MSu . O AMS que responsvel em chamar os mtodos construtor, startApp(),

pauseApp() e destroyApp(). . possvel que o prprio MIDlet mude seu estado. Para isso os mtodos a seguir devem ser utilizados: .. public void notifyPause() - muda estado para PAUSED .. public void resumeRequest() - expressa interesse em ser colocado no estado ACTIVE. O AMS utiliza essa informao para saber qual MIDlet deve ter seu mtodo startApp() executado .. public void notifyDestroyed() - Suicdio

Você também pode gostar