UNICAMP - Universidade Estadual de Campinas Faculdade de Engenharia Elétrica e de Computação IA368M – Tópicos em Engenharia de Computação V – 1º semestre/2008 Prof. José Mario De Martino Resumo e comparação CLDC 1.0 e 1.1 Trabalho comparativo entre as especificações JSR-30 (Connected Limited Device Configuration 1.0) e JSR-139 (Connected Limited Device Configuration 1.1), Para a disciplina de desenvolvimento de jogos utilizando Java ME. Grupo 01: Paulo Renato de Faria Rogério Makiyama Zafalão Campinas, 22 de Abril de 2008 Índice Introdução............................................................................................................................... 4 Objetivos das especificações CLDC ................................................................................... 4 Desenvolvimento do tema ...................................................................................................... 4 Comparação da Evolução dos Requisitos de CLDC 1.0 e 1.1 ............................................ 4 Contexto histórico............................................................................................................ 4 Requisitos de Hardware ................................................................................................... 4 Requisitos de Software .................................................................................................... 5 Requisitos J2ME .............................................................................................................. 5 Escopo ................................................................................................................................. 6 Áreas de especificação..................................................................................................... 6 Áreas não cobertas (devem ser definidas nos Perfis): ..................................................... 6 Arquitetura de alto-nível e segurança.................................................................................. 6 O Conceito aplicação Java (ponto entrada execução)...................................................... 7 Gerência aplicação ........................................................................................................... 7 Segurança ............................................................................................................................ 8 Segurança em baixo-nível................................................................................................ 8 Segurança em nível de aplicação ..................................................................................... 9 Modelo “Sandbox” .......................................................................................................... 9 Requisitos sandbox: ....................................................................................................... 10 Protegendo classes do sistema ....................................................................................... 10 Suporte à execução de múltiplas aplicações Java simultaneamente.............................. 10 Restrição adicional sobre carregamento de classes dinamicamente .............................. 10 Aderência à especificação da linguagem Java .................................................................. 11 Não há suporte a ponto flutuante ................................................................................... 11 Aderência à especificação da Máquina Virtual Java......................................................... 11 Características eliminadas da Máquina Virtual ............................................................. 11 Verificação de Class File ............................................................................................... 12 Processo de Verificação................................................................................................. 12 Definição do attributo “stack map”................................................................................ 13 Formato Class File e Carregamento de Classes............................................................. 13 Representação pública de aplicações Java e recursos.................................................... 13 Pré-carregamento / pré-ligação (“ROMizing”).............................................................. 13 Otimização formatos de aplicações ............................................................................... 14 Bibliotecas CLDC ............................................................................................................. 14 Classes derivadas da Java 2 SE...................................................................................... 15 Classes específicas do CLDC ........................................................................................ 17 Background e motivação ............................................................................................... 17 Framework de conexão Genérico .................................................................................. 17 Conclusão ............................................................................................................................. 19 Referências ........................................................................................................................... 20 Índice de tabelas Tabela 1 - Comparação requisitos hardware .......................................................................... 4 Tabela 2 - Comparação requisitos software ........................................................................... 5 Tabela 3 - Comparação requisitos J2ME................................................................................ 5 Tabela 4 - Comparação entre celulares com CLDCs diferentes............................................. 5 Tabela 5 - Evolução requisitos para Gerência de aplicações.................................................. 7 Tabela 6 – Resumo da evolução requisitos segurança ........................................................... 8 Tabela 7 – Classes derivadas da Java SE ............................................................................. 15 Introdução Objetivos das especificações CLDC Fabricantes de equipamentos cada vez mais desejam estimular a criação de aplicações que suportem conteúdo rico, dinâmico e interativo por operadoras e desenvolvedores terceirizados. Contudo, o foco da APIs nesse cenário migra da programação de sistemas (responsabilidade dos fabricantes) para a programação de aplicações. Por isso a especificação CLDC enfatiza a importância da generalidade, não contemplando APIs que são específicas de certas categorias de equipamentos, nichos de mercados ou funcionalidades dedicadas. Além disso, equipamentos como telefones celulares são fabricados em altíssima escala e são freqüentemente vendidos a preços muito baixos. Para manter as margens de lucro, os fabricantes precisam manter o custo por unidade tão baixo quanto possível. Por isso, existem restrições de processamento e memória que levam à necessidade de encontrar um denominador comum entre os dispositivos existentes no mercado para definir uma API que permita portabilidade de aplicações. Isto torna também atende outra necessidade dos fabricantes ao diminuir o tempo para liberação no mercado, pois devido a padronização as aplicações podem ser adaptadas mais rapidamente. Desenvolvimento do tema Comparação da Evolução dos Requisitos de CLDC 1.0 e 1.1 Contexto histórico CLDC 1.0 - Primeira versão completa lançada em maio de 2000. CLDC 1.1 - Versão pública final disponibilizada em março de 2003, traz uma natural evolução da versão 1.0 decorrente da própria evolução dos dispositivos que a suportaria. CLDC 1.1.1 - Lançada em outubro de 2007 como uma versão de manutenção da CLDC 1.1, procura incluir itens relacionados ao modelo de segurança de Java para suporte ao MIDP 3.0. Requisitos de Hardware As tabelas a seguir (Tabela 1, Tabela 2 e Tabela 3) resumem a variação entre as duas versões de configuração CLDC para os requisitos de Hardware, Software e J2ME: Tabela 1 - Comparação requisitos hardware Requisito Processador CLDC 1.0 16 ou 32 bits CLDC 1.1 Consumo energia Conectividade Baixo consumo de potência, freqüentemente operando com bateria; Algum tipo de rede; freqüentemente sem-fio; Conexão intermitente com largura de banda limitada 128 Kb 160Kb Memória não volátil disponível para máquina virtual Java e bibliotecas CLDC Memória volátil disponível >= 32Kb para Java runtime e memória de objetos. Requisitos de Software Tabela 2 - Comparação requisitos software Requisito CLDC 1.0 Sistema operacional (controle hardware) Sistema operacional (execução Java) Assume um mínimo sistema operacional hospedeiro ou kernel para gerenciar o hardware. Este sistema deve prover no mínimo uma entidade que possa agendar execuções da máquina virtual Java. CLDC 1.1 Requisitos J2ME Tabela 3 - Comparação requisitos J2ME Requisito CLDC 1.0 CLDC 1.1 Características devem ser aplicáveis a uma grande variedade de dispositivos. Portabilidade e interoperabilidade entre equipamentos com recursos restritos Características específicas a certo mercado vertical (exemplo: negócios, diversa), categoria de equipamento devem ser definidas em uma especificação de perfil J2ME. Este objetivo impõe que configurações não devem definir características opcionais A Tabela 4 contém exemplos de telefones celulares e a variação das características devido ao CLDC[5] . Comparando-a com a Tabela 1, é possível identificar que a especificação requer valores muito abaixo do que os dispositivos pesquisados disponíveis no mercado atual. Em vermelho estão marcados os requisitos para facilitar a visualização de quanto o celular atende ao especificado. Tabela 4 - Comparação entre celulares com CLDCs diferentes Característica CLDC 1.0 RAZR V3 (Motorola) CLDC 1.1 Z8 (Motorola) CLDC 1.1 N95 (Nokia) Perfil Número Cores MIDP 2.0 65536 MIDP 2.0 16777216 MIDP 2.0 262144 Resolução (L x A) CPU Freqüência CPU ROM (armazenamento) RAM (volátil) 176 x 220 32 bits 43 MHz Armaz. MIDlet disponível: até 5 MB Tamanho MIDlet suite Max.: 100 Kb Tamanho Record store Max.: 64 Kb [especificação: ≥128 KB] 240 x 320 32 bits 330 MHz 128 MB 77 MB acessíveis 240 x 320 32 bits 332 MHz 256 MB 157 MB usáveis [espec.: ≥160 KB] [espec.: ≥160 KB] Tamanho Heap: 800 Kb 64 MB [especificação: ≥ 32 Kb] [espec.: ≥32 KB] 64 MB 22 MB acessíveis [espec.: ≥32 KB] Escopo Áreas de especificação Este é um ponto comum entre CLDC 1.0 e 1.1 - Características linguagem Java e máquina virtual - Núcleo de bibliotecas Java (java.lang.*, java.util.*) - Entrada / Saída (java.io.*) - Rede - Segurança - Internacionalização Áreas não cobertas (devem ser definidas nos Perfis): - Gerência ciclo-de-vida aplicações (instalação, execução e remoção) - Funcionalidade de interface de usuário - Controle de eventos - Modelo de alto-nível de aplicações (interação entre usuário e aplicação) Arquitetura de alto-nível e segurança Figura 1 – Arquitetura alto nível J2ME [1] O Conceito aplicação Java (ponto entrada execução) JVM suportando CLDC inicia execução de aplicação Java chamando método main, que deve ser declarado como abaixo:. public static void main(String[] args) Gerência aplicação Assume-se que equipamentos implementando CLDC tenham capacidade para gerenciar aplicações Java que são armazenadas no dispositivo. Em alto nível, os requisitos de gerência de aplicação têm algumas variações de CLDC 1.0 e 1.1 conforme abaixo: Tabela 5 - Evolução requisitos para Gerência de aplicações Requisitos Gerência aplicações CLDC 1.0 Listar Inspecionar aplicações Java existentes armazenadas no dispositivo Selecionar e executar aplicações Java Remover aplicações Java existentes (se aplicável) Não requerida Download e instalação de aplicações Java Executar Remover Instalação CLDC 1.1 IMPORTANTE: Devido às significativas variações e diferenças de características entre equipamentos CLDC, os detalhes de gerência de aplicações são altamente dependentes do dispositivo e da implementação. Por isso, CLDC não especifica como será esta implementação. Segurança Quantidade de código relacionado à segurança na plataforma Java 2 SE de longe excede a memória total disponível assumida para CLDC. Com isso temos necessidade das seguintes simplificações: 1. Segurança em baixo-nível (segurança na máquina virtual). Garante que aplicações executando na máquina virtual: • Sigam a semântica da linguagem de programação Java • Classes com código mal formado ou malicioso não quebrem ou prejudiquem o equipamento 2. Segurança no nível de aplicação. Aplicações têm acesso garantido apenas a itens que o ambiente Java e o equipamento concederem, como por exemplo: bibliotecas, recursos do sistema e outros componentes. 3. Segurança fim-a-fim. Modelo que garante que qualquer transação iniciada em um equipamento é protegida em relação ao caminho completo chegando / partindo da entidade provedora de serviços (por exemplo, serviço disponível na Internet). a) Criptografia ou outro meio pode ser necessário para atingir este objetivo. Tabela 6 – Resumo da evolução requisitos segurança Requisitos Gerência aplicações CLDC 1.0 CLDC 1.1 Segurança em baixo-nível Segurança no nível de aplicação Segurança fim-a-fim (isto é, para garantir entrega de dados e código entre máquinas servidoras e equipamentos clientes) Especificado Especificado Não especificado (dependente de implementação em cada equipamento, fora do escopo CLDC). Especificado Especificado Fora escopo CLDC. Assume que será definido pelos perfis que puderem prover esta funcionalidade. Segurança em baixo-nível No J2SE, esta restrição é garantida pelo Java classfile verifier. Este garante que bytecodes e outros itens armazenados em arquivos de classes: a) não podem conter referências a localizações inválidas de memória (de execução) ou; b) referências a áreas fora da área de objetos em memória (Java heap) Como será mostrado no item Verificação de Classfiles, a JVM suportando CLDC deve ser capaz de rejeitar classfiles inválidos. Segurança em nível de aplicação Existem outros potenciais riscos à segurança que não são detectados pelo verificador de classfiles. Por exemplo: a) acesso a recursos externos como arquivos do sistema, impressoras, equipamento de infravermelho, bibliotecas nativas ou redes. Para prover controle a recursos externos, temos: a) J2EE – conceito de gerente de segurança. Chamado quando aplicação ou sistema de execução Java precisa de acesso a recursos protegidos. b) J2SE – provê modelo de segurança consistindo das noções de permissões, controladores de acesso e políticas de segurança. Infelizmente, uma solução mais simples foi adotada, pois os modelos de segurança acima descritos consomem muita memória para serem inclusos no CLDC. Modelo “Sandbox” Aplicação Java deve executar em um ambiente fechado no qual pode acessar apenas aquelas APIs que foram definidas pela configuração, perfis e classes com permissão liberadas pelo dispositivo (exemplo: específicas do fabricante). Aplicações Java não podem escapar ou acessar bibliotecas ou recursos que não são parte de funcionalidades pré-definidas. A sandbox garante que uma aplicação maliciosa ou possivelmente errônea não consiga ganhar acesso a recursos do sistema. Figura 2 – Modelo Sandbox Requisitos sandbox: - Java classfiles devem ser verificadas e validadas como aplicações Java válidas - Apenas um conjunto limitado e predefinido de APIs está disponível para o programador de aplicações. - Download e gerenciamento de aplicações Java no dispositivo ocorre em nível de máquina virtual. - Nenhuma carregador de classe pode ser definido por usuário, para prevenir a substituição ou “bypass” dos padrões de carregamento das classes na VM (o que causaria problemas na execução pois a classe está carregada diferentemente do padrão esperado pela KVM). - O conjunto de funções nativas acessíveis na VM é fechado, isto é, programador de aplicação não pode : a) fazer download de novas bibliotecas contendo funcionalidades nativas ou; b) acessar quaisquer funções nativas que não são parte do CLDC, perfis MIDP, ou classes específicas do fabricante Protegendo classes do sistema Requisito central CLDC é o suporte a download dinâmico de aplicações Java. Para evitar problemas de segurança, implementações do CLDC devem garantir que o programador de aplicações não possa: a) Sobrescrever, modificar ou adicionar quaisquer classes aos pacotes de sistema protegidos (por exemplo, java.* , javax.microedition.* ou outros pacotes específicos do perfil ou dos fabricantes) b) Manipular ordem de busca de classfiles. [ex.: do contrário programador poderia colocar classes Boolean do usuário antes de Boolean do java.*]. Dependendo se implementação CLDC suporta ou não pré-carregamento / pré-ligação das classes do sistema, pode também ser necessário requerer que classes do sistema sempre sejam procuradas primeiramente quando a busca de classfiles for feita. Suporte à execução de múltiplas aplicações Java simultaneamente (restrição presente apenas CLDC 1.0) Dependendo dos recursos disponíveis no dispositivo, um sistema CLDC pode permitir ou proibir execuções concorrentes. Fica também a critério da implementação do CLDC decidir se a execução de múltiplas aplicações Java será suportada: a) pela utilização de funcionalidades multitasking do sistema operacional do dispositivo ou; b) pela instanciação de múltiplas máquinas virtuais lógicas para executar aplicações concorrentes. Restrição adicional sobre carregamento de classes dinamicamente (item presente apenas CLDC 1.1) Uma aplicação Java pode carregar classes apenas de seu próprio Java Archive (JAR) file. Esta restrição garante que uma aplicação não interfira ou roube dados de outras aplicações. Adicionalmente, isto protege que aplicações de terceiros ganhem acesso a componentes privados ou protegidos de classes Java que o fabricante ou provedor de serviços disponibilize como parte do sistema de aplicações. Aderência à especificação da linguagem Java Não há suporte a ponto flutuante (restrição presente apenas na CLDC 1.0) O motivo principal da não inclusão do suporte a operações em ponto flutuante decorre da falta deste suporte no hardware da época. Com esta limitação, restaria apenas o suporte via software, mas esta alternativa foi considerada custosa para os dispositivos vigentes e portanto descartada da CLDC 1.0. Com o decorrer do tempo, não só o suporte torna-se efetivo pelos processadores mas também é aumentada a capacidade do processamento. Portanto, na definição da CLDC 1.1, não se aplicam mais estas restrições, sendo incluídas as seguintes modificações relacionadas: • Adicionado o suporte a operações em ponto flutuante; • Classes Float e Double foram incluídas; • Vários métodos de bibliotecas que utilizavam float e double em suas assinaturas foram reintegrados. Não há suporte a finalização CLDC 1.0 não inclui o método Object.finalize(), o que exclui a possibilidade de controle da aplicação ao gerenciamento automático de memória (garbage collection). Limitações para lidar com erros O tratamento de erros é bem limitado em relação ao conjunto oferecido pela J2SE. Não há suporte a exceções assíncronas.e o conjunto de classes de erro é mais limitado. Isto decorre geralmente pelo fato de erros em dispositivos embarcados serem comumente específicos aos próprios dispositivos e a implementação de todas as funcionalidades de tratamento de erro necessitariam de uma quantidade de recursos preciosa para o modelo. Ao encontrar algum erro, a implementação de CLDC deve: • Interromper a execução da máquina virtual de uma maneira específica ou; • Lançar um erro que seja mais próximo possível da superclasse Error suportada pela CLDC. A relação de classes de exceções e erros suportadas estão relacionadas na Tabela 7, em classes de erro e classes de exceções. Aderência à especificação da Máquina Virtual Java Características eliminadas da Máquina Virtual A máquina virtual compatível com CLDC, por possuir sérias restrições de memória e um modelo de segurança menos custoso em termos de recursos, também eliminou algumas características encontradas na versão completa J2SE. • • • • • • • Referências Fracas – Na CLDC 1.0 não havia nenhum suporte a referências fracas. NA CLDC 1.1 foi adicionado suporte a referências fracas do tipo Weak Reference. Grupos de threads e daemon threads – existe o suporte a threads, mas não a grupos de threads e daemon threads. A CLDC 1.1 passa a suportar também threads com nome. Exceções assíncronas – Não há suporte a exceções assíncronas e o próprio conjunto de exceções e (principalmente) erros é bem reduzido em relação à J2SE. Segundo a especificação da JVM[4] , exceções assíncronas são disparadas somente quando o método stop de uma Thread ou ThreadGroup for invocado, ou quando ocorrer um erro na implementação da máquina virtual. Como os casos estão cobertos, não há razão para tal suporte. Java Native Interface (JNI) – JNI não é suportado uso de chamadas nativas. Reflexão – Sem suporte do CLDC. Isto significa que RMI, serialização, JVMCI (interface de depuração), JVMPI (interface de profiler), ou quaisquer características que dependam de características reflexivas (informações sobre classes, métodos e invocação dinâmica) não serão suportadas. Finalização de instâncias de classes – como descrito na seção anterior, não há método Object.finalize(). Carregadores de classes definidas por usuário – Além da restrição de recursos, a restrição a esta funcionalidade também foi imposta devido ao próprio modelo de segurança Sandbox adotado pela CLDC. Verificação de Class File Uma JVM que suporte CLDC precisa realizar a verificações de classfiles inválidos. Novamente, a restrição dos recursos disponíveis pelos dispositivos limita a utilização do modelo de verificação utilizado pela Java SE. Processo de Verificação O processo de verificação descrito abaixo é significativamente menor e mais eficiente em dispositivos de recursos restritos do que o verificador do J2SE. Classfiles pré-processados são aproximadamente 5% maiores do que os classfiles originais (não modificados). O verificador realiza apenas uma varredura linear sobre o bytecode, sem a necessidade de um algoritmo fluxo de dados com iterações custosas. Figura 3 –Processo de verificação Definição do attributo “stack map” A ferramenta de pré-verificação modifica classfiles para inserir atributos especiais. O nome “stack map” vem em virtude de esses atributos descreverem os tipos de variáveis locais e itens operadores da pilha (em cada offset do bytecode), todos residentes na pilha de interpretação. Formato Class File e Carregamento de Classes Formatos suportados pela implementação CLDC: a) classfiles padrão do Java b) arquivos de compressão Java Archive (JAR) files. Formato JAR provê 30-50% de nível de compressão sobre arquivos classfiles Java regulares sem perda de quaisquer informações simbólicas ou de problemas de compatibilidade com sistemas Java existentes. Representação pública de aplicações Java e recursos Toda vez que uma aplicação Java for destinada para ser publicamente acessível para distribuição em equipamentos CLDC, o formato JAR deve ser utilizado. Adicionalmente, o arquivo JAR pode conter arquivos de recursos específicos da aplicação (exemplo, imagens, sons) que podem ser carregados na máquina virtual Java pela chamada de método: Class.getResourceAsStream(String name) Pré-carregamento / pré-ligação (“ROMizing”) (esse item não está no escopo do CLDC – dependente da implementação) Uma JVM suportando CLDC pode optar por pré-carregar ou pré-ligar algumas classes. Esta técnica é informalmente conhecida como ROMizing. Tipicamente VMs de pequeno porte escolhem pré-carregar todas as classes do sistema (configuração ou perfil) e realizar o carregamento de aplicações dinamicamente. Não pode haver nenhum outro efeito visível do pré-carregamento que não seja a possível redução no tempo para início da execução de uma aplicação Java. Otimização formatos de aplicações (esse item não está no escopo do CLDC – dependente da implementação) Classfiles Java regulares não são otimizados para transporte em ambientes de largura de banda limitados. Motivos: • Classfile é uma unidade independente: com seu pool de constantes (tabela de símbolos), métodos, campos e tabelas de exceção, bytecodes e algumas outras informações. o Vantagem: Permite aplicações compostas de múltiplos pedaços que podem residir em diferentes locais (aplicações podem ser estendidas dinamicamente). o Desvantagem 1: Por não serem unidades seladas, muito espaço é usado com redundâncias o Desvantagem 2: Necessidade do processo de conversão entre representação estática para a representação de execução Bibliotecas CLDC Dois tipos básicos compreendem as bibliotecas CLDC: classes derivadas de Java SE (podendo ser um conjunto total ou apenas parcial) ou classes específicas da configuração. A Figura 4 ilustra esta relação entre classes suportadas. Figura 4 –Relação entre classes J2SE e configurações J2ME Classes derivadas da Java 2 SE A versão da Java Standard Edition utilizada para referência é a 1.3.1, e a implementação CLDC deve manter o mesmo nome do package e a semântica das classes e seus métodos. Na Tabela 7 são mostradas as classes derivadas da Java SE, classificadas por tipo. Comentários pertinentes estão na segunda coluna (se não houver comentário, tanto a CLDC 1.0 quanto 1.1 e 1.1.1 suportam a classe correspondente). Tabela 7 – Classes derivadas da Java SE Classes de sistema java.lang.Object java.lang.Class java.lang.Runtime java.lang.System java.lang.Thread java.lang.Runnable (interface) java.lang.String java.lang.StringBuffer Classes de tipos de dados java.lang.Boolean java.lang.Byte java.lang.Short java.lang.Integer java.lang.Long java.lang.Float java.lang.Double java.lang.Character Classes de collections java.util.Vector java.util.Stack java.util.Hashtable java.util.Enumeration (interface) Classes de entrada/saída java.io.InputStream java.io.OutputStream java.io.ByteArrayInputStream java.io.ByteArrayOutputStream java.io.DataInput (interface) java.io.DataOutput (interface) java.io.DataInputStream java.io.DataOutputStream java.io.Reader java.io.Writer java.io.InputStreamReader Somente a partir da CLDC 1.1 Somente a partir da CLDC 1.1 java.io.OutputStreamWriter java.io.PrintStream Classes de calendário e tempo java.util.Calendar Subconjunto da API padrão Java SE. Somente uma time zone suportada, por default. Time zones adicionais são permitidas java.util.Date em implementações específicas de CLDC, desde que de java.util.TimeZone acordo com a especificação Java SE. java.util.Timer Somente a partir da CLDC 1.1 java.util.TimerTask Somente a partir da CLDC 1.1 Classes de segurança java.security.AccessControlException Somente a partir da CLDC 1.1.1; um java.security.AccessController subconjunto destas classes é java.security.BasicPermission suportado. java.security.Permission java.security.PermissionCollection java.util.PropertyPermission java.lang.RuntimePermission Somente a partir da CLDC 1.1.1 Somente a partir da CLDC 1.1.1; inclui somente os targets exitVM e modifyThread Classes adicionais java.util.Random java.lang.Math CLDC 1.1 incluiu suporte a funções trigonométricas, raiz quadrada, piso e teto CLDC 1.1.1 incluiu ainda funções trigonométricas inversas (asin, acos, atan and atan2). Classes de exceção java.lang.Exception java.lang.ArithmeticException java.lang.ArrayIndexOutOfBoundsException java.lang.ArrayStoreException java.lang.ClassCastException java.lang.ClassNotFoundException java.lang.IllegalAccessException java.lang.IllegalArgumentException java.lang.IllegalMonitorStateException java.lang.IllegalStateException java.lang.IllegalThreadStateException java.lang.IndexOutOfBoundsException java.lang.InstantiationException java.lang.InterruptedException java.lang.NegativeArraySizeException java.lang.NullPointerException java.lang.NumberFormatException java.lang.RuntimeException java.lang.SecurityException java.lang.StringIndexOutOfBoundsException Somente a partir da CLDC 1.1 java.lang.UnsupportedOperationException java.util.EmptyStackException java.util.NoSuchElementException java.io.EOFException java.io.InterruptedIOException java.io.IOException java.io.UnsupportedEncodingException java.io.UTFDataFormatException Somente a partir da CLDC 1.1 Classes de erro java.lang.Error java.lang.NoClassDefFoundError java.lang.OutOfMemoryError java.lang.VirtualMachineError Somente a partir da CLDC 1.1 Classes de referência fraca java.lang.ref.Reference java.lang.ref.WeakReference Somente a partir da CLDC 1.1 Somente a partir da CLDC 1.1 Classes específicas do CLDC Background e motivação Uma parte significativa do padrão (J2SE) I/O e funcionalidade de rede não é diretamente aplicável aos dispositivos, que não provê TCP/IP e não têm conexões específicas como IrDA (infravermelho) ou Bluetooth. [comentário grupo] cada vez mais isso já não é uma restrição. Framework de conexão Genérico CLDC não define qualquer requisito sobre quais protocolos devem ser implementados. Ele define uma inteface genérica que deve conter no mínimo estes itens (conforme figura ) : • Conexão básica que pode ser aberta ou fechada. (Connection) • Device entrada serial (InputConnection) • Device saída serial (OutputConnection) • Device de comunicação orientado a datagrama (DatagramConnection) • Conexão orientado à circuito – exemplo: TCP (StreamConnection) • Um mecanismo para informar um servidor de conexões cliente/servidor (StreamConnectionNotifier) • Uma conexão básica de serviço Web (ContentConnection) • Um classe de exceção (ConnectionNotFoundException) Figura 5 – Framework de conexão Todas as conexões são criadas usando um único métodos estático em uma classe do sistema javax.microedition.Connector. Se bem sucedido, este método retornará um objeto que implementa uma das interfaces genéricas. Connector.open("<protocol>:<address>;<parameters>"); Exemplos: (perfis podem não implementar estes protocolos e optar pelo suporte a outros protocolos) • HTTP records: Connector.open("http://www.foo.com"); • Sockets: Connector.open("socket://129.144.111.222:9000"); • Communication ports: Connector.open("comm:0;baudrate=9600"); • Datagrams: Connector.open("datagram://129.144.111.333"); • Files: Connector.open("file:foo.dat"); • Network file systems: Connector.open("nfs:/foo.com/foo.dat"); Conclusão CLDC é uma camada de software do J2ME situada logo acima da máquina virtual. Ela define os requisitos que estabelecem um denominador comum entre a vasta gama de dispositivos móveis disponível no mercado. Como se tratam de dispositivos com recursos limitados, e que freqüentemente diferem entre si, várias simplificações foram realizadas para sua viabilização. Como exemplo, pode-se citar a utilização de apenas um subconjunto das bibliotecas da plataforma Java SE e modificações no modelo de segurança adotado com a adição de uma etapa de pré-verificação de classfiles. Apesar de complexa, considera-se esta tarefa como concluída satisfatoriamente. Programadores habituados com a plataforma Java padrão não encontrarão dificuldades na utilização da linguagem. Diferentes classes de dispositivos podem utilizar diferentes versões da CLDC, ou se evoluírem consideravelmente, até migrarem para uma configuração mais complexa como a CDC. Fabricantes também ganham na medida em que ganham mais aplicações independentes, além de portarem as suas próprias mais rapidamente. Os principais pontos que contribuíram para o aprendizado do grupo após esta monografia foram a parte de segurança (em especial o conceito de “Sandbox”), a especificação do framework genérico de conexões e a descoberta de sites (veja seção referências) para descobrir informações técnicas sobre os modelos. A principal percepção que tivemos em especial ao comparar as especificações com os dados de modelos existentes no mercado, foi que a especificação tem sido bem conservadora em relação aos requisitos de memória. Quanto ao item I/O e funcionalidades de rede a especificação também assume algumas restrições que têm sido eliminadas como a não existência de suporte a TCP/IP e conexões IrDA (infravermelho) ou Bluetooth. Referências [1] JSR-30 – Connected Limited Device Configuration 1.0 [2] JSR-139 – Connected Limited Device Configuration 1.1 [3] J2ME Building Blocks for Mobile Devices - White Paper on KVM and the Connected, Limited Device Configuration (CLDC) http://java.sun.com/products/cldc/wp/KVMwp.pdf [4] The JavaTM TMVirtual Machine Specification. Second Edition. Tim Lindholm and FrankYellin. Disponível em: http://java.sun.com/docs/books/jvms/second_edition/html/Concepts.doc.html#24614 [5] Especificações dos telefones utilizados para comparação: http://www.mobile-phone-specs.com/model/mot_v3b_ver1 http://developer.motorola.com/docstools/specsheets/MOTORAZR_V3_CLDC1.0_Sp ec_Sheet.pdf http://www.mobile-phone-specs.com/model/nokia_n95_ver1 http://pdadb.net/index.php?m=specs&id=967&view=1 O site http://www.mobile-phone-specs.com apresenta uma lista de celulares e permite descobrir a configuração CLDC e MIDP. O site http://pdadb.net/index.php?m=pdacomparer permite comparar informações técnicas sobre os modelos (em especial PDAs).