Olá tudo bem?
Gostaria de saber se existe alguma forma de usar a conexao do Ibatis para criar o relatório sem que eu precise usar uma conexao jdbc a parte no meu model Relatorio…
por exemplo, no meu model está assim
Relatorio.java
package br.empresa.model;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.util.Map;
import com.ibatis.sqlmap.client.SqlMapClient;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import net.sf.jasperreports.engine.JRExporter;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.export.JRHtmlExporter;
import net.sf.jasperreports.engine.export.JRPdfExporter;
import br.com.caelum.vraptor.interceptor.download.InputStreamDownload;
import br.com.caelum.vraptor.ioc.Component;
@Component
public class Relatorio {
private final SqlMapClient sqlMap;
public Relatorio(SqlMapClient sqlMap){
super();
this.sqlMap = sqlMap;
}
public InputStreamDownload buildReport(String jasperFile, Map<String,Object> parametros) throws Exception {
jasperFile = "C:\\Oficina\\projeto\\relatorios\\"+jasperFile+".jasper";
ByteArrayOutputStream exported = new ByteArrayOutputStream();
JRExporter exporter = new JRPdfExporter();
Class.forName("net.sourceforge.jtds.jdbc.Driver").newInstance();
Connection conn = DriverManager.getConnection("jdbc:jtds:sqlserver://ip:porta/banco","usuario","senha");
byte[] bytes = null;
try {
JasperPrint print = JasperFillManager.fillReport(jasperFile, parametros, conn);
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, exported);
exporter.setParameter(JRExporterParameter.JASPER_PRINT, print);
exporter.exportReport();
bytes = exported.toByteArray();
} catch (Exception e) {
e.printStackTrace();
return null;
}
return new InputStreamDownload(
new ByteArrayInputStream(bytes),
"application/pdf",
"teste.pdf",
false,
bytes.length);
}
}
Esse é meu controller
package br.empresa.controller;
import java.io.File;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import org.hibernate.exception.ConstraintViolationException;
import br.empresa.dao.CalendarioDao;
import br.empresa.dao.TipoEventoDao;
import br.empresa.model.CalendarioEvento;
import br.empresa.model.Calendario;
import br.empresa.model.Relatorio;
import br.com.caelum.vraptor.Delete;
import br.com.caelum.vraptor.Get;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Put;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.Validator;
import br.com.caelum.vraptor.interceptor.download.Download;
import br.com.caelum.vraptor.validator.ValidationMessage;
@Resource
public class RelatoriosController {
private final HttpServletRequest request;
private final Relatorio relatorio;
public RelatoriosController(HttpServletRequest request, Relatorio relatorio) {
super();
this.request = request;
this.relatorio = relatorio;
}
@Get @Path("/relatorios/professores")
public void relProfessores(){
}
@SuppressWarnings("unchecked")
@Path("/relatorios")
public Download executaRelatorio() throws Exception{
Map<String, Object> parametros = new HashMap<String, Object>(); //request.getParameterMap();
parametros.put("DATA", "20100501");
return relatorio.buildReport("professoradmissao", parametros);
}
}
Ai ta gerando o relatorio normal por deixei chumbado a data no metodo executaRelatorio, mas isso não vem ao caso… o que eu quero mesmo é como melhorar isso que eu fiz?
Obrigado