Dúvida usando o BMP e DAO

Amigos, estou com um problema que não estou conseguindo resolver… e já faz um bom tempo: vamos la:

eu uso o JBoss 3.2.5 como servidor, J2ee 1.3, EJB, BMP, e DAO para fazer o sql. quando eu starto o servidor pela primeira vez, faço uma consulta no banco, pela tela do sistema (tela do usuario) ele me traz os dados corretos, quando eu insiro alguns dados novos (ele usa outro EJB e DAO para fazer isso), quando eu vou la fazer outra consulta ele não me traz atualizado, e depois de um tempo (aproximadamente 30min), ele me traz tudo bagunçado, fora de ordem por exemplo: alguns valores mensais, Janeiro é 1000, Fevereiro eh 2000, Março é 3000, depois desse tempo ele traz Janeiro é 3000, Fevereiro eh 1000, Março é 2000, nem sempre na mesma ordem. e não traz o valor atualizado.

se eu fizer o select na mão direto no BD (mysql) ele me traz correto, inclusive os novos dados inseridos anteriormente,

um amigo aqui do fórum me disse que talvez tenha uma estratégia de cache ai no meio, mas se tiver eu não to sabendo gerenciar, se for uma configuração padrão não estou conseguinido nem achá-la. vou postar as duas classes aqui, o BMP (gerado pelo xdoclet) e o DAO,

valeu

Rodrigo


/*
 * Generated by XDoclet - Do not edit!
 */
package org.inedam.grpw.movimentoiss.negocio.select.mapaarrecadacaosintetico.ejb.bean;

/**
 * BMP layer for MapaArrecadacaoSintetico.
 * @author Rodrigo
 */
public class MapaArrecadacaoSinteticoBMP
   extends org.inedam.grpw.movimentoiss.negocio.select.mapaarrecadacaosintetico.ejb.bean.MapaArrecadacaoSinteticoEJB
   implements javax.ejb.EntityBean
{

   public java.lang.Integer getAno() 
   {
      return super.getAno();
   }

   public void setAno( java.lang.Integer ano ) 
   {
      super.setAno(ano);
      makeDirty();
   }
   public java.lang.Integer getMes() 
   {
      return super.getMes();
   }

   public void setMes( java.lang.Integer mes ) 
   {
      super.setMes(mes);
      makeDirty();
   }
   public java.lang.Integer getTipoDividaUID() 
   {
      return super.getTipoDividaUID();
   }

   public void setTipoDividaUID( java.lang.Integer tipoDividaUID ) 
   {
      super.setTipoDividaUID(tipoDividaUID);
      makeDirty();
   }
   public java.math.BigDecimal getValorISSProprio() 
   {
      return super.getValorISSProprio();
   }

   public void setValorISSProprio( java.math.BigDecimal valorISSProprio ) 
   {
      super.setValorISSProprio(valorISSProprio);
      makeDirty();
   }
   public java.math.BigDecimal getValorISSProprioPago() 
   {
      return super.getValorISSProprioPago();
   }

   public void setValorISSProprioPago( java.math.BigDecimal valorISSProprioPago ) 
   {
      super.setValorISSProprioPago(valorISSProprioPago);
      makeDirty();
   }
   public java.math.BigDecimal getValorISSRetencao() 
   {
      return super.getValorISSRetencao();
   }

   public void setValorISSRetencao( java.math.BigDecimal valorISSRetencao ) 
   {
      super.setValorISSRetencao(valorISSRetencao);
      makeDirty();
   }
   public java.math.BigDecimal getValorISSRetencaoPago() 
   {
      return super.getValorISSRetencaoPago();
   }

   public void setValorISSRetencaoPago( java.math.BigDecimal valorISSRetencaoPago ) 
   {
      super.setValorISSRetencaoPago(valorISSRetencaoPago);
      makeDirty();
   }
   public java.math.BigDecimal getValorProprioMesPago() 
   {
      return super.getValorProprioMesPago();
   }

   public void setValorProprioMesPago( java.math.BigDecimal valorProprioMesPago ) 
   {
      super.setValorProprioMesPago(valorProprioMesPago);
      makeDirty();
   }
   public java.math.BigDecimal getValorRetencaoMesPago() 
   {
      return super.getValorRetencaoMesPago();
   }

   public void setValorRetencaoMesPago( java.math.BigDecimal valorRetencaoMesPago ) 
   {
      super.setValorRetencaoMesPago(valorRetencaoMesPago);
      makeDirty();
   }
   public java.math.BigDecimal getValorMultaISSProprio() 
   {
      return super.getValorMultaISSProprio();
   }

   public void setValorMultaISSProprio( java.math.BigDecimal valorMultaISSProprio ) 
   {
      super.setValorMultaISSProprio(valorMultaISSProprio);
      makeDirty();
   }
   public java.math.BigDecimal getValorMultaISSProprioPago() 
   {
      return super.getValorMultaISSProprioPago();
   }

   public void setValorMultaISSProprioPago( java.math.BigDecimal valorMultaISSProprioPago ) 
   {
      super.setValorMultaISSProprioPago(valorMultaISSProprioPago);
      makeDirty();
   }
   public java.math.BigDecimal getValorMultaISSProprioMesPago() 
   {
      return super.getValorMultaISSProprioMesPago();
   }

   public void setValorMultaISSProprioMesPago( java.math.BigDecimal valorMultaISSProprioMesPago ) 
   {
      super.setValorMultaISSProprioMesPago(valorMultaISSProprioMesPago);
      makeDirty();
   }
   public java.math.BigDecimal getCorrecaoMonetariaISSProprioMesPago() 
   {
      return super.getCorrecaoMonetariaISSProprioMesPago();
   }

   public void setCorrecaoMonetariaISSProprioMesPago( java.math.BigDecimal correcaoMonetariaISSProprioMesPago ) 
   {
      super.setCorrecaoMonetariaISSProprioMesPago(correcaoMonetariaISSProprioMesPago);
      makeDirty();
   }
   public java.math.BigDecimal getCorrecaoMonetariaISSProprioPago() 
   {
      return super.getCorrecaoMonetariaISSProprioPago();
   }

   public void setCorrecaoMonetariaISSProprioPago( java.math.BigDecimal correcaoMonetariaISSProprioPago ) 
   {
      super.setCorrecaoMonetariaISSProprioPago(correcaoMonetariaISSProprioPago);
      makeDirty();
   }
   public java.math.BigDecimal getCorrecaoMonetariaISSRetencaoMesPago() 
   {
      return super.getCorrecaoMonetariaISSRetencaoMesPago();
   }

   public void setCorrecaoMonetariaISSRetencaoMesPago( java.math.BigDecimal correcaoMonetariaISSRetencaoMesPago ) 
   {
      super.setCorrecaoMonetariaISSRetencaoMesPago(correcaoMonetariaISSRetencaoMesPago);
      makeDirty();
   }
   public java.math.BigDecimal getCorrecaoMonetariaISSRetencaoPago() 
   {
      return super.getCorrecaoMonetariaISSRetencaoPago();
   }

   public void setCorrecaoMonetariaISSRetencaoPago( java.math.BigDecimal correcaoMonetariaISSRetencaoPago ) 
   {
      super.setCorrecaoMonetariaISSRetencaoPago(correcaoMonetariaISSRetencaoPago);
      makeDirty();
   }
   public java.math.BigDecimal getCorrecaoMonetariaMultaISSProprioMesPago() 
   {
      return super.getCorrecaoMonetariaMultaISSProprioMesPago();
   }

   public void setCorrecaoMonetariaMultaISSProprioMesPago( java.math.BigDecimal correcaoMonetariaMultaISSProprioMesPago ) 
   {
      super.setCorrecaoMonetariaMultaISSProprioMesPago(correcaoMonetariaMultaISSProprioMesPago);
      makeDirty();
   }
   public java.math.BigDecimal getCorrecaoMonetariaMultaISSProprioPago() 
   {
      return super.getCorrecaoMonetariaMultaISSProprioPago();
   }

   public void setCorrecaoMonetariaMultaISSProprioPago( java.math.BigDecimal correcaoMonetariaMultaISSProprioPago ) 
   {
      super.setCorrecaoMonetariaMultaISSProprioPago(correcaoMonetariaMultaISSProprioPago);
      makeDirty();
   }
   public java.math.BigDecimal getDescontoISSProprioMesPago() 
   {
      return super.getDescontoISSProprioMesPago();
   }

   public void setDescontoISSProprioMesPago( java.math.BigDecimal descontoISSProprioMesPago ) 
   {
      super.setDescontoISSProprioMesPago(descontoISSProprioMesPago);
      makeDirty();
   }
   public java.math.BigDecimal getDescontoISSProprioPago() 
   {
      return super.getDescontoISSProprioPago();
   }

   public void setDescontoISSProprioPago( java.math.BigDecimal descontoISSProprioPago ) 
   {
      super.setDescontoISSProprioPago(descontoISSProprioPago);
      makeDirty();
   }
   public java.math.BigDecimal getDescontoISSRetencaoMesPago() 
   {
      return super.getDescontoISSRetencaoMesPago();
   }

   public void setDescontoISSRetencaoMesPago( java.math.BigDecimal descontoISSRetencaoMesPago ) 
   {
      super.setDescontoISSRetencaoMesPago(descontoISSRetencaoMesPago);
      makeDirty();
   }
   public java.math.BigDecimal getDescontoISSRetencaoPago() 
   {
      return super.getDescontoISSRetencaoPago();
   }

   public void setDescontoISSRetencaoPago( java.math.BigDecimal descontoISSRetencaoPago ) 
   {
      super.setDescontoISSRetencaoPago(descontoISSRetencaoPago);
      makeDirty();
   }
   public java.math.BigDecimal getDescontoMultaISSProprioMesPago() 
   {
      return super.getDescontoMultaISSProprioMesPago();
   }

   public void setDescontoMultaISSProprioMesPago( java.math.BigDecimal descontoMultaISSProprioMesPago ) 
   {
      super.setDescontoMultaISSProprioMesPago(descontoMultaISSProprioMesPago);
      makeDirty();
   }
   public java.math.BigDecimal getDescontoMultaISSProprioPago() 
   {
      return super.getDescontoMultaISSProprioPago();
   }

   public void setDescontoMultaISSProprioPago( java.math.BigDecimal descontoMultaISSProprioPago ) 
   {
      super.setDescontoMultaISSProprioPago(descontoMultaISSProprioPago);
      makeDirty();
   }
   public java.math.BigDecimal getJurosISSProprioMesPago() 
   {
      return super.getJurosISSProprioMesPago();
   }

   public void setJurosISSProprioMesPago( java.math.BigDecimal jurosISSProprioMesPago ) 
   {
      super.setJurosISSProprioMesPago(jurosISSProprioMesPago);
      makeDirty();
   }
   public java.math.BigDecimal getJurosISSProprioPago() 
   {
      return super.getJurosISSProprioPago();
   }

   public void setJurosISSProprioPago( java.math.BigDecimal jurosISSProprioPago ) 
   {
      super.setJurosISSProprioPago(jurosISSProprioPago);
      makeDirty();
   }
   public java.math.BigDecimal getJurosISSRetencaoMesPago() 
   {
      return super.getJurosISSRetencaoMesPago();
   }

   public void setJurosISSRetencaoMesPago( java.math.BigDecimal jurosISSRetencaoMesPago ) 
   {
      super.setJurosISSRetencaoMesPago(jurosISSRetencaoMesPago);
      makeDirty();
   }
   public java.math.BigDecimal getJurosISSRetencaoPago() 
   {
      return super.getJurosISSRetencaoPago();
   }

   public void setJurosISSRetencaoPago( java.math.BigDecimal jurosISSRetencaoPago ) 
   {
      super.setJurosISSRetencaoPago(jurosISSRetencaoPago);
      makeDirty();
   }
   public java.math.BigDecimal getJurosMultaISSProprioMesPago() 
   {
      return super.getJurosMultaISSProprioMesPago();
   }

   public void setJurosMultaISSProprioMesPago( java.math.BigDecimal jurosMultaISSProprioMesPago ) 
   {
      super.setJurosMultaISSProprioMesPago(jurosMultaISSProprioMesPago);
      makeDirty();
   }
   public java.math.BigDecimal getJurosMultaISSProprioPago() 
   {
      return super.getJurosMultaISSProprioPago();
   }

   public void setJurosMultaISSProprioPago( java.math.BigDecimal jurosMultaISSProprioPago ) 
   {
      super.setJurosMultaISSProprioPago(jurosMultaISSProprioPago);
      makeDirty();
   }
   public java.math.BigDecimal getMultaISSProprioMesPago() 
   {
      return super.getMultaISSProprioMesPago();
   }

   public void setMultaISSProprioMesPago( java.math.BigDecimal multaISSProprioMesPago ) 
   {
      super.setMultaISSProprioMesPago(multaISSProprioMesPago);
      makeDirty();
   }
   public java.math.BigDecimal getMultaISSProprioPago() 
   {
      return super.getMultaISSProprioPago();
   }

   public void setMultaISSProprioPago( java.math.BigDecimal multaISSProprioPago ) 
   {
      super.setMultaISSProprioPago(multaISSProprioPago);
      makeDirty();
   }
   public java.math.BigDecimal getMultaISSRetencaoMesPago() 
   {
      return super.getMultaISSRetencaoMesPago();
   }

   public void setMultaISSRetencaoMesPago( java.math.BigDecimal multaISSRetencaoMesPago ) 
   {
      super.setMultaISSRetencaoMesPago(multaISSRetencaoMesPago);
      makeDirty();
   }
   public java.math.BigDecimal getMultaISSRetencaoPago() 
   {
      return super.getMultaISSRetencaoPago();
   }

   public void setMultaISSRetencaoPago( java.math.BigDecimal multaISSRetencaoPago ) 
   {
      super.setMultaISSRetencaoPago(multaISSRetencaoPago);
      makeDirty();
   }
   public java.math.BigDecimal getMultaMultaISSProprioMesPago() 
   {
      return super.getMultaMultaISSProprioMesPago();
   }

   public void setMultaMultaISSProprioMesPago( java.math.BigDecimal multaMultaISSProprioMesPago ) 
   {
      super.setMultaMultaISSProprioMesPago(multaMultaISSProprioMesPago);
      makeDirty();
   }
   public java.math.BigDecimal getMultaMultaISSProprioPago() 
   {
      return super.getMultaMultaISSProprioPago();
   }

   public void setMultaMultaISSProprioPago( java.math.BigDecimal multaMultaISSProprioPago ) 
   {
      super.setMultaMultaISSProprioPago(multaMultaISSProprioPago);
      makeDirty();
   }
   public java.math.BigDecimal getOutrosAcrescimosISSProprioMesPago() 
   {
      return super.getOutrosAcrescimosISSProprioMesPago();
   }

   public void setOutrosAcrescimosISSProprioMesPago( java.math.BigDecimal outrosAcrescimosISSProprioMesPago ) 
   {
      super.setOutrosAcrescimosISSProprioMesPago(outrosAcrescimosISSProprioMesPago);
      makeDirty();
   }
   public java.math.BigDecimal getOutrosAcrescimosISSProprioPago() 
   {
      return super.getOutrosAcrescimosISSProprioPago();
   }

   public void setOutrosAcrescimosISSProprioPago( java.math.BigDecimal outrosAcrescimosISSProprioPago ) 
   {
      super.setOutrosAcrescimosISSProprioPago(outrosAcrescimosISSProprioPago);
      makeDirty();
   }
   public java.math.BigDecimal getOutrosAcrescimosISSRetencaoMesPago() 
   {
      return super.getOutrosAcrescimosISSRetencaoMesPago();
   }

   public void setOutrosAcrescimosISSRetencaoMesPago( java.math.BigDecimal outrosAcrescimosISSRetencaoMesPago ) 
   {
      super.setOutrosAcrescimosISSRetencaoMesPago(outrosAcrescimosISSRetencaoMesPago);
      makeDirty();
   }
   public java.math.BigDecimal getOutrosAcrescimosISSRetencaoPago() 
   {
      return super.getOutrosAcrescimosISSRetencaoPago();
   }

   public void setOutrosAcrescimosISSRetencaoPago( java.math.BigDecimal outrosAcrescimosISSRetencaoPago ) 
   {
      super.setOutrosAcrescimosISSRetencaoPago(outrosAcrescimosISSRetencaoPago);
      makeDirty();
   }
   public java.math.BigDecimal getOutrosAcrescimosMultaISSProprioMesPago() 
   {
      return super.getOutrosAcrescimosMultaISSProprioMesPago();
   }

   public void setOutrosAcrescimosMultaISSProprioMesPago( java.math.BigDecimal outrosAcrescimosMultaISSProprioMesPago ) 
   {
      super.setOutrosAcrescimosMultaISSProprioMesPago(outrosAcrescimosMultaISSProprioMesPago);
      makeDirty();
   }
   public java.math.BigDecimal getOutrosAcrescimosMultaISSProprioPago() 
   {
      return super.getOutrosAcrescimosMultaISSProprioPago();
   }

   public void setOutrosAcrescimosMultaISSProprioPago( java.math.BigDecimal outrosAcrescimosMultaISSProprioPago ) 
   {
      super.setOutrosAcrescimosMultaISSProprioPago(outrosAcrescimosMultaISSProprioPago);
      makeDirty();
   }

   public boolean isModified()
   {
      return dirty;
   }

   protected void makeDirty()
   {
      dirty = true;
   }

   protected void makeClean()
   {
      dirty = false;
   }

   private boolean dirty = false;

   public org.inedam.grpw.movimentoiss.negocio.select.mapaarrecadacaosintetico.ejb.MapaArrecadacaoSinteticoKey ejbCreate() throws javax.ejb.CreateException
   {
      super.ejbCreate();

      return getDao().create((org.inedam.grpw.movimentoiss.negocio.select.mapaarrecadacaosintetico.ejb.bean.MapaArrecadacaoSinteticoEJB) this);
   }

   public org.inedam.grpw.movimentoiss.negocio.select.mapaarrecadacaosintetico.ejb.MapaArrecadacaoSinteticoKey ejbFindByPrimaryKey(org.inedam.grpw.movimentoiss.negocio.select.mapaarrecadacaosintetico.ejb.MapaArrecadacaoSinteticoKey key) throws javax.ejb.FinderException
   {
      return getDao().findByPrimaryKey(key);
   }

   public java.util.Collection ejbFindByAno(java.lang.Integer ano) throws javax.ejb.FinderException
   {
      return getDao().findByAno(ano);
   }

   public void ejbLoad() throws javax.ejb.EJBException, java.rmi.RemoteException
   {
      getDao().load((org.inedam.grpw.movimentoiss.negocio.select.mapaarrecadacaosintetico.ejb.MapaArrecadacaoSinteticoKey) ctx.getPrimaryKey(), this);
      makeClean();
   }

   public void ejbStore() throws javax.ejb.EJBException, java.rmi.RemoteException
   {
      if (isModified())
      {
         getDao().store((org.inedam.grpw.movimentoiss.negocio.select.mapaarrecadacaosintetico.ejb.bean.MapaArrecadacaoSinteticoEJB) this);
         makeClean();
      }
   }

   public void ejbActivate() throws javax.ejb.EJBException, java.rmi.RemoteException
   {
   }

   public void ejbPassivate() throws javax.ejb.EJBException, java.rmi.RemoteException
   {

   }

   private javax.ejb.EntityContext ctx = null;

   public void setEntityContext(javax.ejb.EntityContext ctx) throws javax.ejb.EJBException, java.rmi.RemoteException
   {
      this.ctx = ctx;
   }

   public void unsetEntityContext() throws javax.ejb.EJBException, java.rmi.RemoteException
   {
      this.ctx = null;
   }

   public void ejbRemove() throws javax.ejb.EJBException, java.rmi.RemoteException, javax.ejb.RemoveException
   {
      getDao().remove((org.inedam.grpw.movimentoiss.negocio.select.mapaarrecadacaosintetico.ejb.MapaArrecadacaoSinteticoKey) ctx.getPrimaryKey());

   }

      private static org.inedam.grpw.movimentoiss.negocio.select.mapaarrecadacaosintetico.ejb.bean.MapaArrecadacaoSinteticoDAO dao = null;

   protected static synchronized org.inedam.grpw.movimentoiss.negocio.select.mapaarrecadacaosintetico.ejb.bean.MapaArrecadacaoSinteticoDAO getDao()
   {
      if (dao != null) {
         return dao;
      } else {

         try{
            javax.naming.InitialContext ctx = new javax.naming.InitialContext();
            Object ref = ctx.lookup("java:comp/env/select/MapaArrecadacaoSinteticoDAO");
            String daoStr = (String) javax.rmi.PortableRemoteObject.narrow(ref, String.class);
            dao = (org.inedam.grpw.movimentoiss.negocio.select.mapaarrecadacaosintetico.ejb.bean.MapaArrecadacaoSinteticoDAO) Class.forName(daoStr).newInstance();
         } catch (javax.naming.NamingException e) {
            throw new IllegalStateException("DAO not defined in JNDI 'java:comp/env/select/MapaArrecadacaoSinteticoDAO': " + e.getLocalizedMessage());
         } catch (Exception e) {
            throw new IllegalStateException("Exception while looking in JNDI for 'java:comp/env/select/MapaArrecadacaoSinteticoDAO': " + e.getLocalizedMessage());
         }

         dao.init();
         return dao;
      }
   }

}

DAO

[code]/*

  • Created on 16/11/2005
    */
    package org.inedam.grpw.movimentoiss.negocio.select.mapaarrecadacaosintetico.ejb.bean;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Collection;
import java.util.LinkedList;

import javax.ejb.CreateException;
import javax.ejb.EJBException;
import javax.ejb.FinderException;
import javax.ejb.ObjectNotFoundException;
import javax.ejb.RemoveException;
import javax.naming.InitialContext;
import javax.naming.NamingException;

import org.inedam.grpw.movimentoiss.negocio.select.mapaarrecadacaosintetico.ejb.MapaArrecadacaoSinteticoKey;

/**

  • @author vanei@javanei.com.br
    */
    public class MapaArrecadacaoSinteticoDAOMySQL implements MapaArrecadacaoSinteticoDAO {
    protected javax.sql.DataSource jdbcFactory;

    public void init() {
    try {
    jdbcFactory = (javax.sql.DataSource) new InitialContext().lookup(“java:/GrpwDS”);
    } catch (NamingException ex) {
    ex.printStackTrace();
    throw new IllegalStateException(“Não foi possível obter uma conexão com o banco de dados.”);
    }
    }

    public void load(MapaArrecadacaoSinteticoKey pk, MapaArrecadacaoSinteticoEJB ejb) throws EJBException {
    Connection con = null;
    PreparedStatement stmt = null;
    ResultSet rs = null;
    try {
    con = jdbcFactory.getConnection();
    StringBuffer query = new StringBuffer();
    query.append(“SELECT d.ano”);
    query.append(" , d.mes");
    query.append(" , d.tipodividauid");
    query
    .append(" , (SELECT SUM(valor) FROM divida d1 WHERE d1.ano = d.ano AND d1.mes = d.mes AND d1.tipodividauid = d.tipodividauid) AS valor");
    query
    .append(" , (SELECT SUM(valor) FROM pagamentodivida p WHERE NOT ISNULL(p.datapagamento) AND p.dividauid IN (SELECT dividauid FROM divida d2 WHERE d2.ano = d.ano AND d2.mes = d.mes AND d2.tipodividauid = d.tipodividauid)) AS valorpago");
    query
    .append(" , (SELECT SUM(p.juros) + SUM(b.valorjuros) FROM pagamentodivida p, boletobancario b WHERE b.pagamentodividauid = p.pagamentodividauid AND NOT ISNULL(p.datapagamento) AND p.dividauid IN (SELECT dividauid FROM divida d2 WHERE d2.ano = d.ano AND d2.mes = d.mes AND d2.tipodividauid = d.tipodividauid)) AS jurospago");
    query
    .append(" , (SELECT SUM(p.multa) + SUM(b.valormulta) FROM pagamentodivida p, boletobancario b WHERE b.pagamentodividauid = p.pagamentodividauid AND NOT ISNULL(p.datapagamento) AND p.dividauid IN (SELECT dividauid FROM divida d2 WHERE d2.ano = d.ano AND d2.mes = d.mes AND d2.tipodividauid = d.tipodividauid)) AS multapago");
    query
    .append(" , (SELECT SUM(correcaomonetaria) FROM pagamentodivida p WHERE NOT ISNULL(p.datapagamento) AND p.dividauid IN (SELECT dividauid FROM divida d2 WHERE d2.ano = d.ano AND d2.mes = d.mes AND d2.tipodividauid = d.tipodividauid)) AS correcaomonetariapago");
    query
    .append(" , (SELECT SUM(p.outrosacrescimos) + SUM(b.valoroutrosacrescimos) FROM pagamentodivida p, boletobancario b WHERE b.pagamentodividauid = p.pagamentodividauid AND NOT ISNULL(p.datapagamento) AND p.dividauid IN (SELECT dividauid FROM divida d2 WHERE d2.ano = d.ano AND d2.mes = d.mes AND d2.tipodividauid = d.tipodividauid)) AS outrosacrescimospago");
    query
    .append(" , (SELECT SUM(p.desconto) + SUM(b.valordesconto) FROM pagamentodivida p, boletobancario b WHERE b.pagamentodividauid = p.pagamentodividauid AND NOT ISNULL(p.datapagamento) AND p.dividauid IN (SELECT dividauid FROM divida d2 WHERE d2.ano = d.ano AND d2.mes = d.mes AND d2.tipodividauid = d.tipodividauid)) AS descontopago");
    query
    .append(" , (SELECT SUM(valor) FROM pagamentodivida p WHERE NOT ISNULL(p.datapagamento) AND YEAR(p.datapagamento) = d.ano AND MONTH(p.datapagamento) = d.mes AND (SELECT COUNT() FROM divida d3 WHERE d3.dividauid = p.dividauid AND d3.tipodividauid = d.tipodividauid) > 0) AS valormespago");
    query
    .append(" , (SELECT SUM(p.juros) + SUM(b.valorjuros) FROM pagamentodivida p, boletobancario b WHERE b.pagamentodividauid = p.pagamentodividauid AND NOT ISNULL(p.datapagamento) AND YEAR(p.datapagamento) = d.ano AND MONTH(p.datapagamento) = d.mes AND (SELECT COUNT(
    ) FROM divida d3 WHERE d3.dividauid = p.dividauid AND d3.tipodividauid = d.tipodividauid) > 0) AS jurosmespago");
    query
    .append(" , (SELECT SUM(p.multa) + SUM(b.valormulta) FROM pagamentodivida p, boletobancario b WHERE b.pagamentodividauid = p.pagamentodividauid AND NOT ISNULL(p.datapagamento) AND YEAR(p.datapagamento) = d.ano AND MONTH(p.datapagamento) = d.mes AND (SELECT COUNT() FROM divida d3 WHERE d3.dividauid = p.dividauid AND d3.tipodividauid = d.tipodividauid) > 0) AS multamespago");
    query
    .append(" , (SELECT SUM(correcaomonetaria) FROM pagamentodivida p WHERE NOT ISNULL(p.datapagamento) AND YEAR(p.datapagamento) = d.ano AND MONTH(p.datapagamento) = d.mes AND (SELECT COUNT(
    ) FROM divida d3 WHERE d3.dividauid = p.dividauid AND d3.tipodividauid = d.tipodividauid) > 0) AS correcaomonetariamespago");
    query
    .append(" , (SELECT SUM(p.outrosacrescimos) + SUM(b.valoroutrosacrescimos) FROM pagamentodivida p, boletobancario b WHERE b.pagamentodividauid = p.pagamentodividauid AND NOT ISNULL(p.datapagamento) AND YEAR(p.datapagamento) = d.ano AND MONTH(p.datapagamento) = d.mes AND (SELECT COUNT() FROM divida d3 WHERE d3.dividauid = p.dividauid AND d3.tipodividauid = d.tipodividauid) > 0) AS outrosacrescimosmespago");
    query
    .append(" , (SELECT SUM(p.desconto) + SUM(b.valordesconto) FROM pagamentodivida p, boletobancario b WHERE b.pagamentodividauid = p.pagamentodividauid AND NOT ISNULL(p.datapagamento) AND YEAR(p.datapagamento) = d.ano AND MONTH(p.datapagamento) = d.mes AND (SELECT COUNT(
    ) FROM divida d3 WHERE d3.dividauid = p.dividauid AND d3.tipodividauid = d.tipodividauid) > 0) AS descontomespago");
    query.append(" FROM divida d");
    query.append(" WHERE d.ano = ?");
    query.append(" AND d.mes = ?");
    query.append(" AND d.tipodividauid = ?");
    query.append(" GROUP BY tipodividauid, ano, mes");
    stmt = con.prepareStatement(query.toString());
    stmt.setInt(1, pk.getAno().intValue());
    stmt.setInt(2, pk.getMes().intValue());
    stmt.setInt(3, pk.getTipoDividaUID().intValue());
    rs = stmt.executeQuery();
    if (!rs.next()) { throw new EJBException(“Falha fazendo load do registro”); }
    ejb.setAno(pk.getAno());
    ejb.setMes(pk.getMes());
    ejb.setTipoDividaUID(pk.getTipoDividaUID());
    if (pk.getTipoDividaUID().intValue() == 3 /* PROPRIO /) {
    ejb.setValorISSProprio(rs.getBigDecimal(4));
    ejb.setValorISSProprioPago(rs.getBigDecimal(5));
    ejb.setJurosISSProprioPago(rs.getBigDecimal(6));
    ejb.setMultaISSProprioPago(rs.getBigDecimal(7));
    ejb.setCorrecaoMonetariaISSProprioPago(rs.getBigDecimal(8));
    ejb.setOutrosAcrescimosISSProprioPago(rs.getBigDecimal(9));
    ejb.setDescontoISSProprioPago(rs.getBigDecimal(10));
    ejb.setValorProprioMesPago(rs.getBigDecimal(11));
    ejb.setJurosISSProprioMesPago(rs.getBigDecimal(12));
    ejb.setMultaISSProprioMesPago(rs.getBigDecimal(13));
    ejb.setCorrecaoMonetariaISSProprioMesPago(rs.getBigDecimal(14));
    ejb.setOutrosAcrescimosISSProprioMesPago(rs.getBigDecimal(15));
    ejb.setDescontoISSProprioMesPago(rs.getBigDecimal(16));
    } else if (pk.getTipoDividaUID().intValue() == 1) { /
    RETENCAO /
    ejb.setValorISSRetencao(rs.getBigDecimal(4));
    System.out.println("ISSRetencao no DAO: "+rs.getBigDecimal(4));
    System.out.println("ejb.setValorISSRetencao: "+ejb.getValorISSRetencao());
    ejb.setValorISSRetencaoPago(rs.getBigDecimal(5));
    ejb.setJurosISSRetencaoPago(rs.getBigDecimal(6));
    ejb.setMultaISSRetencaoPago(rs.getBigDecimal(7));
    ejb.setCorrecaoMonetariaISSRetencaoPago(rs.getBigDecimal(8));
    ejb.setOutrosAcrescimosISSRetencaoPago(rs.getBigDecimal(9));
    ejb.setDescontoISSRetencaoPago(rs.getBigDecimal(10));
    ejb.setValorRetencaoMesPago(rs.getBigDecimal(11));
    ejb.setJurosISSRetencaoMesPago(rs.getBigDecimal(12));
    ejb.setMultaISSRetencaoMesPago(rs.getBigDecimal(13));
    ejb.setCorrecaoMonetariaISSRetencaoMesPago(rs.getBigDecimal(14));
    ejb.setOutrosAcrescimosISSRetencaoMesPago(rs.getBigDecimal(15));
    ejb.setDescontoISSRetencaoMesPago(rs.getBigDecimal(16));
    } else if (pk.getTipoDividaUID().intValue() == 4) /
    Multa ISS Proprio */{
    ejb.setValorMultaISSProprio(rs.getBigDecimal(4));
    ejb.setValorMultaISSProprioPago(rs.getBigDecimal(5));
    ejb.setJurosMultaISSProprioPago(rs.getBigDecimal(6));
    ejb.setMultaMultaISSProprioPago(rs.getBigDecimal(7));
    ejb.setCorrecaoMonetariaMultaISSProprioPago(rs.getBigDecimal(8));
    ejb.setOutrosAcrescimosMultaISSProprioPago(rs.getBigDecimal(9));
    ejb.setDescontoMultaISSProprioPago(rs.getBigDecimal(10));
    ejb.setValorMultaISSProprioMesPago(rs.getBigDecimal(11));
    ejb.setJurosMultaISSProprioMesPago(rs.getBigDecimal(12));
    ejb.setMultaMultaISSProprioMesPago(rs.getBigDecimal(13));
    ejb.setCorrecaoMonetariaMultaISSProprioMesPago(rs.getBigDecimal(14));
    ejb.setOutrosAcrescimosMultaISSProprioMesPago(rs.getBigDecimal(15));
    ejb.setDescontoMultaISSProprioMesPago(rs.getBigDecimal(16));
    }
    } catch (SQLException se) {
    throw new EJBException(“Falha executando SELECT.”);
    } finally {
    if (rs != null) {
    try {
    rs.close();
    } catch (SQLException ex) {
    throw new EJBException(ex.getMessage());
    }
    }
    if (stmt != null) {
    try {
    stmt.close();
    } catch (SQLException ex) {
    throw new EJBException(ex.getMessage());
    }
    }
    if (con != null) {
    try {
    con.close();
    } catch (SQLException ex) {
    throw new EJBException(ex.getMessage());
    }
    }
    }
    }

    public void store(MapaArrecadacaoSinteticoEJB ejb) throws EJBException {
    }

    public void remove(MapaArrecadacaoSinteticoKey pk) throws RemoveException, EJBException {
    }

    public MapaArrecadacaoSinteticoKey create(MapaArrecadacaoSinteticoEJB ejb) throws CreateException, EJBException {
    return null;
    }

    public MapaArrecadacaoSinteticoKey findByPrimaryKey(MapaArrecadacaoSinteticoKey key) throws FinderException {
    Connection con = null;
    PreparedStatement stmt = null;
    ResultSet rs = null;
    StringBuffer sb = new StringBuffer();
    sb.append(“SELECT d.ano”);
    sb.append(" , d.mes");
    sb.append(" , d.tipodividauid");
    sb.append(" FROM divida d");
    sb.append(" WHERE d.ano = ?");
    sb.append(" AND d.mes = ?");
    sb.append(" AND d.tipodividauid = ?");
    sb.append(" GROUP BY tipodividauid, ano, mes");
    try {
    con = jdbcFactory.getConnection();
    stmt = con.prepareStatement(sb.toString());
    stmt.setInt(1, key.getAno().intValue());
    stmt.setInt(2, key.getMes().intValue());
    stmt.setInt(3, key.getTipoDividaUID().intValue());
    rs = stmt.executeQuery();
    if (rs.next()) {
    return new MapaArrecadacaoSinteticoKey(new Integer(rs.getInt(1)), new Integer(rs.getInt(2)), new Integer(
    rs.getInt(3)));
    } else {
    throw new ObjectNotFoundException(“RelatorioResumidoISSProprio”);
    }
    } catch (SQLException ex) {
    throw new FinderException(ex.getMessage());
    } finally {
    if (rs != null) {
    try {
    rs.close();
    } catch (SQLException ex) {
    throw new FinderException(ex.getMessage());
    }
    }
    if (stmt != null) {
    try {
    stmt.close();
    } catch (SQLException ex) {
    throw new FinderException(ex.getMessage());
    }
    }
    if (con != null) {
    try {
    con.close();
    } catch (SQLException ex) {
    throw new FinderException(ex.getMessage());
    }
    }
    }
    }

    public Collection findByAno(Integer ano) throws FinderException, ObjectNotFoundException {
    Connection con = null;
    PreparedStatement stmt = null;
    ResultSet rs = null;
    StringBuffer sb = new StringBuffer();
    sb.append(“SELECT d.ano”);
    sb.append(" , d.mes");
    sb.append(" , d.tipodividauid");
    sb.append(" FROM divida d");
    sb.append(" WHERE d.tipodividauid IN (1, 3, 4)");
    sb.append(" AND d.ano = ?");
    sb.append(" AND d.valor > 0");
    sb.append(" GROUP BY tipodividauid, ano, mes");
    try {
    con = jdbcFactory.getConnection();
    LinkedList result = new LinkedList();
    stmt = con.prepareStatement(sb.toString());
    stmt.setInt(1, ano.intValue());
    rs = stmt.executeQuery();
    while (rs.next()) {
    result.add(new MapaArrecadacaoSinteticoKey(new Integer(rs.getInt(1)), new Integer(rs.getInt(2)),
    new Integer(rs.getInt(3))));
    }
    return result;
    } catch (SQLException ex) {
    throw new FinderException(ex.getMessage());
    } finally {
    if (rs != null) {
    try {
    rs.close();
    } catch (SQLException ex) {
    throw new FinderException(ex.getMessage());
    }
    }
    if (stmt != null) {
    try {
    stmt.close();
    } catch (SQLException ex) {
    throw new FinderException(ex.getMessage());
    }
    }
    if (con != null) {
    try {
    con.close();
    } catch (SQLException ex) {
    throw new FinderException(ex.getMessage());
    }
    }
    }
    }
    }
    [/code]

Hmmm…

Só por curiosidade, tente remover a cláusula "GROUP BY" do comando SQL do método findByAno. Isso pode estar embaralhando tudo.

Uma outra dica, que nada tem a ver com seu problema, mas ajuda muito a tornar o código mais legível. extraia os comandos SQLs para alguma constante na sua classe DAO. Algo como:

[code]
public class MapaArrecadacaoSinteticoDAOMySQL implements MapaArrecadacaoSinteticoDAO {

private static final String QUERY_FIND_BY_ANO = "SELECT d.ano, d.mes, d.tipodividauid from divida d WHERE d.tipodividauid IN (1, 3, 4) AND d.ano = ? AND d.valor > 0";
//...

}[/code]

vou testar, essa dica, agora olha só que estranho, coloquei uns System.out la no DAO pra ver o que ele traz do banco, enquanto nao passar uns 30 min do servidor “startado” ou se eu não reiniciar ele, ele nem acessa mais o DAO, parece que tem algo no cache mesmo, pois não apareceu os System.out de lá, agora vou esperar esse tempo pra ver se o “group by” ta fazendo a diferença…

Olha só galera, eu tirei o group by conforme o Daniel sugeriu, e depois e 30 min. ele voltou acessar o EJB+DAO e agora ele repete o valor de fevereiro em janeiro, mas pelo menos os outros meses vieram corretos…ou seja. ainda tá se perdendo em alguma coisa no sql

amigos, o problema não é mais no DAO… quando eu seto esses valores numa classe pública para o Action jogar no relatório é que está trazendo valores errados…

cheguei a conclusão que tenho que forçar sempre a executar o findByAno e o load como se fosse a primeira vez!!

sugestões?