Erro ao executar um servlet(jasperreports) no Linux?

10 respostas
farnetani

Pessoal, quando executo o servlet no servidor linux (RedHat) ele me resulta o seguinte erro:


description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Servlet execution threw an exception

root cause

java.lang.InternalError: Cant connect to X11 window server using xhosts+ as the value of the DISPLAY variable.

sun.awt.X11GraphicsEnvironment.initDisplay(Native Method)

sun.awt.X11GraphicsEnvironment.<clinit>(X11GraphicsEnvironment.java:134)

java.lang.Class.forName0(Native Method)

java.lang.Class.forName(Class.java:141)

java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:62)

dori.jasper.engine.util.JRGraphEnvInitializer.initializeGraphEnv(JRGraphEnvInitializer.java:101)

dori.jasper.engine.fill.JRBaseFiller.<init>(JRBaseFiller.java:208)

dori.jasper.engine.fill.JRVerticalFiller.<init>(JRVerticalFiller.java:123)

dori.jasper.engine.fill.JRVerticalFiller.<init>(JRVerticalFiller.java:115)

dori.jasper.engine.fill.JRFiller.fillReport(JRFiller.java:110)

dori.jasper.engine.JasperFillManager.fillReport(JasperFillManager.java:219)

dori.jasper.engine.JasperFillManager.fillReport(JasperFillManager.java:159)

dori.jasper.engine.JasperManager.fillReport(JasperManager.java:666)

beans.Imprimir.service(Imprimir.java:45)

javax.servlet.http.HttpServlet.service(HttpServlet.java:856)

note The full stack trace of the root cause is available in the Tomcat logs.


Depois ele me resulta outro erro, quando atualizado:


type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Servlet execution threw an exception

root cause

java.lang.NoClassDefFoundError

java.lang.Class.forName0(Native Method)

java.lang.Class.forName(Class.java:141)

java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:62)

dori.jasper.engine.util.JRGraphEnvInitializer.initializeGraphEnv(JRGraphEnvInitializer.java:101)

dori.jasper.engine.fill.JRBaseFiller.<init>(JRBaseFiller.java:208)

dori.jasper.engine.fill.JRVerticalFiller.<init>(JRVerticalFiller.java:123)

dori.jasper.engine.fill.JRVerticalFiller.<init>(JRVerticalFiller.java:115)

dori.jasper.engine.fill.JRFiller.fillReport(JRFiller.java:110)

dori.jasper.engine.JasperFillManager.fillReport(JasperFillManager.java:219)

dori.jasper.engine.JasperFillManager.fillReport(JasperFillManager.java:159)

dori.jasper.engine.JasperManager.fillReport(JasperManager.java:666)

beans.Imprimir.service(Imprimir.java:45)

javax.servlet.http.HttpServlet.service(HttpServlet.java:856)

note The full stack trace of the root cause is available in the Tomcat logs.


Apache Tomcat/5.0.19

10 Respostas

J

Oi

farnetani, pelo que vi o erro parece estar no teu Linux… Mas em todo caso, poste teu código aí, quem sabe encontramos um errinho nele…

T+

farnetani

package beans;

import dori.jasper.engine.<em>;

import dori.jasper.engine.design.</em>;

import dori.jasper.engine.print.<em>;

import dori.jasper.view.</em>;

import dori.jasper.*;
import <a href="http://java.io">java.io</a>.<em>;

import javax.servlet.</em>;

import javax.servlet.http.*;

import java.util.Map;

import java.util.Map;
import java.util.HashMap;

import java.sql.*;

public class Imprimir extends HttpServlet {

private static Connection con2 = null;
private RegNegocio rn = new RegNegocio();

public void service(HttpServletRequest request, HttpServletResponse response)

throws IOException, ServletException

{

byte[] output = null;

JRExporter exporter = null;

byte[] bytes = null;

Map parameters = new HashMap();

<a href="//parameters.put">//parameters.put</a>(“REPORT_CONNECTION”, getConexao());

<a href="//parameters.put">//parameters.put</a>(“codarea”,“2”);
String systemId = getServletContext().getRealPath(request.getServletPath());
  File directory = new File(systemId.substring(0, systemId.lastIndexOf(File.separator)-5));

  try {
        //File reportFile = new File("c:\\empresas.jasper");
        File reportFile = new File(directory.getPath()+"/ireports/empresas.jasper");          
        //+JasperDesign jasperDesign = JasperManager.loadXmlDesign("c:\\empresas.xml");
        //+JasperReport jasperReport = JasperManager.compileReport(jasperDesign);          
        //JasperPrint jasperPrint = JasperManager.fillReport(jasperReport, null, conn);

// JasperPrint jasperPrint = JasperManager.fillReport(reportFile.getPath(), null, getConexao());
JasperPrint jasperPrint = JasperManager.fillReport(reportFile.getPath(), null, rn.armaConexao2());

bytes =JasperManager.runReportToPdf(reportFile.getPath(), null, getConexao());

       if ((bytes != null) && (bytes.length>0)) 
       {
         response.setHeader("application/pdf", "Content-Type");             
         response.setContentType("application/pdf");
         response.setContentLength(bytes.length);
         ServletOutputStream ouputStream = response.getOutputStream();
         ouputStream.write(bytes, 0, bytes.length);
         ouputStream.flush();
         ouputStream.close();
       }  

        //jasperPrint = JasperManager.fillReport(jasperReport,null,conn);
        //jasperPrint = JasperManager.fillReport(jasperReport,parameters,conn);      
        //jasperPrint = JasperManager.fillReport(jasperReport,null,getConexao());             
        //JasperViewer.viewReport(jasperPrint);

// JasperExportManager.exportReportToPdfFile(jasperPrint, “c:\farnetani.pdf”);
// JasperViewer.viewReport(jasperPrint, true);

} catch (Exception e) {
         e.printStackTrace();
       }
   
}
public static Connection getConexao(){

try{

DriverManager.registerDriver(new org.firebirdsql.jdbc.FBDriver());

con2 =DriverManager.getConnection(jdbc:firebirdsql:localhost/3050:/home/junior/Banco.gdb?lc_ctype=WIN1252,SYSDBA,masterkey);

con2.setAutoCommit(true);

} catch (SQLException e){

System.out.println("Erro: " + (String)e.getMessage());

}

return con2;

}

}

Aí está o código…

“jeveaux”:
Oi

farnetani, pelo que vi o erro parece estar no teu Linux… Mas em todo caso, poste teu código aí, quem sabe encontramos um errinho nele…

T+

J

err, pelo jeito voce conseguiu escrever o servlet.

ok entao, esse erro acontece porque o jasper precisa que voce tenha um servidor X configurado e rodando e que aceite conexoes do jasper por exemplo. digite numa janela do terminal em ambiente grafico

xhost+

isso deve resolver :stuck_out_tongue:

farnetani

Está me dando a seguinte mensagem:

Acess Control disabled, client can connect from any host.

Me fale uma coisa…isto afeta algum recurso de segurança ?

Eu preciso setar a variável DISPLAY…como devo proceder com isto ?

Existe alguma especificaçào que devo colocar no firewall (iptables) ?

“javaquest”:
err, pelo jeito voce conseguiu escrever o servlet.

ok entao, esse erro acontece porque o jasper precisa que voce tenha um servidor X configurado e rodando e que aceite conexoes do jasper por exemplo. digite numa janela do terminal em ambiente grafico

xhost+

isso deve resolver :P

J

Sim, seta a variavel DISPLAY no script de inicializacao do TomCat
startup.sh coloca la

DISPLAY="&#58;0"
export DISPLAY

e pronto… agora qdo a seguranca acho eh tranquilo sendo que o acesso eh ao servidor X apenas ok

go reporters

farnetani

Fera, valeu pela ajuda…mas outros colegas de um outro forum que me ajdaram…

Passei como parametro -Djava.awt.headless=true para a variável CATALINA_OPTS, que é executada em conjundo com o java e funcionou

basta editar o arquivo catalina.sh e acrescentar -Djava.awt.headless=true como parametro dentro de CATALINA_OPTS…que roda blza…

O lance é que não há servidor gráfico ativo para processar…

Valeu pela ajuda !!!

“javaquest”:
Sim, seta a variavel DISPLAY no script de inicializacao do TomCat
startup.sh coloca la

DISPLAY="&#58;0"
export DISPLAY

e pronto… agora qdo a seguranca acho eh tranquilo sendo que o acesso eh ao servidor X apenas ok

go reporters

M

ai ai ai, pra q tanta complicação, é só executar no ambiente grafico e deu, aehhehea, ou tu quer rodar o servlet num lynx da vida? haehae :roll:

J

vixi agora q nao entendi nada matheus?

bom qualquer coisa posta ai, ja to usando a uns 6 meses esse gerador de relatorio sofri pra kct mas agora eu ja sei um pouquinho e to podendo dar uma mao, qqr coisa se eu puder ajudar to ai… assim como a galera aqui eh bem trii e tb da uma mao qdo a gente precisa.
faloww’s

M

bem, eu nao li toda a tua duvida, fui direto ao erro:

Can’t connect to X11 window server using ‘xhosts+’ as the value of the DISPLAY variable.

… o problema é q não ta conseguindo se conectar ao X11 qnd tu executa a coisa toda, ou seja… tu deve ta rodando isso direto dum prompt, como o ctrl + alt + f1… f2… f3 … ao invéz de executar dentro de um ambiente grafico qualquer… pelo menos, sempre q recebo algum erro em relação a qualquer coisa envolvendo xhost, x11, tudo relacionado a “X”, é pq estou tentanto executar algo q roda em ambiente grafico… e o grafico ta morto… 8)

farnetani

Matheus,

Na verdade, seu raciocínio está parcialmente correto, então vamos a explicação:

O lance é que tenho vários clientes e um servidor. Minha aplicação está naturalmente no servidor, onde é executado um servlet, este servlet executa um relatório feito no ireports(jasperreports), o qual na hora de gerar necessita do ambiente gráfico ativo(aí o fato de vc está parcialmente correto), porém como isto não estava ocorrendo, o servidor retornava ao cliente a tal mensagem de erro. Para resolver este problema, basta fazer o seguinte:

1o.) Precisamos setar a variável DISPLAY:
vi /etc/bashrc
DISPLAY=0:0
salve e saia: wq

vi /etc/profile
export DISPLAY
salve e saia: wq

vi /etc/usr/local/tomcat/bin/catalina.sh
aonde estiver o primeiro CATALINA_OPTS acrescentar na frente o
seguinte parametro: -Djava awt.headless=true
salve e saia: wq

source /etc/profile

./catalina.sh stop
./catalina.sh start

Pronto, resolvido o problema !!!

“matheus”:
bem, eu nao li toda a tua duvida, fui direto ao erro:

Can’t connect to X11 window server using ‘xhosts+’ as the value of the DISPLAY variable.

… o problema é q não ta conseguindo se conectar ao X11 qnd tu executa a coisa toda, ou seja… tu deve ta rodando isso direto dum prompt, como o ctrl + alt + f1… f2… f3 … ao invéz de executar dentro de um ambiente grafico qualquer… pelo menos, sempre q recebo algum erro em relação a qualquer coisa envolvendo xhost, x11, tudo relacionado a “X”, é pq estou tentanto executar algo q roda em ambiente grafico… e o grafico ta morto… 8)

Criado 18 de maio de 2004
Ultima resposta 20 de mai. de 2004
Respostas 10
Participantes 4