Gerenciar corretamente as conexões do hibernate

Qual seria o melhor padrão para as conexões, pensei em dois modos :

Modo 1 :

Cada função cria e fecha sua própria conexão

Função ‘inserir’

		EntityManagerFactory factory = Persistence.createEntityManagerFactory("Tarefa");
		EntityManager manager = factory.createEntityManager();
		manager.getTransaction().begin();
		manager.persist(t);
		manager.getTransaction().commit();
		manager.close();
		factory.close();

Modo 2:

Uma conexão static para a classe, caso a conexão esteja fechada, um método é usado para abrir.

private static EntityManagerFactory factoryClasse = Persistence.createEntityManagerFactory("Tarefa");
private static EntityManager managerClasse = factoryClasse.createEntityManager();

private static void conectar()
{
	factoryClasse = Persistence.createEntityManagerFactory("Tarefa");
	managerClasse = factoryClasse.createEntityManager();
}

public static Boolean inserir(Tarefa t)
{
	try
	{
		if(managerClasse.isOpen() == false || factoryClasse.isOpen() == false)
			conectar();
		managerClasse.getTransaction().begin();
		managerClasse.persist(t);
		managerClasse.getTransaction().commit();
	}
	catch(Exception e)
	{
		e.printStackTrace();
		return false;
	}
	return true;
}

Em termos de velocidade e/ou segurança qual a mais adequada?

De Velocidade é a segunda, pois a primeira vai carregar as tabelas a toda hora e demora(muito), em segurança sempre que você fecha a conexão de tudo é mais seguro, porem não da pra ser praticado usando o hibernate, quando só fecha a conexão na hora que sai da aplicação.

A cada ação do usuário, abrir a conexão (sem if), fazer todas as operações necessárias no banco para o resultado e no final fechar a conexão com o banco. Se tiver problema de latência com o servidor do banco, pode usar pool de conexões.