Posts Tagged ‘Design Pattern’

Distinguir ambientes de Desenvolvimento, Aceite/Homologação e Produção?

Posted in Dicas on May 24th, 2009 by Fábio Queiroz – 1 Comment

Aplicações comerciais, normalmente, passam por um período de desenvolvimento, programação, “bate-tecla”, etc. E em algum momento, a aplicação será TESTADA em um ambiente de Aceite/Homologação e, somente após essa fase, será implantada em um ambiente de Produção. Simples né?

Já vi muitos casos de que implementações requererem a alteração de informações em arquivos de propriedades para que seja gerado um artefato (EAR/WAR) para ser implantado em Aceite. E pior, essa mesma propriedade tendo um valor diferente para ambiente de Produção, tendo o desenvolvedor que alterar novamente o valor de uma propriedade antes de gerar o artefato para Produção.

Além disso ser um absurdo, pode acabar acarretando de o valor ir com valor referente ao ambiente de Aceite para o ambiente de Produção, causando alguns incovenientes com o Cliente.

Para solucionar isso, vai uma dica: capturar o conteúdo de um atributo “environmento/id” definido como “Ligação de Espaços de Nomes” no servidor de aplicação (aqui, será o IBM WebSphere Application Server V6).

Configurar Ligação de Espaços de Nomes no IBM WAS V6

O primeiro passo a ser dado para realizar a adição de uma Ligação de Espaços de Nomes, é autenticar no console de administração do Application Server específico com um “ID do Usuário” que tenha permissão para realizar a atividade, ou seja, ser um “Operador”, “Configurador” ou “Administrador”.

Após autenticado, clique em “Ambiente > Nomenclatura > Ligações de Espaço de Nomes”. A ligação pode ser adicionada em um dos escopos disponíveis (célula, nó ou servidor). Clique no botão “Novo”. Selecione o tipo “Cadeia”.

Os atributos “Identificador de Ligação” e “Nome do Espaço de Nomes” devem ter o valor “environment/id”. O atributo “Valor da Cadeia” deve ter o valor DEV para um ambiente de Desenvolvimento, HOM para um ambiente de Homologação ou PRD para um ambiente de Produção.

Implementar código para capturar “environment/id”

A implementação JAVA para capturar o conteúdo de “environment/id” é relativamente simples. Crie uma classe para implementar o Design Patterns chamado Service Locator e adicione o seguinte método.

public String getString(String envName) throws ServiceLocatorException {
String envEntry = null;
try {
envEntry = (String) ic.lookup(envName);
} catch (NamingException ne) {
throw new ServiceLocatorException(ne);
} catch (Exception e) {
throw new ServiceLocatorException(e);
}
return envEntry;
}

Este método fará o lookup no atributo no application server.

Em uma segunda classe, que possa representar suas “constantes” (qual tal o nome “CommonConstants”?), adicione o código abaixo:

private static final String ENVIRONMENT_NAME_KEY = "environment/id";
public static String ENVIRONMENT;
static {
try {
ENVIRONMENT = ServiceLocator.getInstance().getString(ENVIRONMENT_NAME_KEY);
System.out.println("ENVIRONMENT=" + ENVIRONMENT);
} catch (ServiceLocatorException e) {
System.err.println("Atributo \"environment/id\" não localizado no servidor. Assumindo ambiente PRD.");
ENVIRONMENT = "PRD";
}
}

Como em algum momento do seu código você utilizará a classe de constantes, o atributo estático ENVIRONMENT será preenchido com o valor definido no atributo “environmento/id”, e com isso, você poderá utilizar uma chamada como CommonConstants.ENVIRONMENT, sem se preocupar, ENFIM, com o ambiente que sua aplicação está implantada.

Bons sonhos.