Erro ao realizar busca....StackOverflowError

pessoal estou fazendo uma busca em um BD e esta me retornando esta excption
alguem pode me ajudar?

valeu

Cara quando ocorre esse erro é por que houve um estouro de memória na JVM, ou seja, houve um estouro de uma pilha (Stack), pode ser métodos chamando métodos e houve algum loop infinito. DÊ uma olhada se vc não está chamando várias classes ou metodos infinitamente.

Dê uma olhada nesses post pode te ajudar.

http://www.guj.com.br/posts/list/87065.java

http://www.javafree.org/javabb/viewtopic.jbb?t=6735

Abraço

Esse erro acontece quando vc chama um método que chama outro que chama ele mesmo e chama outro e chama ele mesmo…

public final class teste {
    public static void main(String[] args){
        new teste().vai();
    }
    
    public void vai(){
        vai2();
    }
    
    public void vai2(){
        vai();
    }
    
}

ok, acho que foi isso que o ivo disse que aconteceu.
estou tentando fazer uma busca, e estou com problemas ao passar parametros.
estou usando um query nativa e nela passando os parametros que vem do meu ManagedBean, e apártir do momento que dei um new ManagedBean em meu DAO começou dar este erro.

Podem me ajudar?

Só com código.

aqui está o meu DAO:

public class PorPoloDao {

	public static List<VendasPorPolo> ListaVendasPorPolo(String dtInicial,
			String dtFinal) {

		System.out.println("Abrindo sessao para INFORMAÇÔES GERENCIAIS");
		Session s = HibernateUtil.getSession();
		System.out.println("Sessão IG iniciada com sucesso!!!");
		System.out.println("Executando query...");
		String sql = "SELECT "
				+ "             CM_POLO.DS_POLO, "
				+ "             SUM( DECODE( ES_PRODUTO_FARMACEUTICO.DM_CLASSIFICACAO, '3', CM_ITEM.QTDE, 0 ) ) UNIDADE_PERF, "
				+ "             SUM( DECODE( ES_PRODUTO_FARMACEUTICO.DM_CLASSIFICACAO, '3', 0, CM_ITEM.QTDE ) ) UNIDADE_MED, "
				+ "             SUM( DECODE( ES_PRODUTO_FARMACEUTICO.DM_CLASSIFICACAO, '3', CM_ITEM.VL_LIQUIDO_TOTAL, 0 ) ) VALOR_PERF, "
				+ "             SUM( DECODE( ES_PRODUTO_FARMACEUTICO.DM_CLASSIFICACAO, '3', 0, CM_ITEM.VL_LIQUIDO_TOTAL ) ) VALOR_MED, "
				+ "             CM_POLO.SIGLA_POLO"
				+ "   FROM      CM_POLO, "
				+ "             ES_PRODUTO_FARMACEUTICO, "
				+ "             CM_VENDEDOR, "
				+ "             CM_ITEM, "
				+ "             CM_MOVIMENTO "
				+ "   WHERE     ES_PRODUTO_FARMACEUTICO.ID_PRODUTO  = CM_ITEM.ID_PRODUTO "
				+ "   AND       CM_POLO.ID_POLO                     = CM_VENDEDOR.ID_POLO "
				+ "   AND       CM_VENDEDOR.ID_VENDEDOR             = CM_MOVIMENTO.ID_VENDEDOR "
				+ "   AND       CM_ITEM.ID_MOVIMENTO                = CM_MOVIMENTO.ID_MOVIMENTO "
				+ "   AND       CM_MOVIMENTO.DM_CANCELAMENTO       <> 'S' "
				+ "   AND       CM_MOVIMENTO.ID_TIPO_NOTA           IN ( 1, 10, 11 ) "
				+ "   AND       CM_MOVIMENTO.DT_MOVIMENTO           BETWEEN   TO_DATE(:dtInicial,   'dd/mm/yyyy') "
				+ "                                                 AND       TO_DATE(:dtFinal,   'dd/mm/yyyy') "
				+ "   GROUP BY  CM_POLO.DS_POLO,CM_POLO.SIGLA_POLO";

		SQLQuery qryVP = s.createSQLQuery(sql);
		qryVP.setResultTransformer(Transformers
				.aliasToBean(VendasPorPolo.class));

		qryVP.setParameter("dtInicial", dtInicial);
		qryVP.setParameter("dtFinal", dtFinal);

		return qryVP.list();
	}
}

Meu ManagedBean:

public class VendasPorPoloManager {

	private String dtInicial;
	private String dtFinal;

	public String getDtInicial() {
		return dtInicial;
	}

	public void setDtInicial(String dtInicial) {
		this.dtInicial = dtInicial;
		System.out.println("Data inicial para busca -> " + dtInicial);
	}

	public String getDtFinal() {
		return dtFinal;
	}

	public void setDtFinal(String dtFinal) {
		this.dtFinal = dtFinal;
		System.out.println("Data final para busca -> " + dtFinal);
	}

	public String buscar() {
		try {

			System.out.println("Realizando consulta -> " + dtInicial + " a "
					+ dtFinal + " na classe " + getClass());
			System.out.println("Fim da consulta.");
			return "ok";

		} catch (Exception e) {
			System.out.println(e.getClass() + " retornou uma exception -> "
					+ e.getMessage());
			return "erro_ig";
		} 
	}

	private VendasPorPolo vendasPorPolo = new VendasPorPolo();

	private List<VendasPorPolo> listaVendasPorPolo = PorPoloDao
			.ListaVendasPorPolo(dtInicial, dtFinal);

	public VendasPorPolo getVendasPorPolo() {
		return vendasPorPolo;
	}

	public void setVendasPorPolo(VendasPorPolo vendasPorPolo) {
		this.vendasPorPolo = vendasPorPolo;
	}

	public List<VendasPorPolo> getListaVendasPorPolo() {
		System.out.println("Qtde. de informações Por Polo -> "
				+ listaVendasPorPolo.size());
		return listaVendasPorPolo;
	}

	public void setListaVendasPorPolo(List<VendasPorPolo> listaVendasPorPolo) {
		this.listaVendasPorPolo = listaVendasPorPolo;
	}

}

esta é minha jsp:

<h:inputText required="true" maxlength="10"
			value="#{vendasPorPoloManager.dtInicial}" id="dtInicial"
			onkeyup="return txtBoxFormat(this, '99/99/9999', event);">
			<a4j:support event="onchange"></a4j:support>
		</h:inputText>
		<rich:message styleClass="msgDatasIG" for="dtInicial"></rich:message>
		<f:verbatim>
			<br>
		</f:verbatim>
		<h:outputText styleClass="label_dtFinal" value="Dt.Final: "></h:outputText>
		<f:verbatim>
			<br>
		</f:verbatim>
		<h:inputText required="true" maxlength="10"
			value="#{vendasPorPoloManager.dtFinal}" id="dtFinal"
			onkeyup="return txtBoxFormat(this, '99/99/9999', event);">
			<a4j:support event="onchange"></a4j:support>
		</h:inputText>
		<rich:message styleClass="msgDatasIG" for="dtFinal"></rich:message>
		<f:verbatim>
			<br>
			<br>
		</f:verbatim>
		<a4j:commandButton styleClass="bt_atualizar" value="Atualizar >>"
			action="#{vendasPorPoloManager.buscar}"></a4j:commandButton>

e depois exibo o resultado em uma dataTable.

valeu pela atenção.

Bom eu não achei ali no teu dao ele instanciando o teu VendasPorPoloManager (deve ter mais código), mas se realmente isso estiver acontecendo provavelmente está ai o erro, pq o dao chama o Manager e na linha 41 o manager chama o dao e assim por diante. Se não for isso só com esse código eu não consegui ve erro.

flw!

desculpa ivo, eh que tinha alterado
mas esta assim:

public class PorPoloDao {

	public static List<VendasPorPolo> ListaVendasPorPolo() {

		VendasPorPoloManager vpm = new VendasPorPoloManager();

		System.out.println("Abrindo sessao para INFORMAÇÔES GERENCIAIS");
		Session s = HibernateUtil.getSession();
		System.out.println("Sessão IG iniciada com sucesso!!!");
		System.out.println("Executando query...");
		String sql = "SELECT "
				+ "             CM_POLO.DS_POLO, "
				+ "             SUM( DECODE( ES_PRODUTO_FARMACEUTICO.DM_CLASSIFICACAO, '3', CM_ITEM.QTDE, 0 ) ) UNIDADE_PERF, "
				+ "             SUM( DECODE( ES_PRODUTO_FARMACEUTICO.DM_CLASSIFICACAO, '3', 0, CM_ITEM.QTDE ) ) UNIDADE_MED, "
				+ "             SUM( DECODE( ES_PRODUTO_FARMACEUTICO.DM_CLASSIFICACAO, '3', CM_ITEM.VL_LIQUIDO_TOTAL, 0 ) ) VALOR_PERF, "
				+ "             SUM( DECODE( ES_PRODUTO_FARMACEUTICO.DM_CLASSIFICACAO, '3', 0, CM_ITEM.VL_LIQUIDO_TOTAL ) ) VALOR_MED, "
				+ "             CM_POLO.SIGLA_POLO"
				+ "   FROM      CM_POLO, "
				+ "             ES_PRODUTO_FARMACEUTICO, "
				+ "             CM_VENDEDOR, "
				+ "             CM_ITEM, "
				+ "             CM_MOVIMENTO "
				+ "   WHERE     ES_PRODUTO_FARMACEUTICO.ID_PRODUTO  = CM_ITEM.ID_PRODUTO "
				+ "   AND       CM_POLO.ID_POLO                     = CM_VENDEDOR.ID_POLO "
				+ "   AND       CM_VENDEDOR.ID_VENDEDOR             = CM_MOVIMENTO.ID_VENDEDOR "
				+ "   AND       CM_ITEM.ID_MOVIMENTO                = CM_MOVIMENTO.ID_MOVIMENTO "
				+ "   AND       CM_MOVIMENTO.DM_CANCELAMENTO       <> 'S' "
				+ "   AND       CM_MOVIMENTO.ID_TIPO_NOTA           IN ( 1, 10, 11 ) "
				+ "   AND       CM_MOVIMENTO.DT_MOVIMENTO           BETWEEN   TO_DATE(:dtInicial,   'dd/mm/yyyy') "
				+ "                                                 AND       TO_DATE(:dtFinal,   'dd/mm/yyyy') "
				+ "   GROUP BY  CM_POLO.DS_POLO,CM_POLO.SIGLA_POLO";

		SQLQuery qryVP = s.createSQLQuery(sql);
		qryVP.setResultTransformer(Transformers
				.aliasToBean(VendasPorPolo.class));

		qryVP.setParameter("dtInicial", vpm.getDtInicial());
		qryVP.setParameter("dtFinal", vpm.getDtFinal());

		return qryVP.list();
	}
}

orbigado

Tai o erro então, igual como eu tinha dito anteriormente:

o dao tá instanciando o VendasPorPoloManager na linha 5:

VendasPorPoloManager vpm = new VendasPorPoloManager();

O VendasPorPoloManager instancia uma listaVendasPorPolo (que está na dao e vai chamar de novo o manager)

private List<VendasPorPolo> listaVendasPorPolo = PorPoloDao  
            .ListaVendasPorPolo(dtInicial, dtFinal);

O dao tá chamando o manager e o manager ta chamando o dao.

entendi.
mas eai como eu possoi resolver isso? fazer essa busca funcionar!

orbigado

Tira o:

VendasPorPoloManager vpm = new VendasPorPoloManager();

do dao e recebe as datas como parametro (como tava antes).

public static List<VendasPorPolo> ListaVendasPorPolo(String dtInicial, String dtFinal) {

ok ivo, fiz isso ai mas é o seguinte, quando chamo o metodo busca atravez do comandButton ele nao retorna as informações.
olha meu metodo busca:

public String buscar() {
		try {

			
			System.out.println("Realizando consulta -> " + dtInicial + " a "
					+ dtFinal + " na classe " + getClass());
			System.out.println("Fim da consulta.");
			return "ok";

		} catch (Exception e) {
			System.out.println(e.getClass() + " retornou uma exception -> "
					+ e.getMessage());
			return "erro_ig";
		} finally {

		}

	}
  • acho que estou errando aqui no metodo buscar()

valeu pela atenção

Claro pq vc ta retornando a string “ok” no método buscar e na verdade vc deveria mudar o retorno do método buscar para List e no método buscar retornar listaVendasPorPolo, ou deixar o retorno como String, fazer um for na listaVendasPorPolo e ir montando um string para retornar depois. Eu não sei como é a tua classe VendasPorPolo mas digamos que ela tenha nome e idade:

public String buscar() {
		try {
			System.out.println("Realizando consulta -> " + dtInicial + " a "
					+ dtFinal + " na classe " + getClass());
			System.out.println("Fim da consulta.");
			
                        StringBuilder retorno = new StringBuilder();
                        for(VendasPorPolo aux : listaVendasPorPolo){
                              retorno.append(aux.getNome());
                              retorno.append(" ");
                              retorno.append(aux.getIdade());
                              retorno.append(" ");
                       }
                       return retorno.toString();

		} catch (Exception e) {
			System.out.println(e.getClass() + " retornou uma exception -> "
					+ e.getMessage());
			return "erro_ig";
		} finally {

		}

	}

ok ivo, olha como esta meu DAO agora:

public class VendasPorPoloManager {

	private String dtInicial;
	private String dtFinal;

	public String getDtInicial() {
		return dtInicial;
	}

	public void setDtInicial(String dtInicial) {
		this.dtInicial = dtInicial;
		System.out.println("Data inicial para busca -> " + dtInicial);
	}

	public String getDtFinal() {
		return dtFinal;
	}

	public void setDtFinal(String dtFinal) {
		this.dtFinal = dtFinal;
		System.out.println("Data final para busca -> " + dtFinal);
	}

	public String buscar() {
		try {

						System.out.println("Realizando consulta -> " + dtInicial + " a "
					+ dtFinal + " na classe " + getClass());
			System.out.println("Fim da consulta.");
			StringBuilder retorno = new StringBuilder();

			for (VendasPorPolo aux : listaVendasPorPolo) {
				retorno.append(aux.getSIGLA_POLO());
				retorno.append(" ");
				retorno.append(aux.getDS_POLO());
				retorno.append(" ");
				retorno.append(aux.getUNIDADE_MED());
				retorno.append(" ");
				retorno.append(aux.getUNIDADE_PERF());
				retorno.append(" ");
				retorno.append(aux.getVALOR_MED());
				retorno.append(" ");
				retorno.append(aux.getVALOR_PERF());

			}
			return retorno.toString();

		} catch (Exception e) {
			System.out.println(e.getClass() + " retornou uma exception -> "
					+ e.getMessage());
			return "erro_ig";
		} finally {

		}

	}

	private VendasPorPolo vendasPorPolo = new VendasPorPolo();

	private List<VendasPorPolo> listaVendasPorPolo = PorPoloDao
			.ListaVendasPorPolo(dtInicial, dtFinal);

	public VendasPorPolo getVendasPorPolo() {
		return vendasPorPolo;
	}

	public void setVendasPorPolo(VendasPorPolo vendasPorPolo) {
		this.vendasPorPolo = vendasPorPolo;
	}

	public List<VendasPorPolo> getListaVendasPorPolo() {
		System.out.println("Qtde. de informações Por Polo -> "
				+ listaVendasPorPolo.size());
		return listaVendasPorPolo;
	}

	public void setListaVendasPorPolo(List<VendasPorPolo> listaVendasPorPolo) {
		this.listaVendasPorPolo = listaVendasPorPolo;
	}

}

agora a jsp ja esta abrindo, mas quando passo as datas ela nao retorna nada. dei um sys out e esta imprimindo oq digitei

Realizando consulta -> 01/01/2008 a 02/04/2008 na classe class br.com.fitsistemas.manager.VendasPorPoloManager
Fim da consulta.

pq será que nao ta funcionando?

Talvez pq a tua lista está sendo criada apenas uma vez (inicialização da classe) e sempre vai retornar a mesma coisa.
Faz assim:

	public String buscar() {
		try {

						System.out.println("Realizando consulta -> " + dtInicial + " a "
					+ dtFinal + " na classe " + getClass());

                        //Executa o sql
                        listaVendasPorPolo = PorPoloDao.ListaVendasPorPolo(dtInicial, dtFinal);

			System.out.println("Fim da consulta.");
			StringBuilder retorno = new StringBuilder();

			for (VendasPorPolo aux : listaVendasPorPolo) {
				retorno.append(aux.getSIGLA_POLO());
				retorno.append(" ");
				retorno.append(aux.getDS_POLO());
				retorno.append(" ");
				retorno.append(aux.getUNIDADE_MED());
				retorno.append(" ");
				retorno.append(aux.getUNIDADE_PERF());
				retorno.append(" ");
				retorno.append(aux.getVALOR_MED());
				retorno.append(" ");
				retorno.append(aux.getVALOR_PERF());

			}
			return retorno.toString();

		} catch (Exception e) {
			System.out.println(e.getClass() + " retornou uma exception -> "
					+ e.getMessage());
			return "erro_ig";
		} finally {

		}

	}

agora eu vou almoçar.

flw!

ok amigo, funcionou agora!
mas esta dando um erro na dataScroller

09/04/2008 13:14:53 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet Faces Servlet threw exception
java.lang.NoSuchMethodError: org.richfaces.component.UIDatascroller.setupFirstRowValue()V
	at org.richfaces.component.DataScrollerViewPhaseListener.updateScrollers(DataScrollerViewPhaseListener.java:54)
	at org.richfaces.component.DataScrollerViewPhaseListener.updateScrollers(DataScrollerViewPhaseListener.java:59)
	at org.richfaces.component.DataScrollerViewPhaseListener.updateScrollers(DataScrollerViewPhaseListener.java:59)
	at org.richfaces.component.DataScrollerViewPhaseListener.updateScrollers(DataScrollerViewPhaseListener.java:59)
	at org.richfaces.component.DataScrollerViewPhaseListener.updateScrollers(DataScrollerViewPhaseListener.java:59)
	at org.richfaces.component.DataScrollerViewPhaseListener.updateScrollers(DataScrollerViewPhaseListener.java:59)
	at org.richfaces.component.DataScrollerViewPhaseListener.updateScrollers(DataScrollerViewPhaseListener.java:59)
	at org.richfaces.component.DataScrollerViewPhaseListener.beforePhase(DataScrollerViewPhaseListener.java:68)
	at javax.faces.component.UIViewRoot.notifyPhaseListeners(UIViewRoot.java:605)
	at javax.faces.component.UIViewRoot.encodeBegin(UIViewRoot.java:537)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:884)
	at com.sun.faces.application.ViewHandlerImpl.doRenderView(ViewHandlerImpl.java:244)
	at com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:175)
	at org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:108)
	at org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:216)
	at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:106)
	at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
	at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:245)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:141)
	at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:281)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	at java.lang.Thread.run(Unknown Source)

quando nao uso ela funciona.

como faço para minha dataTable se atualizar no momento que eu chamo o metodo?

Nisso eu não sei te ajudar.

blz ivo

obrigado pela sua ajuda viu

precisar é soh chamar, um grande abraço,