Esse artigo faz parte da revista Java Magazine edição 49. Clique aqui para ler todos os artigos desta edição
Clique aqui para ler esse artigo em PDF.
Mini-Curso
Programação Java ME
MINI-CURSO DE JAVA ME: PARTE 6
Nesta última parte do mini-curso que iniciamos na Edição 44, falaremos de mais algumas APIs importantes da MIDP. Mas ao contrário da abordagem mais aprofundada que dedicamos a outras APIs, daremos uma visão mais ampla e abordaremos várias outras tecnologias. Terminamos, então, da mesma forma como começamos: com uma visão geral – porém dessa vez, mais aplicada, falando de diversos tópicos de programação Java ME.
WMA: Mensageria1
Em qualquer rede onde a comunicação é cara, lenta ou pouco confiável, o paradigma de troca de mensagens assíncronas é proveitoso. Um bom exemplo disso é o e-mail; exemplos mais sofisticados incluem JMS e Especiweb services. O uso de mensagens não exige manter conexões abertas por muito tempo, o que reduz a dependência de redes baratas e confiáveis. Também não exige sincronização entre transmissor e receptor, o que diminui a dependência de redes rápidas (pois o tempo de execução do transmissor não é prejudicado por lentidão ou excesso de carga de um receptor, nem vice-versa).
Estas qualidades tornam o SMS2 ideal para muitos tipos de aplicações. O SMS vai além do seu uso comum para “bate-papo” via celular. Essas mensagens também podem ser enviadas de forma automática por aplicações. Isso também é bastante difundido, por exemplo pelos serviços de extrato via celular oferecidos por bancos.,
Nota 1: O termo “mensageria” é um tradução comum do inglês messaging, um “sub-paradigma” de programação (de rede, concorrente/paralela ou OO) fundamentado na troca de mensagens discretas e possivelmente assíncronas entre aplicações (ou tarefas, threads etc.). Tem vantagens como baixo acoplamento, garantia de entrega através de enfileiramento, bem como concorrência facilitada (pois no contexto de concorrência, o uso de messaging não exige locks). Neste artigo, nos concentramos na aplicação deste paradigma à programação de rede. |
Nota 2: Neste artigo, uso SMS no lugar de “SMS, MMS ou CBS”, para simplificar. Todas essas modalidades de mensagens são suportadas pela WMA. Para CBS (Cell Broadcast Service), a WMA só suporta recepção (nenhuma operadora permitiria a clientes comuns originar mensagens CBS, que são entregues em massa para todos os aparelhos no alcance de uma ou mais estações-base).
|
Indo além, mensagens SMS podem ser consumidas por aplicações. Por exemplo, num cenário corporativo, poderíamos ter funcionários que trabalham em campo (ex.: vendedores) recebendo de forma automática mensagens com atualização de informações relevantes ao seu trabalho, como um desconto de última hora. Os funcionários não leriam as mensagens (nem saberiam que estão recebendo mensagens SMS); só veriam o efeito indireto dessas mensagens numa aplicação. Veja o quadro “Enviando SMS a partir do seu PC”.
A API da WMA – javax.wireless.messaging (JSR-120) – se encaixa no framework definido pelo GCF (Generic Connection Framework). Uma URL com o tipo “sms:” é usada para abrir uma MessageConnection cliente (capaz somente de enviar mensagens), ou servidora (capaz de enviar e receber). O código a seguir abre uma conexão de cliente e envia uma mensagem:
MessageConnection conn =
(MessageConnection) Connector.open("sms://123456789");
TextMessage msg = (TextMessage)conn.newMessage(
MessageConnection.TEXT_MESSAGE);
msg.setPayloadText(“Um dois três testando, câmbio e desligo!”);
conn.send(msg);
Para receber uma mensagem, pode-se usar o PushRegistry, uma facilidade que vimos na Edição 47. O PushRegistry permite que uma MIDlet registre, através de uma API ou dos seus descritores, que quer ser notificada do recebimento de determinado evento. Veja um exemplo desse tipo de registro no descritor (JAD):
MIDlet-Push-1: sms://:50001, MIDletReceptora, *
Aqui usamos uma “URL de servidor”, na qual o número do aparelho é omitido, mas especificamos um número de porta. Pode haver várias MIDlets no mesmo aparelho desejando receber mensagens SMS. Basta que usem portas diferentes. Numa conexão de cliente também é possível especificar a porta; caso omitida, a mensagem é enviada para o Inbox do aparelho.
WMA para mensageria?
A WMA é freqüentemente comparada a APIs de e-mail, mas também possui recursos de mensageria generalizada (como a JMS). Primeiro, assim como a JMS (mas diferentemente da JavaMail), a WMA permite enviar mensagens assíncronas de qualquer tipo – além de TextMessage, existe também o tipo BinaryMessage que comporta até 140 bytes3, sem necessidade de um encoding ASCII como o base64.
Nota 3: Para uma TextMessage o limite é de 160 caracteres, pois os caracteres são codificados com 7 bits cada. Exceto para línguas como o chinês que precisam de codificação Unicode de 16 bits, resultando num limite de 70 caracteres.
|
Segundo, as mensagens da WMA trafegam com grande eficiência nas redes móveis, beneficiando-se de transmissão out-of-band4. Mas o uso da WMA como middleware de integração esbarra na tarifação por mensagem. Caso contrário, seria uma boa opção para usos como jogos online multiusuário e outras aplicações que necessitem da troca intermitente (freqüente, mas não contínua) de dados – seja ponto a ponto ou com intermédio de um servidor central. A tendência pela oferta de planos com acesso ilimitado a serviços de dados talvez mude isso, abrindo as portas para muitas oportunidades.
Nota 4: Nesse tipo de transmissão, usa-se um canal de comunicação distinto do normalmente usado para dados ou voz. Este canal normalmente só é usado para pacotes de informações de controle, sendo menos congestionado. Por outro lado, canais out-of-band só são adequados para mensagens curtas e isoladas, não para protocolos com conexão de longo prazo, garantia de entrega e outras complicações. Por isso existem os limites do SMS, como o tamanho máximo de 140 bytes por mensagem.
|
Enviando SMS a partir do seu PC
" [...] continue lendo...