JasperReports/iReport x JPA

9 respostas
W

Alo galera, fiz uma aplicaçao toda baseada em swing e jpa, tah tudo funcionando bem, exceto os relatorios, estou tendo dificuldades de me convencer a manter uma conexao jdbc no sistema junto com a conexao JPA, eu tentei criar os relatorios baseados em JPA com EJB-QL mas o iReport nao da suporte ou ha algo que estou fazendo errado, e quanto a geraçao de preview nao consegui fazer funcionar usando

Map<String, Object> paMap = new HashMap<String, Object>();
    Map<String, Object> hints = new HashMap<String, Object>();
    hints.put("fetchSize", new Integer(100));
    //hints.put("anyName", "anyObject()");
    paMap.put(JRJpaQueryExecuterFactory.PARAMETER_JPA_QUERY_HINTS_MAP, hints);
    paMap.put(JRJpaQueryExecuterFactory.PARAMETER_JPA_ENTITY_MANAGER, em);
    
    return paMap;

este eh o trecho de codigo que cria o mapa que eh executado em :

JasperReport relatorio;
    try
    {
      relatorio = (JasperReport) JRLoader.loadObject(obterRelatorio());
      JasperPrint impressao = JasperFillManager.fillReport(relatorio, obterParametros());
      JasperViewer.viewReport(impressao, false);
    }
    catch (JRException e)
    {
      lastError = e.getMessage();
    }

alguem tem alguma dica sobre como fazer tudo funcionar sometne com JPA ?

valeu galera !

9 Respostas

J

Amigo, eu estava com a mesma necessidade e também não encontrava uma solução, não sei se você já resolveu o seu problema, mas hoje eu consegui finalmente fazer funcionar exatamente isso que você está precisando.

Estou utilizando:
NetBeans 6.0 Beta 1
iReport 2.0.2
Sistema Operacional: Ubuntu 7.10

Vamos lá:

  1. Criei as classes de persistência (JPA) no Netbeans, criei é modo de falar, já que ele cria tudo automático.
  2. Fiz um build do projeto pelo NetBeans para gerar o .jar da minha aplicação
  3. IMPORTANTE: No iReport eu adicionei no classpath o .jar da minha aplicação, atenção, não basta informar apenas o diretório onde encontra-se o .jar, deve-se incluir o próprio .jar
  4. Ainda no iReport criei uma nova conexão de dados utilizando a opção “Conexão EJBQL” e especifiquei o nome da unidade de persistência exatamente como consta no arquivo persistence.xml criado automaticamente pelo NetBeans
  5. Criei o visual dos relatórios pelo iReport, claro, nas opções de query do relatório informei que seria no formato EJBQL, algo do tipo: SELECT c FROM Convenios c, NÃO é possível utilizar os selects como se estivesse utilizando JDBC
  6. Depois de executar os relatórios criados e ver que realmente estavam funcionando no iReport, voltei ao NetBeans e fiz a chamada desta forma:
try {
            String reportSource = "/home/je/Projetos/ADMConvenios/reports/cadConvenios.jrxml";
            String reportDest = "/home/je/Projetos/ADMConvenios/reports/cadConvenios.html";

            EntityManagerFactory emf = Persistence.createEntityManagerFactory("cdlPU", new HashMap());
            EntityManager em = emf.createEntityManager();

            Map parameters = new HashMap();
            parameters.put(JRJpaQueryExecuterFactory.PARAMETER_JPA_ENTITY_MANAGER, em);

            JasperReport jasperReport = JasperCompileManager.compileReport(reportSource);
            JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters);
            JasperExportManager.exportReportToHtmlFile(jasperPrint, reportDest);
            JasperViewer.viewReport(jasperPrint);
        } catch (JRException ex) {
            ex.printStackTrace();
        }

Não sei se essa é a melhor forma pra fazer, se alguém verificar que estou fazendo besteira por favor poste aqui uma solução mais prática.

Amigo, espero que isso te ajude a achar o caminho das pedras, eu pelo menos apanhei bastante até chegar nesse resultado, que diga-se de passagem não tem nada de anormal, mas por simples falta de conhecimento e muito poucos exemplos encontrados pela net demorei bastante.

[]'s

J

Bom essa minha resposta resolveu até eu instalar o NetBeans 6.0 Beta 2, nao sei se tem alguma coisa relacionada, mas depois de instalar o Beta 2 fui tentar executar o iReport e ele não conseguia realizar a conexão EJBQL, então além do jar da minha aplicação tive que incluir os jars do TopLink, feito isso consegui fazer a conexão.

[]´s

W

Pessoal aqui n tah querendo ir… heheheh

olha o erro que aparece:

[TopLink Warning]: 2008.11.04 12:51:11.184ServerSession(31768270)PersistenceUnitInfo siga has transactionType RESOURCE_LOCAL and therefore jtaDataSource will be ignored

[TopLink Info]: 2008.11.04 12:51:11.185ServerSession(31768270)TopLink, version: Oracle TopLink Essentials - 2.0.1 (Build b04-fcs (04/11/2008))

java.lang.NullPointerException

at sun.jdbc.odbc.JdbcOdbcDriver.initialize(JdbcOdbcDriver.java:436)

at sun.jdbc.odbc.JdbcOdbcDriver.connect(JdbcOdbcDriver.java:153)

at java.sql.DriverManager.getConnection(DriverManager.java:582)

at java.sql.DriverManager.getConnection(DriverManager.java:154)

at oracle.toplink.essentials.sessions.DefaultConnector.connect(DefaultConnector.java:100)

at oracle.toplink.essentials.sessions.DatasourceLogin.connectToDatasource(DatasourceLogin.java:184)

at oracle.toplink.essentials.internal.sessions.DatabaseSessionImpl.loginAndDetectDatasource(DatabaseSessionImpl.java:582)

at oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider.login(EntityManagerFactoryProvider.java:280)

at oracle.toplink.essentials.internal.ejb.cmp3.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:229)

at oracle.toplink.essentials.internal.ejb.cmp3.base.EntityManagerFactoryImpl.getServerSession(EntityManagerFactoryImpl.java:93)

at oracle.toplink.essentials.internal.ejb.cmp3.base.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:126)

at oracle.toplink.essentials.internal.ejb.cmp3.base.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:120)

at oracle.toplink.essentials.internal.ejb.cmp3.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:91)

at it.businesslogic.ireport.connection.EJBQLConnection.getEntityManager(EJBQLConnection.java:135)

at it.businesslogic.ireport.connection.EJBQLConnection$1.run(EJBQLConnection.java:178)

at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)

at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)

at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)

at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:177)

at java.awt.Dialog$1.run(Dialog.java:1039)

at java.awt.Dialog$3.run(Dialog.java:1091)

at java.security.AccessController.doPrivileged(Native Method)

at java.awt.Dialog.show(Dialog.java:1089)

at java.awt.Component.show(Component.java:1419)

at java.awt.Component.setVisible(Component.java:1372)

at java.awt.Window.setVisible(Window.java:801)

at java.awt.Dialog.setVisible(Dialog.java:979)

at it.businesslogic.ireport.gui.ConnectionsDialog.jButtonModifyParameterActionPerformed(ConnectionsDialog.java:514)

at it.businesslogic.ireport.gui.ConnectionsDialog.jTableParametersMouseClicked(ConnectionsDialog.java:447)

at it.businesslogic.ireport.gui.ConnectionsDialog.access$100(ConnectionsDialog.java:53)

at it.businesslogic.ireport.gui.ConnectionsDialog$5.mouseClicked(ConnectionsDialog.java:196)

at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:253)

at java.awt.Component.processMouseEvent(Component.java:6041)

at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)

at java.awt.Component.processEvent(Component.java:5803)

at java.awt.Container.processEvent(Container.java:2058)

at java.awt.Component.dispatchEventImpl(Component.java:4410)

at java.awt.Container.dispatchEventImpl(Container.java:2116)

at java.awt.Component.dispatchEvent(Component.java:4240)

at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)

at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3995)        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)

at java.awt.Container.dispatchEventImpl(Container.java:2102)

at java.awt.Window.dispatchEventImpl(Window.java:2429)

at java.awt.Component.dispatchEvent(Component.java:4240)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)

at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)

at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)

at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:177)

at java.awt.Dialog$1.run(Dialog.java:1039)

at java.awt.Dialog$3.run(Dialog.java:1091)

at java.security.AccessController.doPrivileged(Native Method)

at java.awt.Dialog.show(Dialog.java:1089)

at java.awt.Component.show(Component.java:1419)

at java.awt.Component.setVisible(Component.java:1372)

at java.awt.Window.setVisible(Window.java:801)

at java.awt.Dialog.setVisible(Dialog.java:979)

at it.businesslogic.ireport.gui.ConnectionsDialog.setVisible(ConnectionsDialog.java:623)

at it.businesslogic.ireport.gui.ToolbarConnectionPanel.jButtonDatasourcesActionPerformed(ToolbarConnectionPanel.java:114)

at it.businesslogic.ireport.gui.ToolbarConnectionPanel.access$100(ToolbarConnectionPanel.java:45)

at it.businesslogic.ireport.gui.ToolbarConnectionPanel$2.actionPerformed(ToolbarConnectionPanel.java:100)

at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)

at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)

at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)

at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)

at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)

at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:272)

at java.awt.Component.processMouseEvent(Component.java:6038)

at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)

at java.awt.Component.processEvent(Component.java:5803)

at java.awt.Container.processEvent(Container.java:2058)

at java.awt.Component.dispatchEventImpl(Component.java:4410)

at java.awt.Container.dispatchEventImpl(Container.java:2116)

at java.awt.Component.dispatchEvent(Component.java:4240)

at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)

at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)

at java.awt.Container.dispatchEventImpl(Container.java:2102)

at java.awt.Window.dispatchEventImpl(Window.java:2429)

at java.awt.Component.dispatchEvent(Component.java:4240)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)

at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)

at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)        at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)

alguem sabe onde pode tah o erro??? abraçoo

W

eita… esqueci de comentar… tou usando o eclipse… e ireport jasper… 3.0

7

Tambem estou passando por este problema !

Não consegui resolvê-lo !!!

T

Opa… Alguém tem ideia do que seja… adicionei tudo q podia e q nao podia no classpath =p e nada…
Ele não reconhece mesmo eu tendo colocado o mesmo nome da persistencia q tem no xml do netbeans.
Vlw

E

Também estou com o mesmo problema, o ireport não encontra a persistence Unit de nenhum jeito alguém já conseguiu uso o Netbeans 6.5.1 e o Ubuntu 8.10

D

Oi pessoal, consegui resolver o problema adicionando o JAR da aplicação q vc quer conectar na pasta lib do Ireport 3.0.0. Depois fui no próprio Ireport 3.0.0 em OPÇÕES -> CAMINHOS DAS FONTES e selecionei o JAR da aplicação lah…Além disso coloquei no CLASSPATH do Ireport 3.0.0 o caminho do meu jar e o caminho onde fika meu persistence.xml.Foi isso que eu fiz e deu certinho…Abraço a todos…

W

Como assim o jar da aplicação? sou iniciante em java =/
to usando o top link … c quer dizer o toplink-essentials.jar e o toplink-essentials-agent.jar?

tenho que adicionar algum outro alem desses ai?

Criado 13 de agosto de 2007
Ultima resposta 26 de jan. de 2011
Respostas 9
Participantes 8