Estou migrando um aplicativo JSF 2.0 de TOMCAT7 para JETTY…
Tudo correndo relativamente bem. No entanto não estou conseguindo operar uma situação.
No meu ambiente de relatórios, o usuário tem algumas opções de saída (pdf, xls e etc). Quando ele seleciona PDF, o sistema gera um arquivo no servidor… e liga ao p:media para exibição ((infelizmente o componente media não consegue trabalhar com streaming, por isso tem q ser criado o arquivo).
para encontrar o caminho da aplicacao… gerava o arquivo ali… exibia… e ao final, excluia o arquivo…
Mas em jetty isso não funciona… Li muito sobre, e descobri que o jetty lida de maneira bem diferente com isso, gerando uma pasta temporaria… e não fixa como o tomcat…
Cara inicia o Jetty setando o valor para java.io.tmpdir
Obs: supondo que você esta dentro da pasta de instalação do jetty, dessa forma
ele cria a estrutura parecida com a do tomcat
java -Djava.io.tmpdir=./work -jar start.jar
e dentro desta pasta work o jetty vai gerar uma pasta do seu projeto e dentro dela verifica se ta sendo criado
seu arquivo e coloca pra imprimir o valor do seu realPath para ver se o caminho ta batendo.
[quote=jweibe]Cara inicia o Jetty setando o valor para java.io.tmpdir
Obs: supondo que você esta dentro da pasta de instalação do jetty, dessa forma
ele cria a estrutura parecida com a do tomcat
java -Djava.io.tmpdir=./work -jar start.jar
e dentro desta pasta work o jetty vai gerar uma pasta do seu projeto e dentro dela verifica se ta sendo criado
seu arquivo e coloca pra imprimir o valor do seu realPath para ver se o caminho ta batendo.[/quote]
Obrigado por responder! Já toh arrancandos os cabelos aki…
Sua idéia é otima! Resolveria meu problema… mas não consegui executar esse comando não… se eu setar outra variavel, ao inves de java.io.tmpdir ele sobe o server… mas nessa variavel naum…
Mas isso eu poderia usar mesmo outra variável… no entanto… o valor que chega é a string em si… e naum um valor… chega pra mim literamente ./work… e naum o valor de ./work…
tentei /work… somente work… .work… e nada…
poderia me ajudar nisso? acho que estamos bem perto…
Sua resposta ta meio confusa.
Quando você executa o Jetty dessa forma
java -Djava.io.tmpdir=./work -jar start.jar
Ou
java -Djava.io.tmpdir=C:\\Jetty\\work -jar start.jar // passa o diretório completo
O valor que você passa em java.io.tmpdir, ele pega esse valor como o caminho onde será descompactado seu .war.
faça o seguinte:
String path = ((ServletContext) FacesContext.getCurrentInstance().getExternalContext().getContext()).getRealPath("/WEB-INF");
File f = new File(path);
System.out.println(f.getAbsolutePath()); // Posta o valor que imprime aqui.
[quote=jweibe]Sua resposta ta meio confusa.
Quando você executa o Jetty dessa forma
java -Djava.io.tmpdir=./work -jar start.jar
Ou
java -Djava.io.tmpdir=C:\\Jetty\\work -jar start.jar // passa o diretório completo
O valor que você passa em java.io.tmpdir, ele pega esse valor como o caminho onde será descompactado seu .war.
faça o seguinte:
String path = ((ServletContext) FacesContext.getCurrentInstance().getExternalContext().getContext()).getRealPath("/WEB-INF");
File f = new File(path);
System.out.println(f.getAbsolutePath()); // Posta o valor que imprime aqui.
[/quote]
Ahhh… me desculpe… pensei que ./work era um parametro do jetty ou coisa do tipo… naum entendi que tinha q mudar isso… agora deu certo… consegui acesso a pasta… e os arquivos estão sendo gerados…
Porém o componente não exibe o PDF… e o caminho agora ficou 100%…
Eu li algo sobre o jetty precisasr de um servlet pra exibir conteudo estático… isso procede?
Cara isso não procede tu teu arquivo estiver dentro da pasta webapp do seu projeto ele estará acessível
pelo navegador…
Você ta querendo usar o que para mostrar o pdf? p:media do primefaces? se for no site do primefaces
tem um exemplo de como fazer vide:
<p:media value="/resources/other/guide.pdf" width="100%" height="300px">
Your browser can't display pdf, <h:outputLink value="/resources/other/guide.pdf">click</h:outputLink> to download pdf instead.
</p:media>
[quote=jweibe]Cara isso não procede tu teu arquivo estiver dentro da pasta webapp do seu projeto ele estará acessível
pelo navegador…
Você ta querendo usar o que para mostrar o pdf? p:media do primefaces? se for no site do primefaces
tem um exemplo de como fazer vide:
<p:media value="/resources/other/guide.pdf" width="100%" height="300px">
Your browser can't display pdf, <h:outputLink value="/resources/other/guide.pdf">click</h:outputLink> to download pdf instead.
</p:media>
[/quote]
O Dialog com o p:media q exibe são criados dinamicamente… pelo bean… da mesma maneira que era feito no tomcat…
o arquivo está sendo gerado no diretório raiz… no caso webapp…
e no value do media está sendo passado o nome do arquivo… sem caminho… pois o arquivo estah na primeira pasta… ex: fulano.pdf
mas ele fica com a tela cinza e não exibe… estava dando um erro… dizendo que necessitava de jdk ao invés de jre… pesquisei e colocando: -Dorg.apache.jasper.compiler.disablejsr199=true no start.ini resolve…
Sim… e o mais estranho q notei agora… embora o p:media não exiba o pdf, ficando uma tela cinza… se clicar com o botao direito… e dar um salvar como… ele baixa o arquivo… e o arquivo tah perfeito… q locura… jah viu algo assim?
[quote=jweibe]Cara esse cinza não é por que você não tem o plugin do flash instalado? salvo engano o p:media e feito
em flash.[/quote]
Não não…pra vc ter uma ideia… se acesso (do mesmo pc, navegador e etc) o servidor, que roda tomcat ao invés de jetty… funciona normalmente…
e o mais estranho:
quando executo no firefox… ele exibe a tela cheia de codigos (no p:media), tipo isso: »^¹j??0?\r3Ñ É%7?\sf?\ìï¸$W¯3?ë]|¢¹Ø?Ç÷ßhÌwñ!WQ?Zl?Öëzø?Ýñø¢éý×BN cè½2¨¦µ1À·] 1.??Eµ$ENN?ñv½ää
e no I.E. funciona perfeitamente…
todo esse comportamento não acontece usando TOMCAT…
naum existe algum parametros… configuração… algo em relação a encoding…que tenha q mudar pra usar jetty?