8
respostas

erro ao abrir formulario

Boa tarde a todos.

Estou com este erro : Another instance of Derby may have already booted the database F:\Condominio\dbcondominio.

usando jpa com hibernate. um formulario simples jfx.

jpautil do curso de jpa/hibernate persistencia.

o problema ocorre quado saio do sistema e entro novamente da este erro

public class JPAUtil {

private static EntityManagerFactory emf = Persistence .createEntityManagerFactory("siscondo");

public EntityManager getEntityManager() { return emf.createEntityManager(); }

}

8 respostas

Boa noite Marcos, você tá fechando sua conexão ?

boa noite. Obrigado pela repsota guilherme. segue pedaco do meu codigo.

public void remove(T t) { em.getTransaction().begin(); em.remove(em.merge(t)); em.getTransaction().commit(); em.close(); }

acho que o erro e apos a aplicacao ser fechada. o que tenho que fazer para isso nao acontecer ?

vlw

Boa tarde Marcos,

Eu verifiquei que quando termino a execução qualquer eu não fechava a fábrica e sempre com isto o eclipse ia mantendo a aplicação aberta. Tente fechar a fabrica, eu construí o meu JPAUtil da forma abaixo e sempre executo o método close após a execução para fechar a fábrica:

private static EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("financas-postgres"); private EntityManager entityManager = entityManagerFactory.createEntityManager();

public EntityManager getEntityManager() { return entityManager ; }

public void close(EntityManager entityManager) { entityManager.close(); JPAUtil.entityManagerFactory.close(); }

Boa noite, Rafael era exatamente isso fechava o manager mas a fabrica não. vlw Obrigado.

Boa tarde Marcos,

Que bom a solução que te dei ter ajudado a resolver o problema.

A desvantagem que vejo nesta abordagem é que sempre que você for realizar alguma transação com o banco você obrigatoriamente terá que abrir a fábrica e fechá-la, o que tira de certa forma a ideia de manter a fábrica como estática.

Um design-pattern que acredito resolver este problema seria o Singleton, aonde você colocaria antes de instanciar o EntityManager a checagem que verifica se a Fábrica já esta aberta. A abordagem seria algo próximo disto.

private static EntityManagerFactory entityManagerFactory;
private EntityManager entityManager;

public EntityManager getEntityManager() {
    if (entityManagerFactory == null) {
            entityManagerFactory = Persistence.createEntityManagerFactory("financas-postgres");
    }
    return entityManagerFactory.createEntityManager();
}

Desta forma você vai garantir que sempre só exista uma instância da Fábrica e evita que a classe tente sempre recriar a instancia a cada vez que ela é executa.

Desta forma, você pode colocar um método para fechar a Fábrica somente quando a sua aplicação for finalizada.

Espero estar ajudando para o seu conhecimento.

Obrigado pela reposta. e por esta dica. Sem querer abusar da boa vontade tem como fazer injeção para desenvolvimento deskto javafx com jpa hibernate ?

Marcos,

Eu nunca programei em JavaFX, então não tem como eu te garantir isto, mas acredito que sim.

Segue um projeto que achei na internet que acho atender ao que você quer.

https://github.com/yaw/javafx-jpa-crud

Boa noite , muito obrigado, vou estudar este codigo.

Att.,