Javafx
Javafx
MARING 2009
JavaFX
Monografia apresentada ao Centro Universitrio de Maring como requisito para obteno do ttulo de especialista em Desenvolvimento Orientado a Objetos JAVA, sob orientao do prof. Munif Gebara Junior.
MARING 2009
AGRADECIMENTOS
Aos meus pais por todo incentivo, apoio e confiana. Ao professor Munif Gebara Junior, meu orientador, obrigado por toda sua ateno e dedicao, e principalmente pela motivao que se mostraram indispensveis a este trabalho. Em especial, ao meu primo Fabrcio que colaborou com o papel de leiautista no desenvolvimento deste trabalho.
RESUMO JavaFX sendo uma tecnologia recente, desenvolvida com a finalidade de implementao de interfaces ricas (RIA Rich Internet Application), ainda no consolidada no mercado, no presente trabalho ser avaliado os custos em tempo, trabalho requerido, desempenho em produo e complexidade no desenvolvimento de pequenos exemplos prticos sob a plataforma. Por seguinte, submeter tais implementaes em testes de execuo sob as plataformas, browser (navegador), desktop e em dispositivos mveis, tal como divulgado pelo fornecedor.
LISTA DE FIGURAS
Primeiro Projeto.................................................................................................... 34 Primeiro Projeto sob os dispositivos HTC ........................................................... 35 Projeto Calculadora nos dispositivos HTC........................................................... 36 Calculadora ........................................................................................................... 39 Projeto Agenda sob os dispositivos HTC ............................................................. 40 Agenda .................................................................................................................. 41
LISTA DE TABELAS
Temas RIA............................................................................................................ 16 Comparao dentre desktop, web e RIA.............................................................. 18 Classificao dos tipos de RIA ............................................................................. 19 Recursos de destaque do JavaFX ......................................................................... 26 Formas de implantao ......................................................................................... 29
9 LISTA DE QUADROS Quadro 1. Quadro 2. Quadro 3. Quadro 4. Quadro 5. Quadro 6. Quadro 7. Quadro 8. Quadro 9. Quadro 10. Controle contra travamentos............................................................................. 32 Cdigo fonte do Primeiro Projeto..................................................................... 34 Classe Java Calculadora ................................................................................... 37 Trecho de cdigo da classe InterfacePadraoView ........................................... 37 Trecho de cdigo da classe Controller ............................................................. 38 Contedo XML retornado pelo servidor .......................................................... 40 Arquivo ManutencaoContatoView_en_US.fxproperties.................................. 42 Trecho de cdigo da classe ManutencaoContatoView ..................................... 43 Trecho de cdigo da classe BaseDeDados ...................................................... 43 Trecho de cdigo da classe RequisicaoServidor ............................................. 45
10 SUMRIO AGRADECIMENTOS ............................................................................................................... 1 RESUMO ................................................................................................................................... 2 LISTA DE FIGURAS ................................................................................................................ 3 LISTA DE TABELAS ............................................................................................................... 4 LISTA DE QUADROS .............................................................................................................. 9 SUMRIO ................................................................................................................................ 10 1. INTRODUO ................................................................................................................ 11 1.1. Objetivos................................................................................................................... 12 1.2. Metodologia .............................................................................................................. 13 1.3. Organizao do Trabalho.......................................................................................... 13 2. Reviso Bibliogrfica ....................................................................................................... 15 2.1. Rich Internet Application - RIA ............................................................................... 15 2.2. Tecnologias Similares .............................................................................................. 19 2.3. Breve Histrico da Evoluo do JavaFX .................................................................. 20 2.4. JavaFX 1.0 ................................................................................................................ 21 2.5. JavaFX 1.1 ................................................................................................................ 22 2.6. JavaFX 1.2 ................................................................................................................ 22 2.7. JavaFX TV................................................................................................................ 23 2.8. JavaFX Mobile ......................................................................................................... 23 2.9. JavaFX Script ........................................................................................................... 24 2.10. Diviso por Perfis ................................................................................................. 25 2.11. Colaborao entre Designers e Desenvolvedores ................................................. 27 2.12. Implantao .......................................................................................................... 28 2.13. Java Sandbox ........................................................................................................ 30 3. Desenvolvimento JavaFX ................................................................................................. 32 3.1. Primeiro Projeto........................................................................................................ 33 3.2. Projeto Calculadora .................................................................................................. 35 3.2.1. Integrao com Java ......................................................................................... 36 3.3. Projeto Agenda ......................................................................................................... 39 3.3.1. Lado servidor .................................................................................................... 40 3.3.2. Lado cliente ...................................................................................................... 41 3.3.3. Internacionalizao ........................................................................................... 41 3.3.4. Persistncia de dados ........................................................................................ 43 3.3.5. Integrao ......................................................................................................... 44 4. CONCLUSES e TRABALHOS FUTUROS ................................................................. 47 5. REFERNCIAS ............................................................................................................... 50 6. BIBLIOGRAFIA CONSULTADA .................................................................................. 55 7. APNDICES .................................................................................................................... 56 7.1. APNDICE A - Cdigo Fonte do primeiro exemplo ............................................... 57 7.2. APNDICE B Cdigo fonte da classe InterfacePadraoView ............................... 58 7.3. APNDICE C Cdigo fonte da classe Controller ................................................. 61 7.4. APNDICE D Cdigo fonte da classe ManutencaoContatoView ....................... 65 7.5. APNDICE E Cdigo fonte da classe BaseDeDados ........................................... 68 7.6. APNDICE F Cdigo fonte da classe RequisicaoServidor .................................. 70 8. ANEXOS .......................................................................................................................... 72
11 1. INTRODUO
A plataforma JavaFX, recente tecnologia lanada pela Sun Microsystems para o desenvolvimento de interfaces ricas e interativas, oferece contedos expressivos para browsers (navegadores), desktops, dispositivos mveis, televisores e futuramente para outras plataformas, que poder englobar desde aplicaes embarcadas em automveis at em sistemas de jogos eletrnicos, unificando o desenvolvimento e implantao de modelos de interfaces mais expressivos. Seguindo o mesmo slogan criado pela Sun Microsystem, "write once, run anywhere" (escreva uma vez, execute em qualquer lugar), promete a realizao no futuro, onde os consumidores podero acessar o mesmo contedo em diversas plataformas que suportem Java (SUN, 2007a, 2009a, 2009b). Devido ao ambiente de execuo bastante diversificado, mesmo que em algumas plataformas liberado no momento apenas como early access, i.e., o acesso antecipado ao produto antes da verso final ser efetivamente disponibilizada ao pblico geral, pode ser considerada uma das plataformas RIA mais amplamente disponvel para implantao no mercado, abrangendo todos os grandes principais consumidores e sistemas operacionais corporativos (SUN, 2009b, 2009g). Como parte desta tecnologia, foi introduzido o JavaFX Script, uma nova linguagem de programao simples e intuitiva, semelhante ao Java, que possui a vantagem de execuo sob a JRE (Java Runtime Environment), pelo o qual poder garantir a segurana e a onipresena da plataforma Java, apoiando todos os contedos e aplicaes atualmente disponveis atravs dos bilhes de dispositivos em uso hoje. O JavaFX Script a nica tecnologia que oferece uma estreita integrao com componentes Java que pode ser executado tanto em servidores como em clientes, resultando em uma rica experincia end-to-end (fim a fim) (SUN, 2007a, 2007c). Entre as muitas inovaes do JavaFX a caracterstica denominada Dragto-Install (soltar para instalar), pelo o qual permite que usurios finais possam pela primeira vez efetuar a operao de drag-and-drop (literalmente, arrastar e soltar) para a instalao de aplicaes JavaFX. Em outras palavras possibilita que programas JavaFX que estejam em execuo no navegador web como applets,
12 sejam movidos diretamente para a rea de trabalho (desktop), proporcionado aos usurios a mais simples experincia de instalao de softwares de Internet e contedo (SUN, 2008a). Atualmente o JavaFX ganhou um significante papel no mercado alcanando a marca de mais de 250 milhes de instalaes do JRE, e 400 mil downloads do SDK (Software Development Kit) desde dezembro de 2008 (SUN, 2009b). Outro ponto de destaque est no contedo criativo, desempenhado por designers, responsveis pela funo artstica, a possibilidade de se tornarem tambm desenvolvedores Java, devido ao fcil e rpido processo de construo de interfaces ricas, que requer menos codificao, e incluem componentes de visualizao de dados e aplicaes de inteligncia de negcios (MAREJKA, 2007; SUN, 2009b, 2007a). Atualmente pode ser considerado competitivo ou superior as solues similares presentes no mercado para o desenvolvimento de GUI (Graphic User Interface) tais como o: Macromedia Flash/Flex/Open Laszlo, Adobe Apollo, Microsoft WPF/XAML, Mozilla XUL, AJAX/DHMTL e entre outros (OLIVER, 2006). No seu ambiente de desenvolvimento incluem o compilador, ferramentas de runtime para vrias arquiteturas de PC (Personal Computer) e outros dispositivos como grficos, mdia, Web Services e bibliotecas para construo de interfaces ricas, dentre outras ferramentas necessrias para a implementao da tecnologia. Possui plugins para ambos os IDEs (Integrated Development Environment) mais conhecidos, NetBeans e Eclipse (SUN, 2008a).
1.1.
Objetivos
O foco deste trabalho ser centrado na tecnologia JavaFX, tendo como objetivo apresentar uma viso geral, e demonstrar parte de suas funcionalidades atravs de exemplos prticos, abordando seus principais aspectos positivos e negativos, bem como os conceitos envolvidos. Os detalhamentos da linguagem JavaFX Script tais como sintaxes, semntica, e nuances da API, sero demonstrados de maneira superficial.
13 Embora o nome completo da plataforma JavaFX JavaFX Rich Client, sendo composto ainda por vrios outros componentes, no contexto do trabalho o termo ser simplificado, sendo referenciado apenas como JavaFX. 2009). (WEAVER,
1.2.
Metodologia
Como critrio de desenvolvimento foi adotado a utilizao do IDE Netbeans, em funo do plugin disponvel para o IDE Eclipse ainda no apresentar-se com nvel de maturidade adequado, estando na verso beta no decorrer da implementao dos exemplos. Outro ponto considerado, o fato do Netbeans ser o IDE oficial para o desenvolvimento na plataforma JavaFX, e possuir atualizaes com maior frequncia. Como restrio de plataforma, o ambiente de execuo desktop e web foram delimitados somente ao sistema operacional Windows, em virtude dos demais sistemas operacionais, o ambiente JavaFX ainda no atingiu o estgio adequado de maturidade (SUN, 2009a). Com relao ao contedo exposto, sero abordados as revises bibliogrficas baseados somente at o release JavaFX 1.2, visto que novas verses ou revises podero ser disponibilizadas no decorrer do trabalho, podendo impactar diretamente no desenvolvimento deste, e possivelmente, inviabilizando o
1.3.
Organizao do Trabalho
O texto da monografia foi organizado em 4 captulos: introduo, reviso bibliogrfica, implementao e concluses. No segundo captulo so abordados a reviso bibliogrfica, onde sero apresentados o introduo sobre RIA, por seguinte, o histrico de evoluo da tecnologia, os principais fundamentos da linguagem JavaFX Script e grande parte de sua estrutura, bem como, os principais conceitos envolvidos.
14 O terceiro captulo trata-se da implementao de exemplos, formalizando o contedo desenvolvido neste trabalho, que serviram de base para a demonstrao, o acompanhamento e o funcionamento, na prtica, do desenvolvimento de pequenos aplicativos utilizando a tecnologia JavaFX. No ltimo captulo expe as concluses obtidas e as propostas para trabalhos futuros.
15
2.
Reviso Bibliogrfica
As aplicaes baseadas no HTML (Hyper Text Markup Language) tornaramse populares devido ao baixo custo de desenvolvimento, de arquitetura simples, fcil manuseio e aprendizado. Entretanto os benefcios foram compensados com uma perca significativa de algumas funcionalidades de UI (User Interface), devido a simplicidade na paleta limitada de componentes e em seu modelo de interao restrita. Tais recursos de interfaces podem ser exigidos por softwares mais complexos que requerem alta interatividade, no se limitando a atualizao de vrias pginas HTML para completar uma transao (O'ROURKE, 2004; SUN, 2007a; WEAVER, 2009). Outro ponto negativo do HTML com relao a codificao, que apesar de iniciar-se de maneira simples, pode requerer uma grande quantidade de esforo para efetuar tarefas sem maiores complicaes de interface (O'ROURKE, 2004).
2.1.
O termo Rich Internet Application - RIA, foi introduzido pela Macromedia por Jeremy Allaire em maro de 2002, para iniciar a unificao das aplicaes do tradicional desktop e web, no sentido de utilizar as vantagens e superar as desvantagens de ambas as arquiteturas. As primeiras aplicaes RIA originaram-se em 1995, atravs dos pequenos programas chamados de Java applets, que podem ser executados via browser sob a mquina virtual Java (JVM - Java Virtual Machine), com algumas restries de segurana (BOZZON, 2006). O princpio bsico proporcionar um tempo de execuo eficiente e de alta performance para a execuo do cdigo, tanto no contedo quanto na comunicao. Inclui a requisio/resposta para a pgina de renderizao do modelo, a necessidade de gerar dinamicamente um grande contedo de texto para a simples transmisso de dados, o armazenamento de dados no lado do cliente, e a possibilidade de se invocar a lgica de negcios remotamente (lado do servidor) e a facilidade de se manipular-los. O RIA fornece poderosos e extensivos modelos de
16 objetos para interatividade em termos de aplicaes e eventos. Esses modelos baseados em objetos, devem se integrar com a interface do usurio, e a comunicaes e servios a nvel de sistema (ALLAIRE, 2002). A construo de RIAs com metodologias de engenharia da Web requer adaptao do fluxo de desenvolvimento de aplicaes Web tradicionais, para considerar a capacidade do novo lado do cliente, a nova caracterstica de apresentao, bem como os diferentes mecanismos de comunicao entre o servidor e o cliente. As principais questes correlacionadas com a concepo do RIA podem ser agrupados em quatro temas conforme a Tabela 1 (LINAJE, 2008):
Tema Dados
Descrio O contedo voltil e persistente so armazenados e manipulados no lado do cliente e do servidor (LINAJE, 2008);
Lgica de negcio
Em ambos os lados, tanto o cliente quanto o servidor podem realizar operaes complexas (LINAJE, 2008);
Comunicao Permite a comunicao assncrona, bem como a distribuio de dados e de funcionalidades entre o cliente e o servidor; ampliam as caractersticas dos eventos produzidos tais como podem se originar, detectar, notificar, ou ser processado em uma variedade de maneiras (LINAJE, 2008); Apresentao Oferece apresentaes aprimoradas de interaes com o usurio, permitindo-o operar como aplicaes em uma nica pgina (LINAJE, 2008). Tabela 1. Temas RIA
O RIA utiliza-se de um motor de renderizao relativamente robusto no modelo client-side, que podem apresentar-se muito densas, responsiva e graficamente rica em interface ao usurio. Podem ainda oferecer uma ampla variedade de controles, e geralmente podem permitir a construo de grficos em tempo real atravs de qualquer SVG (Scalable Vector Graphics) ou algum outro tipo de mecanismo (O'ROURKE, 2004).
17 Outro benefcio do RIA em comparao com o HTML que os dados podem ser armazenados em cache no cliente, permitindo uma interface mais gil com menos trafego de informaes com o servidor. Em muitos casos, o cliente pode permanecer conectado fonte de dados, possibilitando que servidor possa atualizar o cliente em tempo real. Alem disso, tal recurso possibilita o desenvolvimento de aplicaes que podem ser projetadas para trabalhar no modo offline, recurso necessrio para seu funcionamento em dispositivos tais como o PDA (Personal Digital Assistant), ou pelo menos degradar-se normalmente, mesmo quando a conexo perdida. Muitos aplicativos requerem o suporte para conexes persistentes em dois sentidos, a notificao baseada em comunicaes
(O'ROURKE, 2004; ALLAIRE, 2002). A promessa de clientes ricos inclui a capacidade de separar a lgica de apresentao limpa e interfaces de usurio a partir da lgica do aplicativo hospedado na rede, permitindo o uso da Internet e servios de dados fornecidos pelos servidores de aplicao. O XML (Extensible Markup Language) geralmente utilizado como o formato de transferncia de dados e, s vezes, tambm como descritor de leiaute de formulrio. Clientes ricos devem fornecer um modelo para facilitar o uso de servios remotos fornecidos por componentes de back-end, seja hospedado em um servidor de aplicativos ou acessados como XML Web Service ( ALLAIRE, 2002; O'ROURKE, 2004) A seguir apresentada na Tabela 2 que faz uma comparao dentre as caractersticas das plataformas desktop, web e RIA.
18
Lgica de negcio no lado do Servidor Lgica de negcio no lado do Cliente Total atualizao de pgina requerida Comunicao Servidor-Cliente Funcionamento Offline Tabela 2.
Dentre as mais conhecidas tecnologias para o desenvolvimento de aplicaes ricas para Internet se destacam: AJAX, Flash, FLEX, OpenLaszlo, Silverlight, entre outras novas, como o prprio JavaFX que ainda esto emergindo no mercado (LINAJE, 2008). As aplicaes ricas, no contexto geral, podem ser classificadas da conforme a Tabela 3:
19
Definio A lgica no lado do cliente implementada via linguagem de scripts, tal como o JavaScript, cujo as interfaces so baseadas na combinao dentre HTML e CSS (Cascading Style Sheets) (BOZZON, 2006);
Baseado em plugin
A renderizao avanada e o processamento de eventos so concedidos atravs de plugins do navegador, por meio de interpretao de dados no formato XML. Tambm podem ser disponibilizados via programas de uso geral ou arquivos de multimdia, como o Flash, Flex, Laszlo, entre outros (BOZZON, 2006);
Baseado no navegador A rica interao nativamente suportado por alguns (browser) navegadores que podem interpretar linguagens de definio de interface declarativa, tais como o XUL - XML User Interface Language (BOZZON, 2006); Tecnologias baseado em web desktop Pode ser definido como as aplicaes que podem ser baixadas e executadas diretamente pela web, isto , a execuo de programas de Internet no qual so transferidos para rea de trabalho (local), porm executado fora do browser, como por exemplo o Java Web Start e o Window Smart Client (BOZZON, 2006). Tabela 3. Classificao dos tipos de RIA
2.2.
Tecnologias Similares
Como principais concorrentes diretos do JavaFX foram selecionados as seguintes tecnologias j consolidadas no mercado: AJAX (Asynchronous Javascript and XML), FLEX e o Silverlight. Baseado na linguagem Javascript, o AJAX, atua no lado cliente, sendo desenvolvido para a criao de aplicaes Web com maior interatividade, com o
20 propsito de se evitar a atualizao de pginas HTML. Os dados podem ser recuperados de forma assncrona utilizando-se do objeto XMLHttpRequest sem a necessidade de se recarregar a interface inteira. Muitos frameworks esto disponveis para o desenvolvimento com o AJAX, pelo o qual tentam contornar o problema das diferenas dentre os navegadores (LINAJE, 2008); O FLEX, um produto open source com maturidade comercial para o desenvolvimento de interfaces ricas, fornecido pelo Adobe System, pelo qual se utiliza de duas linguagens: o MXML, com sintaxe declarativa baseado em XML; e o ActionScript, definida como uma linguagem de programao avanada. Com o MXML possvel descrever os comportamentos e leiaute de interface de usurio, e o ActionScript para implementao da lgica no lado do cliente. As principais desvantagens de ambos em Flash e Flex o suporte limitado para XML e padres de Web Services e a relativa imaturidade do ambiente como uma ferramenta de desenvolvimento de aplicaes. Por outro lado, as principais vantagens a facilidade com a qual possvel criar-se animaes complexas e a disponibilidade de complementos de terceiros. O Flex inclui uma biblioteca de componentes compostos por 100 itens para a construo de interfaces, alm de um depurador interativo de aplicativos Flex (ADOBE, 2009; LINAJE, 2008; O'ROURKE, 2004); Por fim, o SilverLight trata-se de uma tecnologia baseado no WPF (Windows Presentation Foundation), sendo uma plataforma da Microsoft para o
desenvolvimento RIA.
Silverlight possui tambm uma linguagem declarativa baseada em XML, o XAML (Extensible Application Markup Language), tendo como base do recurso de apresentao do Microsoft .NET Framework 3.0 (infra-estrutura de programao Windows) (LINAJE, 2008; MORONEY, 2007).
2.3.
O projeto iniciou-se em setembro de 2005 com a aquisio da empresa SeeBeyond Technology Corporation. A obteno trouxe para a Sun Microsystems o engenheiro snior, Christopher Oliver, desenvolvedor do projeto chamado F3 (forms
21 folows function), tambm conhecido como JFX, no qual mais tarde foi rebatizado como JavaFX Script (OLIVER, 2006, 2007). O JavaFX foi anunciado pela primeira vez em maio de 2007 na conferncia JavaOne WorldWide Java Developer. No mesmo perodo, tambm foi divulgado a aquisio completa das propriedades intelectuais da empresa Savaje Technologies, que teve como um de seus objetivos, expandirem o mercado de dispositivos mveis integrados com a tecnologia Java como client-side. (SUN, 2007b) A primeira verso do JavaFX, considerada um prottipo, foi disponibilizada ao pblico como uma linguagem interpretada, permitindo que desenvolvedores, aps sua degustao, contribuir com feedbacks para a evoluo do produto. Dois livros foram publicados no perodo de 2007, baseados nesta verso (WEAVER, 2009). Em abril de 2008 com o lanamento do JRE 6 Update 10 (6u10), tambm publicado no artigo por Ethan Nicholas, incluiu componentes e recursos adicionais para o suporte ao runtime do JavaFX, desenvolvido inicialmente voltado para a plataforma Windows 32-bit, sendo considerado um marco para a nova tecnologia, dentre outras inovaes. O release trouxe solues para o JRE no problema de implantao de aplicaes desenvolvidas sob o JavaFX, que exigia o runtime especfico para sua execuo (KRILL, 2008; NICHOLAS, 2008; SUN, 2008b). Por seguinte, em maio de 2008 a Sun Microsystems anunciou o plano de entrega do JavaFX para as plataformas browser e desktop para o terceiro trimestre do mesmo ano, e em sequncia para dispositivos mveis no segundo trimestre de 2009. Uma prvia do JavaFX foi liberado em julho de 2008 (SUN, 2009a).
2.4.
JavaFX 1.0
Oficialmente o JavaFX foi lanado em 4 de dezembro de 2008, com a liberao da primeira verso, o release 1.0, composto por trs componentes chaves: o SDK, a ferramenta JavaFX Production Suite, e o JavaFX Desktop. Inicialmente foi disponibilizado para os sistemas operacionais Windows e MacOSX, compondo uma nova famlia de produtos baseados na tecnologia Java. (SUN, 2008a, 2009a) O JavaFX 1.0 incluiu no pacote um completo conjunto de efeitos grficos, aliado ao sofisticado framework de acelerao grfica via hardware (GPU Graphic
22 Processor Unit), quando disponvel no dispositivo ou na plataforma. Tambm foi adicionado o suporte para exibio de vdeos atravs do uso de decodificadores nativos para cada plataforma, o VP6, fornecido pela empresa On2 Technologies, Inc., parceiro da Sun, lder em solues de compreenso de vdeos (OLIVER, 2009; SUN, 2008a, 2008j).
2.5.
JavaFX 1.1
Na sequncia, em 12 de fevereiro de 2009, foi oficializado o release do JavaFX 1.1 que anunciou o esperado JavaFX Mobile, pelo o qual forneceu um completo sistema de software para dispositivos mveis via licena OEM (Original Equipment Manufacturer) para fabricantes e outras companhias que desejem aderir a nova plataforma. Incluiu no pacote algumas vantagens, dentre que se destacam, o aumento de performance, a implementao dos tipos numricos da linguagem Java (float, double, long, int, short, e byte) no JavaFX Script e a compatibilidade binria com o release anterior, o JavaFX 1.0 (O'NEILL, 2007; SUN, 2009a, 2009f). O lanamento contou ainda com adeso de novos parceiros para a nova tecnologia JavaFX, composto por conhecidos fabricantes e prestadores de servios, como: Sony Ericsson, LG Electronics, Orange, Sprint, Cynergy e MobiTV (SUN, 2009f).
2.6.
JavaFX 1.2
No ltimo update, o JavaFX 1.2, lanado em 2 de junho de 2009, entregou significantes atualizaes, tais como o suporte como early acess aos sistemas operacionais Linux e OpenSolaris, a adio de novas bibliotecas de interfaces (GUI), o aprimoramento considervel de performance atravs do runtime Java SE 6 Update 14, dentre outras mudanas que visando maiores melhorias, ocasionaram incompatibilidades de API (Application Programming Interface) com as verses anteriores. Tais alteraes de maiores impactos incluram a remoo/ renomeao de classes e variveis, antes presentes no SDK 1.1, e a introduo de outras novas na verso corrente, que resultou em binrios inconciliveis dentre o JavaFX 1.1 e
23 1.2. Sendo assim, todas as bibliotecas codificadas nos releases anteriores, bem como suas dependncias, precisam ser recompiladas para migrarem para a verso mais atual (CHO, 2009; SUN, 2009a, 2009b, 2009e) O SDK 1.2 ainda foi complementado com o preview do JavaFX TV, exposto pela primeira vez ao pblico no evento Java One Conference de 2009, completando a viso de aplicaes JavaFX funcionando em navegadores, desktops, dispositivos mveis e televisores. Tambm anunciado na conferncia, destacou-se a demonstrao prvia da ferramenta JavaFX Authoring Tool, pelo o qual permite que designers e desenvolvedores construam suas aplicaes de forma visual (SUN, 2009b). A Sun Microsystems demonstrando seu com o comprometimento para o cdigo livre, como parte do modelo de negcio, forneceu o compilador do JavaFX, incluindo parte das bibliotecas de grficos e ferramentas para o projeto OpenJFX, sob a licena GPL (General Public License) 2.0. O projeto do compilador OpenJFX possui como foco a traduo de scripts JavaFX em arquivos de classes JVM, compilados como bytecodes (OpenFX, 2009a; SUN, 2009j).
2.7.
JavaFX TV
Com relao ao runtime do JavaFX TV, a Sun Microsystems alega estar trabalhando com fabricantes de dispositivos, tendo a previso inicial de disponibilizar o JavaFX SDK aos desenvolvedores ao final de 2009. Na conferncia JavaOne, em junho de 2009, a Sun demonstrou uma prova de conceito do JavaFX rodando em uma TV de prxima gerao da LG Electronics TV. (SUN, 2009b, 2009j).
2.8.
JavaFX Mobile
Atualmente foi disponibilizado um runtime para o sistema operacional Windows Mobile, fornecido somente para fins de desenvolvimento. Os testes de ambiente realizados pela Sun, utilizaram o JavaFX SDK 1.2 nos dispositivos HTC Diamond e LG Incite touch (SUN, 2009l).
24 Na verso corrente ainda possui vrios limitadores, tais como a execuo de somente uma aplicao JavaFX por vez, comportamentos dos controles de UI e grficos no confiveis, dentre outros.
2.9.
JavaFX Script
O JavaFX Script uma linguagem de script baseado nas linguagens Javascript, Miranda, SQL e Lisp. Derivou-se do projeto F3, que inicialmente no era uma linguagem de programao, conceitualmente apresentava-se como um tipo de linguagem de modelagem com notaes de objetos UML (Unified Modeling Language), consistindo apenas em declaraes de classes e valores de constantes. A plataforma JavaFX foi arquitetada para suportar mltiplas linguagens de script, tal como as linguagens baseadas de marcao visual, como o XML. (OLIVER, 2006, 2007, 2009; O'NEILL, 2007; SUN, 2009j). Nos conceitos tcnicos, o JavaFX Script uma linguagem procedural, orientado a objetos, desenvolvida para a especificao de componentes de GUI, composto por sintaxes e expresses declarativas (relaes entre os componentes grficos interativos), inferncia de tipos (baseado no contexto da varivel o tipo de dado auto-interpretado pelo compilador), data-binding (sincronizao automtica entre os dados da aplicao e os componentes de interfaces exibidos ao usurio) com suporte a grficos em duas dimenses e a padres da API de componentes do Swing. Diferentemente dos seus concorrentes do mercado, a linguagem JavaFX Script statically typed (estaticamente tipado), ou seja, o tipo do objeto conhecido pelo compilador baseado em sua declarao em tempo de compilao (OLIVER, 2006, 2009; O'NEILL, 2007; SUN, 2009d). Obtm as vantagens do modelo de programao Java, sendo inclusive dependente de compilao, no qual seu cdigo fonte necessita ser previamente convertido para Java bytecode antes de estar disponvel para a execuo no sistema. Alem disso, proporciona uma srie de recursos derivados do Java tais como a estruturao do cdigo, encapsulamento, integrao direta com o mesmo (importao de classes, criao de objetos, chamada de mtodos, implementao de interfaces, entre outros), o reuso, o suporte nativo ao padro de projeto com o
25 modelo MVC (Model View Control), dentre outras caractersticas que provm a possibilidade de fcil entendimento e manutenibilidade em grandes programas, sendo capaz de suportar interfaces de qualquer tamanho de complexidade (HOMMEL, 2009; OLIVER, 2006, 2009; O'NEILL, 2007; SUN, 2009a, 2009c, 2009d). O conceito central da linguagem JavaFX, relacionado a UI, baseado no scene graph (grafo de cena). O scene graph trata-se de uma estrutura de dados, semelhante a uma arvore, que define a hierarquia de grficos em uma cena, onde um nico elemento denominado como n. Cada n pode manipular diferentes tipos de objetos (contedos), tais como componentes UI, textos, imagens e mdias. Expressa um modelo de interface de fcil manipulao para anexar
comportamentos, tais como a animao e efeitos de transio, ou para vincular a modelos de dados subjacente (SUN, 2009a; WEAVER, 2009).
2.10.
No contexto geral, a plataforma pode ser dividida em trs perfis, o comum (common profile), desktop (desktop profile) e dispositivo mvel (mobile profile). No entanto na atual verso, o JavaFX 1.2, esto disponveis apenas o perfil comum e desktop (SUN, 2009a; WEAVER, 2009). O common profile, o perfil comum da API no qual incluem classes compartilhadas em ambas as plataformas, PC (incluindo o ambiente web) e dispositivos mveis. Contm o ncleo de funcionalidades necessrios para os recursos de imagens, vdeos, textos, animaes e chamada de servios. suportado por todos os dispositivos que executam o JavaFX, tais como, PC, telefones celulares e dentre outros (MALENKOV, 2009; SUN, 2009a; WEAVER, 2009). No perfil desktop, baseado no Java SE (Java 2 Standard Edition), foram adicionados funcionalidades e vantagens exclusivas da plataforma desktop, que incluem componentes baseados no Swing, efeitos grficos, dentre muitas outras caractersticas no suportadas em dispositivos embarcados, tais como efeitos visuais presentes no pacote javafx.scene.effect. O modelo tambm suportado na execuo no browser (MALENKOV, 2009; SUN, 2009a; WEAVER, 2009).
26 No futuro ser criado o mobile profile que poder ser designado especificamente para dispositivos mveis, baseado na implementao estendida do JavaME (Java Micro Edition), que incluem recursos tais como o bluetooth, GPS (Global Positioning System), detectores de movimento, e entre outros itens relacionados aos aparelhos portveis. Contudo, at essas caractersticas serem efetivamente disponibilizadas, no momento, as referncias ao perfil mobile equivalente ao common profile (SUN, 2009a; WEAVER, 2009). Dentre outras caractersticas tcnicas de destaque presentes na verso atual (SDK 1.2), exposto na Tabela 4: Recurso Gerenciamento JavaFX I/O (In/Out) Skinnable (Cascading Sheets) Descrio do Mascaram as diferenas entre o desktop e dispositivos mveis (SUN, 2009a, 2009c);
CSS O Skin recurso responsvel por toda aparncia visual e, Style ultimamente tambm pela interao visual com o controle, no ambiente JavaFX, os atributos CSS podem ser especificados, ou diretamente aplicados nos ns da cena do grafo, tal como no HTML (BAIR, 2009);
Triggers (gatilhos)
Conceitualmente pode ser definido como uma funcionalidade, ou um trecho de cdigo, que invocado e executado automaticamente em determinadas condies, tal como o
valor de um atributo alterado. Mtodos assessores (getters e setters) podem ser substitudos atravs deste recurso, simplificando a tarefa de desenvolvimento, bem como evidenciando as vantagens da sintaxe declarativa e o uso do encapsulamento (SUN, 2009a; WEAVER, 2009); Grficos Disponvel no pacote javafx.scene.chart no perfil comum a todas as plataformas, que contm os seguintes tipos de grficos: barras, rea, bolha, linha e disperso (SUN, 2009a; WEAVER, 2009). Tabela 4. Recursos de destaque do JavaFX
A interao entre os designers, responsveis pela beleza da interface e a efetividade da experincia do usurio, e os desenvolvedores que so focados pela funcionalidade da aplicao, foi considerado um ponto fundamental. A articulao de uma aplicao RIA de sucesso, alem de suas habilidades funcionais, o seu apelo esttico, que evidencia a necessidade de uma intensa colaborao entre ambas as partes (SUN, 2009h). O JavaFX Production Suite um produto separado, disponvel para download, como parte da plataforma JavaFX, pelo o qual foi designado e projetado desde o incio para suportar o fluxo de trabalho interativo, dentre desenvolvedores e artistas, permitindo a substituio de novas verses dos elementos visuais sem nenhuma alterao do cdigo, simplificando o processo de importao de objetos grficos (SUN, 2009h). O ambiente JavaFX cria uma separao entre recursos grficos e de lgica de negcios. Deste modo permite os designers modificarem seus projetos frequentemente, enquanto manterem os nomes dos objetos grficos intactos (identificadores), os elementos de interface podem ser modificados sem qualquer alterao na lgica de negcio. Devido a esta caracterstica, possibilita que os objetos grficos possam ser transferidos para uma nova posio em tela sem causar impactos ao modelo de negcio (SUN, 2009h). Os grficos exportados a partir da ferramenta JavaFX Production Suite podem ser manipulados como objetos individuais (grupos, camadas, e alguns efeitos) dentro do ambiente de desenvolvimento das aplicaes JavaFX (SUN, 2009h). Prov a facilidade aos desenvolvedores/designers para manipular objetos grficos individuais dentro de um recurso visual, bem como a opo de escolha das ferramentas grficas de sua preferncia. Possui plugins para converso de grficos originados do Adobe Illustrator ou Photoshop, para os formatos prprios do JavaFX, cuja as extenses: FXZ e FXD (JavaFX Data Files) (SUN, 2009h). Aps realizar o processo de converso a partir das ferramentas grficas gerando para o formato reconhecido pelo JavaFX, um novo arquivo criado com a
28 extenso FXZ. O recipiente FXZ um arquivo compactado utilizando-se da compresso do tipo ZIP, logo seu contedo pode ser visualizado por qualquer utilitrio ZIP, ou por um editor de texto, caso descompactado manualmente; tambm pode ser aberto pelo IDE Netbeans. Em seu contedo existe pelo menos um arquivo FXD, pelo o qual a descrio textual do grfico, e em adio, pode incorporar outros recursos grficos, tais como arquivos de imagens ou fontes TrueType (SUN, 2009i). A criao do novo formato FXD, que constitui de um mapeamento descritivo, um-para-um, para os grafos de cena do JavaFX API, foi motivado devido as dificuldades de representao dos elementos e das caractersticas presentes em nos formatos, JavaFX Script e SVG, que deveriam ser compatveis. Os objetos grficos podem preservar seus itens originais como camadas e atributos aps serem convertidos pelas ferramentas recomendadas (SUN, 2009h, 2009i).
2.12.
Implantao
No ambiente de desenvolvimento esto disponveis quatro formas distintas para a implantao do software, conforme exibido na Tabela 5:
Plataforma
Descrio
Execuo Padro Consiste em uma aplicao stand-alone destinado ao perfil (Standard) desktop, que pode ser inicializado por uma linha de comando, por exemplo: javafx -jar <nome-do-aplicativo.jar> (CASTILLO, 2009); Execuo Web Start Tambm como stand-alone, porm sua execuo feita atravs da tecnologia Java Web Start, pelo o qual possibilita que programas Java possam iniciar diretamente pelo browser, executando fora do escopo do navegador (CASTILLO, 2009); Execuo no Browser Baseado na execuo em applet onde o software embutido dentro de uma pgina HTML para ser visualizado pelo browser (CASTILLO, 2009; CHOUDHARY, 2009);
29 Execuo no Executa o aplicativo como MIDlet, sob o JavaFX Mobile Mobile Emulator Emulator, ferramenta que simula dispositivo no ambiente mvel. (emulador da plataforma A opo do simulador, no momento, est disponvel apenas o mobile) sistema operacional Windows (CASTILLO, 2009). Tabela 5. Formas de implantao
A partir da plataforma Java 2 (desde da verso 1.4) com o surgimento do Java Web Start e da subjacente JNLP (Java Network Launch Protocol), tornaramse uma parte padro que vieram para solucionar os problemas da arquitetura de segurana, e as diferenas dentre os navegadores no contexto de client-side,
(ZUKOWSKI, 2002). O Acesso s extenses JNLP em applets, tem sido escrito para aplicaes Java Web Start, como a ligao para o Java 3D API OpenGL, e em especial, para o grafo de cena para o runtime do JavaFX (SUN, 2007d). Como nfase no modo de instalao pela Internet, foi destacada as formas de implantao por meio de applet e Java Web Start, ambos que se utilizam do protocolo JNLP (SUN, 2009a; WEAVER, 2009). A implantao via drag and drog foi disponibilizado aps o release Java 6 Update 10, possibilitando a instalao de programas applet JavaFX atravs do recurso de se arrastar a aplicao, com o mouse, para fora da janela do navegador, mantendo a tecla ALT pressionada. O funcionamento do aplicativo, aps sua instalao, ocorre mesmo quando o browser estiver fechado (KOSTOVAROV, 2009; WEAVER, 2009). Uma aplicao Java Web Start pode ser implantada atravs de um navegador apenas em sua primeira execuo. Aps a aplicao Java Web Start ser baixada e depois do usurio aceitar o certificado de segurana, ele funciona quase como um programa stand-alone. Tais aplicaes tambm podem ser lanadas atravs do menu Iniciar do SO Windows ou por meio de atalhos criados durante o processo de instalao (KOSTOVAROV, 2009).
No contexto geral, a implantao via Internet, utilizando-se dos mecanismos de applet ou Java Web Start, em termos de segurana, possuem diferenas mnimas entre ambos, principalmente na forma como podem ser instalados no lado cliente (KOSTOVAROV, 2009). Um dos conceitos fundamentais de segurana no Java a Sandbox Java, no qual o JavaFX se beneficia, sendo esta uma das vantagens de segurana oriundos do Java. O modelo de segurana sandbox uma parte intrnseca da arquitetura Java, fazendo parte como um elemento do Java Runtime Environment e da API (KOSTOVAROV, 2009). O modelo de segurana Java focado em proteger os usurios de programas hostis que podem ser baixados a partir de fontes no confiveis na rede. Para atingir esta meta, o runtime fornece uma proteo como uma caixa de areia", tal como sua traduo literal, sob os programas Java de procedncias duvidosas que so executados no ambiente (KOSTOVAROV, 2009). Para os aplicativos implantados pela web, no caso via applets ou Java Web Start, a JVM probe muitas atividades consideradas de risco a segurana do sistema. Outros novos limites foram includos a partir do release Java 6 Update 10 (KOSTOVAROV, 2009). A estrutura de segurana do sandbox tem como objetivo simplificar o
acesso a programas no assinados. Assim, o sistema de segurana no restringe completamente os aplicativos no confiveis, que podem partir de quaisquer fontes. O sandbox apenas bloqueia a execuo dos cdigos considerados maliciosos, oriundos de software no assinado, evitando possveis danos que poderiam ser causados. Por outro lado, caso o programa que tenta efetuar atividades consideradas nocivas seja devidamente certificado, ou seja, assinado, o usurio pode explicitamente permitir o acesso deste, atravs dos avisos de segurana emitidos pelo runtime (KOSTOVAROV, 2009). A assinatura o meio legal para assegurar a execuo do aplicativo no caso do mesmo possuir rotinas no permitidas, assim, assinando-o digitalmente, so concedidos os privilgios de segurana para exercer funcionalidades antes
31 indisponveis. O processo, resumidamente, necessita do uso chaves pblicas e privadas para verificao da autenticidade do certificado de validade (SUN, 2009o). Um arquivo de poltica pode ser definido para exigir uma assinatura em todos os applets ou aplicaes que tentam executar o arquivo de poltica. A assinatura uma maneira de verificar se o programa possui origens de uma fonte reconhecida, e pode ser confivel para execuo com as permisses concedidas no arquivo de diretiva (AUSTIN, 1999). Para a plataforma mvel, uma verso futura do JavaFX Mobile dever apoiar a poltica de segurana em camadas, em cima do Java ME (MSA - Mobile Service Architecture) no modelo de segurana (KOSTOVAROV, 2009).
32 3. DESENVOLVIMENTO JAVAFX
Com o intuito de explorar o desenvolvimento de aplicativos sob a plataforma JavaFX, no presente trabalho, so apresentados anlises no desenvolvimento na prtica, atravs da implementao de simples exemplos. Os tpicos abordados limitam-se aos controles comuns destinados a construo de interfaces comerciais, tais como rtulos, campos de textos, botes e dentre outros componentes atualmente disponveis. Embora a parte esttica da GUI, recursos como efeitos, animaes, transformaes de objetos, dentre outros - sejam importantes caractersticas do RIA, tais propriedades foram omitidas para garantir a execuo dos exemplos nos ambientes propostos. Buscando o teste de execuo nas plataformas propostas, desktop, mvel e web, no foram utilizadas nenhuma das bibliotecas de terceiros atualmente disponveis nas implementaes. Tal fato justificado devido a possibilidade de tais frameworks possurem como dependncia, recursos no suportados no JavaFX Mobile. Os programas foram implantados e testados nos ambientes: desktop, web, mobile (simulador). Na prtica foram submetidos aos dispositivos HTC modelos P4351 e Diamond, portando o sistema operacional Windows Mobile, ambos com poder de hardware acima dos requisitos mnimos necessrios (SUN, 2009l). Em virtude de erros ocorridos nos testes feitos nos aparelhos HTC, tal como travamento do runtime do JavaFX, foi necessrio incluir um controle para deixar de realizar algumas funcionalidades quando o ambiente de execuo for o mvel. O Quadro 1 demonstra o comparador introduzido nos projetos para contornar o escopo de cdigo JavaFX Script, que causaram bugs em tempo de execuo: ... if ("{__PROFILE__}" != "mobile"){ ...cdigo no suportado atualmente no JavaFX Mobile } ... Quadro 1. Controle contra travamentos.
Como primeiro exemplo, o Al Mundo!, o objetivo inicial foi a simplicidade do cdigo, sendo desenvolvido sob o perfil comum do JavaFX, afim de permitir sua execuo nos ambientes desktop, web ou dispositivos mveis. A aplicao consiste em uma janela, contendo somente dois componentes: um rtulo e um boto, ambos com alinhamento centralizado tendo como referncia a largura da tela, demonstrando uma das tcnicas de leiaute aliado ao recuso de bind. No evento do clique do boto exibida uma caixa de dialogo com mensagem Al Mundo!, concatenado com o extenso da data atual. Neste exemplo ilustrado uma prvia do forte relacionamento com a linguagem Java, atravs da utilizao do objeto Java, representado pela a classe java.util.Date instanciada dentro do cdigo JavaFX Script, conforme apresentado no Quadro 2. O cdigo completo pode ser visto no (APNDICE A). importao de bibliotecas omitidas Stage { title: "Primeiro Projeto" var cena: Scene = Scene { fill: Color.AQUAMARINE width: 250 height: 250 var vbox: VBox content: [ vbox = VBox { spacing: 20 nodeHPos: HPos.CENTER layoutX: bind (cena.width - vbox.layoutBounds.width) /2 content: [Text { font: Font.font("Arial", FontWeight.BOLD, 20) content: "JavaFX" } Button { text: "Boto" action: function () { if ("{__PROFILE__}" != "mobile"){ var dataAtual = new Date(); Alert.inform("Informao", "Al Mundo! {dataAtual}"); } } } ] } ] }
Neste exemplo no foi utilizado o recurso de formatao de data, tal como a utilizao da mscara DD/MM/YYYY (dia, ms e ano), visando portabilidade entre as plataformas. No ambiente mobile a formatao no suportada. Na Figura 1 apresentada o contedo em tela executado na plataforma desktop. O mesmo resultado obtido quando submetido como applet, porm incorporado ao navegador.
Figura 1.
Primeiro Projeto
Na plataforma mvel, executado no simulador, tal como pode ser observado na Figura 1, um defeito relacionado a acentuao foi identificado. No rtulo boto, o caractere no foi reconhecido. O mesmo problema foi observado no artigo de Osvaldo Pinali DOEDERLEIN, que demonstrava a execuo de sua aplicao em plataformas distintas (DOEDERLEIN, 2009b).
35 Ainda sobre o erro de caracteres acentuados, felizmente, o exemplo ao ser implantado e testado em um dispositivo real, o problema no ocorreu. O fato sugeriu indcios de tratar-se de apenas um possvel bug isolado relacionado ao simulador. O resultado deste teste pode ser visto na Figura 2:
Figura 2.
3.2.
Neste exemplo foi elaborado um projeto de uma calculadora simplificada que contm somente os operadores bsicos aritmticos, ou seja, apenas possui as operaes de soma, subtrao, multiplicao e diviso. O escopo do programa composto por um campo de texto para exibio dos nmeros digitados, bem como apresentao os resultados obtidos aps o clculo; por seguinte, foi includo um teclado numrico com seus respectivos operadores, composto por um conjunto de botes da palheta de componentes do perfil comum. A interface foi desenvolvida sob o padro de projeto MVC com o propsito inicial de demonstrar a interao entre desenvolvedores e artistas grficos, utilizando-se do software Corel Draw para exportao da interface no formato SVG. O resultado foi negativo devido a gerao inadequada dos identificadores de objetos agrupados, aps a importao e converso para o formato FXZ com o aplicativo
36 SVG to JavaFX Graphics Converter. Assim, devido falta de conhecimento nas ferramentas grficas indicadas, como o Adobe Illustrator ou Photoshop, no foi possvel seguir adiante. Avaliando o cdigo fonte analisando-se o desempenho, foram identificados certos abusos com relao a instanciao de muitos objetos com finalidade de tratamento dos eventos de teclado. Porm visualmente, no causaram problemas de performance no programa, mesmo nos dispositivos mveis. A interface do programa pode ser vista na Figura 3 que demonstra a execuo nos dispositivos HTC.
Figura 3. 3.2.1.
Visando a integrao direta com o Java, os principais mtodos foram separados em um outro projeto e implementados em uma classe Java, nomeada como Calculadora (APNDICE B). A classe, representando o modelo de negcio, implementou a lgica dos operadores. Tambm neste projeto Java foi includo um tipo enumerado chamado de Operao, possuindo os tipos SOMA,
37 No Quadro 3 exibida a classe Java Calculadora pelo o qual implementa os mtodos aritmticos: package calculadora; public class Calculadora { public Double soma(Double x, Double y) { return x + y; } public Double subtrai(Double x, Double y) { return x - y; } public Double multiplica(Double x, Double y) { return x * y; } public Double divide(Double x, Double y) { return x / y; } } Quadro 3. Classe Java Calculadora
Como complemento, a classe InterfacePadraoView implementa a interface padro do aplicativo, ilustrando a utilizao de parte dos gerenciadores de leiaute atualmente disponveis, o Vbox, Hbox e Tile para alinhamento e posicionamento dos botes na forma de um teclado numrico, tal como pode ser observado no Quadro 4. .. def numerosDe1a9 = ["7", "8", "9", "4", "5", "6", "1", "2", "3"]; ... HBox { content: [ VBox { content: [ Tile { columns: 3 rows: 3 tileHeight: tamanhoBotao tileWidth: tamanhoBotao vgap: 1 hgap: 1 content: [ for (numero in numerosDe1a9) { Button { text: numero id: "id{numero}" onMouseClicked: controller.onMouseClickedBotaoNumerico onKeyPressed: controller.onKeyPressedCalculadora; }} ]} ... Quadro 4. Trecho de cdigo da classe InterfacePadraoView
38 Com relao ao uso de objetos Java no contexto da linguagem JavaFX, na classe Controller (APNDICE C) foram adicionados referncias para exemplificar este recurso. A propriedade privada calculadora, equivalente ao conceito de atributo na linguagem Java, demonstra a utilizao da instncia da classe Java Calculadora. Enquanto a funo pblica calcula() exibe o relacionamento dentre objetos Java e JavaFX, bem como, a manipulao dos tipos enumerados dentro do cdigo, conforme pode ser observado no trecho de cdigo do Quadro 5. ... var calculadora: Calculadora; ... public function calcula(): Double { return if (operador == Operacao.SOMA) { calculadora.soma(op1, op2); } else if (operador == Operacao.SUBTRACAO) { calculadora.subtrai(op1, op2); } else if (operador == Operacao.MULTIPLICACAO) { calculadora.multiplica(op1, op2); } else if (operador == Operacao.DIVISAO) { calculadora.divide(op1, op2); } else { 0 } } ... Quadro 5. Trecho de cdigo da classe Controller
Outro ponto de destaque a possibilidade do uso da API de Collections do Java, tal como a interface Map e o HashMap, sendo inclusive disponvel dentro do ambiente mobile. O resultado em tela obtida no ambiente desktop apresentado na Figura 4:
39
Figura 4. 3.3.
Calculadora
Projeto Agenda
O projeto foi baseado no aplicativo MVC demonstrado no artigo por Osvaldo Pinali DOEDERLEIN, que apresentou uma implementao de um CRUD (Create, read, update and delete), como um cadastro de produtos, contendo os recursos de persistncia de dados e a exibio dos resultados na forma de grficos (DOEDERLEIN, 2009b). Contudo, no exemplo codificado neste trabalho, o contedo da aplicao de uma agenda, consistindo em um simples cadastro de contatos, com seus respectivos nome e telefone. Neste, foram includos todos os itens ilustrados por DOEDERLEIN, com exceo do grfico de barras, e a introduo de outros novos recursos, como a integrao com servidor remoto e o uso de internacionalizao (DOEDERLEIN, 2009b). Em resumo, o software proposto composto por dois mdulos, formando uma arquitetura cliente-servidor. O cliente foi desenvolvido na plataforma JavaFX, enquanto o servidor com a linguagem Java. No ambiente mobile, nos dispositivos reais, a interface obtida apresentada na Figura 5:
40
Figura 5.
Infelizmente em razes de restries de segurana derivados do sandbox, devido ao uso de cdigo considerado no confivel com a classe
javafx.io.http.HttpRequest, o projeto deste exemplo no pode ser executado no ambiente web, tanto como applet ou webstart. O aplicativo somente poderia possuir os devidos privilgios de execuo a menos que fosse assinado digitalmente. 3.3.1. Lado servidor
O servidor trata-se de uma aplicao web que tem como objetivo produzir um contedo no formato XML, simulando um servio RESTFUL. Neste contexto, o servio remoto invocado na inicializao do programa somente quando a lista de contatos estiver vazia, gerando um conjunto de quatro registros fixos com nmeros de DDD e telefones aleatrios. O resultado apresentado no Quadro 6: <?xml version="1.0" encoding="UTF-8"?> <contatos> <contato id="1261416750441" nome="Mrcio" ddd="87" telefone="99065210"/> <contato id="1261416750456" nome="Contato 1" ddd="31" telefone="99045847"/> <contato id="1261416750490" nome="Contato 2" ddd="97" telefone="99088568"/> <contato id="1261416750500" nome="Contato 3" ddd="35" telefone="99058658"/> </contatos> Quadro 6. Contedo XML retornado pelo servidor
A interface do cliente basicamente composta pela interao de duas telas, uma para listagem dos contatos j cadastrados, e outra para manuteno e insero de novos registros. Na primeira tela, alm de um componente de listagem, contm no rodap com trs outros botes: incluir, alterar e excluir. No formulrio de edio (manuteno) possuem os campos de nome, DDD e telefone, seguido no canto inferior os botes: salvar, cancelar e excluir. Nos testes preliminares foram constatadas que aps algumas interaes de telas no simulador da plataforma mvel, ocorreu o erro
java.lang.OutOfMemoryError, evidenciando a falta de memria para a criao de novos objetos. O problema decorreu devido a alocao de memria para cada troca de tela, ou seja, na interao entre as duas interfaces. A alterao na classe Controller, para manter apenas uma instncia para cada objeto da view, solucionou o erro. O contedo de interface pode ser visualizado na Figura 6 no perfil desktop:
Agenda
A aplicao necessitou ser dividida em dois projetos, em razo da compatibilidade com a plataforma mobile, visando a apresentao do recurso de internacionalizao, inexistente no perfil mvel. Deste modo foram construdas duas
42 aplicaes idnticas, uma com o uso da internacionalizao e outra no. Infelizmente devido a bugs encontrados no IDE Netbeans, no foi possvel compartilhar as classes utilizadas em comum a ambos os projetos, sendo necessrio duplicar-las em cada projeto. A internacionalizao o processo de extrao literal, visvel ao usurio, a partir de um programa escrito em uma lngua ou cultura, para ser traduzido para outras lnguas e culturas. A localizao o processo se de traduzir um programa internacionalizado em um ou em vrios idiomas especficos ou culturas. O JavaFX possui ambos os mecanismos, de internacionalizao quanto de localizao, de formas simples para o uso (WEAVER, 2009). Deste modo, no JavaFX o mapeamento feito atravs de um arquivo de internacionalizao com a extenso .fxproperties, que deve ser associado a sua respectiva classe. O formato do nome do arquivo deve obedecer a uma regra: nome da classe somado a lngua seguido do pas, separados pelo carcter _. A ttulo de exemplo, no caso da classe ManutencaoContatoView, o recipiente destinado para a linguagem ingls e pas Estados Unidos, foi nomeado como
ManutencaoContatoView_en_US.fxproperties. O contedo do arquivo fxproperties demonstra o mapeamento realizado, conforme pode ser observado no Quadro 7 : "Manuteno contato" = "Maintaining contact" "Nome" = "Name" "Telefone" = "Phone" "Salvar" = "Save" "Cancelar" = "Cancel" "Excluir" = "Delete" "Cancelar Operao" = "Do you really want to cancel the operation?" Quadro 7. Arquivo ManutencaoContatoView_en_US.fxproperties
Os literais que servem como chave ao mapeamento, so referenciados dentro do cdigo JavaFX recebendo uma sintaxe especial, seguindo o formato ##[<chave>], conforme apresentado no trecho de cdigo extrado da classe ManutencaoContatoView (APNDICE D) no Quadro 8:
43 ... Button { text: ##[Cancelar]"Cancelar" layoutInfo: LayoutInfo {width: larguraBotao}; action: function () { if (Alert.question("Aviso", ##[Cancelar Operao]"Deseja realmente cancelar a operao?")) { controller.moveTelaLista(); } } } ... Quadro 8. Trecho de cdigo da classe ManutencaoContatoView 3.3.4. Persistncia de dados
A persistncia dos dados foi obtida atravs da classe javafx.io.Storage. Com o uso desta API, cada aplicao possui separadamente seu espao compartilhado, com o acesso exclusivo, permitindo a execuo do aplicativo mesmo quando submetidos em ambientes considerados como programas no confiveis. Os dados podem permanecem armazenados at que sejam explicitamente excludos ou quando a aplicao desinstalada (SUN, 2009k). O Quadro 9 apresenta uma partio da classe BaseDeDados (APNDICE E), que demonstra a o carregamento em memria na forma de uma sequncia, os registro previamente persistidos em disco. ... storage = Storage {source: source}; def is = storage.resource.openInputStream(); def dis = new DataInputStream(is); var contatos: Contato[]; try { def qtdeRegistros: Integer = dis.readInt(); contatos = for (i in [1..qtdeRegistros]) { Contato { id: dis.readLong() nome: dis.readUTF() ddd: dis.readInt() telefone: dis.readInt() } } is.close(); } catch (ex: IOException) { ex.printStackTrace(); }... Quadro 9. Trecho de cdigo da classe BaseDeDados
44 3.3.5. Integrao
A integrao com o servidor remoto foi realizada basicamente por meio da chamada do servio e consumo do contedo XML retornado, com o objetivo de ilustrar o uso hipottico de um Web Service RESTful. A classe javafx.io.http.HttpRequest a API responsvel pela requisio HTTP (Hyper Text Transfer Protocol) assncrona, utilizada tambm para a invocao de Web Services RESTful (SUN, 2009m). Para a interpretao das informaes recebidas foi utilizado um analisador de dados estruturados (parser) proveniente da classe javafx.data.pull.PullParser, que fornece uma sequncia de eventos para o processamento do documento sob o controle do aplicativo. Atualmente possui o suporte para os formatos XML e a JSON (JavaScript Object Notation) (SUN, 2009n). Por fim, a classe RequisicaoServidor (APNDICE F) foi implementada utilizando as APIs anteriormente citadas, com a finalidade de realizar uma solicitao remota, e decodificar e persistir os dados recebidos pelo servidor, tal como pode ser observado no trecho de cdigo do Quadro 10 : ... HttpRequest { location: urlServidor onInput: function (inputStream: InputStream) { var contato: Contato; try { var parser: PullParser = PullParser { input: inputStream documentType: PullParser.XML onEvent: function (e: Event) { if ( e.type == PullParser.START_ELEMENT and e.qname.name == "contato") { contato = Contato { id: Long.parseLong(e.getAttributeValue("id")) nome: e.getAttributeValue("nome") ddd: Integer.parseInt(e.getAttributeValue("ddd")) telefone: Integer.parseInt(e.getAttributeValue("telefone")) } agendaDao.salvarOuAtualizaContato(contato); } } }
Nos testes realizados nos dispositivos mveis, o recurso de integrao funcionou no ambiente real. Os registros foram devidamente importados e persistidos aps executar o download do contedo XML, disponibilizado em servidor na Internet. Neste exemplo, o redimensionamento automtico das telas no foi implementado, por questes de simplicidade. Logo, a altura da interface necessitou ser readequada aps ser testado no HTC P4351, pelo o qual possui o tamanho de tela inferior ao do simulador. J no HTC Diamond, cuja resoluo muito maior, a tela ocupou somente uma pequena parte do espao disponvel em tela. Em resumo, foi constatado um problema de desempenho no HTC P4351, na interao dentre as telas de listagem e manuteno dos registros. No HTC Diamond, pelo o qual possui praticamente o dobro de recursos computacionais em comparao ao modelo P4351, o tempo de resposta foi bem menor, garantindo assim, maior performance. No decorrer dos testes, o programa apresentou alguns problemas com a persistncia de informaes, tanto na leitura quanto na escrita dos dados, quando executado no simulador padro da plataforma mvel. O defeito encontrado indicou o corrompimento do arquivo que armazenava as informaes, que causava instabilidades no processo de carregar ou descarregar os dados. A soluo adotada foi excluir manualmente o arquivo de persistncia, no caso do exemplo da Agenda, o caminho foi localizado no C:\Users\<<nome do usurio>>\javafx-sdk\1.2b31\work\0\appdb\filesystem\root1\javafxStore\muffin. Como citado inicialmente, no ambiente Windows Mobile, ocorreram problemas em tempo de execuo relacionadas as mensagens de alertas, informativas ou exclamativas, derivadas da classe javafx.stage.Alert. Tais problemas causaram um erro crtico na aplicao, travando inclusive o runtime e o JVM do JavaFX; sendo assim, somente finalizando manualmente o processo do JVM foi possvel restaurar-lo. Como o problema persistiu em ambos os dispositivos
46 HTC testados, tal fato sinalizou um possvel bug, ainda no catalogado formalmente.
47
4.
Sendo um dos primeiros trabalhos focados na nova tecnologia JavaFX, houveram certas dificuldades correlacionadas a obteno dos materiais e artigos, embora muitos destes estejam disponveis como textos oficiais fornecidos pelo fabricante, o contedo ainda apresentou-se muito disperso. A escassez de trabalhos cientficos relacionados ao tema, evidenciou a necessidade de uma nfase maior no contexto terico, logo, tomando grande parte dos esforos aplicados nesta pesquisa. O trabalho se concentrou na viso geral at a verso JavaFX 1.2, excluindo a verso 1.2.1, pelo o qual foi lanado aps o trmino da reviso bibliogrfica. Com relao ao ambiente de desenvolvimento, o IDE Netbeans, adotado como a ferramenta para a implementao dos exemplos abordados, apresentou-se ainda pouco maturo, apresentando algumas falhas de recursos bsicos do editor, instabilidades no IDE, dentre outros bugs. No contexto do trabalho, no entanto, no foram catalogados todos os problemas encontrados. Em virtude do IDE Netbeans verso 6.8, o ltimo release disponvel, apresentar instabilidades em comparao a sua verso anterior, a 6.7.1, como defeitos no reconhecimento de classes de bibliotecas de terceiros (por exemplo o JFXtras), e erros de compilao, ambas as verses, 6.7.1 e 6.8, foram utilizadas em conjunto para contemplar a implementao dos projetos. Tal fato justificado
devido as vantagens presentes na nova verso, tendo como destaque o visualizador prvio da interface a ser gerada, a complementao do cdigo, e dentre outras melhorias que facilitaram no desenvolvimento dos exemplos. Do ponto de vista tcnico, foram confirmadas muitas semelhanas com a linguagem Java, como classes, tipos de dados, sintaxe em geral, dentre outras tendo em especial - a capacidade de integrao com a mesma. Alm disso, o uso de sintaxes declarativas demonstrou que realmente podem promover agilidade no desenvolvimento de interfaces ricas. Outro ponto de destaque o reconhecimento do considervel potencial da linguagem, atravs dos recursos de bind, triggers e sintaxes baseadas no SQL, que
48 utilizadas adequadamente, podem simplificar o processo de implementao de controles sincronizados com componentes em tela. Tambm como fatores importantes foram satisfatrios o desempenho nas plataformas web e desktop, as formas disponvel para implantao de aplicativos na Internet, e a interao dentre desenvolvedores e artistas atravs do uso de plugins para ferramentas grficas. A segurana herdada do Java, o sandbox pode ser
citado como um dos pontos fundamentais para a implantao remota de aplicaes, garantindo integridade e segurana dos softwares distribudos pela rede de computadores. Quanto a API, como retratado por DODERLEIN, a palheta de componentes ainda deixaram a desejar, mesmo com a utilizao dos controles nativos estendidos do Swing, ainda podem no apresentar um arsenal completo para o desenvolvimento de interfaces (DOEDERLEIN, 2009a). No entanto, nos perfis desktop e web, para suprir tais necessidades, possvel realizar a extenso manualmente de componentes Swing e/ou a incorporao de frameworks de terceiros, contudo, podendo abdicar de algumas das facilidades da linguagem declarativa.
Os gerenciadores de leiautes atualmente disponveis, ainda podem ser
considerados muito simples para construo de interfaces mais complexas, mesmo para o controle de simples formulrios, podem exigir um esforo considervel para o posicionamento manual e alinhamento dos componentes. Para tanto, para as plataformas desktop e mobile, possvel tambm contornar esta deficincia por meio de bibliotecas de terceiros.
O uso do JavaFX, em primeiro momento, pode no ser indicado para a implementao de aplicaes comerciais de mdio ou grande porte. Pode ser evidente o risco de novas atualizaes que promovam alteraes na API, ou na linguagem JavaFX Script, que embora possam aprimorar ou corrigir possveis falhas de arquitetura, podem causar impactos indesejveis na manuteno de um sistema que j esteja em produo. A verso atual JavaFX 1.2, ainda pode no ser considerado competitivo como seus concorrentes, FLEX ou Silverlight, por ausncia de alguns recursos chaves tais como: completos componentes de controle, ambiente de
49 desenvolvimento visual - essencial para a adeso de leiautistas, e por fim, a falta de IDEs mais estveis. Embora no divulgado formalmente, o prprio compilador ainda pode estar no estgio beta, conforme pode ser observado em algumas nomenclaturas dos diretrios do SDK referenciados pelo IDE Netbeans, como exemplo o 1.2-b31 e 1.2-b603, que representam respectivamente o JavaFX 1.2 e 1.2.1. Tal indcio pode indicar que o estagio de evoluo possivelmente ainda est em testes, portanto a presena de bugs e instabilidades no ambiente de desenvolvimento, poderiam ser aceitveis. Por fim importante ressaltar que o presente trabalho focou o JavaFX at o release 1.2, e verses posteriores a serem lanadas, como o JavaFX 1.3, podem prometer a incluso de novos componentes grficos, gerenciadores de leiaute, dentre outras melhorias, tais como aprimoramento de desempenho, maior estabilidade, ambiente de desenvolvimento visual com o lanamento da ferramenta JavaFX Authoring Tool, alm da integrao com outras novas plataformas, como televisores e dispositivos embarcados. Com trabalhos futuros para a presente pesquisa, proposto: Avaliar a performance dos aplicativos JavaFX atravs de implementao de programas focados em testes de desempenho, enfatizando comparaes com seus concorrentes. Efetuar estudos sobre a arquitetura do compilador, bem como o mapeamento de seus principais componentes, com o objetivo de apresentar o funcionamento e os conceitos envolvidos - explorando suas vantagens e desvantagens. Aprofundar nos conhecimentos na Linguagem JavaFX Script, analisando todo seu contexto, e a suas melhores prticas. Realizar comparaes com outras linguagens RIAs similares, abordando seus principais aspectos positivos e negativos.
50 5. REFERNCIAS
[ADOBE, 2009] Viso geral do Flex. Disponvel em: <http://www.adobe.com/br/products/flex/overview>. Acesso em 30 de nov. de 2009. [ALLAIRE, 2002] ALLAIRE, Jeremy. Macromedia Flash MXA next-generation rich client. Disponvel em: <http://download.macromedia.com/pub/flash/whitepapers/richclient.pdf>. Acesso em 25 de nov. de 2009. [AUSTIN, 1999] AUSTIN, Calvin; PAWLAN, Monica. Advanced Programming for the Java 2 Platform: Chapter 10: Signed Applets Disponvel em: <http://java.sun.com/developer/onlineTraining/Programming/JDCBook/signed.html>. Acesso em 03 de jan. de 2010. [BAIR, 2009] BAIR Richard. Skinning Architecture in JavaFX. Disponvel em: <http://fxexperience.com/2009/06/skinning-architecture-in-javafx/>. Acesso em 30 de nov. de 2009. [BOZZON, 2006] BOZZON, Alessandro; FRATERNALI, Piero; COMAI, Sara; CARUGHI, Giovanni Toffetti. Conceptual Modeling and Code Generation for Rich Internet Applications. Disponvel em: <http://portal.acm.org/citation.cfm?id=1145581.1145649&coll=GUIDE&dl=GUIDE&C FID=4422105&CFTOKEN=26041127 >. Acesso em 5 de ago. de 2009. [CASTILLO, 2009] CASTILLO, Cindy. Deploy A Rich Internet Application Developed With JavaFX Technology. Disponvel em: <http://javafx.com/docs/tutorials/deployment/>. Acesso em 15 de nov. de 2009. [CHO, 2009] CHO, Inyoung. JavaFX 1.2 Technology: Features and Enhancements. Disponvel em: <http://javafx.com/docs/articles/javafx1-2.jsp>. Acesso em out. de 2009. [CHOUDHARY, 2009] CHOUDHARY, Vaibhav; HILDEBRANDT, Nancy. JavaFX Applets in the Browser: Learn best practices for deploying JavaFX applications as applets in a browser Disponvel em: <http://javafx.com/docs/tutorials/deploy-applet/>. Acesso em 10 de jan. de 2010. [DOEDERLEIN, 2009a] DOEDERLEIN, Osvaldo Pinali. JavaFX: RIA a todo vapor Apresentando a JavaFX 1.0 e JavaFX Mobile. Java Magazine. Rio de Janeiro: DevMedia Group, v.7, n.67, p. 50-60, mar.. 2009. [DOEDERLEIN, 2009b] DOEDERLEIN, Osvaldo Pinali. Uma Aplicao Comum em JavaFX: JavaFX no s para multimdia e efeitos grficos. Java Magazine. Rio de Janeiro: DevMedia Group, v.7, n.72, p. 50-60, set. 2009.
51 [HOMMEL, 2009] HOMMEL, Scott. Lesson 1: Getting Started with JavaFX Script. Disponvel em: <http://java.sun.com/javafx/1/tutorials/core/getStarted> Acesso em 13 de nov. de 2009. [KOSTOVAROV, 2009] KOSTOVAROV, Dmitry. Create a Secure JavaFX Application. Disponvel em: <http://javafx.com/docs/techtips/Create-Secure-JavaFXApp/index.jsp>. Acesso em 7 de jan. de 2010. [KRILL, 2008] KRILL, Paul. Java SE 6u10 to solve JRE and Java application deployment issues. Disponvel em: <http://www.javaworld.com/javaworld/jw-092008/jw-09-6u10.html?page=1>. Acesso em 3 de nov. de 2009. [LINAJE, 2008] LINAJE, Marino; PRECIADO, Juan Carlos; MORALES-CHAPARRO, Rober; SANCHEZ-FIGUEROA, Fernando. On the Implementation of Multiplatform RIA User Interface Components. Disponvel em: <http://sunsite.informatik.rwthaachen.de/Publications/CEUR-WS/Vol-445/02icwe2008ws-iwwost08-linaje.pdf>. Acesso em 3 de set. de 2009. [MALENKOV, 2009] MALENKOV, Sergey. Weather on SunTechDays. Disponvel em: <http://weblogs.java.net/blog/malenkov/archive/2009/04/weather_on_sunt.html>. Acesso em 20 de dez. de 2009. [MAREJKA, 2007] MAREJKA, Richard. JavaFX Mobile - A Little Thing, A Big Step. Disponvel em: <http://java.sun.com/javaone/sf/2007/articles/javafxmobile.jsp>. Acesso em out. de 2009. [MORONEY, 2007] MORONEY, Laurence. Introduo ao Silverlight. Disponvel em: <http://msdn.microsoft.com/pt-br/library/cc580591.aspx>. Acesso em 30 de nov. de 2009. [NICHOLAS, 2008] NICHOLAS, Ethan. Introducing Java SE 6 update 10. Disponvel em: <http://java.sun.com/developer/technicalArticles/javase/java6u10>. Acesso em 17 de out. de 2009. [OLIVER, 2006] OLIVER, Christopher. F3. Disponvel <http://blogs.sun.com/chrisoliver/entry/f3>. Acesso em out. de 2009. em:
[OLIVER, 2007] OLIVER, Christopher. Welcome. Disponvel em: <https://openjfx.dev.java.net/servlets/ReadMsg?list=dev&msgNo=26>. Acesso em 26 de out. de 2009. [OLIVER, 2009] OLIVER, Christopher. From F3 to JavaFX 1.0 - Effects. Disponvel em: <http://blogs.sun.com/chrisoliver/entry/from_f3_to_javafx_1>. Acesso em out. de 2009. [O'NEILL, 2007] O'NEILL, Leslie T.. Create rich content applications for mobile, settop, and desktop devices with JavaFX. Disponvel em: <http://www.sun.com/featured-articles/2007-
52 0508/javafx/index.jsp?intcmp=hp2007may08_javafx_read>. Acesso em 17 de out. de 2009. [OpenFX, 2009a] OpenFX Project Home. Disponvel compiler.dev.java.net>. Acesso em 30 de nov. de 2009. em: <https://openjfx-
[OpenFX, 2009b] Embeded SQL or LINQ support. Disponvel em: <http://jfx.wikia.com/wiki/Embeded_SQL_or_LINQ_support>. Acesso em 30 de nov. de 2009. [O'ROURKE, 2004] O'ROURKE, Cameron. A Look at Rich Internet Applications. Disponvel em: <http://wolfpaulus.com/theodore/doc/richinetapp.pdf>. Acesso em 20 de ago. de 2009. [SUN, 2007a] Sun Radically Simplifies Content Authoring - Previews JavaFX Script. Disponvel em: <http://www.sun.com/aboutsun/pr/200705/sunflash.20070508.2.xml>. Acesso em out. de 2009. [SUN, 2007b] Sun Welcomes SavaJe Technologies. Disponvel <http://www.sun.com/software/savaje/index.xml>. Acesso em out. de 2009. em:
[SUN, 2007c] Sun Unveils Mobile Software at JavaOne Conference Attended By 15,000 Developers. Disponvel em: <http://www.sun.com/aboutsun/pr/200705/sunflash.20070508.6.xml>. Acesso em 10 de out. de 2009. [SUN, 2007d] JNLP Support in the New Java Plug-In Technology. Disponvel em: <https://jdk6.dev.java.net/plugin2/jnlp/>. Acesso em 8 de jan. de 2010. [SUN, 2008a] Sun Microsystems Unveils JavaFX 1.0 with Immersive Media Capabilities Targeted at Market's 800 Million Java Powered Desktops. Disponvel em: <http://www.sun.com/aboutsun/pr/2008-12/sunflash.20081204.1.xml>. Acesso em 12 de out. de 2009. [SUN, 2008b] JavaTM SE 6 Update Release Notes. Disponvel em: <http://java.sun.com/javase/6/webnotes/6u10.html>. Acesso em 17 de out. de 2009. [SUN, 2009a] Sun Microsystems JavaFX web site. <http://www.sun.com/software/javafx>. Acesso em out. de 2009. Disponvel em:
[SUN, 2009b] [Sun Releases New Java and JavaFX Software Updates and Previews JavaFX TV; Strong Demand Powers 250 Million JavaFX Downloads. Disponvel em: <http://www.sun.com/aboutsun/pr/2009-06/sunflash.20090602.3.xml>. Acesso em out. De 2009. [SUN, 2009c] JavaFX | Rich Internet Applications Development | RIAs Java FX. Disponvel em: <http://javafx.com>. Acesso em out. de 2009.
53 [SUN, 2009d] JavaFX Script Overview. Disponvel em: <http://www.sun.com/software/javafx/script/index.jsp>. Acesso em 17 de out. de 2009. [SUN, 2009e] Software and System Requirements for JavaFX Technology. Disponvel em: <http://java.sun.com/javafx/1/reference/system-requirements-12.html>. Acesso em 3 de nov. de 2009. [SUN, 2009f] JavaFX 1.1 Production Suite Release Notes. Disponvel em: <http://java.sun.com/javafx/1/reference/releasenotes/production-suite-release-notes1-1.html>. Acesso em 5 de nov. de 2009. [SUN, 2009g] OEM Early Access. Disponvel <http://www.sun.com/oem/eda.jsp>. Acesso em 7 de nov. de 2009. em:
[SUN, 2009h] Integrate Graphic Assets Into Your JavaFX. Application. Disponvel em: <http://javafx.com/docs/integrate-graphic-assets>. Acesso em 30 de nov. de 2009. [SUN, 2009i] JavaFX Graphics Files (FXZ, FXD). Disponvel em: <http://javafx.com/docs/integrate-graphic-assets/Fileformats.jsp>. Acesso em 30 de nov. de 2009. [SUN, 2009j] General Questions. Disponvel em: <http://javafx.com/faq/>. Acesso em 10 de agos. de 2009. [SUN, 2009k] JavaFX 1.2.1 API, javafx.io.Storage. Disponvel em: <http://java.sun.com/javafx/1.2/docs/api/javafx.io/javafx.io.Storage.html>. Acesso em 5 de jan. de 2010. [SUN, 2009l] JavaFX Mobile 1.2 for Windows Mobile OS Release Notes. Disponvel em: <http://www.javafx.com/downloads/mobile/ReleaseNotes.pdf>. Acesso em 25 de nov. de 2009. [SUN, 2009m] JavaFX 1.2.1 API, javafx.io.http.HttpRequest. Disponvel em: <http://java.sun.com/javafx/1.2/docs/api/javafx.io.http/javafx.io.http.HttpRequest.html >. Acesso em 15 de dez. de 2009. [SUN, 2009n] JavaFX 1.2.1 API, javafx.data.pull.PullParser. Disponvel em: <http://java.sun.com/javafx/1.2/docs/api/javafx.data.pull/javafx.data.pull.PullParser.ht ml>. Acesso em 15 de dez. de 2009. [SUN, 2009o] Signing and Verifying JAR Files. Disponvel em: <http://java.sun.com/docs/books/tutorial/deployment/jar/signindex.html>. Acesso em 11 de jan. de 2010. [WEAVER, 2009] WEAVER, James L.; GAO, Weiqi; CHIN, Stephen; IVERSON, Dean. Pro JavaFX Platform: Script, Desktop and Mobile RIA with Java Technology. Berkeley: Apress, 2009. 544 p.
54
[ZUKOWSKI, 2002] ZUKOWSKI, John. Deploying Software with JNLP and Java Web Start. Disponvel em: <http://java.sun.com/developer/technicalArticles/Programming/jnlp/>. Acesso em 15 de set. de 2009.
55 6. BIBLIOGRAFIA CONSULTADA
[1] HOMMEL, Scott. Learning the JavaFX Script Programming Language - Tutorial Overview. Disponvel em: <http://java.sun.com/javafx/1/tutorials/core>. Acesso em 15 de agos. de 2009. [2] REDKO, Alla. Building GUI Applications With JavaFX. Disponvel em: <http://java.sun.com/javafx/1/tutorials/ui/overview/index.html>. Acesso em 15 de dez. de 2009. [3] PILGRIM, Peter. Enterprise Java FX for the Web Platform. Disponvel em: <http://www.infoq.com/presentations/Java-FX-Peter-Pilgrim>. Acesso em 21 de set. de 2009. [4] HEINRICHS, Michael. JavaFX Mobile Applications Best Practices for Improving Performance. Disponvel em: <http://java.sun.com/developer/technicalArticles/javafx/mobile/>. Acesso em 7 de jan. de 2010. [5] GALPIN, Michael. Creating mashups with JavaFX. Disponvel em: <http://www.ibm.com/developerworks/web/library/wa-javafx/>. Acesso em 20 de dez. de 2009.
56 7. APNDICES
package primeiroprojeto; import javafx.stage.Stage; import javafx.scene.Scene; import javafx.scene.text.Text; import javafx.scene.text.Font; import javafx.scene.control.Button; import javafx.scene.layout.VBox; import javafx.scene.paint.Color; import javafx.scene.text.FontWeight; import javafx.stage.Alert; import javafx.geometry.HPos; import java.util.Date; Stage { title: "Primeiro Projeto" var cena: Scene = Scene { fill: Color.AQUAMARINE width: 250 height: 250 var vbox: VBox content: [ vbox = VBox { spacing: 20 nodeHPos: HPos.CENTER layoutX: bind (cena.width - vbox.layoutBounds.width) /2 content: [Text { font: Font.font("Arial", FontWeight.BOLD, 20) content: "JavaFX" } Button { text: "Boto" action: function () { var dataAtual = new Date(); if("{__PROFILE__}" != "mobile") Alert.inform("Informao", "Al Mundo! {dataAtual}"); } } ] } ] } scene : cena }
package view; import javafx.scene.Node; import javafx.scene.layout.VBox; import javafx.scene.control.Button; import javafx.scene.control.TextBox; import javafx.scene.layout.HBox; import javafx.scene.layout.LayoutInfo; import javafx.scene.layout.Tile; def tamanhoBotao = 50; def numerosDe1a9 = ["7", "8", "9", "4", "5", "6", "1", "2", "3"]; def operadoresCantoSuperior = ["/", "*", "-"]; public class InterfacePadraoView extends CalculadoraView { override protected function create(): Node { VBox { layoutX: 20 content: [ HBox { content: [TextBox { text: bind controller.textoDisplay columns: 12 editable: false layoutInfo: LayoutInfo {width: 203 height: 40} selectOnFocus: false } ] } Tile { columns: 4 rows: 1 tileHeight: tamanhoBotao tileWidth: tamanhoBotao vgap: 1 hgap: 1 content: [ Button { text: "C" id: "idC" styleClass: "botoesTecla" onMouseClicked: controller.onMouseClickedBotaoC onKeyPressed: controller.onKeyPressedCalculadora; }
59 for (operador in operadoresCantoSuperior) { Button { text: operador id: "id{operador}" onMouseClicked: controller.onMouseClickedBotaoOperador onKeyPressed: controller.onKeyPressedCalculadora; styleClass: "botoesTecla" } } ] } HBox { content: [ VBox { content: [ Tile { columns: 3 rows: 3 tileHeight: tamanhoBotao tileWidth: tamanhoBotao vgap: 1 hgap: 1 content: [ for (numero in numerosDe1a9) { Button { text: numero id: "id{numero}" styleClass: "botoesTecla" onMouseClicked: controller.onMouseClickedBotaoNumerico onKeyPressed: controller.onKeyPressedCalculadora; } } ] } HBox { spacing: 1 content: [ Button { layoutInfo: LayoutInfo {height: tamanhoBotao width: tamanhoBotao * 2} text: "0" id: "id0" styleClass: "botoesTecla" onMouseClicked: controller.onMouseClickedBotaoNumerico onKeyPressed: controller.onKeyPressedCalculadora; } Button {
60 layoutInfo: LayoutInfo {height: tamanhoBotao width: tamanhoBotao} text: "." styleClass: "botoesTecla" onMouseClicked: controller.onMouseClickedBotaoPonto onKeyPressed: controller.onKeyPressedCalculadora; } ] } ] } Tile { columns: 1 rows: 2 tileHeight: tamanhoBotao * 2 tileWidth: tamanhoBotao vgap: 2 hgap: 1 content: [ Button { text: "+" id: "id+" styleClass: "botoesTecla" onMouseClicked: controller.onMouseClickedBotaoOperador onKeyPressed: controller.onKeyPressedCalculadora; } Button { text: "=" id: "id=" styleClass: "botoesTecla" onMouseClicked: controller.onMouseClickedBotaoIgual onKeyPressed: controller.onKeyPressedCalculadora; } ] } ] } ] } } }
package calculadorafx; import calculadora.Calculadora; import calculadora.Operacao; import javafx.scene.input.KeyEvent; import java.util.Map; import javafx.scene.input.KeyCode; import java.util.HashMap; import javafx.scene.input.MouseEvent; import java.lang.NumberFormatException; public class Controller { var op1: Double; var op2: Double; public-read var textoDisplay: String; var operador: Operacao; var calculadora: Calculadora; var mapaBotoesNumericos: Map; var mapaBotoesOperadores: Map; var mapaTeclasNumericas: Map; var mapaTeclasNumPad: Map; var mapaTeclasOperadores: Map; var isDecimal: Boolean; var operacaoSinalizada: Boolean = false; postinit { operador = null; calculadora = Calculadora {}; def numeros = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"]; def idsBotoesNumericos = ["id1", "id2", "id3", "id4", "id5", "id6", "id7", "id8", "id9", "id0"]; def idsBotoesOperadores = ["id+", "id-", "id*", "id/"]; def teclasNumericas = [KeyCode.VK_1, KeyCode.VK_2, KeyCode.VK_3, KeyCode.VK_4, KeyCode.VK_5, KeyCode.VK_6, KeyCode.VK_7, KeyCode.VK_8, KeyCode.VK_9, KeyCode.VK_0]; def teclasOperadores = [KeyCode.VK_ADD, KeyCode.VK_SUBTRACT, KeyCode.VK_MULTIPLY, KeyCode.VK_DIVIDE]; def operadores = Operacao.values(); def teclasNumPad = [KeyCode.VK_NUMPAD1, KeyCode.VK_NUMPAD2, KeyCode.VK_NUMPAD3, KeyCode.VK_NUMPAD4, KeyCode.VK_NUMPAD5, KeyCode.VK_NUMPAD6, KeyCode.VK_NUMPAD7, KeyCode.VK_NUMPAD8, KeyCode.VK_NUMPAD9, KeyCode.VK_NUMPAD0];
62
mapaBotoesNumericos = new HashMap(); mapaBotoesOperadores = new HashMap(); mapaTeclasNumericas = new HashMap(); mapaTeclasOperadores = new HashMap(); mapaTeclasNumPad = new HashMap(); for (i in [0..9]) { mapaBotoesNumericos.put(idsBotoesNumericos[i], numeros[i]); mapaTeclasNumericas.put(teclasNumericas[i], numeros[i]); mapaTeclasNumPad.put(teclasNumPad[i], numeros[i]); } for (i in [0..3]) { mapaBotoesOperadores.put(idsBotoesOperadores[i], operadores[i]); mapaTeclasOperadores.put(teclasOperadores[i], operadores[i]); } } public function calcula(): Double { return if (operador == Operacao.SOMA) { calculadora.soma(op1, op2); } else if (operador == Operacao.SUBTRACAO) { calculadora.subtrai(op1, op2); } else if (operador == Operacao.MULTIPLICACAO) { calculadora.multiplica(op1, op2); } else if (operador == Operacao.DIVISAO) { calculadora.divide(op1, op2); } else { 0 } } public function onMouseClickedBotaoC(e: MouseEvent): Void { textoDisplay = ""; isDecimal = false; operador = null; } public function onMouseClickedBotaoNumerico(e: MouseEvent): Void { controlaDisplay(mapaBotoesNumericos.get(e.node.id) as String); } function controlaDisplay(numeroDigitado: String) { if ("null".equals(numeroDigitado)) { return ; } if (operacaoSinalizada) {
63 textoDisplay = numeroDigitado; operacaoSinalizada = false; } else { textoDisplay += numeroDigitado; } } function onKeyPressedBotaoNumerico(e: KeyEvent): Void { var teclaPressionada = mapaTeclasNumericas.get(e.code) as String; teclaPressionada = if (teclaPressionada != null) "{teclaPressionada}" else "{mapaTeclasNumPad.get(e.code)}"; controlaDisplay(teclaPressionada); } function onKeyPressedBotaoOperador(e: KeyEvent): Void { def testeOperador: Operacao = mapaTeclasOperadores.get(e.code) as Operacao; if (testeOperador == null or textoDisplay.equals("")) { return ; } operador = testeOperador; sinalizaOperador(); } public function onKeyPressedCalculadora(e: KeyEvent): Void { this.onKeyPressedBotaoNumerico(e); this.onKeyPressedBotaoOperador(e); if (e.code == KeyCode.VK_DECIMAL) { this.onMouseClickedBotaoPonto(null); } else if (e.code == KeyCode.VK_ENTER) { this.onMouseClickedBotaoIgual(null); } } public function onMouseClickedBotaoOperador(e: MouseEvent): Void { if (textoDisplay.equals("")) { return ; }
64 operador = mapaBotoesOperadores.get(e.node.id) as Operacao; sinalizaOperador(); } function sinalizaOperador() { if (operador == null) { return ; } try { op1 = Double.parseDouble(textoDisplay); operacaoSinalizada = true; } catch (nfe: NumberFormatException) { operador = null; } } public function onMouseClickedBotaoPonto(e: MouseEvent): Void { if (not isDecimal) { isDecimal = true; if (textoDisplay.equals("")) { textoDisplay = "0"; } textoDisplay += "."; } } function reiniciar() { isDecimal = true; operador = null; } public function onMouseClickedBotaoIgual(e: MouseEvent): Void { if (operador == null) { return ; } try { op2 = Double.parseDouble(textoDisplay); } catch (nfe: NumberFormatException) { operador = null; return ; } textoDisplay = "{calcula()}"; reiniciar(); } }
package gui; import entidade.Contato; import javafx.scene.control.TextBox; import javafx.scene.layout.VBox; import javafx.scene.layout.HBox; import javafx.scene.control.Label; import javafx.scene.layout.Panel; import javafx.geometry.HPos; import javafx.scene.control.Button; import java.lang.NumberFormatException; import javafx.stage.Alert; import javafx.scene.layout.LayoutInfo; import javafx.geometry.VPos; import javafx.scene.text.Font; import javafx.scene.text.FontWeight; def larguraBotao = 70; public class ManutencaoContatoView extends AgendaView { public var contato: Contato on replace { inicializaTela(); } var tfNome: TextBox; var tfDdd: TextBox; var tfTelefone: TextBox; function inicializaTela() { tfNome.text = "{contato.nome}"; tfDdd.text = "{contato.ddd}"; tfTelefone.text = "{contato.telefone}"; } function salvar() { contato.nome = tfNome.text; try { contato.ddd = Integer.valueOf(tfDdd.text); contato.telefone = Integer.valueOf(tfTelefone.text); } catch (nfe: NumberFormatException) { Alert.inform("Erro", "Telefone Invlido"); } controller.salvar(contato);
66
} override def content = VBox { content: [ HBox { content: [ Label { layoutInfo: LayoutInfo {width: Controller.larguraTela, height: 50} text: ##[Manuteno contato]"Manuteno contato" font: Font.font("Arial", FontWeight.DEMI_BOLD, 18) hpos: HPos.CENTER } ] } Panel { layoutInfo: LayoutInfo {width: Controller.larguraTela height: 230} content: [ Label { layoutX: 8 layoutY: 4 text: ##[Nome]"Nome:" } tfNome = TextBox { layoutX: 69 layoutY: 4 text: "" columns: 14 selectOnFocus: false } Label { layoutX: 8 layoutY: 34 text: ##[Telefone]"Telefone:" } tfDdd = TextBox { layoutX: 69 layoutY: 34 text: "" columns: 2 selectOnFocus: true } tfTelefone = TextBox { layoutX: 119 layoutY: 34 text: "" columns: 8 selectOnFocus: true }
67 ] } HBox { vpos: VPos.BOTTOM spacing: 10 content: [ Button { text: ##[Salvar]"Salvar" layoutInfo: LayoutInfo {width: larguraBotao}; action: function () { salvar(); } } Button { text: ##[Cancelar]"Cancelar" layoutInfo: LayoutInfo {width: larguraBotao}; action: function () { if (Alert.question("Aviso", ##[Cancelar Operao]"Deseja realmente cancelar a operao?")) { controller.moveTelaLista(); } } } Button { text: ##[Excluir]"Excluir" layoutInfo: LayoutInfo {width: larguraBotao}; action: function () { if (controller.remover(contato)) { controller.moveTelaLista(); } } } ] } ] } }
package persistencia; import entidade.Contato; import javafx.io.Storage; import java.io.DataInputStream; import java.io.IOException; import java.io.DataOutputStream; def source: String = "Agendas"; public class BaseDeDados { var storage: Storage; public function lerTodos(): Contato[] { if (Storage.list() == null) { return null; } storage = Storage {source: source}; def is = storage.resource.openInputStream(); def dis = new DataInputStream(is); def qtdeRegistros: Integer = dis.readInt(); var contatos: Contato[] = for (i in [1..qtdeRegistros]) { Contato { id: dis.readLong() nome: dis.readUTF() ddd: dis.readInt() telefone: dis.readInt() } } try { is.close(); } catch (ex: IOException) { ex.printStackTrace(); } return contatos; } public function salvar(contatos: Contato[]) { storage = Storage {source: source};
69
def os = storage.resource.openOutputStream(true); def dos = new DataOutputStream(os); try { dos.writeInt(sizeof contatos); for (c in contatos) { dos.writeLong(c.id); dos.writeUTF(c.nome); dos.writeInt(c.ddd); dos.writeInt(c.telefone); } dos.close(); } catch (ex: IOException) { ex.printStackTrace(); } } }
70
7.6.
package integracao; import javafx.io.http.HttpRequest; import java.io.InputStream; import persistencia.AgendaDao; import javafx.data.pull.PullParser; import javafx.data.pull.Event; import entidade.Contato; import javafx.async.RunnableFuture; def urlServidor = "http://localhost:8084/servicoAgendaFX/contatos"; public class RequisicaoServidor extends RunnableFuture { public-init var agendaDao: AgendaDao; override public function run(): Void { HttpRequest { location: urlServidor onInput: function (inputStream: InputStream) { var contato: Contato; try { var parser: PullParser = PullParser { input: inputStream documentType: PullParser.XML onEvent: function (e: Event) { if (e.type == PullParser.START_ELEMENT and e.qname.name == "contato") { contato = Contato { id: Long.parseLong(e.getAttributeValue("id")) nome: e.getAttributeValue("nome") ddd: Integer.parseInt(e.getAttributeValue("ddd")) telefone: Integer.parseInt(e.getAttributeValue("telefone")) } agendaDao.salvarOuAtualizaContato(contato); } } } parser.parse(); } finally { inputStream.close(); } } }.start();
71 } }
72 8. ANEXOS
Palavras reservadas abstract after and as assert at attribute before bind bound break catch class continue def delete else exclusive extends false finally first for from into inverse last lazy mod new not null on or override package postinit private protected public-init public public-read replace return reverse sizeof static step this throw trigger true try tween typeof var where while with this throw trigger true try tween typeof var where while with this throw