Gerar PDF com Jasper Reports e Servlets

Olá Pessoal!

Quero gerar um relatório em pdf com o jasper reports e servlets. Eu já consegui fazer, e funcionou, mas agora e
estou em um projeto que não utiliza connection e sim session e o comando que
gera o relatório exige um Connection. Como posso resolver este problema?

Eu vi que a session possui um método connection, mas esta depreacated e e não roda com ele, já testei:

session.connection()

Veja a linha principal:

bytes = JasperRunManager.runReportToPdf( relatorioContrato, parametros, ????? );
public class RelContrato extends HttpServlet implements DireitoAutoral  {

	Session session;
	@Override
	public void setSession(Session session) {
		this.session = session;
	}
	
	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		
		ServletContext sc	=	getServletContext();
		byte[] bytes = null;
        try {        	
        	
        	String rel = sc.getRealPath("/WEB-INF/reports/RelContrato.jasper");
        	
        	JasperReport relatorioContrato = (JasperReport)JRLoader.loadObject( rel );
        	       	  
            // lendo arquivo jasper  
            //File relatorioContrato = new File(rel);          	
        	
        	Map parametros = new HashMap();
        	parametros.put("pageRoot", "" );
        	parametros.put("id_contrato", 23);
        	
        	//Connection conn = new ConnectionFactory().getConnection();
        	
        	bytes = JasperRunManager.runReportToPdf( relatorioContrato, parametros,  ???? );
        	
        	
        }catch (JRException e) {
        	throw new ServletException(e);
		}
        
        if (bytes != null && bytes.length > 0) {
            // envia o relat�rio em formato PDF para o browser
            response.setContentType("application/pdf");
            response.setContentLength(bytes.length);
            ServletOutputStream ouputStream = response.getOutputStream();
            ouputStream.write(bytes, 0, bytes.length);
            ouputStream.flush();
            ouputStream.close();
        } 
		
	}

	
}

Como poderia fazer isto pessoal?

Obrigado!

Olá Kweles

Creio que voce precisa fazer isso:

    Connection connect = null;
            try {
                Class.forName("com.mysql.jdbc.Driver");//ou o driver da sua base de dados
                connect = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/baseDeDados", "usuario", "senha");
            } catch (Exception ex) {
                JOptionPane.showMessageDialog(null, ex.getMessage());
                System.exit(0);
            }

Daí creio que voce consiga gravar este connect num parametro da sessão e pegá-lo pelo.

request.getParameter("seuParametro");

Não sei se te ajudei.

Abraço.

Olá Edifran!

Obrigado pelo retorno!

Na realidade a linha comentada: //Connection conn = new ConnectionFactory().getConnection();
chama minha ConectionFactory que faz justamente o que vc sugeriu, ela cria uma nova conexão.

Mas o que realmente está complicando é que por eu estar trabalhando com Hibernate passo a trabalhar com session´s e não com
Connection´s;

Eu esperava crira uma nova sessão, conforme abaixo, e passá-la para o jasperreports:

if (session == null || session.isOpen() == false) {
				session = sessionFactory.openSession();

Olá kweles,

Você poderia postar os fontes para gerar o PDF?

Grato.

Olá apalmeira!

O código é esta servlet que postei acima, mais a alteração no xml para informar qual servlet o usuário deve chamar:


        <servlet>
		<servlet-name>relContrato</servlet-name>
		<servlet-class>br.com.cpb.gda.servlet.RelContrato</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>relContrato</servlet-name>
		<url-pattern>/relcontrato</url-pattern>
	</servlet-mapping>

daí vc deve colocar dentro do web-inf uma pasta com os relatórios, eu chamei de reports
depois é só chamar a servlet:

localhost:8080/seusistema/relcontrato

espero que ajude

Estou trabalhando especificamente com o flex + jasper, foi do link abaixo que tirei o exemplo:

http://www.jandersonfc.com/tutorial-java-flex-ireport-na-pratica-10/

3 anos depois cai na mesma situação…

Solução: http://stackoverflow.com/questions/9482731/how-to-get-jdbc-connection-from-hibernate-session

Olá ivandasilva,

Estou com um problema e acho que você pode me responder. Estou tentando trabalhar com JasperView e Servlet. Quando gero relatórios e mando apresentar no JasperView, em uma máquina cliente, ele apresenta no servidor e não na máquina que solicitou. O que tenho conseguido apenas é mostrar o PDF, mas gostaria de exibir no JasperView dando as opções para o usuário, gravar ou não, no formato que quiser.

Existe uma solução para isto?

Obrigado

O JasperView é uma classe ligada ao desenvolvimento JSE ou, sendo mais claro, desktop.
Você não poderá usar um JasperView utilizando servlets.
Se pesquisar no google verá exemplos bem claros e bons sobre como fazer isso.
P.S.: Observe a data do tópico em que você está inserindo um novo comentário, este é bem antigo e normalmente não terá respostas. Nestes casos é preferível abrir um novo tópico.