Lazy Loading no braço

Senhores do conhecimento, ajudem um pobre trabalhador:

Preciso definir uma arquitetura com uma série de DAO´s e VO´s,
porém não tenho a privilégio de usar Java / Hibernate / Spring :cry: para fazer o lazy loading.

Vejamos os codigos:

public class Produto {
   	int id;
   	String nome;
   	Marca marca = new Marca();   	
   	public Marca getMarca() {
   	    return marca;
   	}
   	
}

public class Marca {
	int id;
	String nome;
}

public class ProdutoDAO {
   	
   	Produto findByPrimaryKey(int id) {
   		String sql = "select * from produto where id = ?";
   		Produto produto = new Produto();
   		produto.setId(rs.getInt("id"));
   		produto.getMarca().setId(rs.getInt("id_marca"));
   		return produto;
   	}}

public class MarcaDAO {   	
   	Produto findByPrimaryKey(int id) {
   		String sql = "select * from marca where id = ?";
   		Marca marca = new Marca();
   		marca.setId(rs.getInt("id"));
   		marca.setNome(rs.getInt("nome"));
   		return marca;
   	}}

public class LazyTest {
	public static void main(String[] xxx) {
	   Produto prod = new ProdutoDAO().findByPrimaryKey(10));
	   System.out.println(prod.getId());
	   System.out.println(prod.getMarca().getNome()); // aqui e somente aqui, teria que carregar automaticamente
	}
}

Como faria o isso no “braço” ??

Espero ter sido claro.

Agradeço a todos…

Fala ae… se eu entendi bem, da pra vc fazer assim:

no metodo getMarca(), faz o teste se é null e carrega ela la dentro…
tipo

getMarca()
{
if (marca == null)
marca = MarcaDAO.findByPrimaryKey(939393);
}
não é a coisa + linda do mundo… mas resolve :lol:

era ± isso que vc perguntou?

abraço

[quote=rodrigobigode]Fala ae… se eu entendi bem, da pra vc fazer assim:

no metodo getMarca(), faz o teste se é null e carrega ela la dentro…
tipo

getMarca()
{
if (marca == null)
marca = MarcaDAO.findByPrimaryKey(939393);
}
não é a coisa + linda do mundo… mas resolve :lol:

era ± isso que vc perguntou?

abraço[/quote]

É isso sim, o problema disso é que o VO vai depender do DAO.
Não era bem isso que eu queria. :smiley:

Use um proxy.

Pois é, vai acabar fazendo parecido com o Hibernate. Ja que nao pode usar ele pelo menos da uma olhada como ele faz isso.
Da uma olhada na classe Hibernate, metodo “initialize” pra ver como o Hibernate faz o carregamento do “lazy” (esse metodo forca o carregamento de um mapeamento lazy=“true” é a maneira mais rapida de ver como ele faz isso) e nas interfaces HibernateProxy e PersistenteCollection pra ver como ele faz o “lazy$” propriamente dito.

]['s

Exatamente, ele vai reimplementar o Hibernate… acho que o Hibernate implementa proxy usando CGLIB…

Todo mundo acha hibernate um troço do outro mundo… Mas é fácil.

Curiosidade! Por que você não tem o privilegio de usar o Hibernate?

Eu uma epoca tirei todos meus privilegios de usar qualquer framework para aprender a projetar bem. Moral da historia não terminei o projeto devido ao fluxo de atividades a fazer “no braço” e deixei de aprender a usar bons frameworks!

[quote=brunohansen]Curiosidade! Por que você não tem o privilegio de usar o Hibernate?

Eu uma epoca tirei todos meus privilegios de usar qualquer framework para aprender a projetar bem. Moral da historia não terminei o projeto devido ao fluxo de atividades a fazer “no braço” e deixei de aprender a usar bons frameworks![/quote]

Por que o projeto foi desenvolvido em Delphi, e preciso refatorar um pedaço dele. :cry:
Eu sei que existem frameworks para Delphi, mas não poderia usar.

Abraços