Bloco estático

Pessoal: imaginem a seguinte classe :

public class HibernateFactory {
private static SessionFactory factory;
static {
AnnotationConfiguration cfg = new AnnotationConfiguration();
cfg.addAnnotatedClass(Produto.class);
factory = cfg.buildSessionFactory();
}
public Session getSession() {
return factory.openSession();
}
}

O bloco estático irá carregar as configurações apenas da classe “Produto”.

No caso, esse processo acaba sendo um pouco lento, por isso a orientação de colocá-lo em um bloco estático. Sendo assim, a classe é carregada no Class Loader, apenas uma vez, correto?

E se eu desejasse que ele carregasse informaçòes de uma outra classe, em outro ponto do sistema? A única solução seria modificar a classe para que eu pudesse instanciá-la com um new HibernateFactory()?

[]s
Rafael

mais um bloco static ele nao é recarregado qdo vc dar um new nao… apenas um bloco da instancia… que acontece isso… vc pode criar um bloco da instancia q qdo vc der um new ele é recarregado novamente…

class X{

{ System.out.println("bloco"};

//bloco da instancia
}

:smiley:

Pq vc num faz um singleton da classe HibernateFactory…
E no constructor vc realiza as instruções:

AnnotationConfiguration cfg = new AnnotationConfiguration();
cfg.addAnnotatedClass(Produto.class);
factory = cfg.buildSessionFactory();

Deste modo só carregará se o HibernateFactory for null…

Não sei se ajudei… Se precisar o código me avise.

Se não for pedir demais, o código me ajudaria, pois estou tendo dificuldade em conseguir isso…

Olá,
tenta alguma coisa assim:

public class HibernateFactory {   
    private static SessionFactory factory;   

    public static Session getSession() {   
        if (factory == nul) {
            AnnotationConfiguration cfg = new AnnotationConfiguration();   
            cfg.addAnnotatedClass(Produto.class);   
            factory = cfg.buildSessionFactory();               
        }        
        else
             return factory.openSession();   
    }   
} 

Espero ter ajudado…
Att