quarta-feira, 18 de março de 2009

Primeiros passos com o Jetty

Desde que comecei a trabalhar com desenvolvimento Web em Java, o principal container que utilizo é o Apache Tomcat. Comecei desenvolvendo para a versão 5.5 e logo já estava utilizando a versão 6.0.x e sempre achei um ótimo server, de fácil configuração e bom desempenho. Mas um dos servers de onde trabalho (Xeon 3ghz com 4 GB ram) começou a ter um grande aumento no número de requisições e isso expôs alguns limites do Tomcat. Começamos a ter quedas constantes do server junto com problemas de memória que só conseguimos resolver aumentando a memória da VM Java. Continuamos a utilizar o Tomcat mas tenho a impressão que estamos no limite (ou além do limite) do server.

O caso de sucesso da utilização do Jetty pelo site do GUJ, a falta de atualizações do Tomcat (que até esse post a última versão lançada pela Apache foi a 6.0.18 no final de julho de 2008) e minha curiosidade me fizeram olhar para o Jetty, para quem não sabe o Jetty é totalmente escrito em Java e é utilizado como servlet container do JBoss, então fui até o site efetuei o download da versão mais estável para o servlet 2.5 com o jsp 2.1 a 6.1.15.

Instalando o Jetty

Não há instalador apenas um arquivo compactado que ao ser extraído cria a seguinte estrutura:

jetty1

  • Contexts – diretório para hot deploy de aplicações.
  • Etc – diretório dos arquivos de configuração do Jetty.
  • Examples – diretório com aplicações de exemplo.
  • Extras – extensões opcionais para o Jetty.
  • Lib – diretório com todas as bibliotecas para rodar o Jetty.
  • Licenses – contém a licença do produto.
  • Log – saída padrão do server.
  • Modules – código fonte de todos os sub-módulos.
  • Patches – código-fonte de correções.
  • Project-website – site do projeto Jetty.
  • Webapps – possui aplicações de demonstração.

Os outros diretórios listados não são tão relevantes. No diretório raiz do Jetty está o start.jar que é responsável por iniciar o server e o pom.xml utilizado pelo plugin do Maven.

Iniciando o servidor

Para iniciar o servidor com as configurações padrões na porta 8080 basta executar o comando:

java –jar start.jar

As configurações são carregadas por padrão do arquivo  etc/jetty.xml que é na realidade um mapeamento da API de classes do Jetty que instancia os objetos, para quem trabalha com Java nada mais simples e intuitivo. Por exemplo:

   1: <Configure id="Server" class="org.mortbay.jetty.Server">



   2:   <Set name="port">8080</Set>



   3: </Configure>








Equivale em java á





   1: org.mortbay.jetty.Server server = new org.mortbay.jetty.Server();



   2: server.setPort(8080);








Há uma vasta referência de como utilizar o mapeamento nesse link. O arquivo jetty.xml pode ser carregado de qualquer lugar do disco e nem precisa ter esse nome, basta executar o server passando o local do arquivo como parâmetro:



java –jar start.jar c:\qualquerlugar\abc123.xml



Caso queira alterar configurações quando utilizar o arquivo de configuração padrão, pode-se redefini-las ao iniciar o server, por exemplo caso queira subir o server na porta 8888:



java –Djetty.port=8888 –jar start.jar



Configurações especificas para uma aplicação implantada podem ser configuradas no arquivo WEB-INF/jetty-web.xml (que pode ser também WEB-INF/web-jetty.xml) que possue o mesmo formato do jetty.xml difere apenas no fato de instanciar uma classe que representa o contexto da aplicação (org.mortbay.jetty.webapp.WebAppContext). Recursos JNDI são configurados no arquivo WEB-INF/jetty-env.xml, nada melhor do que outro exemplo para entender:





   1: <?xml version="1.0"?>



   2: <!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">



   3:  



   4: <Configure class="org.mortbay.jetty.webapp.WebAppContext">



   5:  



   6:   <!-- Add an EnvEntry only valid for this webapp               -->



   7:   <New id="gargle"  class="org.mortbay.jetty.plus.naming.EnvEntry">



   8:     <Arg>gargle</Arg>



   9:     <Arg type="java.lang.Double">100</Arg>



  10:     <Arg type="boolean">true</Arg>



  11:   </New>



  12:  



  13:  <!-- Add an override for a global EnvEntry                           -->



  14:   <New id="wiggle"  class="org.mortbay.jetty.plus.naming.EnvEntry">



  15:     <Arg>wiggle</Arg>



  16:     <Arg type="java.lang.Double">55.0</Arg>



  17:     <Arg type="boolean">true</Arg>



  18:   </New>



  19:  



  20:   <!-- an XADataSource                                                -->



  21:   <New id="mydatasource99" class="org.mortbay.jetty.plus.naming.Resource">



  22:     <Arg>jdbc/mydatasource99</Arg>



  23:     <Arg>



  24:      <New class="com.atomikos.jdbc.SimpleDataSourceBean"><Set name="xaDataSourceClassName">org.apache.derby.jdbc.EmbeddedXADataSource</Set><Set name="xaDataSourceProperties">databaseName=testdb99;createDatabase=create</Set><Set name="UniqueResourceName">mydatasource99</Set></New>



  25:     </Arg>



  26:    </New>



  27:  



  28: </Configure>



  29:  




Realmente o Jetty me pareceu muito fácil de configurar (uma das afirmações que se vê no site), possui uma documentação muito boa e pode ser embutido em aplicações stand alone para diversos fins.



Minhas primeiras impressões sobre o Jetty foram muito boas, mas terei cautela e irei estudá-lo (testando) antes de substituir o Tomcat em minhas aplicações. Novidades interessantes que descobrir sobre ele postarei.



Abraços e até a próxima!



Referências


Wiki do Jetty - http://docs.codehaus.org/display/JETTY/Jetty+Wiki

[+/-] Read More...

sábado, 6 de setembro de 2008

Você conhece o Java DB ?

A partir do JDK 6 a SUN incorporou um banco de dados 100% em Java, chamado Java DB. Neste post coloquei um pouco da história desse banco e os passos iniciais para a utilização do mesmo.

Apache Derby

O Java DB é baseado no código aberto de outro banco escrito em Java, mantido hoje pela Apache, chamado Derby. O Derby inicialmente se chamava Cloudscape e era mantido pelas empresas  Cloudscape, Informix, e IBM sendo doado posteriormente como projeto aberto para a Apache. O projeto está em produção desde 1997 e é utilizado por muitos produtos (lista). Um outro ponto é que o projeto  Apache Derby possui uma comunidade que vem crescendo e se tornando forte e que inclui desenvolvedores de grandes empresas como a SUN e a IBM bem como contribuintes individuais.

SUN + Apache Derby = Java DB

Todo o desenvolvimento do Java DB é feito no projeto Apache Derby, mas possui suporte completo pela SUN (para quem estiver disposto a pagar o preço é claro) o que ao meu ver é um ponto muito forte para a adoção do mesmo. Até a data deste post a SUN incorpora o Java DB nos seguintes produtos:

  • JDK 6;
  • Java Enterprise System;
  • Java System Application Server;
  • Java System Portal Server;
  • Service Registry;
  • Project Glassfish;
  • Java Studio Creator.

Com isso a SUN tenta tornar o Java DB o banco de dados padrão do Java, o que traz benefícios, como:

  • facilidade de configuração e utilização (é carregado com a JVM);
  • flexibilidade (cliente/server ou embarcado);
  • suporte das principais IDE's (Netbeans e Eclipse).

Características do Java DB

Apesar do pequeno tamanho (engine de 2MB) o Java DB possui completo funcionamento da SQL que inclui views, triggers, stored procedures e foreing keys. Além disso suporta transações multi-usuário, utilizando os principais níveis de isolação e de propriedades ACID. O Java DB implementa a segurança com a utilização de encriptação de dados, autenticação no lado do cliente e com comandos GRANT e REVOKE. Segue padrões como Java DataBase Connectivity (JDBC) 4.0 e SQL92/99/2003/XML.

Instalação e Configuração

Deve-se efetuar o download no site da SUN da versão adequada ao sistema operacional do instalador. Após instalar o Java DB o diretório escolhido deve possuir a seguinte estrutura de pastas:

  • Sub-diretório demo onde se encontra dois programas de demonstração.
  • Sub-diretório frameworks contém utilitários que ajudam a configurar variáveis de ambiente e a criar e trabalhar com as bases de dados.
  • Sub-diretório javadoc contém toda a documentação da API.
  • Sub-diretório docs contém documentação sobre o Java DB em si: configuração, administração e guias de referência.
  • Sub-diretório lib onde se encontra a biblioteca de pacotes no formato de arquivo JAR.
  • Sub-diretório bin contém os scripts para execução de utilitários e de configurações do ambiente.

Após a instalação é necessário configurar a variável de ambiente DERBY_HOME apontando para o diretório raiz da instalação do Java DB.

Arquitetura do Java DB: Embarcado (em 3 Passos)

 

1 - Coloque o derby.jar no classpath da sua aplicação;

2 - Inicialize o Java DB (opcional no JDK 6):

1: Class.forName("org.apache.derby.jdbc.EmbeddedDriver");

3- Crie uma nova base de dados:

1: Connection conn = DriverManager.getConnection(“jdbc:derby:dbName; “ + 2: “create=true”);

 

Arquitetura do Java DB: Cliente-Servidor  (em 4 passos)

  1. Inicialize o network server do Java DB: java -jar %DERBY_HOME%\lib\derbyrun.jar server start
  2. Utilize a ferramenta ij administrar a base de dados: java -jar %DERBY_HOME%\lib\derbyrun.jar ij
  3. Para carregar o driver utilize a seguinte sintaxe:
    1: Class.forName("org.apache.derby.jdbc.org.apache.derby.jdbc.ClientDriver");
  4. Para conectar ao banco utilize:
    1: Connection conn = DriverManager.getConnection(“"jdbc:derby://localhost:1527/"2: + dbName + ";create=true";

Exemplos de Utilização

O Java DB pode ser utilizado em diversos tipos de aplicação o que o torna bastante flexível:

  • Persistência de dados para desktop, browser ou dispositivos móveis.
  • Possibilita o deployment de aplicações persistentes em celulares, laptops ou mainframe.
  • Persiste dados no lado cliente, em middlewares ou no lado servidor.

Para Saber Mais

Technorati Marcas: ,,

Esse post teve como objetivo mostrar uma promissora alternativa de banco de dados chamada Java DB e mostrar como iniciar a utilização da mesma. Para achar tutorias detalhados e uma documentação completa sugiro que visite os seguintes sites:

Technorati Marcas: Java DB,SUN,Apache,Banco,Persistência

[+/-] Read More...