Упорство с Ваадином - PullRequest
       11

Упорство с Ваадином

3 голосов
/ 11 августа 2010

Я пытаюсь выучить ваадина. Я действительно запутался, как делать какие-либо разработки приложений с постоянством, потому что, если у меня есть ссылка на мои объекты уровня обслуживания, они сохраняются в сеансе, и я действительно не хочу этого. Постоянные вещи просто не сериализуемы.

В моем случае у меня уже есть приложение, которое использует Spring, и я создаю новый интерфейс для него с помощью Vaadin. Я могу добавить весенний материал в мое приложение Vaadin, но это сохраняется в сеансе. Любые советы?

Кстати, как вы публикуете сообщения на форумах Vaadin? Я не могу найти кнопку записи или способ регистрации:)

Ответы [ 5 ]

1 голос
/ 16 ноября 2012

Вы пробовали это http://vaadin.com/directory#addon/enterprise-app. Это дополнение использует Spring и Hibernate.

1 голос
/ 14 сентября 2012

Мои предложения:

  • Определите ваши контейнеры как содержащие только представление данных. Не храните прямых ссылок из ваших объектов презентации на ваши постоянные объекты.
  • Определите операцию загрузки, которая в рамках транзакции загружает постоянные объекты данных и преобразует их в соответствующие объекты представления, которые поддерживают ваш контейнер.
  • Сделайте все ваши контейнеры доступными только для чтения (следуя шаблону модель-представление-контроллер: контейнер является моделью)
  • Настройка уведомлений / триггеров по мере необходимости для перезагрузки ваших контейнеров при изменении базовых постоянных данных.
  • Для масштабируемости проектируйте или используйте контейнеры, которые умеют выполнять отложенную загрузку и т. Д., Чтобы не заполнять весь контейнер сразу (примечание: сложно с TreeTable - см. проблема # 9516 )
0 голосов
/ 31 июля 2011

Похоже, книга Ваадина освещает эту проблему.Решение, которое они рекомендуют, - использовать ThreadLocal для хранения объектов Service.ThreadLocal инициализируется и уничтожается в TransactionsStart и транзакцииEnd класса Application.

Более подробные инструкции в книге Ваадина: http://vaadin.com/book/-/page/advanced.global.html

0 голосов
/ 31 марта 2012

Я использую Hibernate с Vaadin.У моего основного класса приложений есть метод фабрики сеансов:

    public Session getSession() {
    Session currentSession = HibernateUtil.getSessionFactory()
            .getCurrentSession();
    if(!currentSession.getTransaction().isActive()) {
        currentSession.beginTransaction();
    }
    return currentSession;
}

Каждый класс, которому нужно что-то сохранить, будет использовать ссылку на основное приложение, а затем захватывать сеанс.

Тогда у меня есть службаслой, который использует именованные запросы HQL, затем возвращает эти данные в виде списков.

    public List<DataClass> getEntriesforDate(Date date, Integer key) {
    return mainApp.getSession().getNamedQuery(DataClass.NAMEDQUERY)
            .setParameter("key", key).list();
}

Для сохранения вам просто сопоставляют класс ORM с таблицей, вы заполняете экземпляр этого класса, а затем используете слияние для сохранения объекта:

getSession().merge(o);

Вот подробное объяснение из Вадина Вадина:

Спящий с Ваадином

0 голосов
/ 01 января 2011

В Vaadin данные о персистентности не сохраняются в вашем сеансе, поэтому вам не нужно беспокоиться об этом.

...