[RESOLVIDO] Jetty 6 não esta lendo os arquivos *.properties que estão no ClassPath

Tenho uma aplicação que esta funcionando perfeitamente bem sob o Tomcat 6, porém estou tentando faze-lo funcionar no Jetty 6, mas até o momento não consegui que ele venha a ler os arquivos .properties que estão dentro do diretório resources definido no meu classpath.

Minha estrutura de diretório no Eclipse WTP esta assim:

Meu arquivo .classpath:

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" path="src"/>
    <classpathentry kind="src" path="resources"/>
    <classpathentry kind="src" path="jasperFiles"/>
    <classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.web.container"/>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
    <classpathentry kind="output" path="WebContent/WEB-INF/classes/"/>
</classpath>

Veja que no classpath contém estas duas definições (Source Folder):

<classpathentry kind="src" path="resources"/>
<classpathentry kind="src" path="jasperFiles"/>

E dentro destas pastas estão os arquivos .properties que o jetty deverá ler durante a execução da aplicação.

NOTA: Nesta pasta estão os arquivo de mensagens para cada um dos relatórios em JASPER e o arquivo de internacionalização.

No meu web.xml esta configurado assim:

    &lt;!-- CONTEXT Configuration --&gt;
    &lt;context-param&gt;
        &lt;param-name&gt;javax.servlet.jsp.jstl.fmt.localizationContext&lt;/param-name&gt;
        &lt;param-value&gt;pt_BR&lt;/param-value&gt;
        &lt;param-value&gt;messages&lt;/param-value&gt;
    &lt;/context-param&gt;

Meu arquivo messages.properties (esta localizado dentro da pasta resources):

estado.titulo=Cadastro de estados
estado.detalhes.titulo=Detalhes do Cadastro do Estado
estado.nome.rotulo=Estado
estado.uf.rotulo=UF
estado.pais.rotulo=País
estado.aba.novo=Novo Estado
estado.aba.lista=Lista Estados
estado.aba.pesquisa=Pesquisa
estado.status=Status

Com isso eu consigo usar o JSTL de mensagens (funcioando sob o TomCat), exemplo:

    &lt;label for=&quot;estado.nome&quot;&gt;&lt;fmt:message key=&quot;estado.nome.rotulo&quot;/&gt;:&lt;/label&gt;
    &lt;input type=&quot;text&quot; tabindex=&quot;2&quot; name=&quot;estado.nome&quot; id=&quot;estado.nome&quot; value=&quot;${estado.nome}&quot; maxlength=&quot;50&quot; size=&quot;130&quot; class=&quot;campo&quot; onKeyUp=&quot;return UpperCase(this, event);&quot;/&gt;

Porém isso não funciona sob o jetty, conforme imagem:

Meu arquivo de configuração sicp.xml (localizado no diretório contexts do Jetty)

&lt;?xml version=&quot;1.0&quot;  encoding=&quot;ISO-8859-1&quot;?&gt;
&lt;!DOCTYPE Configure PUBLIC &quot;-//Mort Bay Consulting//DTD Configure//EN&quot; &quot;http://jetty.mortbay.org/configure.dtd&quot;&gt;

&lt;Configure class=&quot;org.mortbay.jetty.webapp.WebAppContext&quot;&gt;
  &lt;Set name=&quot;contextPath&quot;&gt;/sicp&lt;/Set&gt;
  &lt;Set name=&quot;war&quot;&gt;&lt;SystemProperty name=&quot;jetty.home&quot; default=&quot;.&quot;/&gt;/webapps/sicp.war&lt;/Set&gt;
  &lt;Set name=&quot;extractWAR&quot;&gt;true&lt;/Set&gt;
  &lt;Set name=&quot;copyWebDir&quot;&gt;false&lt;/Set&gt;
&lt;/Configure&gt;

Meu arquivo de LOG (/etc/jetty/logs/2010_10_04.stderrout.log):

2010-10-04 10:40:31.629:INFO::jetty-6.1.25
2010-10-04 10:40:31.715:INFO::Deploy /etc/jetty/contexts/test.xml -&gt; org.mortbay.jetty.webapp.WebAppContext@123b25c{/,/etc/jetty/webapps/test}
2010-10-04 10:40:31.760:INFO::Deploy /etc/jetty/contexts/javadoc.xml -&gt; org.mortbay.jetty.handler.ContextHandler@79a2e7{/javadoc,file:/etc/jetty/javadoc/}
2010-10-04 10:40:31.821:INFO::Deploy /etc/jetty/contexts/test-jndi.xml -&gt; org.mortbay.jetty.webapp.WebAppContext@949f69{/test-jndi,/etc/jetty/contexts/test-jndi.d}
2010-10-04 10:40:31.839:INFO::Deploy /etc/jetty/contexts/sicp.xml -&gt; org.mortbay.jetty.webapp.WebAppContext@f47bf5{/sicp,/etc/jetty/webapps/sicp.war}
2010-10-04 10:40:32.509:INFO:/:Transparent AsyncProxyServlet @ /google to http://www.google.com
2010-10-04 10:40:32.576:INFO::No Transaction manager found - if your webapp requires one, please configure one.
2010-10-04 10:40:32.768:INFO::Extract /etc/jetty/webapps/sicp.war to /etc/jetty/work/Jetty_0_0_0_0_8080_sicp.war__sicp__q3h9fx/webapp
2010-10-04 10:40:38.443:WARN::Unknown realm: Test JAAS Realm
2010-10-04 10:40:38.558:INFO::Opened /etc/jetty/logs/2010_10_04.request.log
2010-10-04 10:40:38.575:INFO::Started SelectChannelConnector@0.0.0.0:8080
log4j:WARN No appenders could be found for logger (org.displaytag.export.ExportViewFactory).
log4j:WARN Please initialize the log4j system properly.

Deve existir alguma configuração que eu não estou aplicando para que o Jetty entenda e carregue os arquivos .properties.

Peço orientações, pois só falta isso para colocar o Jetty em produção.

Obrigado e fico no aguardo.

Oi Dennys!

O problema nao parece estar com o jetty, e sim com o war e seu processo de geracao.

Se voce abrir o .war manualmente, os arquivos properties estao dentro de WEB-INF/classes? Eles precisam estar.

Oi Paulo, muito obrigado por responder…

Sim, tanto o arquivo messages.properties quanto os outros .properties (mensagens dos relatórios em JASPER, ex: jasperDepositoBancario.properties) estão dentro do WEB-INF/classes

messages.properties

jasperDepositoBancario.properties

Por este motivo que esta confuso a solução.

ao meu ver entao é algum problema com a tag que vc esta utilizando para exibir as mensagens. Ja tentou recuperar as mensagens na action ? La funciona ?

estranho demais.

de onde voce baixou esse jetty? pois ele nao vem com processador de JSP, ele usa o do tomcat. a configuracao javax.servlet.jsp.jstl.fmt.localizationContext deveria funcionar direitinho.

tente tanto com o jetty 7, quanto ver se javax.servlet.jsp.jstl.fmt.localizationContext está correto para o jetty (é padrao, é obrigatorio funcionar). voce ver nos nossos sistemas como esta configurado.

Desculpe-me amigo, mas as tag estão OK, pois elas funcionam perfeitamente através do TOMCAT e estou utilizando o vRaptor, obrigado.

[quote=Paulo Silveira]estranho demais.

de onde voce baixou esse jetty? pois ele nao vem com processador de JSP, ele usa o do tomcat. a configuracao javax.servlet.jsp.jstl.fmt.localizationContext deveria funcionar direitinho.

tente tanto com o jetty 7, quanto ver se javax.servlet.jsp.jstl.fmt.localizationContext está correto para o jetty (é padrao, é obrigatorio funcionar). voce ver nos nossos sistemas como esta configurado.[/quote]

Baixei o Jetty 6.1.25 do site codehaus.org em http://dist.codehaus.org/jetty/

Descompactei-o no diretório /etc do meu Linux Debin Lenny e por mero gosto renomeei a pasta de jetty-6.1.25 para jetty.
Logo após criei um link simbólico do arquivo /etc/jetty/bin/jetty.sh no diretório /etc/init.d

Em seguida copiei o sicp.war para dentro da pasta /etc/jetty/webapps e copiei o arquivo de configuração sicp.xml para dentro da pasta /etc/jetty/contexts

De qual site vcs. baixam o Jetty ?
Qual de seus sistemas você indica para eu ver a configuração ?

a configuração correta do web.xml é:

<context-param>
		<param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
		<param-value>messages</param-value>
	</context-param>
<context-param>
		<param-name>javax.servlet.jsp.jstl.fmt.locale</param-name>
		<param-value>pt BR</param-value>
	</context-param>

[quote=Lucas Cavalcanti]a configuração correta do web.xml é:

<context-param> <param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name> <param-value>messages</param-value> </context-param> <context-param> <param-name>javax.servlet.jsp.jstl.fmt.locale</param-name> <param-value>pt BR</param-value> </context-param> [/quote]

Nossa Lucas, perfeito!

Eu sabia que estava faltando alguma configuração, porém não imaginava que seria justamente no web.xml o problema.
Grande ajuda, muito obrigado.

Agora vou testar os relatório em JASPER que buscam arquivos .properties para exibir sua internacionalização.

Muito obrigado Paulo e Lucas, realmente me ajudaram.

Agora me surgiu uma dúvida: Como fica o contexto de diretório da minha aplicação através do Jetty ?

Eu tenho um relatório que pega uma imagem dinamicamente da pasta /sicp/WebContent/img/assinatura
Porém no meu arquivo arquivo jasperCustoSintese.properties tenho uma chave assim:

pathImageCoordenador=…/…/img/assinatura/coordenador.jpg

A chave pathImageCoordenador esta sendo utilizada em alguns relatórios (JASPER) através de Parameters $P{pathImageContabil}

Mas não esta sendo localizado a imagem, então como fica agora com o Jetty, pois já tentei mudar para:

pathImageCoordenador=/img/assinatura/coordenador.jpg

pathImageCoordenador=WebContent/img/assinatura/coordenador.jpg

E nada funcionou…

Obrigado novamente.