sábado, 20 de março de 2010

Paramêtros de Inicialização em Aplicações Web

As aplicações baseadas em servidor tem características próprias no que diz respeito aos parâmetros de inicialização. Em aplicações locais pode-se optar por passar os parâmetros "na linha de comando", criar um arquivo de configurações ou usar variáveis de ambiente. Apesar de ser possível o uso de qualquer um dos método acima ( mais parâmetros de contexto/filtros/servlets) meu método predileto em aplicações em baseadas em servidor é a criação de variáveis de ambiente JNDI.
Esse tipo de variável de ambiente pode ser usado em servidores JavaEE em geral, ou seja: em servidores de servlets/EJB ou outros que suportem JNDI.
De volta aos servidores web, a vantagem que vejo desse tipo de parâmetro em relação aos parâmetros de contexto (<context-param/>) ou de filtros e servlets (<init-param/>) é que nesses casos é necessário que o arquivo web.xml seja alterado... ou seja: se você enviar um .war/.ear para ser disponibilizado, quem for disponibilizá-lo terá que alterar o arquivo web.xml que fica dentro do .war/.ear antes de colocá-lo no ar. Por outro lado, as variável de ambiente JNDI podem ser configuradas em arquivos de contexto ou ambientes de configuração externos. Por exemplo, para configurar um arquivo de contexto do Tomcat, usamos a entrada <Environment/>, conforme segue:
...
<Environment name="com.wim.jgnuteca.disableAllMonitors" type="java.lang.String" value="true"/>

...
Nesse caso o valor da variável poderia ser lido pela aplicação, por exemplo, com a seguinte classe:
...
/**
*
*/
package com.wim.jgnuteca;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

/**
* @author walter
*
*/
public class Config {

  private static String getContextParamValue(String parameter) throws NamingException {
    final Context ctx = new InitialContext();
    return (String)ctx.lookup("java:comp/env/"+parameter);
  }
  
  private static String DISABLE_ALL_MONITORS="com.wim.jgnuteca.disableAllMonitors";
  private static Boolean disableAllDTEMonitors=null;
  
  public static boolean disableAllDTEMonitors(){
    if(disableAllDTEMonitors == null){
      try{
        disableAllDTEMonitors=Boolean.valueOf(getContextParamValue(DISABLE_ALL_MONITORS));
      } catch(Throwable t) {
        disableAllDTEMonitors=false;
      }
    }
    return disableAllDTEMonitors;
  }
  
}
...

De fato essa classe poderia ser usada de forma genérica e lendo parâmetros de várias fontes. Teríamos então uma classe genérica de configuração independente do ambiente de execução da aplicação.

Nenhum comentário: