rafoli:
pcaldado retiro sempre o q digo aki de texto de fontes q penso seguras...
Existem alguns problemas.
1) As fontes que você está citando não são as melhores no contexto, leia a bibliografia recomendada que traz as definições sobre o assunto
2) Dado o exemplo mais acima e o exemplo anterior, me parece que você não está fazendo uma leitura cuidadosa dos exemplo, pode ser impressão minha.
E porque não acho que fazes uma leitura cuidadosa? Porque a classe que você acaba de colar é um singleton e ela é completamente diferente da anterior.
Detalhe simples:
mas repare este outro código retirado no site do struts 2
/**
* Helper Singleton class to manage Hibernate Sessions.
*/
public class HibernateUtil {
...
private static final SessionFactory SESSION_FACTORY;
/** Make default construct private */
private HibernateUtil() { }
...
}
Viu um construtor privado ali?
Agora vamos ao outro exemplo, que você havia colado mais abaixo:
package util;
import org.hibernate.*;
import org.hibernate.cfg.*;
public class HibernateUtil {
private static final SessionFactory sessionFactory;
static {
try {
// Create the SessionFactory from hibernate.cfg.xml
sessionFactory = new Configuration().configure().buildSessionFactory();
} catch (Throwable ex) {
// Make sure you log the exception, as it might be swallowed
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
Responda:
1) Quantos construtores existem no segundo exemplo? Eles são privados?
2) A primeira classe não pode ser instanciada (fora dela mesma), a segunda pode? Quantas vezes? Se pode mais de uma vez ela é um Singleton?
3) Um Singleton é um objeto que só pode ser instanciado uma vez. Eu preciso instanciar a classe do segundo exemplo apra utilizá-la? Se não preciso ela é um Singleton?
Resposta: O código do Struts em questão se baseou no segundo trecho mostrado mas o tornou um Singleton. Provavelmente seus métodos não são estáticos mas existe um método análogo ao getInstance() que deve ser.
Como já falei antes, Hibernate e Struts são código de infra-estrutura, um exemplo com códigod e lógica de aplicação se faz necessário e para não utilizar estas variáveis globais utilize uma abordagem de IoC como Spring ou Java EE 5.0.