Melhores praticas web.xml

Pessoal,

Estou fazendo uma aplicação com jsf + primefaces com glassfish onde uso o componente do primefaces para fazer upload de fotos.

O problema é o seguinte, no web.xml tenho que informar o diretório que será usado como tmp, na minha máquina quero quer fique em um determinado diretório e no servidor quando publicar a aplicação em outro.

Qual a melhor forma de solucionar este problema ?

Editar o web.xml apos implantar o .war ? (é possível?)

Gerar um arquivo properts e mandar o web.xml ler os path deste arquivo ? (é possível?)

ou vou ter que reescrever o web.xml antes de gerar o .war mesmo ? (esta funcionando assim, mas não deve ser o correto)

Obrigado,

Marcelo Gomes

Tem algum exemplo de como fazer para o meu web.xml buscar isso no properts ?

Veja meu web.xml esta assim:


<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
    <context-param>
        <param-name>javax.faces.PROJECT_STAGE</param-name>
        <param-value>Development</param-value>
    </context-param>
    <context-param>
        <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
        <param-value>server</param-value>
    </context-param>
    <filter>
        <filter-name>PrimeFaces FileUpload Filter</filter-name>
        <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
        <init-param>
            <param-name>thresholdSize</param-name>
            <param-value>51200</param-value>
        </init-param>
        <init-param>
            <param-name>uploadDirectory</param-name>
            <param-value>/tmp/patrimonio</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>PrimeFaces FileUpload Filter</filter-name>
        <servlet-name>Faces Servlet</servlet-name>
    </filter-mapping>
    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet>
        <servlet-name>Resource Servlet</servlet-name>
        <servlet-class>org.primefaces.resource.ResourceServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.jspx</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>Resource Servlet</servlet-name>
        <url-pattern>/primefaces_resource/*</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>index.jspx</welcome-file>
    </welcome-file-list>
</web-app>

Veja que o uploadDirectory esta apontando para /tmp/patrimonio, mas quando vou rodar esta aplicação no windows tenho que modificar para por exemplo c:\tmp e regerar o .war e fazer o deploy. se tiver em propert vou ter que fazer o deploy novamente, mas não teria que ter um .war para windows e outro para unix

Sobre pegar os valores por jndi ate achei um pagina dizendo como fazer no glassfish, (http://www.manorrock.com/documents/glassfish/independent.html) mas não consegui ainda…

Obrigado,

Marcelo Gomes

Consegui pegar valores do glassfish igual ao site dizia.

Não consegui pegar objeto tipo string mas funcionou para Properties.

Tirei um print de como ficou a configuração do glassfish e o código para teste … quem quiser ver http://marcelogomesrp.blogspot.com/2011/07/glassfish-jndi-properties.html

Mas não sei como fazer para o web.xml ler este valor…

Obrigado,

Marcelo Gomes

Em casos como este, eu preferiria colocar no web.xml o caminho para um diretorio onde encontraria as configuracoes necessarias, um .properties por exemplo. Existe uma maneira ainda melhor que seria registrar este caminho em uma string no JNDI mas esta opcao existe em apenas alguns servidores de aplicacao como o websphere, tentei encontrar aqui agora no weblogic, mas ele nao tem essa opcao pelo que pude ver ate agora, da primeira forma vc precisaria de uma alteracao/redeploy da aplicacao para alterar este caminho no segundo caso nao, e possivel alterar o valor via admin console no app server. Enfim, espero que ajude.

[]`s