Flex Hibernate - Настройка EntityManager и SessionFactory с помощью Flex / Mate / и BlazeDS - PullRequest
1 голос
/ 22 сентября 2009

Я создаю проект Flex, используя сервер Mate, Blaze DS, Tomcat. Кажется, все это работает. Даже мои вызовы Hibernate работают. Однако они, похоже, не созданы правильно. Я вхожу в систему со следующим блоком кода в Java:

public AbstractUser login(String username, String password){ 
    //Configuration cfg = new Configuration().configure("hibernate.cfg.xml");
    //SessionFactory sessionFactory= cfg.buildSessionFactory();
    SessionFactory sessionFactory;
    sessionFactory = new AnnotationConfiguration()
    .addAnnotatedClass(AbstractUser.class)
    .addAnnotatedClass(CourseSession.class)
    .addAnnotatedClass(Course.class)
    .addAnnotatedClass(Message.class)
    .addAnnotatedClass(Material.class)
    .addAnnotatedClass(TopicSession.class)
    .addAnnotatedClass(Step.class)
    .addAnnotatedClass(Section.class)
    .addAnnotatedClass(Topic.class)
    .addAnnotatedClass(Subtopic.class)
    .configure("hibernate.cfg.xml") 
    .buildSessionFactory();
    sessionFactory.openSession();

    emf = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT);                             
    em = emf.createEntityManager(); 
    logger.debug("** username:"+username);
    logger.debug("** password:"+password);

    Query q = em.createNamedQuery("users.byUnPass");                         
    q.setParameter("username", username);   
    q.setParameter("password", password);
    AbstractUser user;

    try{
        user = (AbstractUser) q.getSingleResult(); 
    }catch(javax.persistence.NoResultException e){
        user = new AbstractUser();
    }

    return user;
}

Есть две вещи не так с этим подходом 1. entityManager и SessionFactory должны инициализировать себя при нажатии первой кнопки, создавая довольно большой временной интервал, ожидая начала инициализации. 2. Я прочитал документы на SessionFactory в Hibernate:

Мы также рекомендуем небольшой класс-оболочку для запуска Hibernate в статическом блоке инициализатора, известном как HibernateUtil. Возможно, вы видели этот класс в различных формах в других областях документации Hibernate.

Теперь у меня есть документация о том, как написать класс, но где в моем формате файла flex / java я бы его разместил? В настоящее время в моей структуре файлов Java: ком Пегас tms- места первого уровня Услуги материалы - размещает материал, который я использую Кроме того, что необходимо для настройки SessionFactory, чтобы сделать EntityManager быстрым - потому что я замечаю, что когда у меня есть функция, которая открывает EntityManager, а затем закрывает его, для его инициализации требуется задержка во времени.

Более общий вопрос: как я могу настроить мои SessionFactory и EntityManager оптимизированным способом?

Заранее спасибо.

Todd

1 Ответ

2 голосов
/ 22 сентября 2009

Используете ли вы Spring Framework ? Если нет, я предлагаю вам серьезно рассмотреть это.

Он обеспечивает интеграцию Blaze DS , а также Hibernate и JPA . Вы бы определили все в контексте и позволили бы Spring загрузить его для вас. Экземпляр EntityManager будет внедрен непосредственно в вашу службу / DAO.

...