Mostrando postagens com marcador Tomcat. Mostrar todas as postagens
Mostrando postagens com marcador Tomcat. Mostrar todas as postagens

terça-feira, 17 de novembro de 2009

Implementando servidor web Java com Tomcat no Linux

Autor: José Cleydson Ferreira da Silva
Este artigo foi originalmente publicado em:
http://www.vivaolinux.com.br/artigo/Implementando-servidor-web-Java-com-Tomcat-no-Linux



1. Introdução

A tecnologia JavaTM há algum tempo tem sido a principal escolha do mercado de TI para o desenvolvimento de sistemas distribuídos.

Segundo a empresa TIOBE Software, em sua pesquisa para acompanhar as linguagens de programação no mercado, designando o índice TIOBE (pesquisa), de Novembro de 2009, o Java ainda é a linguagem mais popular para o desenvolvimento de sistemas.

Java é uma plataforma rica, que permite o desenvolvimento de aplicações para dispositivos móveis, bem como, celulares e PDAs, até aplicações corporativas complexas, baseadas em web services, passando ainda por aplicações desktop e discos Blueray.

Linux: Implementando servidor web Java com Tomcat no Linux
Imagem customizada por Beatriz Ansani
A tecnologia JavaTM é dividida em seguimentos: JSE (Java Standard Edition), que é uma versão padrão do Java utilizado na programação de aplicações para desktop, JEE (Java Enterprise Edition), fortemente voltada para aplicações web e aplicações distribuídas e JME (Java Micro Editon) para computadores com pouco recurso computacional, geralmente utilizada em dispositivos móveis.

O JEE possui, para o desenvolvimento de sistemas corporativos, APIs (Interface de Programação de Aplicativos), que possibilitam seu uso por meio da web. Considerando esse contexto, é necessário um software que permita que a aplicação web seja executada. Um dos softwares mais usados para esse fim é o Apache Tomcat. Seu desenvolvimento está sob a responsabilidade da Apache Software Foundation, que o disponibiliza como Software Livre e de Código Aberto.


Configurando Java e procedimentos para a instalação do Tomcat

2. Configurando ambiente Java no Sistema Operacional Linux

Para que os programas javac (responsável por compilar a aplicação) e java (responsável por executar a aplicação) sejam reconhecidos pelo shell, é necessário que a variável de ambiente $PATH seja modificada. Além disso, também deve ser definida a variável de ambiente $JAVA_HOME, que deve apontar para o diretório onde o JDK foi instalado.

Para isso devem ser adicionadas as seguintes linhas ao arquivo bash.bashrc (lembrando que o local de instalação do JDK pode variar, como no exemplo abaixo):

Exemplo 1:

export JAVA_HOME=/opt/java
export PATH=/opt/java/bin:$PATH

O pacote de instalação da Máquina Virtual Java está disponível no site http://java.sun.com/javase/downloads/index.jsp. Há dois tipos de arquivos binários, um com extensão rpm.bin para distribuições Linux derivadas do Red Hat, outro com extensão .bin para as demais distribuições.

Após fazer o download faremos o processo de instalação do pacote. Para padronizar o processo de instalação usaremos o diretório /opt. Usaremos esse diretório com o intuito de centralizar somente um diretório para o java no sistema, uma vez que ao instalá-lo poderíamos adicioná-lo ao diretório /usr/bin - mas caso haja necessidade de atualização de versão, acrescentar novas bibliotecas ou fazer backup, o diretório /opt se tornará mais acessível.

Para iniciar o processo de instalação, copie o arquivo jdk-6u13-linux-i586.bin para o diretório /opt, a execução do mesmo se dará pelo comando sh seguido do nome do arquivo. Após a compilação, um subdiretório será gerado no diretório corrente com o mesmo nome do arquivo binário, portanto, renomeie a pasta para o nome "java" e, em seguida, defina no PATH o diretório no qual a pasta renomeada "java" está; esse processo não é uma convenção, é somente uma forma de padronização de instalação. No quadro 1 temos o passo-a-passo para a instalação.

Quadro 1:

Comandos executados no terminal:

Copiar para diretório /opt:

# cp jdk-6u13-linux-i586.bin /opt/

Executar o arquivo:

# sh jdk-6u13-linux-i586.bin

Renomear diretório:

# mv jdk1.6.0_13 java

As duas linhas abaixo devem ser acrescentadas ao arquivo bash.bashrc:

# vim /etc/bash.bashrc

export JAVA_HOME=/opt/java
export PATH=/opt/java/bin:$PATH

Testando variáveis de ambiente:

# echo $JAVA_HOME
# echo $PATH


É importante testar a variável de ambiente após definí-la, pois ela só é reconhecida após sair da sessão atual. Em seguida, ao abrir uma nova sessão, podemos usar o comando echo nas variáveis de ambiente. Desta maneira padronizada, seu ambiente Java está pronto para ser usado.

3. Procedimentos para a instalação do Tomcat

O Tomcat é um servidor web Java, capaz de processar aplicações java servelets, que são responsáveis por gerenciar dinamicamente requisições de pedido e resposta, que, em muitos casos, são consideradas extensões para Servidores Web Java. O Tomcat possui suas características próprias de servidores de aplicações, porém não dá suporte EJB - Enterprise JavaBeans - para aplicações distribuídas.

Sua versão atual é a 6.0.20, lançada em 30 de Junho de 2008, pela Apache Software Foundation, que atualmente mantém o projeto. Pode-se fazer o download do Apache Tomcat no site www.tomcat.apache.org, no menu download ou utilizar o comando wget como mostrado no quadro 2, que detalha todo o processo de instalação.

Após ter feito o download, é necessário descompactar o arquivo no diretório em que se irá trabalhar, ou seja, um diretório padrão que neste caso será o /opt, como fizemos na instalação do java. Após descompactá-lo, para padronizar a instalação, renomeie o diretório que foi criado para o nome tomcat6. O diretório /opt/tomcat6 consiste em diversos subdiretórios, que contêm arquivos binários, bibliotecas, logs, subdiretórios das aplicações e arquivos de configurações.

Por padrão o daemon de inicialização está no diretório /bin com o nome catalina.sh. Como estamos padronizando a instalação, teremos que criar um script para que, ao inicializar o sistema operacional, o serviço HTTP na porta 8080 seja inicializado. O quadro 2 mostra a forma de instalação do Tomcat.

Quadro 2:

Comandos para a instalação do Tomcat:

Entrar no diretório /opt:

# cd /opt

Fazer o download dentro:

# wget http://linorg.usp.br/apache/tomcat/tomcat-6/v6.0.20/bin/apache-tomcat-6.0.20.tar.gz

Descompactar arquivo:

# tar -xvzfj apache-tomcat-6.0.20.tar.gz

Renomear a pasta de apache-tomcat-6.0.20 para tomcat6 ou tomcat:

# mv apache-tomcat-6.0.20 tomcat6

Iniciar o tomcat /opt/tomcat/bin/catalina.sh:

# sh /opt/tomcat6/bin/catalina.sh start

Testar Tomcat (teste de funcionamento), acessando via browser:

http://localhost:8080/

É necessário a criação de um script para a inicialização do programa quando o sistema operacional for inicializado. Este script deverá permanecer dentro do diretório /etc/init.d, onde será criado um link nativo para todos os diretórios da runlevel de inicialização. Também poderá ser colocado na inicialização padrão.

Para saber a runlevel padrão que o sistema está utilizando, basta executar o comando runlevel no terminal, ou caso queira adicioná-lo em todos os diretórios de inicialização, usa-se o comando update-rc.d.

Para que não seja necessário iniciar o tomcat todas as vezes que desligar ou reiniciar o computador, foi elaborado o seguinte script para iniciá-lo todas as vezes que esse fato ocorrer:

Quadro 3:

Comando para script de inicialização do Tomcat. Criar um arquivo no /etc/init.d/:

# touch tomcat

Adicionar o texto abaixo:

#!/bin/sh
echo Inicializa tomcat
export JAVA_HOME=/opt/java
/opt/tomcat6/bin/catalina.sh start

Mudar a permissão de execução:

# chmod +x tomcat

Adicionar o script na runlevel do sistema:

# update-rc.d tomcat defaults 99

Adicionar o script na runlevel padrão (no Debian, Ubuntu):

# ln -n tomcat /etc/rc2.d/S99tomcat


Diretório e subdiretórios do Tomcat

4. Diretório e subdiretórios do Tomcat

Assim como os diversos softwares que possuem um arquivo de configuração, não há diferença com o Tomcat. Por padrão, os arquivos de configuração do sistema operacional Linux estão alocados em um único diretório que contém subdiretórios de cada programa, que de fato é o /etc. Um exemplo de subdiretório clássico e conhecido em distribuições derivadas do Debian é o /etc/apache2/, diferente das distribuições derivadas do Red Hat que se encontram em /etc/httpd.conf.

Conforme o padrão de instalação que usamos, o diretório /opt/tomcat tornou-se um local onde concentram-se todos os seus subdiretórios e arquivos, podendo assim proporcionar ao administrador do sistema uma melhor manipulação do mesmo em relação ao software que usa diversos subdiretórios do sistema. As vantagens desse sistema podem consistir em não somente facilitar para o usuário mas em outras rotinas diárias, como backup e centralização dos arquivos e diretórios que por sua vez poderiam estar em uma partição separada.

No diretório /opt/tomcat/ estão todos os subdiretórios necessários para os seu funcionamento; abaixo há uma breve explicação:

/bin

Neste local encontram-se os arquivos binários do sistema, bem como o arquivo que permite parar e inicializar o sistema, chamado catalina.sh. Para executá-lo basta adicionar 2 parâmetros, um antes do nome do arquivo e outro indicando qual é a ação a ser realizada, se pára o serviço ou o inicia-o, conforme o comando: sh catalina.sh start

/lib

Todas as bibliotecas estão armazenadas neste local, podendo ser as bibliotecas das aplicações que são desenvolvidas ou bibliotecas do Tomcat, incluindo driver JDBC para conexão com banco de dados.

/logs

O Apache Tomcat registra todas as ações e execuções das aplicações. Neste diretório estão armazenados informações de logs, bem como, execução das aplicações, instalação, erros de acesso, requisição de conexão e entre outros.

/temp

Consiste em um subdiretório para alocar uso de arquivos temporários das aplicações.

/webapps

Considerando o clássico /var/www que o apache utiliza, o subdiretório /webapps possui o mesmo fundamento: Armazenar as aplicações que serão executadas pelo Tomcat. Por padrão, dentro do mesmo, há arquivos do próprio programa e alguns exemplos de jsp e servelets. Caso queira testá-los, acesse http://localhost:8080.

/conf

Esse diretório, em especial, é o mais usado, pois nele se encontram os arquivos de configuração, bem como configuração de usuário, do servidor e do componentes que serão executados. Cada aplicação terá um arquivo de configuração que por sua vez determinará a politica de execução.


Configurando usuários

5.1. Configurando usuários

Um dos primeiros procedimentos a serem tomados na configuração do programa é a definição de usuários, pois a administração do sistema ou programa dependerá desse ajuste para instalar qualquer sistema ou programa que será executado pelo Tomcat. Embora ao testar o seu funcionamento e perceber que o Tomcat está funcionando, como mostra a última linha do quadro 2 (www.localhost:8080), é de extrema importância a definição da função de cada usuário.

Basicamente os usuários podem desempenhar diferentes papéis, como administrador do Tomcat, gerente e usuário comum, que serão usados pelas aplicações Java. O arquivo de configuração encontra-se em /opt/tomcat/conf, conforme o padrão de instalação deste documento; caso o tenha instalado pelo mirror padrão de seus sistema operacional, podendo ser da linha Debian, o diretório será /etc/tomcat6. O arquivo está nomeado como tomcat-users.xml.

Sua configuração consiste em definições de usuário, senha e qual papel será atribuído para este usuário. Como já mencionado os papéis, ou seja, a função que cada um pode desenvolver, é atribuída pelo parâmetro rolename dentro da tag , que, por sua vez, se encontra dentro da tag ; por padrão, aconselha-se definir primeiramente os papéis e, em seguida, os usuários.

A tag define os usuários, senhas e função, com os parâmetros username e password, como visto no exemplo 2.

Exemplo 2:

Modelo de arquivo de configuração de usuário:


<--! Comentário são feitos assim -->


Os usuários que contém papel manager possuem privilégios para realizar ações juntamente com o Tomcat, como iniciar aplicações e configurações nos diversos arquivos de configuração e fazer a implantação das aplicações no servidor. As funções (papéis) dos usuários Tomcat e role1 são padrões do sistema, - se por ventura não as encontrar ao abrir o arquivo, adicione-as. Para se orientar, use o exemplo 2.



Configurando o servidor

5.2. Configurando o servidor

Existem diversas formas de configurar o servidor. Embora seja interessante ou até mesmo necessário que saibamos todas as opções de configuração, não é o objetivo deste documento apresentar todas as opções, mas sim uma configuração básica essencial para o funcionamento.

O arquivo de configuração do servidor encontra-se no mesmo diretório da configuração do usuário. O arquivo referente à configuração do servidor chama-se server.xml; nele pode-se configurar quais portas serão utilizadas para a conexão, o protocolo e o redirecionamento de portas, dentre outros. Essas opções, por padrão, já vêm configuradas.

Quando usamos uma aplicação compactada, ou seja, em arquivo.war, é necessário fazer a configuração da tag para que ela não seja descompactada ao ser instalada. Com isso é preciso configurar o atributo unpackWARs para receber o valor false; assim, ao ser reconhecida pelo programa (Tomcat) ela não será descompactada. O item 1 do exemplo 3 exibe a configuração desta tag. A utilização da extensão do arquivo war não é uma convenção - você poderá utilizá-la em modo descompactado, porém pode estar exposto a alguns erros. Caso escolha utilizá-la como subdiretório, poderá copiar o diretório da aplicação (contexto) para o diretório /opt/tomcat6/webapps.

Na tag podemos configurar a porta de conexão, que por padrão é a porta 8080, juntamente com o protocolo, tempo de conexão com servidor e redirecionamento de portas, dentre outras opções. Existem basicamente três tipos de conectores: o HTTP, que responde a requisições na porta 8080, o AJP, que abre conexão com o apache web server na porta 8009 e o HTTPS, que se refere à conexão segura utilizando certificado digital.

Pode-se configurar o servidor para fazer autenticação em um servidor LDAP, bastando, para isto, configurar o server.xml. Dentro da tag pode-se configurar a tag , sendo necessário acrescentar atributos relacionados com a url de conexão do servidor e informações de usuários, bem como usuário, papel do usuário, dentre outros.

Caso haja necessidade de configuração para autenticação com LDAP, o trecho 3 do exemplo 3 pode ser usado.

Exemplo 3:

Trechos de configuração do arquivo server.xml:

1. Tag :



  unpackWARs="false" autoDeploy="true"
  xmlValidation="false" xmlNamespaceAware="false">


2. Tag Connector:



   connectionTimeout="20000"
   redirectPort="8443" />


3. Autenticação com LDAP:



connectionURL="ldap://[LDAP-HOST]:389"
   userBase="dc=uf??,dc=br"
   userRoleName="ObjectClass"
   userSearch="uid={0}"
   userSubtree="true"
   roleName="objectClass"/>



5.3. Configurando o contexto

Toda aplicação desenvolvida a ser instalada no Tomcat necessita de uma configuração em um arquivo web.xml, que se encontra dentro do subdiretório /WEB-INF da aplicação. Podemos configurar dentro desse arquivo as descrições dos aplicativos e sua exibição, bem como o path, Display Name, sessões, dentre outras configurações.

A configuração deste arquivo pode ser feita manualmente ou automaticamente, se usada a aplicação manager web do Tomcat (http://localhost:8080/manager/html). Geralmente, a instalação automática, por padrão, poderá fazer algum tipo de configuração; mesmo tendo isso a favor, pode-se configurá-lo conforme as indicações. Ao desenvolver a aplicação, é necessário criar um arquivo web.xml dentro do subdiretório /WEB-INF da aplicação. Ele poderá possuir o mínimo de configuração, contendo somente o tipo de charset, podendo ser UTF-8, que é padrão do sistema operacional Linux.

Para melhorar a configuração da aplicação, deve-se abrir uma tag para colocar os atributos que poderão configurá-la, pois, por padrão, ao colocar uma aplicação no diretório /opt/tomcat6/webapps, o Tomcat define o path, sendo preciso somente configurar a exibição do nome da aplicação que, para isso, configura o atributo apontando o nome e uma descrição da aplicação com o atributo . Veja no exemplo 4 um modelo de configuração deste arquivo e na figura abaixo o resultado da configuração.

Exemplo 4:

Configuração do web.xml:



Sistema de Teste (Artigo)
  
      Exemplo de Arquivo web.xml.


5.4. Configurações fundamentais

Outra configuração importante é a configuração do uso de memoria RAM da máquina virtual no Tomcat (que como sabemos, é inteiramente desenvolvido em Java) sua interpretação se dá por meio da máquina virtual Java, que, por sua vez, fará o uso da memória exigindo um valor mínimo de 64MB por padrão - mas caso essa aplicação realize um número elevado de acessos a um banco de dados, poderá comprometer o serviço fazendo com que o processamento do servidor atinja o máximo do seu uso. Quando esse fato chega a acontecer, geralmente ocorrem erros de interpretação da maquina virtual java e perda do PATH, ocorrendo erros de interpretação do $JAVA_HOME - Variável de ambiente -. Para isso, precisamos configurar a JVM (Maquina Virtual).

Essa configuração deve ser feita no arquivo catalina.sh, que se encontra no diretório /opt/tomCat6/bin. A sintaxe dos comandos a serem acrescentados neste arquivo estão mencionados no exemplo 5 item 1. O parâmetro -Xmx768M indica a quantidade de memória que a JVM (Máquina Virtual Java) irá usar. O parâmetro -XX:MaxPermSize=256M indicará ao Tomcat a quantidade de memória RAM disponível a ele e os outros são para configuração de hora, linguagem e referência de fuso-horário. É importante lembrar que essa sintaxe deve ser adicionada após os comentários iniciais do arquivo, antecedendo os primeiros comandos do script.

Essa configuração refere-se a uma quantidade de 1GB no total, que um computador esteja porventura usando; caso tenha mais que essa quantidade ou menos, siga a seguinte orientação: usar 3/4 da capacidade da memória RAM para o parâmetro -Xmx768M e 1/4 para -XX:MaxPermSize=256M.

Outra observação importante que precisa ser colocada é a ausência do driver JDBC dentro da pasta lib do Tomcat. Caso deixe de colocar o driver nesta pasta, sua aplicação não conseguirá fazer uma consulta ou rotina na base de dados. O driver JDBC é responsável por todas as rotinas de interação com bases de dados relacionais.

Cada Sistema de Gerenciamento de Bando de Dados - SGBD - possui um driver JDBC que pode ser encontrado no site oficial da Sun (http://devapp.sun.com/product/jdbc/drivers) ou no próprio site do SGBD que está usando.

Os arquivos de configuração que ajudaram na elaboração deste documento estão disponíveis no site www.vivaolinux.com, na sessão conf. Para melhor acompanhamento na elaboração ou no teste de configuração os arquivos podem ser consultados ou baixados no seguinte link:

Caso tenha necessidade de uma aplicação JSP para testar os procedimentos descritos neste documento, também está disponível no site www.vivaolinux.com.br, uma aplicação simples desenvolvida por Hermes Júnior - hnpjunior - para teste deste documento. O download pode ser feito no link abaixo.

Ao fazer o download do arquivo sistemaExibeJSTL.tar.gz, deverá copiá-lo para o diretório /opt/tomcat6/webapps e descompactá-lo, usando o comando:

# tar -xvzf sistemaExibeJSTL.tar.gz

Para acessar a aplicação, direcione o navegador para a seguinte url:

http://localhost:8080/sistemaExibeJSTL/paginas

Exemplo 5:

Configurações gerais:

1. Configuração de memória da Máquina Virtual Java:


CATALINA_OPTS="-Xmx768M -XX:MaxPermSize=256M -Duser.timezone=America/Sao_Paulo -Duser.language=pt -Duser.country=BR"


Considerações finais

Sobre o autor:

José Cleydson Ferreira da Silva, graduando em Sistemas de Informação - Faculdade de Viçosa-MG. Usuário do Linux por filosofia, acredita que o Software Livre e de Código Aberto podem mudar a forma e o modelo de mercado atual.


Referência bibliográfica