Galera,
to com dúvida de como funciona um vazamento de memória…
Li o artigo aqui do GUJ mas ainda assim fiquei um pouco na dúvida.
Hoje utilizo um conjunto de classes em meus aplicativos e estou na dúvida se posso estar ferrando com a memória.
Vejam as classes abaixo:
ClasseMaster: Nesta classe contem os métodos que faço acesso ao banco.
ClasseBase: Aí na aplicação tenho uma classe chamada ClasseBase que herda a ClasseMaster e basicamente serve apenas para carregar os arquivos de configuração referente à aplicação.
Classes da aplicação: todas herdam a ClasseBase
Bom, na prática fica assim:
ClasseMaster:
public class ClasseMaster {
protected String _NomeTabela = null;
protected String _CampoID = null;
protected GenericCollection genericCollection = null;;
protected Datasource oDs;
protected Class c = null;
protected void CarregaDs(){
String ofPadrao = "/biancuzzi/utils/db/config.properties";
InputStream Fi = null;
Fi = getClass().getResourceAsStream(oF);
if(Fi == null){
Fi = getClass().getResourceAsStream(ofPadrao);
}
try{
if(Fi == null){
throw new Exception("Arquivo de configuracao nao informado");
}
Properties oP = new Properties();
oP.load(Fi);
Fi.close();
//Obtendo o codigo do cliente
if(oP.getProperty("Sys.Cod") != null){
CodCli = Integer.parseInt(oP.getProperty("Sys.Cod"));
}
//carregando classe de acesso ao banco
oDs = new Datasource(oP);
genericCollection = new GenericCollection();
}catch (Exception e) {
//System.out.print(e.getMessage());
e.printStackTrace();
}
}
public class GenericCollection {
private ResultSet RsBase;
public void setRsBase(ResultSet rsBase) {
RsBase = rsBase;
}
public String toXML() throws SQLException{
return getXmlByRs(RsBase);
}
public LinkedList toLinkedList() throws Exception{
validaObjetoVO();
return setVO(c, RsBase);
}
public ResultSet toResultSet(){
return RsBase;
}
}
}
ClasseBase
Todas as aplicações que crio tem na raiz uma classe dessa:
public class ClasseBase extends ClasseMaster {
public ClasseBase(){
oF = "/br/com/lexxis/condom/config.properties";
CarregaDs();
}
}
E aqui um exemplo da classe da aplicação em si:
public class CotacaoFornecedores extends ClasseBase {
public static Logger logger = Logger.getLogger(CotacaoFornecedores.class.getName());
public CotacaoFornecedores() {
_NomeTabela = "CotacaoFornecedores";
_CampoID = "IdCotacaoFornecedor";
c = CotacaoFornecedorVO.class;
}
public GenericCollection getForncedoresCotacao(int IdCotacao) throws Exception{
genericCollection.setRsBase(oDs.getAllFields(_NomeTabela, "IdCotacao=" + IdCotacao));
return genericCollection;
}
}
O GenericCollection é uma função que criei para não ter que ficar criando métodos repetitivos para retornar a mesma coleção de dados em formatos difrentes.
A dúvida está neste “genericCollection” que utilizo. Vejam que para não ter que ficar criando um para cada método, crio um na ClasseMaster e utilizo o mesmo em todos os métodos.
Isto está correto?
Bom…
se ficou alguma dúvida me avisem.
