A velocidade com que Java foi adotada pela comunidade cientfica realmente impressionante. Desde o seu lanamento em 1995, ela teve adeso mais rpida que qualquer outra linguagem de programao j inventada. Java foi desenvolvida pela empresa Sun Microsystems, a qual foi adquirida pela Oracle (ORACLE, 2010) no ano de 2009, em um grande processo de compra. Java foi criada como parte integrante de um projeto idealizado pela Sun (projeto Gree), que consistia no desenvolvimento de dispositivos eletrnicos que pudessem se comunicar facilmente uns com os outros. Como o mercado desses dispositivos, para consumidores finais, no se desenvolvia to rapidamente como a Sun havia previsto, o projeto Gree no obteve o sucesso esperado e a linguagem Java quase sucumbiu ao desuso. No entanto, surgia algo novo no mundo da informtica que mudaria o comportamento do planeta, a Internet. Com a criao, em 1993, do primeiro web browser e das pginas HTML estticas, a Sun vislumbrou a possibilidade de aplicar Java ao desenvolvimento de pginas web dinmicas. Tal dinamismo foi possvel com os applets (DEITEL e DEITEL, 2003). Inicialmente sendo aplicada web e tendo como grande diferencial a possibilidade de se escrever programas de computador que podem funcionar em qualquer plataforma de hardware ou SO (sistema operacional), Java se desenvolveu e tornou-se uma linguagem de programao de propsito geral 2
que juntamente com suas ferramentas para desenvolvimento e execuo de software, considerada, atualmente, como uma plataforma de computao.
1. Java Web x Desktop
H muitos anos Java ganha espao no desenvolvimento de aplicaes web. Essa inclinao para programao Internet no caracterstica particular dos desenvolvedores Java, mas sim uma tendncia praticada pela comunidade de desenvolvedores de software do mundo inteiro, inclusive com a migrao de sistemas desktop para plataforma web. Tal escolha se justifica, em grande parte, pela facilidade de distribuio dos sistemas web: muito simples distribuir uma aplicao Internet, uma vez que ela tenha sido disponibilizada em rede, por meio de um servidor web, basta acess-la atravs de um browser. Dessa maneira, mesmo grandes empresas que possuem filiais geograficamente distantes umas das outras, podem implantar e distribuir seus sistemas de computador com reduo expressiva nos custos. Tal facilidade de distribuio tornou-se tambm disponvel para sistemas desktop. Atualmente possvel instalar apenas uma cpia do software desktop em um servidor de aplicaes e torn-la disponvel atravs de um endereo que aponta para o programa no servidor. O Java Web Start (ORACLE, 2011) um exemplo de tecnologia gratuita que implementa essa facilidade. Diferentemente da crescente utilizao de Java para programao web, sua aplicao no desenvolvimento desktop no conseguia ganhar fora, nos primeiros anos aps o lanamento da linguagem. Desconsiderando a tendncia de desenvolver tudo em tecnologia web, h dois principais motivos que fizeram com que o uso de Java para programao desktop fosse atrasado:
1) Problemas de desempenho: Java reconhecidamente mais lenta que linguagens de programao compiladas. A principal causa da reduo no desempenho a natureza interpretativa da execuo de programas Java pela JVM (Java Virtual Machine). Outro fator considervel que Java no utilizar API (Application Programming Interface) fornecidas 3
pelos SO, ou seja, essa linguagem implementa muito do que poderia ser aproveitado. No entanto, esses dois principais fatores que torna mais lenta so inerentes garantia de sua portabilidade entre diferentes plataformas de hardware e SO. Porm, a reduo de desempenho foi superada atravs do aperfeioamento de Java, nas verses subsequentes; e, pelo advento de computadores mais rpidos que no so mais afetados pelo atraso causado na interpretao dos bytecodes do cdigo Java na JVM.
2) Improdutividade no desenho de telas para programas desktop: no havia ferramentas para auxiliar os desenvolvedores na criao de telas desktop. Isso tornava a programao bastante improdutiva. Esse problema tambm foi resolvido com o advento de IDE (Integrated Development Environment) que possibilitam ao desenvolvedor construir a interface grfica de sistemas desktop sem a necessidade de escrever cdigo. Ou seja, todo trabalho pesado feito pelo IDE. Atualmente dois IDE se destacam: o Netbeans (NETBEANS, 2010) e o Eclipse (ECLIPSE, 2010), nesse ltimo necessrio instalar plugins que adicionam a funcionalidade de desenho de telas desktop.
A tendncia da programao web gerou um certo modismo que ganhou mais e mais adeptos despreocupados em analisar as vantagens, desvantagens e reais necessidades de utilizao de tecnologias web em detrimento de desktop. Isso causou as migraes desenfreadas de aplicaes desktop para web. Entretanto, h cerca de alguns anos a comunidade comeou a perceber que aplicativos web podem sofrer muitas limitaes, por exemplo, reduo no desempenho, usabilidade, segurana, etc. Outra questo desfavorvel est relacionada necessidade de construo de GUI (Graphical User Interface) cada vez mais complexas; tal tarefa pode ser extremamente trabalhosa e improdutiva, alm de gerar cdigo difcil de ser mantido e aplicativos com interfaces grficas de qualidade inferior. Nesse sentido, surge uma viso racional que preza por aplicar determinada tecnologia em conformidade com as reais necessidades. Assim, atenes comeam a se voltar para produo de 4
idias relacionadas programao desktop. Mas, como tudo na informtica ocorre muito rpido, o tempo da moda web foi longo e o mundo Java carece de avanos na programao desktop.
2. Persistncia em Bancos de Dados com Java
Existem muitas alternativas para persistncia de dados de programas Java em bancos de dados relacionais e objeto-relacionais. Mas todas elas tm como base a API JDBC (Java DataBase Connectivity). Programar diretamente com JDBC possibilita desenvolver cdigo perfeitamente ajustado s caractersticas do SGBD (Sistema de Gerenciamento de Banco de Dados) no qual persistem os dados da aplicao. Isso garante aumento expressivo no desempenho do sistema. Entretanto, desenvolver dessa maneira significa escrever muitas linhas de cdigo, responsveis apenas pela persistncia dos dados, as quais ficam misturadas lgica do negcio. Essa estratgia pode se refletir em menor inteligibilidade do cdigo e maior esforo para escrev-lo. Isso pode gerar vrios aspectos indesejveis de engenharia de software como, por exemplo, menor produtividade; maior tempo de desenvolvimento; maiores custos; dificuldades de manutenabilidade, interoperabilidade, portabilidade e reutilizao. A API JDBC ocupa o nvel fundamental de persistncia Java em bancos de dados relacionais e objeto-relacionais. Alternativa mais elegante seria utilizar um framework ORM (Object Relctional Mapping). Frameworks ORM realizam, de forma transparente, o mapeamento entre modelos de classes de uma linguagem OO (Orientada a Objeto) para o modelo tabular dos bancos de dados relacionais e objeto-relacionais (HIBERNATE, 2010). Dessa maneira, o desenvolvedor programa em uma linguagem OO e manipula dados em tabelas como se estivesse manipulando dados armazenados em um banco de dados OO. Escrever cdigo dessa maneira pode resultar em sistemas perfeitamente coerentes com o paradigma da programao OO e com os aspectos desejveis de engenharia de software, j citados anteriormente. No entanto, o preo a ser pago pode ser bastante caro. Sendo essa uma das formas de manipulao de 5
dados mais complexas, ela termina por inserir completa infra-estrutura de persistncia aplicao. Algo indesejvel quando se est interessado em desenvolver sistemas pequenos e de mdio porte. Para trabalhar com um framework ORM pode ser necessrio lidar com regras especficas e, algumas vezes, no padronizadas, por exemplo, linguagens especficas para consulta de dados. No contexto da persistncia de dados possvel observar uma lacuna, na qual o desenvolvimento de pequenos e mdios aplicativos encontra-se, de certo modo prejudicado, j que dever lidar diretamente com a API JDBC ou empregar infra-estruturas, em alguns casos, maiores que a aplicao que est sendo desenvolvida.
3. JDB (Java Desktop Basis)
Diante da carncia de idias voltadas para programao Java desktop e da lacuna encontrada na persistncia desses sistemas em bancos de dados relacionais e objeto-relacionais, torna-se importante produzir tecnologias que ajudem a mitigar as faltas evidenciadas. Contudo, tais produes devem est alinhadas s necessidades da mdia dos desenvolvedores de software: desenvolver de forma produtiva com garantia de manutenabilidade; construir aplicativos que sejam portveis e interoperveis, a final ningum deseja ficar preso determinada tecnologia; integrar seus sistemas com componentes GUI que possam manipular os dados no SGBD sem a necessidade de muitos esforos de programao, pois de nada adianta possuir uma camada de persistncia que esteja em conformidade com os bons aspectos de engenharia de software, se h falta na integrao com componentes visuais; esforos descomunais podem se concentrar nesse ltimo aspecto. Perante as necessidades apresentadas ressalta-se a importncia do Framework JDB como alternativa a ser considerada na persistncia de dados de aplicaes Java desktop. O JDB foi concebido para atuar de forma genrica e permitir a interao com SGBD relacionais e objeto-relacionais, exigindo pouco esforo de programao. Esse Framework faz uso de JDBC, no entanto, 6
livra o desenvolvedor dos aspectos cansativos e repetitivos do uso daquela API. O JDB tambm estende componentes GUI swing, que proporcionam perfeita integrao do aplicativo com o SGBD, permitindo que o usurio interaja, de forma natural, com os dados armazenados no banco de dados. Tudo isso possvel com pouco esforo de programao e grande reduo na quantidade de cdigo a ser escrita. Dessa maneira, JDB permite que o desenvolvedor esteja livre para se concentrar na lgica de domnio de negcio da aplicao. Com o Framework JDB no h necessidade de seguir regras especficas, como aquelas impostas pelas pesadas infra-estruturas que se comprometem a resolver grande variedade de problemas. JDB bastante leve e permite portabilidade (aplicativos funcionaro em qualquer plataforma de SO que tenham JVM instalada) e interoperabilidade (podero interagir com qualquer SGBD relacional ou objeto-relacional que disponibilize driver JDBC). JDB no depende de IDE, dessa maneira possvel desenvolver software usando apenas o Framework JDB, um editor de texto e o JDK (Java SE Development Kit). Entretanto, JDB permite aproveitar as vantagens do IDE Netbeans para um desenvolvimento ainda mais produtivo.
4. Estrutura do JDB
O Framework JDB constitudo por classes e componentes JavaBeans esses componentes so classificados em Essenciais e de Controle. Os componentes Essenciais so invisveis, ou seja, trabalham em segundo plano realizando funes bsicas para interao da aplicao com o SGBD. J os de Controle so componentes visuais para a construo da interface grfica do usurio. Esses ltimos so extenses dos componentes swing de Java. Para saber mais sobre JavaBeans voc poder consultar o captulo adicional sobre o assunto em (DEITEL e DEITEL, 2003). No contexto do paradigma da programao OO e em engenharia de software o termo componente de software definido como uma ou mais classes colaborativas que disponibilizam funcionalidades para os programadores atravs de interfaces. Os componentes do Framework JDB no 7
definem interfaces, eles so classes construdas conforme a definio de componentes JavaBeans. Assim, sero representados como classes ou objetos de classes. O Framework JDB disponibilizado atravs do arquivo JDB.jar, o qual pode ser encontrado no site www.jdbframework.com. Para usar o JDB o desenvolvedor dever inclu-lo no classpath do Java e importar as classes dos componentes que deseja usar, no interior do cdigo fonte do programa. A Figura 1 representa o diagrama de objetos de uma aplicao de software usando os componentes Essenciais do Framework JDB. No diagrama so evidenciadas as dependncias atravs das linhas tracejadas, como pode ser visto na linha partindo de Aplicao at o objeto do tipo JDBQuery, a qual indica que Aplicao tem uma referncia para um JDBQuery. Tambm possvel observar que os objetos do tipo JDBQuery, JDBUpdate, JDBUpdateTransaction e JDBMetaData dependem do JDBConnection. Essas dependncias sero melhor explicadas no livro sobre JDB que ser publicado em breve. A Tabela 1 completa a Figura 1 apresentando os tipos dos componentes, seus pacotes e breves descries de suas funcionalidades.
Figura 1 Diagrama de objetos dos componentes Essenciais do JDB e suas dependncias.
8
Componente JDB (Pacote) Descrio JDBConnection (lib.jdb.connection) Realizar conexo com o banco de dados. JDBQuery (lib.jdb.jdbquery) Realiza consultas ao banco de dados. Tambm permite alteraes, inseres e excluses (operaes CRUD). JDBUpdate (lib.jdb.jdbupdate) Permite enviar qualquer bloco de comandos aceito pelo banco de dados e suportados pelo driver JDBC do banco de dados. JDBUpdateTransaction (lib.jdb. jdbupdatetransaction) um JDBUpdate preparado para trabalhar com transaes de bancos de dados. JDBMetaData (lib.jdb.jdbmetadata) Obtm informaes do esquema do banco de dados. JDBSQLRepository (lib.jdb.jdbsqlrepository) Permite associar um caminho de diretrio, no qual sero armazenadas as declaraes SQL, em formato texto. Isso evita ter que inserir o SQL no interior do cdigo da Aplicao. O uso desse componente opcional. Tabela 1 Descrio dos componentes Essenciais do JDB.
A Figura 2 apresenta as dependncias entre os componentes de Controle. possvel perceber que Aplicao tem referncias para todos os componentes visuais. Tambm possvel verificar que todos os componentes de Controle tm uma referncia para o componente do tipo JDBQuery. Essa ltima necessria para que os componentes visuais possam interagir com os dados no SGBD. A Tabela 2 exibe informaes sobre cada componente de controle. Os relacionamentos de dependncia entre os componentes JDB podem ser configurados atravs de propriedades, na paleta de propriedades de cada componente no IDE Netbeans ou no prprio cdigo da aplicao atravs de mtodos set.
9
Figura 2 Diagrama de objetos dos componentes de Controle do JDB e suas dependncias.
Componente JDB (Pacote) Descrio JDBButtonCancel (lib.jdb.control.jdbbuttoncancel) um JButton aperfeioado para permitir o cancelamento de uma operao de insero ou alterao. JDBButtonDelete (lib.jdb.control.jdbbuttondelete) um JButton aperfeioado para permitir excluso de dados. JDBButtonFirst (lib.jdb.control.jdbbuttonfirst) um JButton aperfeioado para permitir apontar para o primeiro registro de um conjunto de registros trazidos do banco de dados por uma consulta. JDBButtonLast (lib.jdb.control.jdbbuttonlast) um JButton aperfeioado para permitir apontar para o ltimo registro de um conjunto de registros trazidos do banco de dados por uma consulta. JDBButtonNew (lib.jdb.control.jdbbuttonnew) um JButton aperfeioado para colocar o JDBQuery no estado de insero. JDBButtonNext (lib.jdb.control.jdbbuttonnext) um JButton aperfeioado para permitir apontar para o prximo registro de um conjunto de registros trazidos do banco de 10
dados por uma consulta. JDBButtonPrevious (lib.jdb.control.jdbbuttonprevious) um JButton aperfeioado para permitir apontar para o registro anterior de um conjunto de registros trazidos do banco de dados por uma consulta. JDBButtonRefresh (lib.jdb.control.jdbbuttonrefresh) um JButton aperfeioado para permitir executar uma consulta no banco de dados, previamente definida no JDBQuery. JDBButtonSave (lib.jdb.control.jdbbuttonsave) um JButton aperfeioado para permitir executar operaes de salvar inseres ou alteraes de dados. JDBPanelButton (lib.jdb.control.jdbpanelbutton) um painel contendo todos os JDBButtons. JDBLableMonitor (lib.jdb.control.jdblablemonitor) um JLabel aperfeioado para exibir o estado do JDBQuery. O qual poder ser um dos seguintes: editing (quando estiver alterando algum registro), inserting (quando estiver inserindo um registro), enabled (quando no estiver em um dos estados anteriores). JDBCheckBox (lib.jdb.control.jdbcheckbox) um JCheckBox aperfeioado para interagir com dados boolean. JDBComboBox (lib.jdb.control.jdbcombobox) um JComboBox aperfeioado para interagir com campos determinados de tabelas no banco de dados. JDBListComboBox (lib.jdb.control.jdblistcombobox) um JComboBox aperfeioado para listar dados de uma tabela do banco de dados. JDBLookUpComboBox (lib.jdb.control.jdblookupcombobox) um JComboBox aperfeioado para listar dados de uma tabela e permitir alterar ou inserir esses dados em uma outra tabela. Esse componente permite implementar relacionamentos entre tabelas. JDBLookUpField (lib.jdb.control.jdblookupfield) Adiciona um campo de lookup a um JDBTable. Realiza funcionalidade semelhante ao JDBLookUpComboBox. No entanto, faz isso no interior de uma clula do JDBTable. JDBTable (lib.jdb.control.jdbtable) um JTable aperfeioado para listar dados de uma consulta ao banco de dados e tambm permitir alteraes ou inseres de novos registros. JDBTextArea (lib.jdb.control.jdbtextarea) um JTextArea aperfeioado para possibilitar a interao com campos do tipo text. JDBTextField (lib.jdb.control.jdbtextfield) um JTextField aperfeioado para possibilitar a interao com campos de tabelas. JDBImage (lib.jdb.control.jdbimage) Permite exibir imagens armazenadas em campos to tipo BLOB. Tabela 2 Descrio dos componentes de Controle do JDB.
11
5. Aplicao do JDB sem Utilizao de IDE
Para demonstrar a aplicao do JDB, sem o uso de IDE, ser criado um simples programa para manipular dados da tabela CadastroVeiculo do banco de dados DBCadastroVeiculo no SGBD MySQL (MYSQL, 2010). Para demonstrao do uso do JDB em conjunto com o IDE Netbeans o leitor poder investigar os tutoriais disponveis em http://www.jdbframework.com. A Listagem 1 mostra o script para criao do banco de dados. A Listagem 2 apresenta o arquivo CadastroVeiculo.java que contm o cdigo fonte do programa. No exemplo desse artigo o arquivo CadastroVeiculo.java ser armazenado no seguinte diretrio C:\cadastro_veiculo\ O interior desse diretrio tambm dever conter o driver JDBC de conexo com o banco de dados MySQL, disponvel no arquivo mysql-connector-java-5.1.6- bin.jar (caso deseje o leitor poder baixar um driver JDBC MySQL mais atual) e o Framework JDB, disponvel no arquivo JDB.jar (veja a Figura 4).
1 CREATE DATABASE DBCadastroVeiculo; 2 3 CREATE TABLE DBCadastroVeiculo.CadastroVeiculo ( 4 id int(11) NOT NULL AUTO_INCREMENT, 5 veiculo varchar(40) NOT NULL, 6 ano int(11) NOT NULL, 7 valor double NOT NULL, 8 PRIMARY KEY (id) 9 ); Listagem 1 Script para gerar o banco de dados DBCadastroVeiculo.
Para gerar os bytecodes do cdigo fonte exibido na Listagem 2 necessrio acessar o interpretador de comandos do SO (nesse exemplo ser usado o Windows 7) e entrar com o comando apresentado na Figura 3.
Figura 3 Gerando os bytecodes do software.
14
Ao executar o comando a estrutura de diretrio e arquivos do seu programa conter um novo arquivo denominado CadastroVeiculo.class (veja a Figura 4). Esse arquivo contm os bytecodes do programa Java.
Figura 4 rvore de diretrio e arquivos do software aps gerar bytecodes.
Aps gerar os bytecodes possvel rodar o software. Ento, ainda no interpretador de comandos necessrio entrar com o comando exibido na Figura 5.
Figura 5 Rodando o Software.
15
6. Consideraes Finais
importante que leitor esteja ciente que nenhuma tecnologia, mtodo ou processo deve ser considerado como absoluto. Tudo tem sua aplicabilidade, portanto, JDB no se impe como a melhor alternativa a resoluo dos problemas da comunidade de software, mas sim como uma alternativa que se alinha grande parcela das necessidades do desenvolvimento desktop, levando em considerao que o grande peso do mercado de software se concentra nas aplicaes pequenas e de mdio porte.
7. Referncias
DEITEL, H. M.; DEITEL, P. J. Java Como Programar. Traduo de Carlos Arthur Lang Lisba. 4. ed. Porto Alegre: Bookman, 2003. 1386 p. ECLIPSE. IDE Eclipse. Eclipse.org, 2010. Disponivel em: <http://eclipse.org>. Acesso em: 18 out. 2010. HIBERNATE. Framework Hibernate. Hibernate.org, 2010. Disponivel em: <http://www.hibernate.org>. Acesso em: 5 out. 2010. MYSQL. MySQL database. MySQL Downloads, 2010. Disponivel em: <www.mysql.com/downloads/>. Acesso em: 10 dez. 2010. NETBEANS. IDE Netbeans. Netbeans.org, 2010. Disponivel em: <http://netbeans.org/>. Acesso em: 18 out. 2010. ORACLE. Oracle Technology Network. Java SE Downloads, 2010. Disponivel em: <http://www.oracle.com/technetwork/java/javase/downloads/index.html>. Acesso em: 19 dez. 2010. ORACLE. Java Web Start. Java Web Start Lesson, 2011. Disponivel em: <http://download.oracle.com/javase/tutorial/deployment/webstart/index.html>. Acesso em: 30 jun. 2011.