2010-08-11 3 views
3

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

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

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

+0

Вы должны быть зарегистрированы чтобы иметь возможность оставлять вопросы на форумах. Нажмите «Присоединиться к Vaadin» в верхней части страницы, и вы перейдете на экран входа в систему, затем просто нажмите «создать учетную запись» и зарегистрируйтесь. После входа в систему и входа в систему, перейдите на форумы, выберите категорию. На этой странице рядом с полем поиска находится кнопка «Создать новую тему». –

+0

О, не видел, что присоединяется к тексту Ваадина. Это так мало :) – palto

+0

Вы можете использовать @Configurable, см. Мое собственное описание здесь: http://info.michael-simons.eu/2013/03/12/vaadin-spring-using-configurable-in-vaadin-components/ Эти услуги могут быть отмечены переходными процессами и после повторной сериализации снова активируются. –

ответ

0

Кажется, что книга Ваадина охватывает эту проблему. Рекомендуемым решением является использование ThreadLocal для хранения объектов Service. ThreadLocal инициализируется и уничтожается в транзакцииStart и transactionEnd класса Application.

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

-2

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

+0

Извините, я не понимаю. Как данные сохранения сохраняются в сеансе? Если приложение хранится в сеансе, и мое приложение имеет ссылку на EntityManager (JPA) или источник данных, то где хранятся эти данные? – palto

0

Я использую спящий режим с 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(); 
} 

Для экономии вы просто класс ОРМ отображенный в таблице, заполнить экземпляр этого класса затем использовать слияние упорствовать объект:

getSession().merge(o); 

Ниже приводится подробное объяснение от Vaadin Wiki:

Hibernate with Vaadin

1

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

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

Это своего рода старый вопрос, и теперь, когда я прочитал его снова, неудивительно, что я продолжал получать ответы на проблемы, которые у меня не были :) Не совсем ясно, какова была моя фактическая проблема, так вот: Моя проблема была реальную операцию «загрузки», о которой вы говорили. Для загрузки или сохранения данных у меня был MyObjectRepository, который обрабатывал стойкость и транзакции. Для загрузки или сохранения объектов мне приходилось ссылаться на этот MyObjectRepository в моих классах Vaadin. Проблема с MyObjectRepository заключается в том, что она не может быть сериализована, потому что у нее есть соединения с БД и все это. – palto

+0

Если вы используете Spring, попробуйте дополнение [Spring Stuff] (https://vaadin.com/directory#addon/spring-stuff). – Archie

+0

Эй, это похоже на отличную библиотеку! Я должен попробовать. – palto

Смежные вопросы