Arquivo de propriedades no Glassfish

0 respostas
V

Bom Dia,

Estou desenvolvendo uma aplicação para rodar no servidor de aplicação Glassfish V3, no entanto estou com alguns problemas em relação ao arquivos de propriedades necessárias para a aplicação funcionar.

A minha aplicação possui um servlet responsável por carregar os arquivos de propriedades da aplicacação(config.properties e log4j.properties) que encontram-se fora do EAR e da aplicação, num diretório dentro do meu domain no glassfish.
Há essa necessidade desses arquivos serem externos, pois uma vezes realizado o deploy da aplicação no servidor esta não será mais ‘deployada’ e caso haja alguma mudança de diretórios esses arquivos serão alterados e o servidor restartado, para que as novas configurações sejam carregadas.

Ocorre que, o problema que estou tendo é que a aplicação não consegue encontrar os arquivos de propriedades externo a aplicação ou seja, os que se encontram dentro do servidor no meu domain. Imagino que isto esteja acontecendo devido há eu colocar os arquivos num diretório incorreto dentro do domínio, no entanto já tentei em todos as pasta que pude encontrar colocando apenas os arquivos(config.properties e log4j.properties) ou gerando um JAR com eles dentro.

Gostaria de saber se alguém sabe como posso corrigir esse problema, pois imagino que o problema não esta no código java pois fiz o deploy do mesmo EAR no BEA Weblogic 10.3 e o arquivo de configuração foi encontrado normalmente e visando que sou novo com servidor glassfish posso estar cometendo algum erro em relação as arquitetura do servidor. Abaixo irei colocar meu código java para auxiliarem em alguma dúvida caso possuam e apenas como obervação o problemas esta ocorrendo no método loadProperties(final String fileName) quando chamado pela segunda vez no método init()

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Locale;
import java.util.Properties;
import java.util.ResourceBundle;
import java.util.Set;

import javax.faces.context.FacesContext;

import org.sicobi.Constants;
import org.sicobi.exception.SystemException;

/** 
 * Classe para manipulação de properties.
 *
 * @since 29/07/2010 
 * @version 1.0.0
 */
public final class PropertyHandler {
    
    /** Arquivo de propriedades do arquivo interno do sistema. */
    public static final String INTERNAL_FILE_CONFIG_PROPERTIES = "application.properties";
    
    /** Arquivo de propriedades do arquivo externo do sistema. */
    public static final String EXTERNAL_FILE_CONFIG_PROPERTIES = "config.properties";
    
    /** Chave da sigla do sistema. */
    public static final String SYSTEM_ACRONYM_KEY = "default.application.name";
    
    /** Chave do caminho do arquivo de configuração do log4j. */
    public static final String LOG4J_PATH_KEY = "log4j.properties";
    
    /** Propriedades para configuração do Adapter. */
    private final Properties props = new Properties();
    
    /** Indicador para configuração do componente. */
    private boolean configured = false;
    
    /** Armazena Instancia Singleton. **/
    private static PropertyHandler theInstance = null;

    /** Armazena Instancia Singleton. **/
    private static ResourceBundle theResourceInstance = null;

    /** Armazena Instancia Singleton. **/
    private static PropertyHandler theApplicationInstance = null;

    /** Armazena o facesContext */
    private static FacesContext facesContext = null;
    
    /** Construtor. */
    private PropertyHandler() {
    }

    /** Construtor. */
    private PropertyHandler(String fileName) {
        init(fileName);
    }
    
    /**
     * Retorna a instância singleton de PropertyHandler.
     * 
     * @return retorna uma instância.
     */
    public static PropertyHandler getInstance() {
        if (theInstance == null) {
            theInstance = new PropertyHandler();
            theInstance.init();
        }
        return theInstance;
    }
    
    /**
     * Obtem o resource do Contexto do jsf.
     * 
     * @return {@link PropertyHandler}
     */
    public static ResourceBundle getResourceBundle() {

        // Obtem o messageBundle do facescontext
        String messageBundle = getFacesContext().getApplication()
                .getMessageBundle();
        Locale locale = getFacesContext().getViewRoot().getLocale();

        // Instancia o resources
        if (theResourceInstance == null) {
            theResourceInstance = ResourceBundle.getBundle(messageBundle,
                    locale);
        } else if (!theResourceInstance.getLocale().equals(locale)) {
            // Verifica se o locale foi alterado
            theResourceInstance = ResourceBundle.getBundle(messageBundle,
                    locale);
        }
        
        return theResourceInstance;
    }
    
    /**
     * Retorna a instância singleton de PropertyHandler.
     * 
     * @return retorna uma instância.
     */
    public static PropertyHandler getApplicationInstance() {
        if (theApplicationInstance == null) {
            theApplicationInstance = new PropertyHandler(
                    INTERNAL_FILE_CONFIG_PROPERTIES);
        }
        return theApplicationInstance;
    }
    
    /**
     * Retorna a instância de PropertyHandler.
     * 
     * @return retorna uma instância.
     */
    public static PropertyHandler getInstance(String fileName) {
        return new PropertyHandler(fileName);
    }

    /**
     * Retorna a instância de PropertyHandler conforme o Locale.
     * 
     * @param locale
     *            O Locale.
     * @return retorna uma instância.
     */
    public static PropertyHandler getInstance(String fileName, Locale locale) {

        if (locale.equals(Constants.PORTUGUESE_BR)) {
            return new PropertyHandler(fileName + Constants.UNDERLINE
                    + Constants.PORTUGUESE_BR.toString()
                    + Constants.PROPERTIES_EXTENSAO);
        } else if (locale.equals(Constants.ENGLISH_US)) {
            return new PropertyHandler(fileName + Constants.UNDERLINE
                    + Constants.ENGLISH_US.toString()
                    + Constants.PROPERTIES_EXTENSAO);
        } else if (locale.equals(Constants.SPANISH_SP)) {
            return new PropertyHandler(fileName + Constants.UNDERLINE
                    + Constants.SPANISH_SP.toString()
                    + Constants.PROPERTIES_EXTENSAO);
        } else {
            return new PropertyHandler(fileName + Constants.UNDERLINE
                    + Locale.getDefault().toString()
                    + Constants.PROPERTIES_EXTENSAO);
        }
    }

    /**
     * Carrega o arquivo de properties do sistema.
     */
    public PropertyHandler init() {

        // Carrega o arquivo de properties
        loadProperties(INTERNAL_FILE_CONFIG_PROPERTIES);
        configured = true;

        // Obtém a sigla do sistema.
        String systemAcronym = theInstance.getProperty(SYSTEM_ACRONYM_KEY);

        // Recarrega o arquivo externo de properties
        loadProperties(EXTERNAL_FILE_CONFIG_PROPERTIES);
        configured = true;

        // Carrega as propriedades do log4j
        loadProperties(theInstance.getProperty(LOG4J_PATH_KEY));
        configured = true;

        return theInstance;
    }

    private void init(String fileName) {

        // Carrega o arquivo de properties
        loadProperties(fileName);
        configured = true;
    }

    /**
     * Método que retorna o valor da property passada como parâmentro.
     * 
     * @param key
     *            chave da property.
     * @return valor da property.
     */
    public String getProperty(final String key) {

        return this.getProperty(key, null);
    }

    /**
     * Método que retorna o valor da property passada como parâmentro.
     * 
     * @param key
     *            chave da property.
     * @param defaultValue
     *            valor padrão caso o valor da property seja nulo.
     * @return valor da property.
     */
    public String getProperty(final String key, final String defaultValue) {

        String value = null;

        if (!configured) {
            throw new IllegalStateException(
                    "Componente não inicializado! Executar o método init().");
        }
        value = props.getProperty(key, defaultValue);

        return value;
    }

    /**
     * Obtém as chaves.
     * 
     * @return chaves.
     */
    public Set<Object> keys() {
        return props.keySet();
    }

    /**
     * Carrega o arquivo de properties.
     * 
     * @param fileName
     *            nome do arquivo.
     */
    protected void loadProperties(final String fileName) {

        InputStream is = this.getClass().getClassLoader().getResourceAsStream(
                fileName);

        // tenta buscar o arquivo no file system
        if (is == null) {
            try {
                is = new FileInputStream(fileName);
            } catch (FileNotFoundException e) {
                // Não faz nada pois o tratamento de arquivo nao encontrado sera
                // logo abaixo.
            }
        }

        if (is != null) {
            try {
                props.load(is);
            } catch (IOException e) {
                StringBuilder sb = new StringBuilder();
                sb.append("Nao foi possivel carregar as propriedades: ")
                        .append(fileName);
                throw new SystemException(sb.toString(), e);
            }
        } else {
            StringBuilder sb = new StringBuilder();
            sb.append("Nao foi encotrado o arquivo: ").append(fileName);
            throw new SystemException(sb.toString());
        }
    }

    /**
     * @return the facesContext
     */
    public static FacesContext getFacesContext() {

        if (facesContext != null) {
            return facesContext;
        }

        return FacesContext.getCurrentInstance();
    }

    /**
     * @param facesContext
     *            the facesContext to set
     */
    public static void setFacesContext(FacesContext context) {
        facesContext = context;
    }
    
}
Criado 2 de agosto de 2010
Respostas 0
Participantes 1