JPA...duvida como passar conexão para JASPER

4 respostas
P

Olá,

vi o exemplo abaixo de como rodar um arquivo .jasper e vi que tem que passar conexão do banco

e estou usando JPA (EntityManager)

Queria saber como faço pra passar conexão e executar o japer via web ???

se alguém puder me ajudar

abs

public class RelatorioBibliotecaPessoal { 
iexão com o banco de dados, redo o objeto Connection */ 
/* Realza contornanprivate static Connection getConnection( ) throws 
ClassNotFoundException, SQLException 
{ 
String driver = "org.firebirdsql.jdbc.FBDriver"; 
String url = "jdbc:firebirdsql:localhost/3050:c://db//Acervo.FDB"; 
String user = "sysdba"; 
String password = "masterkey"; 
Class.forName(driver); 
Connection con = DriverManager.getConnection( url, user, password ); 
return con; 
} 
/* Gera Relatorio e visualiza-o */ 
public void geraRelatorio( ) throws JRException, Exception 
{ 
Connection con = getConnection( ); 
Statement stm = con.createStatement( ); 
String query = "select * from Livro"; 
ResultSet rs = stm.executeQuery( query ); 
/* implementação da interface JRDataSource para DataSource ResultSet */ 
JRResultSetDataSource jrRS = new JRResultSetDataSource( rs ); 
/* HashMap de parametros utilizados no relatório. Sempre instanciados */ 
Map parameters = new HashMap(); 
// parameters.put("COLUNA", valor); 
/* Preenche o relatório com os dados. Gera o arquivo BibliotecaPessoal.jrprint */ 
JasperFillManager.fillReportToFile( "BibliotecaPessoal.jasper", parameters, jrRS ); 
/* Exporta para o formato PDF */ 
JasperExportManager.exportReportToPdfFile( "BibliotecaPessoal.jrprint" ); 
/* Preenche o relatorio e o salva diretamente em arquivo PDF. Sem 
a necessidade do .jrprint */ 
// JasperRunManager.runReportToPdfFile("BibliotecaPessoal.jasper", parameters, jrRS); 
/* Visualiza o relatório em formato PDF */ 
JasperViewer.viewReport( "BibliotecaPessoal.pdf", false ); 
} 
public static void main(String[] args) throws JRException, Exception 
{ 
new RelatorioBibliotecaPessoal().geraRelatorio(); 
} 
} 
Basicamente, a classe anterior

4 Respostas

Marky.Vasconcelos

Alias… eu queria saber como faço isso com o Hibernate sem usar o método connection da session que esta depreciado.

V

Você pode obter a conexão através do conteiner web, devidamente mapeado, conforme os passos abaixo:

Acrescente no arquivo web.xml o seguinte trecho (lembre-se de definir o Datasource no container-web/application conforme a especificação do servidor):

<?xml version="1.0" encoding="ISO-8859-1" ?> 
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
         version="2.4">
...
    <resource-ref>
        <description>DataSource</description>
        <res-ref-name>postgreDS</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
    </resource-ref>
...
</web-app>

No método a ser utilizado:

Context initContext = new InitialContext();
Context envContext  = (Context)initContext.lookup("java:/comp/env");
DataSource ds = (DataSource)envContext.lookup("postgreDS");
return ds.getConnection();

ou se quiser utilizar annotations:

private @Resource DataSource fonteDados;

public metodo() {
    ...
    Connection conexao = fonteDados.getConnection();
    ...
}

Espero que a solução te ajude.

Bom trabalho,

P

OBRIGADO… mas aaplicação está usando JPA utilizando uma classe onde tem metodos estatico
pegando EntityManagerfactory e EntityManager…utilizando LOCAL

teria algum exemplo para essa situação …

abs

Marky.Vasconcelos

Também uso isso em uma aplicação desktop… mas também na web.

Não tem nenhum modo que sirva pros dois?

Criado 16 de janeiro de 2009
Ultima resposta 26 de jan. de 2009
Respostas 4
Participantes 3