A implementação do Tomcat sobrescreve o contexto.xml

2

Sou muito novo no Tomcat em geral, então, por favor, indique se algo está errado.

Minha pergunta é sobre atualizações para aplicativos já implantados, usando o gerenciador do Tomcat. Mas primeiro a primeira coisa. Estou usando o META-INF / Context.xml para armazenar informações de conexão para as conexões do banco de dados, portanto, isso é exclusivo para todos os servidores nos quais o aplicativo é implementado. Não tenho certeza se isso é ótimo, mas é a única maneira que conheço.

Portanto, ao atualizar o aplicativo, é importante que esse arquivo não seja modificado, pois não quero ter que refazer todas as alterações sempre que eu atualizar meu aplicativo.

Para atualização, estou usando o Tomcat Manager e tentei abordagens diferentes, mas tudo parece se basear no processo de remoção de implementação e, em seguida, implantar a nova versão. Dessa forma, o Context.xml é removido / substituído por um arquivo Context.xml vazio.

Então, minha pergunta é basicamente: como atualizo uma aplicação web em execução e, ao mesmo tempo, deixo intacto o Context.xml?

Btw, estou executando o Tomcat 6.0.24.

    
por Kristoffer Lindvall 25.03.2010 / 22:58

2 respostas

2

A configuração em que estou trabalhando atualmente tem vários contextos executando o mesmo aplicativo da Web e cada contexto tem configurações de banco de dados diferentes (semelhante à sua configuração, exceto que cada contexto está sendo executado em um servidor diferente).

Em vez de incluir o arquivo context.xml no META-INF, você pode criar um context.xml especificamente para cada instância em cada servidor e colocá-lo no $ TOMCAT_ROOT $ / conf / Catalina / localhost. Quando o Tomcat inicia o contexto, quaisquer configurações em Catalina / localhost / context.xml substituirão aquelas definidas em seu aplicativo da Web (por meio do arquivo WEB-INF / web.xml ou do arquivo META-INF / context.xml).

Tivemos alguns pequenos problemas com isso, no entanto, os parâmetros definidos em Catalina / localhost / context.xml não estão substituindo corretamente os definidos no aplicativo da Web, mas isso é facilmente resolvido adicionando o atributo de substituição ao nó do parâmetro, como então:

<Parameter name="foo" value="bar" override="1"/>

Os documentos dos contextos do tomcat descrevem muito disso com mais detalhes.

    
por 25.03.2010 / 23:25
0

Minha abordagem:

        // In debug there are no context
        // In production is de WAR / Context name 
        String database = servletContext.getContextPath();
        database = database.replace("/", "");
        if (database.isEmpty())
            database = "<my_default_context_name_only_debug>";

        getLogger().info("Database: " + database);

        dataSource = (DataSource) dataSourceCtx.lookup("jdbc/" + database);
    
por 19.03.2013 / 14:45