Несколько входов в систему сохраняемости?

Привет, ребята, я использую ссылку eclipse для JPA в своем проекте Java SE. Я использую классы «контроллера jpa» для каждой из моих таблиц в моих базах данных (правильно ли это). Я также предоставляю EntityManagerFactory для каждого «класса контроллера jpa», чтобы я мог получить entitymanager. Когда программа запускается, она показывает, что вход в AnalyzerPU успешен 2 раза. Должен ли я использовать только один EntityManagerFactory. Кажется, для каждого из тех, что у меня есть, он показывает логин. Если я продолжу, у меня будет около 12 логинов, по 1 для каждой таблицы в моей базе данных. Я знаю, что это не может быть правильно?

public class PkgLineControllerImpl extends AbstractController implements PkgLineController {

private EntityManagerFactory emf = null;

public PkgLineControllerImpl() {

    super(StateHistoryImpl.class);
    emf = Persistence.createEntityManagerFactory("StateHistoryAnalyzerPU");
}

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

@Override
public List<PkgLine> findAll() {
    EntityManager em = getEntityManager();

    List<PkgLine> pkgLineList = new ArrayList<PkgLine>();

    try {
        pkgLineList = em.createNamedQuery("PkgLine.findAll").getResultList();
        return pkgLineList;
    } finally {
        em.close();
    }
}

}

Вот как я выкладываю свои контроллеры. Спасибо за любую помощь.

Иногда это будет делать.

[EL Info]: 2011-02-01 14:34:07.991--ServerSession(18450577)--EclipseLink, version: Eclipse Persistence Services - 2.0.2.v20100323-r6872
[EL Info]: 2011-02-01 14:34:08.381--ServerSession(18450577)--fileStateHistoryAnalyzerPU login successful
100
200
100
200
100
null
null
null
null
null

Иногда это будет делать.

Persistence Services - 2.0.2.v20100323-r6872
[EL Info]: 2011-02-01 14:34:08.381--ServerSession(18450577)--fileStateHistoryAnalyzerPU login successful
100
200
100
200
100
Persistence Services - 2.0.2.v20100323-r6872
[EL Info]: 2011-02-01 14:34:08.381--ServerSession(18450577)--fileStateHistoryAnalyzerPU login successful
null
null
null
null
null

Где null — это один метод класса JPAController, возвращающий некоторые данные, а числа — это другой класс контроллера JPA, возвращающий данные. Я поместил один entitymanagerfactory в AbstractClass, но он все еще делает это.


person Drew H    schedule 31.01.2011    source источник


Ответы (1)


arrow_upward
1
arrow_downward

У вас должен быть один EntityManagerFactory и один EntityManager для каждой транзакции/запроса/сеанса. У вас также должна быть одна единица персистентности со всеми вашими классами.

Технически создание нескольких фабрик с одним и тем же именем единицы сохранения и без аргументов должно совместно использовать одну и ту же единицу сохранения, кеш/пул соединений, но если у вас разные единицы сохранения, тогда у каждого будет свой собственный пул кеша/соединения.

person James    schedule 01.02.2011
comment
Эй, я обновил свой пост. Итак, нормально ли иметь логин EntityManagerFactory для каждого метода, который у меня есть? - person Drew H; 01.02.2011
comment
Вы используете несколько потоков? Вы должны получить только один логин для одной единицы постоянства, если вы не закроете ее. Обычно вы должны управлять EntityManagerFactory в статической переменной, чтобы убедиться, что существует только одна. - person James; 02.02.2011
comment
Эй, спасибо, чувак. Нет, я не использую несколько потоков, но может быть. На самом деле я создал один менеджер-фабрику (статический финал) и передал его классам контроллеров jpa для создания менеджеров сущностей. Будет ли это нормально в многопоточном приложении? - person Drew H; 02.02.2011