iReports + HibernateUtil

3 respostas
Kleber-rr

Olá pessoal, estou tentando trabalhar com o iReports/JasperReports + hibernate, e quero fazer as implementações necessárias no hibernateUtil.

Só que estou com várias dúvidas de como fazer.
Estou usando um tutorial do Pablo (http://pablonobrega.wordpress.com/2009/02/11/tutorial-tecnicas-de-geracao-de-relatorios-com-jasperreports/), mas esse modelo de projeto dele tem uma classe que cria uma conexao.

Se alguem puder ajudar, agradeço.

minha classe hibernateUtil:
package xxxxxx;

import java.sql.Connection;

import org.apache.log4j.Logger;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;

//import org.postgresql.core.Logger;

public class HibernateUtil {

	private static Logger logger = Logger.getLogger(HibernateUtil.class);

	private static SessionFactory sessionFactory;

	// ajuda a guardar as coisas na thread
	private static ThreadLocal<Session> sessions = new ThreadLocal<Session>();

	static {
		sessionFactory = new AnnotationConfiguration().configure()
				.buildSessionFactory();
	}

	public static Session openSession() {
		if (sessions.get() != null) {
			logger.error("Alguem nao fechou uma j� aberta!!");
			// grave, alguem nao fechou uma j� aberta!
		}
		sessions.set(sessionFactory.openSession());
		return sessions.get();
	}

	public static Session currentSession() {
		return sessions.get();
	}

	public static void closeCurrentSession() {
		sessions.get().close();
		sessions.set(null);
	}

	// verificar método de conexao para o iReports
	public static Connection getConnection() throws Exception {
		try {
			Connection conn = new AnnotationConfiguration().buildSettings()
					.getConnectionProvider().getConnection();

			return conn;
		} catch (Exception e) {
			e.printStackTrace();
			throw e;
		}
	}

}

3 Respostas

Kleber-rr

Eae, alguem??

Kleber-rr
Pessoal, deixa eu tentar simplificar: Eu pequei um projeto de exemplo do Pablo (http://pablonobrega.wordpress.com/2009/02/11/tutor...-relatorios-com-jasperreports/), que como eu falei, não usa hibernate. Então eu fiz algumas modificações:
public class Conexao {
	private Connection conn;

	public Conexao() throws Exception {
		criaConexao(); //linha 19
	}

	public static Connection criaConexao() throws Exception {
		try {
			Connection conn = new AnnotationConfiguration().buildSettings() //linha 24
					.getConnectionProvider().getConnection();

			return conn;
		} catch (Exception e) {
			System.out.println("ERRO NA CONEXAO IREPORTS: " + e);
			e.printStackTrace();
			throw e;
		}
	}

	public void fechaConexao() throws SQLException {
		conn.close();
		conn = null;
	}

	public boolean isFechada() {
		try {
			return conn.isClosed();
		} catch (SQLException ex) {
			return false;
		}
	}

	public Connection getConexao() {
		return conn;
	}
Só que ele me retorna esse esse erro no console:
09:24:01,571  WARN UserSuppliedConnectionProvider:23 - No connection properties specified - the user must supply JDBC connections
ERRO NA CONEXAO IREPORTS: org.hibernate.HibernateException: Hibernate Dialect must be explicitly set
org.hibernate.HibernateException: Hibernate Dialect must be explicitly set
	at org.hibernate.dialect.DialectFactory.determineDialect(DialectFactory.java:57)
	at org.hibernate.dialect.DialectFactory.buildDialect(DialectFactory.java:39)
	at org.hibernate.cfg.SettingsFactory.determineDialect(SettingsFactory.java:426)
	at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:128)
	at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2005)
	at br.empresateste.testerelatorio.conexao.Conexao.criaConexao(Conexao.java:24)
	at br.empresateste.testerelatorio.conexao.Conexao.<init>(Conexao.java:19)
	at br.empresateste.testerelatorio.bean.RelatorioBean.geraRelatorioPassandoConexao(RelatorioBean.java:52)
public class RelatorioBean {



	private String saida;

	

	

	public String geraRelatorioPassandoConexao() {

		saida = null;

		String jasper = getDiretorioReal("/jasper/professores_por_aluno.jasper");

		Connection conexao = null;



		try {

			// Abro a conex�o com o banco que ser� passada para o JasperReports

			conexao = new Conexao().getConexao();
 //linha 52
			// Mando o jasper gerar o relat�rio

			JasperPrint print = JasperFillManager.fillReport(jasper, null, conexao);

			// Gero o PDF

			preenchePdf(print);

		} catch (Exception e) {

			e.printStackTrace();

		} finally {

			try {

				// Sempre mando fechar a conex�o, mesmo que tenha dado erro

				if (conexao != null)

					conexao.close();

			} catch (SQLException e) {

				

			}

		}

		

		return "exibeRelatorio";

	}

Com certeza o erro está em meu método criaConexao() na classe conexao. Mas ainda não desenrrolei... se alguem puder ajudar, agradeço.

Kleber-rr
Pessoal, consegui colocar ele pra rodar usando o hibernate. Criei uma classe Dao genérica, atualizei o web.xml e alterei o bean. Ficou assim:
public class RelatorioBean {

	private String saida;

	public String geraRelatorioPassandoConexao() {
		saida = null;
		String jasper = getDiretorioReal("/jasper/professores_por_aluno.jasper");
		try {
			JasperPrint print = JasperFillManager.fillReport(jasper, null);
			preenchePdf(print);
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("erro: " + e);
		} finally {
			try {
			} catch (Exception e) {

			}
		}

		return "exibeRelatorio";
	}

	private void preenchePdf(JasperPrint print) throws JRException {
		saida = getDiretorioReal("/pdf/relatorio.pdf");
		JasperExportManager.exportReportToPdfFile(print, saida);
		saida = getContextPath() + "/pdf/relatorio.pdf";
	}

	private String getDiretorioReal(String diretorio) {
		HttpSession session = (HttpSession) FacesContext.getCurrentInstance()
				.getExternalContext().getSession(false);
		return session.getServletContext().getRealPath(diretorio);
	}

	private String getContextPath() {
		HttpSession session = (HttpSession) FacesContext.getCurrentInstance()
				.getExternalContext().getSession(false);
		return session.getServletContext().getContextPath();
	}

	public String getSaida() {
		return saida;
	}

	public void setSaida(String saida) {
		this.saida = saida;
	}

}
Agora, o erro que me aparece no console é esse:
08:31:05,133  WARN JRJdbcQueryExecuter:89 - The supplied java.sql.Connection object is null.

Alguem por favor, poderia me dar uma ajuda?? ô pessoal daí de cima!!!! ajuda ae!!!! :D

Criado 4 de março de 2010
Ultima resposta 9 de mar. de 2010
Respostas 3
Participantes 1