Академический Документы
Профессиональный Документы
Культура Документы
Computação
Sérgio Luís Pedron *
Carlos Henrique Gremelmeier **
Resumo: Este trabalho estuda a linguagem de programação Java, suas características, recursos, e o modo como acessa e
manipula informações armazenadas em um banco de dados relacional. É pesquisada a biblioteca de funções JDBC – Java
DataBase Connectivity que possui os métodos necessários para efetuar a conexão com o banco de dados e a manipulação
das informações nele armazenadas, através de comandos SQL.
Utilizando os recursos de Java, será possível desenvolver aplicações independentes de plataforma e de fornecedor,
acessando um banco de dados corporativo.
Palavras Chaves: Java, Aplicação Independência de Plataforma, Banco de Dados.
Abstract: This work aims to study programming in Java’s language, its features, resources and the way that the Information
are accessed, manipulated and stored on a relational Database with Java. A function library of JDBC is researched – Java
Database Connectivity - that have the necessary methods to make the connection with the database and manipulate the
information through SQL commands. Using the resources of Java, is possible to develop applications independent of
plataform and supplier, acessing a corporate database.
Keywords: Java, Plataform Independent Aplications, Database.
1 Introdução
Em tempos onde o bem mais precioso é a informação rápida e precisa, a informática torna-se a principal ferramenta para o
armazenamento e o acesso aos dados necessários para qualquer processo de tomada de decisões. A democratização do acesso à
informação vem se consolidando ao longo do tempo, aumentando o número de usuários e aplicações que acessam um mesmo dado. Isto
é observado desde o momento em que os sistemas legados passaram a ser substituídos pelos sistemas Cliente/Servidor.
Não é mais admissível que apenas um programa ou linguagem de programação acesse um conjunto de dados. Atendendo a este
requisito, as corporações estão convertendo seus arquivos legados para aplicações em sistemas gerenciadores de bancos de dados, que
podem ser acessados por diversos meios e por diferentes linguagens de programação, utilizando-se da arquitetura Cliente/Servidor.
Os componentes básicos de uma arquitetura Cliente/Servidor são uma parte cliente e outra parte servidor, conectados por uma rede local.
O software localizado no cliente é normalmente chamado de software front-end, e o software localizado no servidor é chamado de
software back-end.
Um sistema gerenciador de banco de dados relacional (SGBDR) é um software de back-end, que se ocupa unicamente das atividades
diretamente relacionadas aos dados que ele contém, como segurança, integridade, otimização, recuperação e atualização dos dados,
entre outras. Um SGBDR pode ser acessado por software cliente, utilizando SQL, uma linguagem não procedimental usada para definição
de dados, consultas, controle de acesso e manipulação dos dados.
A evolução das linguagens de programação está permitindo a construção de aplicativos front-end de alta qualidade em um curto intervalo
de tempo. Entre essas ferramentas para desenvolvimento front-end, encontra-se Java, uma linguagem de programação utilizada em
sistemas Cliente/Servidor, e em aplicações para Internet ou Intranet. Java é uma linguagem de desenvolvimento de aplicativos simples,
genérica, orientada a objetos, robusta e segura. Através de sua máquina virtual (Java Virtual Machine) portátil, java resolve o problema
interplataforma, fazendo com que os aplicativos possam ser executados em qualquer plataforma. Se a aplicação estiver na Internet ou em
uma Intranet, o software front-end não precisa estar instalado na máquina cliente. Ele é carregado e executado na máquina local apenas
quando sua utilização for necessária, podendo estar armazenado em qualquer servidor da rede. Desta forma é possível romper as
barreiras da arquitetura Cliente/Servidor e dar maior flexibilidade aos aplicativos.
file://\\76.12.86.138\Drawloop Data\Site Data\Output\darlanpenedo@bol.com.br_utilizacao.htm.html
A conexão de um aplicativo front-end ou uma applet escrita em Java com um banco de dados relacional , é realizada através do JDBC
(Java DataBase Connectivity) utilizando SQL. O JDBC é um padrão para acesso a bancos de dados SQL. Sua API representa uma
interface uniforme para que programadores JAVA desenvolvam aplicativos para acessar uma ampla variedade de bancos de dados
relacionais.
2 Características
Segundo a Sun, Java foi estruturado para ser: "Orientado a objetos, robusto, seguro, independente de arquitetura, portável, de alto
desempenho, interpretável, com linhas de execução (threads) e dinâmico."
Java se tornou mais simples pois retirou de sua sintaxe algumas características presentes no C++, como arquivos de cabeçalho,
aritmética de ponteiros, estruturas, uniões, etc. Algumas destas características são confusas e podem ocasionar problemas na execução
de um aplicativo, se o programador não tiver pleno conhecimento do que está fazendo.
Aplicativos escritos em Java são mais robustos, pois a linguagem impõem mais restrições ao programador. A presença de coleta
automática de lixo, evita erros comuns que os programadores cometem quando são obrigados a gerenciar diretamente a memória. A
eliminação do uso de ponteiros, em favor do uso de vetores, objetos e outras estruturas substitutivas traz benefícios em termos de
segurança. O programador é proibido de acessar a memória que não pertence ao seu programa, além de não ter chances de cometer
erros comuns tais como uso indevido de aritmética de ponteiros. O mecanismos de tratamento de exceções também torna as aplicações
mais robustas, não permitindo que elas abortem, mesmo quando rodando sob condições anormais.
Como Java foi criado para ambientes de rede, os recursos de segurança receberam muita atenção. Um programa Java não corrompe a
memória fora de seu próprio processo, não lê nem escreve em arquivos locais quando é chamado em um carregador de classes seguro
como um browser Web, e evita erros de stack overflow.
Um programa fonte escrito em linguagem Java é traduzido pelo compilador para os bytecodes, isto é, o código de máquina de um
processador virtual, chamado Java Virtual Machine (JVM). A JVM é um programa capaz de interpretar os bytecodes produzidos pelo
compilador, fazendo com que um programa Java possa ser executado em qualquer plataforma, desde que esteja dotada de uma JVM. A
vantagem desta técnica é evidente: garantir uma maior portabilidade para os programas Java em código-fonte e compilados.
Java também tira proveito dos padrões IEEE para os tipos de dados comuns em vários tipos de computadores. Por exemplo, em Java
uma estrutura de dados float sempre estará de acordo com o padrão IEEE 754 para números de ponto flutuante, enquanto o tipo de dado
int será sempre um inteiro de 32 bits com complemento de dois sinalizado.
O interpretador de Java pode executar os bytecodes do Java diretamente em qualquer máquina para o qual o interpretador tenha sido
transportado. Esta é uma vantagem enquanto desenvolvemos uma aplicação, mas ela é claramente mais lenta que um código compilado.
A vantagem é que ela diminui a preocupação dos desenvolvedores com problemas de versões erradas, comuns na maioria dos ambientes
de desenvolvimento. Compiladores específicos para Java não estão disponíveis. Ao invés disso, há compiladores Just-in-Time (JIT). Eles
trabalham compilando uma vez os bytecodes em código nativo. Em seguida lêem o resultado e repetem a compilação caso necessário.
Ainda que mais lento que compiladores nativos, os compiladores Just-in-Time podem aumentar de 10 a 20 vezes a velocidade de muitos
programas e são quase sempre significativamente mais rápidos que o interpretador Java.
Outra característica da linguagem, é a mutithread, onde um programa pode fazer mais de uma coisa ao mesmo tempo, como por exemplo,
gravar um arquivo e imprimir outro.
De diversas maneiras, Java é uma linguagem mais dinâmica do que C ou C++. Ela foi projetada para adaptar-se a um ambiente em
evolução. As bibliotecas podem adicionar livremente novos métodos e variáveis de instância sem qualquer efeito sobre seus clientes. Em
Java, a descoberta do tipo de dado em tempo de execução é imediata. Esta é uma característica importante nas situações em que o
código precisa ser adicionado a um programa em execução. Um exemplo é o código que é transferido da Internet para ser executado no
browser.
Para a construção de interfaces gráficas, Java possui uma biblioteca de classes para a programação básica da GUI (Interface Gráfica do
Usuário) chamada Abstract Window Toolkit ou AWT (Guia de ferramentas de janelas abstratas). A AWT é um tanto primitiva, pouco
documentada e sem muito poder. Porém, ela independe de plataforma, pois aceita apenas as funções comuns a todos os sistemas de
janelas. Todos os objetos presentas na maioria dos sistemas de janelas podem ser colocados em uma interface gráfica construída com a
AWT: botões, entradas de texto, labels, frames, caixas de verificação, listagens drop-down, menus, etc.
Sem dúvida o maior incremento à programação Java, é a possibilidade de acesso a bancos de dados relacionais, juntamente com sua
independência de plataforma. Programas desenvolvidos em Java, são independentes de plataforma e de fornecedor. O mesmo programa
de banco de dados desenvolvido com Java pode rodar em um PC, uma estação de trabalho ou um terminal de Java ("NC – network
file://\\76.12.86.138\Drawloop Data\Site Data\Output\darlanpenedo@bol.com.br_utilizacao.htm.html
computer"). É possível mover os dados de um banco de dados a outro, por exemplo do Microsoft SQL Server ao Oracle, e ainda assim o
programa lerá os dados. Para atender a estes requisitos, a primeira biblioteca que a Sun forneceu após o Java Development Kit (JDK), foi
o Java DataBase Connectivity (JDBC).
3.1 JDBC
Para entender melhor o funcionamento do JDBC, é necessário saber os princípios básicos do ODBC, que deu origem ao JDBC.
A ODBC é uma API que permite aos programas em C fazer chamadas no servidor SQL e receber seus resultados. ODBC significa Open
Database Connectivity. É uma especificação de interface para acesso a dados, estabelecida por grupos de padronização como X/Open e
SQL Access Group. Essa especificação provê funções para conectar e desconectar fontes de dados, preparar e executar comandos,
processar erros e processar transações. Para executar as consultas SQL, basta passá-las como parâmetros em funções específicas do
ODBC, ou seja, a consulta pode ser definida em tempo de execução(SQL Dinâmico), utilizando características próprias do banco ao qual a
aplicação está conectada no momento.
A interface ODBC, permite que os programas sejam escritos sem que se tenha qualquer preocupação com protocolos específicos de
comunicação dos bancos de dados, é necessário apenas criar as consultas SQL e executar as funções do ODBC, de forma a criar e
terminar uma conexão, realizar consultas, e tratar os resultados.
JDBC é uma API(Biblioteca de funções) da Linguagem Java, que permite uma conexão genérica com diferentes tipos de banco de dados
de forma idêntica a interface ODBC. Com JDBC, os programadores podem escrever comandos SQL de forma única para tipos de banco
de dados totalmente diferentes, sendo que os fabricantes dos bancos devem prover o Driver de JDBC para seus produtos.
A idéia por trás do JDBC é criar suporte para utilização do SQL padrão em Java. Assim como é feito com o ODBC, pode-se passar
comandos em forma de string para o driver do banco de dados e receber deste os resultados de forma que toda a operação seja
transparente ao programador. Este precisa apenas processar os comandos SQL e receber os seus resultados, ficando toda
particularidade do banco, gerenciada pelo driver do fabricante e comandada pelas rotinas internas do JDBC. O programador precisa saber
apenas SQL e as rotinas de Java para executar comandos SQL a partir do JDBC.
Para fazer a conexão de um programa Java com um banco de dados, é necessário a instalação de um driver que se comunique com o
JDBC no lado cliente, e possa se comunicar no dialeto do banco no lado servidor. Este driver traduz os comandos JDBC para comandos
nativos do banco de dados do fabricante. Caso o fornecedor do banco de dados ainda não tenha disponibilizado um driver escrito em Java
para acessar o banco, será necessário utilizar uma ponte entre o JDBC e o ODBC, já que existem drivers de ODBC para a maioria dos
bancos de dados.
A ponte JDBC-ODBC converte chamadas JDBC em chamadas ODBC. Assim, ela permite que o JDBC comunique-se com um driver
ODBC servindo como front-end de um banco de dados.
Para realizar a conexão, é preciso informar ao gerenciador de drivers JDBC, quais drivers estarão disponíveis. Quando utilizada a ponte
JDBC-ODBC, o registro é feito da seguinte forma:
Class.forName("jdbc.odbc.JdbcOdbcDriver");
Para registrar um driver JDBC, utilize a seguinte sintaxe:
DriverManager.registerDriver(new
Oracle.jdbc.driver.OracleDriver());
Após registrar os drivers, já é possível iniciar uma conexão com o banco de dados, especificando a origem dos dados com alguns
parâmetros adicionais. Esta origem é especificada utilizando uma sintaxe similar às URLs normais de rede. A conexão é feita por
DriverManager.getConnection(). Ele analisa o URL e pergunta a cada um dos drivers registrados, se são ou não capazes de lidar com ele.
Se encontrar um driver adequado, então faz a conexão, caso contrário lança uma exceção. A sintaxe para uma URL da ponte JDBC-
ODBC é a seguinte:
String url= "jdbc:odbc:FonteDados";
String user = "Sergio";
String password = "luis";
Connection con =
file://\\76.12.86.138\Drawloop Data\Site Data\Output\darlanpenedo@bol.com.br_utilizacao.htm.html
driverManager.getConnection(url, user, password);
A conexão com um driver JDBC escrito em Java é feito da seguinte forma:
Connection con =
A formação da URL varia de acordo com cada driver.
JDBC fornece um método para enviar instruções de atualização. O Objeto Statement, que é fornecido pelo objeto Connection, provê um
método executeUpdate(). Para executá-lo, é preciso obter antes um objeto Statement, através de um objeto Connection já instanciado.
Ex.:
Connection con =
DriverManager.getConnection(url, user, password);
Statement Stmt =
con.createStatement();
Em seguida é possível emitir qualquer instrução de atualização através do método executeUpdate do objeto Stmt da classe Statement.
Ex.:
Stmt.executeUpdate("CREATE TABLE
Clientes
( CLI_CODI NUMBER(5,0) PRIMARY KEY,
CLI_NOME VARCHAR(50) NOT NULL,
CLI_CIDA NUMBER(5,0) NOT NULL,
FOREIGN KEY (CLI_CIDA) REFERENCES
Cidades ");
Stmt.executeUpdate( "INSERT INTO
Cidades(CID_CODI, CID_DESC,CID_UF)
VALUES(1, ‘Erechim’,’RS’)" );
3.1.3 Consultas
O método utilizado para realizar uma consulta é o executeQuery(), que se assemelha muito ao executeUpdate(), exceto pelo valor
retornado. De forma diferente de executeUpdate(), o método executeQuery() retorna um objeto ResultSet. Ex.:
Connection con =
DriverManager.getConnection(url,
file://\\76.12.86.138\Drawloop Data\Site Data\Output\darlanpenedo@bol.com.br_utilizacao.htm.html
user, password);
Statement Stmt =
con.createStatement();
ResultSet rs =
Stmt.executeQuery("SELECT CLI_CODI,
Para buscar a primeira linha da consulta, utiliza-se o método next().
rs.next();
While (rs.next()) {
int Codigo =
rs.getString("CLI_CODI");
String Nome =
rs.getString("CLI_NOME");
System.out.println(Codigo + " "
+ Nome);
Não é permitido ler mais de uma vez um campo da mesma linha. É preciso armazenar o conteúdo em uma variável ou objeto para ser
utilizado posteriormente.
Também é possivel utilizar instruções preparadas, que são uma característica avançada dos drivers de JDBC para servidores de bancos
de dados, tais como: Sysbase, SQL Server, Ingres, Informix, Oracle, entre outros. As instruções preparadas possibilitam pré-compilar uma
instrução SQL que está freqüentemente sendo utilizada, proporcionando um melhor desempenho, pois não é necessário compilá-la a cada
vez. Também permite definir parâmetros posicionais que podem tornar o código mais legível. Sempre que o banco de dados executa uma
consulta, ele primeiramente processa uma estratégia de como executá-la de maneira eficiente. Ao preparar a consulta e reutilizá-la, essa
etapa de planejamento é feita apenas uma vez. Vale lembrar que esta estratégia utilizada pelo banco, se altera conforme a quantidade de
dados armazenados. Portanto, deve-se combinar as instruções preparadas, com outras formas de otimização do banco. Cada variável em
uma consulta preparada é indicada por um "?". Se houver mais de uma variável, um registro de posições do "?" deverá ser mantido ao
definir os valores.
String query = "SELECT
CLIENTES.CLI_NOME, CIDADES.CID_DESC
FROM CLIENTES, CIDADES
WHERE CLIENTES.CLI_CIDA =
CIDADES.CID_CODI AND
CIDADES.CID_DESC = ?";
file://\\76.12.86.138\Drawloop Data\Site Data\Output\darlanpenedo@bol.com.br_utilizacao.htm.html
PreparedStatement pstmt =
con.prepareStatement(query);
Como o objeto Statement (instrução), um objeto PreparedStatement é obtido a partir do objeto Connection.
Pstmt.setString(1, "Erechim");
O primeiro argumento é a variável a ser definida. A posição 1 denota o primeiro "?". O segundo argumento é o valor a ser atribuído a
variável.
Ao reutilizar uma consulta preparada que já foi executada, e a consulta tiver mais de uma variável, todas as variáveis permanecem prontas
com os mesmos valores, a menos que as altere com um método set. Isso significa que só é preciso chamar set para aquelas variáveis que
são alteradas de uma consulta para outra.
Uma vez que todas as variáveis estejam vinculadas aos valores, é possível executar a consulta.
ResultSet rs = Pstmt.executeQuery();
Instruções preparadas podem ser utilizadas tanto para consultas como para a linguagem de manipulação de dados, em comandos
INSERT ou UPDATE. A única diferença da consulta, é que em uma alteração ou inclusão o método a ser chamado é executeUpdate(), em
vez de executeQuery().
Procecimentos armazenados também podem ser criados e executados a partir do JDBC. A API JDBC possui um método da classe
connection, chamado CallableStatement (instrução chamável) que permite trabalhar facilmente com procedimentos armazenados que
podem ou não retornar valores.
Abaixo segue um exemplo de como criar e executar um procedimento armazenado através de Java.
// Criação do Procedimento Armazenado
String Proc = ("CREATE PROCEDURE IncluiCidade(Codi IN NUMBER,
Nome IN VARCHAR2)
UF IN CHAR)
IS BEGIN
INSERT INTO CIDADES (CID_CODI,
CID_DESC, CID_UF)
VALUES (Codi, Nome, UF);"+
END;");
stmt.executeUpdate(Proc);
// Chamada ao Procedimento
String ChamaProc = "{call IncluiCidade(?,?,?)}";
CallableStatement cstmt = con.prepareCall(ChamaProc);
cstmt.setInt(1,40);
file://\\76.12.86.138\Drawloop Data\Site Data\Output\darlanpenedo@bol.com.br_utilizacao.htm.html
cstmt.setString(2,"Erechim");
cstmt.setString(3,"RS");
cstmt.executeUpdate();
3.1.5 Metadados
O JDBC pode proporcionar informações adicionais sobre a estrutura das tabelas de um determinado banco de dados ou os nomes de
colunas e tipos de uma tabela. Em SQL, os dados que descrevem o banco de dados ou alguma de suas partes são chamados metadados.
O JDBC possui dois tipos de metadados: sobre um banco de dados e sobre um resultado de consulta. Para isso utiliza-se o método
DatabaseMetaData a partir da conexão do banco de dados. Ex.:
DatabaseMetaData md = con.getMetaData();
Para saber o nome de todas as tabelas de um banco de dados, utiliza-se o método getTables(). Ex.:
String[] types = { "TABLES" };
ResultSet rs = md.getTables("null, %, "%", types);
Esta chamada retorna um objeto ResultSet que contém informações sobre todas as tabelas.
Um objeto DatabaseMetaData, além de conter informações sobre os metadados, também possui informações a respeito do driver e do
servidor do banco de dados.
Na maior parte dos casos, applets e aplicações são desenvolvidas com um total conhecimento de seu conjunto de resultados. Porém, em
alguns casos, especialmente quando as instruções SQL tenham sido feitas de maneira improvisada ou quando for usado componentes
genéricos reutilizáveis, algumas das informações relacionadas com o conjunto de resultados podem não estar disponíveis imediatamente.
Em situações como essa, pode ser muito prático ter acesso aos metadados. Os metadados de um conjunto de resultados são obtidos
através da seguinte instrução (onde rs é um objeto ResultSet):
ResultSetMetaData rsmd =
rs.getMetaData();
Em seguida é possível obter o número de colunas, nome e tamanho das colunas do conjunto de resultados, através dos seguintes
métodos:
Uma vez que cada banco de dados pode prover uma implementação de SQL que tenha suas próprias particularidades, o JDBC (como o
ODBC) fornece uma sintaxe de escape que mapeia uma sintaxe padrão JDBC para a sintaxe específica do fabricante. Quando é utilizado
um driver que dá suporte a essa sintaxe, não é preciso mudar o modo em que o programa utiliza a API JDBC; somente é alterada a
maneira pelo qual as instruções SQL são geradas. A sintaxe de escape do JDBC oferece meios padronizados para mapear chamadas de
procedimentos armazenados, funções escalares, expressões de data e hora, e especificações externas de ligação para SQL específica do
fabricante. Por exemplo, a sintaxe de escape para uma expressão escalar tem o seguinte aspecto:
{ fn expressão_da_função }
A seguir é exibido um exemplo que utiliza a função agregada COUNT() com um finalizador de escape:
SELECT { fn COUNT(*) } AS Total
file://\\76.12.86.138\Drawloop Data\Site Data\Output\darlanpenedo@bol.com.br_utilizacao.htm.html
FROM TESTE GROUP BY Nome
A sintaxe de escape JDBC para chamar um procedimento armazenado é:
Alguns drivers com finalidades apenas didáticas e não comerciais, podem não aceitar suporte a transações, sintaxe de escape, chamadas
a procedimentos armazenados, consultas preparadas e outros recursos avançados de bancos de dados. Portanto, ao adquirir um driver de
JDBC, verifique se o driver possui implementação para todos os métodos estabelecidos pelo JDBC. De preferência adquira o driver do
próprio fabricante do banco, ou de empresas autorizadas.
Assim como é possível usar Java tanto para aplicativos quanto para applets, é possível usar a versão JDBC de Java tanto em aplicativos
quanto em applets. Quando usada em uma applet, todas as restrições normais de segurança são mantidas.
As applets Java que usam JDBC seriam capazes apenas de abrir uma conexão a bancos de dados a partir do servidor do qual são
carregadas. Elas não podem, nem explícita nem implicitamente, fazer uso de informações locais. Embora as extensões JDBC do modelo
de segurança permitam que se descarregue e registre um driver JDBC com o gerenciador de drivers JDBC no servidor, esse driver só
pode ser usado para conexões a partir do mesmo servidor de onde a applet veio. Isso significa que o servidor Web e o servidor de banco
de dados devem estar na mesma máquina, o que não é uma configuração típica. Obviamente, o servidor Web pode ter um serviço proxy
que roteia o tráfego de banco de dados para outra máquina. Portanto, é possível usar JDBC com applets, porém o servidor terá que ser
gerenciado com cuidado.
Outra limitação ao uso do JDBC em applets, é o fato de que uma applet Java pode não estar carregando código nativo. Como os drivers
JDBC, como a ponte JDBC-ODBC, exigem bibliotecas nativas, isto pode ser uma restrição significativa. Porém, os fabricantes dos bancos
já estão fornecendo drivers JDBC 100% em Java, o que facilitará a implementação de applets.
Por outro lado, os aplicativos têm total liberdade. É possível dar aos aplicativos acesso total aos arquivos e servidores remotos.
Há um terceiro uso possível para uma versão aperfeiçoada do JDBC. A idéia é às vezes chamada como "three tier model" (modelo de três
camadas). Isso significa que um aplicativo (ou applet) Java chama uma camada intermediária, que por sua vez acessa os dados. Isso
funcionaria melhor com RMI (objetos remotos) para a comunicação entre o cliente e a camada intermediária, e o JDBC entre a camada
intermediária e um banco de dados back-end. Portanto, as chamadas aos métodos do JDBC são feitas na camada intermediária.
Especialmente por meio do uso de melhores técnicas de compilação (compilação just-in-time e compiladores nativos), o Java está se
tornando rápido o suficiente para ser usado na escrita da camada intermediária.
Camadas de acesso a bancos de dados, nada tem a ver com quantos drivers e gerenciadores de drivers existem na cadeia entre o
aplicativo e o banco de dados. Tem a ver com como o código do aplicativo foi particionado. Antes do cliente/servidor, era preciso se
conectar diretamente ao sistema que possuia o banco de dados e executar o programa nele. Tal mainframe pode ter centenas de
terminais, como IBM 3270, ligados a ele. Isso representava uma solução de uma camada.
Nos tempos remotos do cliente/servidor, havia uma divisão simples entre código no cliente e dados no servidor. Isso era então chamado
de "cliente-gordo" ou uma abordagem de duas camadas sem middleware. Agora o modelo foi mais do que aperfeiçoado: freqüentemente o
cliente somente possui o código da GUI, e existe uma lógica de aplicativo separada em um servidor, chamado servidor de aplicativos, o
qual o cliente acessa. A lógica do aplicativo por sua vez conversa com um servidor de banco de dados em um outro sistema. O cliente
nunca conversa diretamente com o banco de dados.
Portanto, um servidor de aplicativos é uma plataforma para compartilhamento de lógica de aplicativos. Ao passar essa lógica para um
ambiente de camada intermediária que hospeda e executa aplicativos empresariais, as organizações podem reduzir significativamente o
custo e a dificuldade de proporcionar acesso a bancos de dados corporativos e serviços de transações. Os usuários conectam-se a esses
serviços por meio de um simples browser, enquanto o servidor de aplicativos gerencia serviços vitais como segurança integrada,
confiabilidade e escalabilidade. Para proporcionar serviços completos de aplicativos aos clientes de rede, um servidor de aplicativos
poderá englobar os recursos de Java e a tecnologia JDBC.
Conclusão
O desenvolvimento de produtos relacionados a Java está em amplo crescimento, e se continuar neste ritmo, deverá em poucos anos,
chegar aos índices atuais de linguagens como Delphi e Visual Basic. Os mais otimistas afirmam que Java poderá superar o Windows
como a plataforma de software com maior base instalada no mundo até a virada do século, ou seja, haverá mais software desenvolvido
para ser usado em uma máquina virtual Java e conseqüentemente para todas as plataformas, do que para outra plataforma específica,
seja ela Windows ou qualquer outra. Java deixou de ser uma ferramenta utilizada apenas para construir páginas bonitas na Web. Está se
estabelecendo como uma linguagem de programação séria, à altura das aplicações empresariais mais sofisticadas. Porém, antes de
file://\\76.12.86.138\Drawloop Data\Site Data\Output\darlanpenedo@bol.com.br_utilizacao.htm.html
decidir pela utilização de Java, deve-se deixar de lado as desavenças entre as grandes empresas possuidoras de tecnologias alternativas,
e as preferências pessoais. Deve-se sim, avaliar a real contribuição da tecnologia Java para a informática no aumento da produtividade e
competitividade. Chegou-se a conclusão que Java é uma poderosa linguagem de programação, parecida com C++ mas com vantagens
significativas, altamente portável e reutilizável. Porém existem outros pontos importantes a serem analisados antes de adotar essa nova
tecnologia.
O pacote JDK precisa incorporar um gerador de GUI que permita ao programador desenhar a tela e, em seguida, gerar o código para
implementá-la. Pois codificar toda uma janela gráfica com a AWT sem a ajuda de uma ferramenta, é algo extremamente cansativo e
demorado. É claro, que se for utilizado algum dos diversos ambientes de programação Java disponíveis no mercado, esta dificuldade
ficará mais amena. Outras questões importantes relacionadas a interfaces gráficas e que são fonte de críticas dos maiores inimigos da
linguagem, são as limitações de funcionalidade quando applets ou aplicativos stand-alone escritos em Java são portados de uma
plataforma para outra: suporte à somente quatro tipos diferentes de fontes; ausência de recursos ligados ao botão direito de mouse; falta
de suporte a recursos multimídia e rigidez no layout de interface gráfica. Outro recurso da AWT necessário mas que está um pouco
esquecido, é a impressão.
No que se refere ao acesso aos bancos de dados relacionais, o pacote JDBC é muito prático e de fácil aprendizado. A conexão é feita de
forma simples, e com poucos métodos é possível executar todos os comandos SQL ANSI 92 passando-os como parâmetros, desde que o
driver utilizado para a conexão implemente o método utilizado. A única dificuldade se encontra no objeto ResultSet que permite apenas a
leitura sequêncial dos registros oriundos de um SELECT. O método next somente posiciona um registro à frente. Não há um método que
retorne ao registro anterior. Outro aspecto que se apresenta pouco produtivo, é a apresentação de informações de tabelas do banco de
dados. Na recuperação através do SELECT não houve problemas. O que prejudica a produtividade é que o desenvolvedor não possui
componentes para colocar na janela, informando apenas o que quer consultar, deixando a apresentação de forma automática. É preciso
mover as tuplas para algum componente para em seguida adicionar a uma janela. A velocidade de execução de um programa interpretado
está bem abaixo do que programas compilados em C ou C++. Quando a performance é importante, não há como negar que o byte code
Java interpretado é lento. Porém, há várias linguagens que se tornaram populares porque possuem apenas a velocidade suficiente para
determinada tarefa. Até certo ponto, esse problema se solucionará à medida que os computadores e conexões ficarem mais velozes.
Outra solução que já está sendo utilizada, são os compiladores just-in-time (JIT), que convertem o bytecode em código nativo em tempo
real, mantendo na memória cache o código convertido enquanto o programa estiver rodando.
É importante salientar que os aspectos acima analisados, são técnicos, sujeitos a avanços tecnológicos. A JavaSoft, empresa responsável
pelos progressos do Java, já está preparando novas versões do JDK que vão preencher as lacunas deixadas nas versões anteriores.
Espera-se que a compatibilidade com todo o código já escrito seja mantida, assegurando a continuidade da linguagem. Várias outras
empresas estão desenvolvendo ferramentas que proporcionarão o mais importante no desenvolvimento de software atualmente:
produtividade e software integrado à Internet.
Bibliografia
file://\\76.12.86.138\Drawloop Data\Site Data\Output\darlanpenedo@bol.com.br_utilizacao.htm.html
Voltar
file://\\76.12.86.138\Drawloop Data\Site Data\Output\darlanpenedo@bol.com.br_utilizacao.htm.html