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

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.

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 …

2 curtidas

@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”

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’ ?)

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)

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?

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

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.

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

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.

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)?

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 );

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);

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.

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....

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

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)