Erro ao chamar relatorio com deploy na "Amazon-Elastic Beanstalk" (GraphicsEnvironment.java:204)

16 respostas Resolvido
linuxprogramaçãofront-endjavahibernate
B

Erro ao chamar relatorio com deploy na “Amazon-Elastic Beanstalk”,não encontrei nada referente a esse erro.
(Atualizado o log)

Caused by: java.awt.HeadlessException

at java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:204)

at java.awt.Window.(Window.java:536)

at java.awt.Frame.(Frame.java:420)

at java.awt.Frame.(Frame.java:385)

at javax.swing.JFrame.(JFrame.java:189)

at net.sf.jasperreports.view.JasperViewer.(JasperViewer.java:267)

at net.sf.jasperreports.view.JasperViewer.viewReport(JasperViewer.java:655)

at net.sf.jasperreports.view.JasperViewer.viewReport(JasperViewer.java:587)

at net.sf.jasperreports.view.JasperViewer.viewReport(JasperViewer.java:535)

at br.com.tecnologia.bean.FornecedorBean.imprimirFornecedorPorCodigo(FornecedorBean.java:249)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:498)

at org.apache.el.parser.AstValue.invoke(AstValue.java:247)

at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:267)

at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)

 33 more
01-Dec-2016 17:14:34.476 SEVERE [http-nio-8080-exec-3] com.sun.faces.context.AjaxExceptionHandlerImpl.handlePartialResponseError java.awt.HeadlessException

at java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:204)

at java.awt.Window.(Window.java:536)

at java.awt.Frame.(Frame.java:420)

at java.awt.Frame.(Frame.java:385)

at javax.swing.JFrame.(JFrame.java:189)

at net.sf.jasperreports.view.JasperViewer.(JasperViewer.java:267)

at net.sf.jasperreports.view.JasperViewer.viewReport(JasperViewer.java:655)

at net.sf.jasperreports.view.JasperViewer.viewReport(JasperViewer.java:587)

at net.sf.jasperreports.view.JasperViewer.viewReport(JasperViewer.java:535)

at br.com.tecnologia.bean.FornecedorBean.imprimirFornecedorPorCodigo(FornecedorBean.java:249)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:498)

at org.apache.el.parser.AstValue.invoke(AstValue.java:247)

at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:267)

at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)

at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:147)

at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88)

at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:814)

at javax.faces.component.UICommand.broadcast(UICommand.java:300)

at javax.faces.component.UIData.broadcast(UIData.java:1108)

at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)

at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)

at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)

at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)

at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)

at javax.faces.webapp.FacesServlet.service(FacesServlet.java:658)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)

at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)

at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)

at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:676)

at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528)

at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1099)

at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:670)

at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520)

at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476)

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)

at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)

at java.lang.Thread.run(Thread.java:745)

Pior que o suporte da Amazon falou que tenho que ser premium para eles me ajudarem nisso, affff.

16 Respostas

P

HeadlessException

Thrown when code that is dependent on a keyboard, display, or mouse is called in an environment that does not support a keyboard, display, or mouse.

para resolver vc pode fazer isso

java -Djava.awt.headless=true …

B

@peczenyj, ainda conheço pouco das ferramentas da amazon, porem creio que não tem onde eu inserir esse comando pelo Elastic Beanstalk ou tem? onde encontro ou qual o nome da ferramenta? não consegui encontrar e estou usando o Windows na maquina local.
Estou procurando como instalar o “Installing the AWS EB CLI”

P

eu ACHO que

http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/java-tomcat-platform.html#java-tomcat-platform-configfiles

seguindo isso vc talvez consiga. o que vc tem que fazer é passar este parametro para a JVM ( viu q tem no exemplo algo como JVM Options: ‘-Xmn128m’ ?)

B

Alterei a ‘-Xmn128m’ não adiantou

Tentando seguir o tutorial,pasa usar o comando acima

1 Pressione a chave do Windows e digite as variáveis de ambiente.
2 Escolha Editar variáveis de ambiente para sua conta.
3 Escolha PATH e, em seguida, escolha Editar.
4 Adicione caminhos ao campo Valor variável, separados por ponto e vírgula. Por exemplo: C: \ existing \ path; C: \ new \ path
5 Escolha OK duas vezes para aplicar as novas configurações.
6 Feche todos os prompts do comando em execução e reabra.

Para instalar o EB CLI com pip (Windows)

1 Abra o Windows Command Processor a partir do menu Iniciar.
Verifique se Python e pip estão instalados corretamente com os seguintes comandos:

C:\Windows\System32> python --version
AQUI E A SAIDA DO CONSOLE: Python 3.4.3
C:\Windows\System32> pip --version
AQUI E A SAIDA DO CONSOLE: pip 6.0.8 from C:\Python34\lib\site-packages (python 3.4)

B

foi instalado o;

Command Line Interface for AWS EB.
 Latest Version: 3.8.4

mas não estou encontrando uma forma de utilizar o comando;

java -Djava.awt.headless=true

o que devo fazer?

B

Pessoal atualizei o log, esta mais completo o erro ainda persiste, e pior de tudo não consigo configurar nada.

P

Vamos la

vc tem que passar este parametro para a jvm: -Djava.awt.headless=true

ai vc “nao sei como fazer”

procurei um exemplo de documentação que pode te ajudar. no caso eles passam outro parametro, o -Xmn128m. isso é um exemplo. talvez se vc colocar essa opção o seu problema seja resolvido.

ou entao vc abre um ticket no suporte da Amazon e pergunta o que fazer.

B

Agradeço…após adicionar neste campo acima, este erro foi sanado, apareceu outro mas creio que seja uma outra “Estória”

S

Por que você está tentando abrir um JasperViewer (gui swing) no lado servidor?

Mas é justamente dessa forma que a JVM está executando, em modo headless, ou seja, sem suporte à gui, teclado ou mouse.

É bem provável que ele não vá conseguir executar sua JVM em modo não-headless, talvez comprando um plano premium, mas só verificando com o fornecedor.

B

Tentei usando o arquivo java.properties e adicionei o camando java -Djava.awt.headless=true
usei esse tutorial de configuração da JVM na amazon e não funcionaou.


Alguma sugestão a mais? como gera o PDF sem usar jasperView(gui swing)?

S
Solucao aceita

Essa propriedade já está true, por isso que a exceção é lançada
Não creio que esse ambiente da amazon te permita executar em modo non-headless

Em princípio é só usar a a classe JasperExportManager e não usar nenhuma classe de componentes visuais.

Algo mais ou menos assim:

JasperExportManager.exportReportToPdfStream( objetoJasperPrint, objetoOutputStream );

B

Oopaaa…@staroski eu não to querendo imprimir do lado do servidor, gostaria que o cliente escolhesse onde salvar na própria maquina, por isso anteriormente eu estava usando o “JasperViewer” , fiz o teste usando o indicado acima, porem funciona somente na maquina local.outra coisa como e em linux a plataforma da amazon, se eu colcar o diretorio para o desktop também funcionaria no servidor claro, mas não na maquina do cliente.

Connection conexao = HibernateUtil.getConexao();
JasperPrint print =  JasperFillManager.fillReport(caminho, parametros, conexao);
        
          OutputStream output = new FileOutputStream(new File("c:/output/JasperReport.pdf"));
          
          JasperExportManager.exportReportToPdfStream(print, output);
S

Isso não vai funcionar, o Jasper está executando no lado servidor, lembra?
Por isso você tinha HeadlessException, seu servidor provavelmente nem tem uma placa gráfica, e mesmo que tivesse, você estaria abrindo o JasperViewer no servidor, não na máquina do cliente.
Acho que você tem que dar uma estudada pra entender melhor o que executa no servidor e o que executa no cliente. :wink:

Você não vai criar um FileOutputStream no servidor.
Você tem que passar como parâmetro para o JasperExportManager, o OutputStream da requisição que você recebeu no servidor.
EM principio o próprio navegador de seu cliente vai pedir para salvar o conteúdo enviado pelo Stream, ou então vai salvar na pasta padrão configurada pelo usuário.

B

Opa @staroski , após 4 dia “ilhado” sem net na cidade vamos retornar a batalha…
O métoro de impressao abaixo.

//imprimirClientePorCodigo
     public void imprimirClientePorCodigo(ActionEvent evento) {
     try {                    
         Cliente clienteSelecionado = (Cliente) evento.getComponent().getAttributes().get("clienteSelecionado");

         String caminho = Faces.getRealPath("//report//relatorioClientePorCodigo.jasper");

         Map<String, Object> parametros = new HashMap<>();
         parametros.put("COD_PESSOA",clienteSelecionado.getPessoa().getCodigo());
      
         Connection conexao = HibernateUtil.getConexao();
         JasperPrint jp = JasperFillManager.fillReport(caminho, parametros, conexao);
       
         JasperViewer.viewReport(jp, false);
 
     } catch....
S

Mas isso está tratando um evento de uma tela Swing
Achei que você estivesse gerando seu relatório em um Servlet

D

Desculpem reviver esse tópico, mas estou postando a minha solução.

Caso ainda não tenham resolvido o problema de gerar relatório no Elastic Beanstalk, encontramos a solução de colocar na raiz do resources esse properties para substituir o original do jasper.

jasperreports_extension.properties (16,1 KB)

Criado 1 de dezembro de 2016
Ultima resposta 21 de jun. de 2017
Respostas 16
Participantes 4