Luiz,
Veja se te ajuda a interpretar o seu teste:
A classe JPAUtil, da forma que você criou, simplesmente abstrai a responsabilidade de criar uma única vez o EntityManagerFactory. Dessa forma, se a sua aplicação, ou seu teste, utiliza diversas vezes esse EntityManagerFactory para fazer operações no banco de dados, a classe JPAUtil vai fornecer um único EntityManagerFactory para todas essas operações. Assim você não desperdiça recursos criando o EntityManagerFactory diversas vezes.
Repare que para isso você não poderá criar vários JPAUtil ( new JPAUtil().getEntityManager() ), Pois dessa forma você estará criando vários factorys do mesmo jeito.
Como seu teste possui apenas uma chamada da JPAUtil para realizar uma única operação, você não verá as vantagens dessa abordagem.
Por exemplo:
public class TesteJPA {
public static void main(String[] args) {
double inicio = System.currentTimeMillis();
JPAUtil jpaUtil = new JPAUtil();
Conta conta = new Conta();
conta.setTitular("Joao Ferreira");
conta.setBanco("HSBC");
conta.setNumero("123345");
conta.setAgencia("321");
conta.setSaldo(new BigDecimal(653.82));
EntityManager manager = jpaUtil.getEntityManager();
manager.getTransaction().begin();
manager.persist(conta);
manager.getTransaction().commit();
manager.close();
//AGORA EU QUERO FAZER OUTRA OPERACAO
manager = jpaUtil.getEntityManager();
manager.getTransaction().begin();
Conta mgConta = manager.find(conta);
mgConta.setSaldo(new BigDecimal(753.82));
manager.merge(mgConta)
manager.close();
double fim = System.currentTimeMillis();
System.out.println("Executado em: " + (fim - inicio) / 1000 + "s");
}
}