NBP многофункциональный клиент в многоуровневом корпоративном приложении? - PullRequest
2 голосов
/ 03 марта 2011

Только что запустив проект, в котором задействован расширенный клиент, реализованный в платформе Netbeans (NBP), среда Spring была выбрана для реализации бизнес-логики и для доступа к данным.Поскольку я пришел из среды разработки веб-приложений, у меня есть несколько вопросов, и мне также хотелось бы получить несколько предложений.

  1. Какие есть варианты интеграции расширенного клиента со Spring?
  2. Есть ли какие-либо рекомендации / книги / документы, касающиеся многофункционального клиента в многоуровневой среде Java EE?
  3. Что-нибудь, что требует особого внимания?

1 Ответ

1 голос
/ 07 апреля 2012

Недавно мы прошли через аналогичный опыт в компании, в которой я работаю. К сожалению, мы не смогли найти какого-либо определенного руководства для процесса. То, что мы нашли, было частичными руководствами здесь и там. Я не уверен, как другие справились с этой проблемой, и я с нетерпением жду возможности опубликовать здесь какие-либо другие решения. Однако я могу рассказать вам, как мы справились с этим, и надеюсь, что вы сможете извлечь уроки из нашего опыта.

С самого начала мы знали, что хотим иметь возможность контролировать, какую версию Spring (и, в нашем случае, Hibernate) мы будем использовать. Естественно, версии, встроенные в IDE NetBeans, немного устарели, и мы хотели иметь передовые возможности при разработке кода нашего сервера.

В итоге мы создали два отдельных проекта: один для нашего серверного кода (наши службы, DAO и доменные объекты) и один для нашего клиентского приложения. Затем мы собрали код сервера, скопировали jar и его зависимости в клиентский проект и перечислили эти jar как зависимости в клиентском коде. Мы создали модуль в нашем проекте NetBeans под названием SpringHibernate, в котором размещены эти файлы jar и от которого зависит почти каждый другой модуль.

Я бы порекомендовал создать задачу ant, которая будет удалять номера версий ваших jar-файлов перед их добавлением в проект NetBeans. Это позволяет беспрепятственно обновлять файлы jar в коде сервера, и клиентский код никогда не узнает разницу. (NetBeans может показаться довольно придирчивым, когда вы начинаете удалять и повторно добавлять банки.)

Первой важной задачей является создание класса Util, который может загружать ваш applicationContext.xml и возвращать bean-компоненты из контекста. Этот процесс описан здесь .

Одной из основных проблем, с которой мы столкнулись, было создание Sessions (или EntityManager в терминах JPA). Платформа NetBeans - это многопоточная среда, и EntityManager предназначены для работы только в одном потоке. Чтобы обойти это, мы пошли по маршруту Open Session In View *. Мы создали класс, который мог бы загрузить тот же EntityManager в любой поток, который его запрашивал. Затем мы создали клиентские прокси наших служб, которые загружали бы EntityManager в его поток перед вызовом фактической службы, управляемой Spring. Дополнительным бонусом создания прокси-служб клиентов было то, что их можно было найти с помощью Lookup.getDefault().lookup(Service.class) через аннотацию @ServiceProvider.

Затем вы должны создать собственный LifeCycleManager , который может завершить работу и закрыть ваши EntityManager и EntityManagerFactory при завершении работы приложения.

Надеюсь, это поможет!

* Я знаю, что Open Session in View был помечен как AntiPattern, но если вы понимаете проблемы, связанные с ним, вы можете смягчать эти проблемы (кэшируя объекты, которые вряд ли изменятся со временем делаю умные звонки из базы и т. д.). Кроме того, я помню, что во время нашего исследования мы нашли сообщение на форуме от Гэвина Кинга, в котором говорилось, что Open Session In View является рекомендуемым маршрутом для клиентских приложений. Конечно, я не могу найти пост сейчас, но он где-то там.

...