Session bean

8 respostas
J

Boa Tarde a todos, me deparei com um problema…creio que não seja do JBOSS, e sim no meu código, e talvez nos Sessions Beans, vamos ver se consigo explicar rapidamente a rotina que estou fazendo

procuro um boleto bancario pelo código da divida, esse me retorna uma collecion de boletoVO, pois posso ter N boletos pra 1 divida. Até ai tudo bem, nas primeiras vezes ele me retorna o VO normal… agora depois que deixo um tempo o JBOSS “startado”, ele me traz valores louco quando faço a mesma pesquisa, pela mesma dívida, ou seja o meu VO tem os seguintes campos

boletoUID
nossonumero
valor
divida

ele traz o boletoUID, nossonumero, valor certo, mas a divida vem o numero do boletoUID, não sei se foi uma coincidencia ou nao, mas veio. ex:

a divida 1234 tem 2 boletos

boletoUID: 1
nossonumero: 1236577
valor: 100.00
divida: 1234

boletoUID: 2
nossonumero: 1236578
valor: 50.00
divida: 1234

depois de uns 10min quando pesquiso pela mesma divida 1234, ele me traz assim

boletoUID: 1
nossonumero: 1236577
valor: 100.00
divida: 1

boletoUID: 2
nossonumero: 1236578
valor: 50.00
divida: 2

entenderam? nao o porque, ja vi que o meu “system.out” ta certo, agora… tem um jeito de limpar essa memoria?

8 Respostas

pcalcado

1 - O que acotnece a partir do ponto que você chama o SessionBean?

2 - Como é esse TO (“VO”)?

J

Respondendo…

1 - O que acotnece a partir do ponto que você chama o SessionBean?

a partir do ponto que eu chamo o Session ele chama uma classe Auxiliadora que eu chamdo de Helper… (pra eu fazer as validações que eu preciso), posso dizer que essa classe Helper está na mesma camada de Sessão, porque ele chama o Util e assim por diante, que via pro EJB fazer a consulta no banco. e preenche o VO com os dados.

(estou debugando essa classe agora pra ver o que ele me traz de dados)

2 - Como é esse TO (“VO”)?

o meu VO é assim

:

package org.inedam.grpw.divida.negocio.entity.boletobancario.ejb;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;

import org.inedam.grpw.divida.negocio.entity.pagamentodivida.ejb.PagamentoDividaVO;

public class BoletoBancarioVO implements Serializable {
	private Integer boletoBancarioUID;
	private String numeroDocumento;
	private String nossoNumero;
	private String nossoNumeroGerado;
	private Date dataDocumento;
	private Date dataProcessamento;
	private String layout;
	private Integer status;
	private BigDecimal valorCobrado;
	private BigDecimal valorTarifa;
	private BigDecimal valorJuros;
	private BigDecimal valorMulta;
	private BigDecimal valorOutrosAcrescimos;
	private BigDecimal valorDesconto;
	PagamentoDividaVO pagamentoDivida;
	private BigDecimal valorAgrupadoCancelado;
	private Integer boletoAgrupadorUID;
	private Boolean automatico = Boolean.FALSE;

	/**
	 * @return
	 */
	public Integer getBoletoBancarioUID() {
		return this.boletoBancarioUID;
	}

	/**
	 * @return
	 */
	public Date getDataDocumento() {
		return this.dataDocumento;
	}

	/**
	 * @return
	 */
	public Date getDataProcessamento() {
		return this.dataProcessamento;
	}

	/**
	 * @return
	 */
	public String getNumeroDocumento() {
		return this.numeroDocumento;
	}

	/**
	 * @return
	 */
	public Integer getStatus() {
		return this.status;
	}

	/**
	 * @param boletoBancarioUID
	 */
	public void setBoletoBancarioUID(Integer boletoBancarioUID) {
		this.boletoBancarioUID = boletoBancarioUID;
	}

	/**
	 * @param dataDocumento
	 */
	public void setDataDocumento(Date dataDocumento) {
		this.dataDocumento = dataDocumento;
	}

	/**
	 * @param dataProcessamento
	 */
	public void setDataProcessamento(Date dataProcessamento) {
		this.dataProcessamento = dataProcessamento;
	}

	/**
	 * @param numeroDocumento
	 */
	public void setNumeroDocumento(String numeroDocumento) {
		this.numeroDocumento = numeroDocumento;
	}

	/**
	 * @param status
	 */
	public void setStatus(Integer status) {
		this.status = status;
	}

	/**
	 * @return Retorna o valor pagamentoDivida.
	 */
	public PagamentoDividaVO getPagamentoDivida() {
		return pagamentoDivida;
	}

	/**
	 * @param pagamentoDivida novo valor para a variavel  pagamentoDivida.
	 */
	public void setPagamentoDivida(PagamentoDividaVO pagamentoDivida) {
		this.pagamentoDivida = pagamentoDivida;
	}

	public String getNossoNumero() {
		return this.nossoNumero;
	}

	public void setNossoNumero(String nossoNumero) {
		this.nossoNumero = nossoNumero;
	}

	public String getLayout() {
		return this.layout;
	}

	public void setLayout(String layout) {
		this.layout = layout;
	}

	public String getNossoNumeroGerado() {
		return this.nossoNumeroGerado;
	}

	public void setNossoNumeroGerado(String nossoNumeroGerado) {
		this.nossoNumeroGerado = nossoNumeroGerado;
	}

	public BigDecimal getValorCobrado() {
		return this.valorCobrado != null ? this.valorCobrado : new BigDecimal(0);
	}

	public void setValorCobrado(BigDecimal valorCobrado) {
		this.valorCobrado = valorCobrado;
	}

	public BigDecimal getValorJuros() {
		return this.valorJuros != null ? this.valorJuros : new BigDecimal(0);
	}

	public BigDecimal getValorMulta() {
		return this.valorMulta != null ? this.valorMulta : new BigDecimal(0);
	}

	public BigDecimal getValorTarifa() {
		return this.valorTarifa != null ? this.valorTarifa : new BigDecimal(0);
	}

	public void setValorJuros(BigDecimal valorJuros) {
		this.valorJuros = valorJuros;
	}

	public void setValorMulta(BigDecimal valorMulta) {
		this.valorMulta = valorMulta;
	}

	public void setValorTarifa(BigDecimal valorTarifa) {
		this.valorTarifa = valorTarifa;
	}

	public BigDecimal getValorDesconto() {
		return this.valorDesconto != null ? this.valorDesconto : new BigDecimal(0);
	}

	public void setValorDesconto(BigDecimal valorDesconto) {
		this.valorDesconto = valorDesconto;
	}

	public BigDecimal getValorOutrosAcrescimos() {
		return this.valorOutrosAcrescimos != null ? this.valorOutrosAcrescimos : new BigDecimal(0);
	}

	public void setValorOutrosAcrescimos(BigDecimal valorOutrosAcrescimos) {
		this.valorOutrosAcrescimos = valorOutrosAcrescimos;
	}

	public Integer getBoletoAgrupadorUID() {
		return boletoAgrupadorUID;
	}

	public void setBoletoAgrupadorUID(Integer boletoAgrupadorUID) {
		this.boletoAgrupadorUID = boletoAgrupadorUID;
	}

	public BigDecimal getValorAgrupadoCancelado() {
		return valorAgrupadoCancelado;
	}

	public void setValorAgrupadoCancelado(BigDecimal valorAgrupadoCancelado) {
		this.valorAgrupadoCancelado = valorAgrupadoCancelado;
	}

	public Boolean getAutomatico() {
		return automatico;
	}

	public void setAutomatico(Boolean automatico) {
		this.automatico = automatico;
	}
}

repare que o VO possui um outro VO… PagamentoDividaVO, pois possui mais dados que eu preciso que estão nesse PagamentoDividaVO, neste também traz alguns valores “doidos”

J

agora estou percebendo que estou a um bom tempo navegando em outros sites, mechendo no computador e ele não está se perdendo… será que tem alguma coisa a ver?

pcalcado

Não dá para adivinhar muito, parece um bug no seu código mesmo. nada que um debugger não resolva.

ironpoa

Eu já tive tb algumas vezes problemas desse tipo. Mesmo fazendo o redeploy da aplicação, reiniciando o jboss, continua com esse erro?
Eu tb tive problema desse tipo com uns casts, e o debug me dava a mensagem certa, mas eu tava fazendo o cast errado. Com certeza o problema nao é no VO. O ideal seria por o código do teu bean.

J

pois eu… vou dar mais uma debugada aqui…em todas as classes que ele passa… até no DAO pra ver…

depois eu posto o resultado

J

estou colocando o meu método que executa o SQL… será que tem algum erro aqui que eu não estou vendo? os parametros vem corretos até aqui… por favor se tiver algum detalhe ai que esteja errado, ou uma melhoria me falem

protected Collection executaFindMultiplo(String query, Object[] params) throws FinderException {

		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = this.jdbcFactory.getConnection();
			stmt = con.prepareStatement(query.toString());
			this.setStatementParameter(stmt, params);
			rs = stmt.executeQuery();
			LinkedList result = new LinkedList();
			while (rs.next()) {
				result.add(new Integer(rs.getInt(1)));
			}
			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());
				}
			}
		}
	}
J

depois disso ele executa esse método

public void loadEntityBean(Integer pk, EntityBean bean) throws EJBException {
		StringBuffer query = new StringBuffer();
		query.append("SELECT ").append(this.getCampoChave().toLowerCase());
		for (int i = 0; i &lt this.getCampos().length; i++) {
			query.append(", ").append(this.getCampos()[i].toLowerCase());
		}
		query.append(" FROM ").append(this.getNomeTabela().toLowerCase());
		query.append(" WHERE ").append(this.getCampoChave().toLowerCase()).append(" = ?");
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = this.jdbcFactory.getConnection();
			stmt = con.prepareStatement(query.toString());
			stmt.setInt(1, pk.intValue());
			rs = stmt.executeQuery();
			if (!rs.next()) { throw new EJBException("Falha fazendo load do registro"); }
			this.leResultSet(rs, bean);
		} 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());
				}
			}
		}
	}
Criado 26 de fevereiro de 2007
Ultima resposta 26 de fev. de 2007
Respostas 8
Participantes 3