Статьи

CRUD с калиткой + Guice + Db4o / NeoDatis

Путешествие началось с поиска базы данных для моего настольного приложения TimeFinder . Оказалось, что есть, по крайней мере , 3 кандидата , если я бы выбрал простой и только один ярус архитектуры:

  1. GORM
  2. NeoDatis
  3. db4o

Одноуровневые приложения имеют смысл только для некоторых особых случаев использования, как в моем случае для средних школ с одним администратором расписания. Но было бы намного лучше, если бы я мог использовать что-либо. как удаленный GORM , постоянство удаленного объекта или даже ajaxified веб-приложение. Да. Почему бы и нет? Что, если я переписываю пользовательский интерфейс с нуля и перехожу из Swing Desktop в сеть? Но опять же: какой веб-фреймворк и какая постоянная архитектура?

Многие люди рекомендуют Grails (включая меня), если мне нужна простая веб-инфраструктура CRUD, но для меня Grails немного тяжел (~ 20 МБ), и мне придется жить как минимум с 6 языками: GSP, JS, HTML, Spring-XML, Java и Groovy. Я буду нуждаться в Java по крайней мере для критической части производительности: алгоритм хронометража.

Ладно. Тогда почему не GWT или Eclipse RAP ? У GWT есть компиляция Javascript, которой я не большой поклонник, и Eclipse RAP, я думаю, требует чистой разработки Eclipse. Так что еще? Как я обнаружил ранее , существует множество веб-фреймворков Java ( с Ajax ) . Мой выбор теперь был прост: Wicket , который является Swing для Интернета. Но что, если вам не нравится Swing? Тогда вам понравится «Качели для Интернета» !;-)

Особенности калитки

Из того, что я узнал в последние дни и из сообщений в блоге; Калитка выдающаяся в следующих областях:

  • Разделение пользовательского интерфейса и кода. У вас есть только

    • чистый HTML, новый синтаксис не требуется а-ля JSP, JSF, GSP, скорость … последний был причиной отказа от выбора клика. Никаких хлопот с Javascript… если они есть, то я доверяю сообществу калиток, чтобы они исправили их в самой калитке
    • и чистая Java . Это очень хорошо, если вы когда-нибудь проведете рефакторинг своего кода. И ты будешь.
  • Вы можете создавать свои собственные компоненты легко и быстро. Вы даже можете создавать компоненты AJAX без XML и JS … только Java.
  • Сильное сообщество (даже немецкая книга )

Ладно. А стойкий слой? Это было причиной этого путешествия … хм-м, уже есть несколько разных постоянных «техник» для Wicket :

Хм, но мне нужен только очень простой постоянный слой. Нет сложных запросов и т. Д. Как я упоминал ранее, я даже могу жить с XML (для хранения данных). Я решил снова заглянуть в db4o (использовал его в gstpl, который является предшественником TimeFinder) и в более коммерчески дружественную (LGPL) объектно-ориентированную базу данных NeoDatis . У последнего есть возможность экспортировать в xml и импортировать то же самое, это было бы здорово, так что мне не нужно думать о переносе базы данных (некоторые рефакторинги будут применяться автоматически. См. 1.10 в PDF-документах ). Миграция в db4o тоже должна быть легкой.

Пока я думал об этом, я спросил в списке рассылки Apache Wicket такое простое и устойчивое решение. Джереми Томерсон отметил, что на jweekend есть даже несколько maven-архетипов, которые генерируют для меня простое приложение Wicket. Я выбрал шаблон Wicket + Guice + JPA и обновил его, чтобы использовать Guice 2.0 и последнюю версию Warp-Persist в соответствии с этим постом . После этого мне нужно было заставить работать db4o или NeoDatis. Для последнего мне нужны были warp-persist-neodatis, а для первого мне потребовались лишь незначительные изменения, но они заняли немного больше времени.

Ресурсы

Для тех, кто хочет увидеть результаты, вот два независимых проекта maven (Apache License 2.0) в моем хранилище Subversion (версия 781):

И вот скриншот:

Как видите, локализованные предупреждающие сообщения уже предоставлены и отображаются вместо «Пожалуйста, введите значение в поле« местоположение »». Чтобы попробовать примеры, просто наберите «mvn install» и запустите «mvn jetty: run». Затем укажите ваш Firefox или оперу

HTTP: // локальный: 8080 / timefinderwicket /

Работать с калиткой — это отличный опыт! В другом проекте мне понадобилось около 10 минут, чтобы преобразовать обычную отправку в ajax, которая обновляет только выбранные компоненты. А затем, в проекте NeoDatis, я изначально разработал свой EventDataView для совершенно другого элемента данных и переместил источник почти без изменений в проект db4o с классом Event! Это хорошая компонентно-ориентированная разработка. Хорошо, я копировал и вставлял, а не создавал подмодуль maven для списка страниц, но с калиткой это было бы не так сложно. Затем в качестве третьего примера я переписал панель навигации, что тоже было легко: теперь вместо

<< < 1 2 ... > >>

будет показано

First Prev 1 2 ... Next Last.

не касаясь пользовательского интерфейса. Вы даже можете предоставить файлы «свойств» для применения легко I18n.

Приходить домой

Wicket похожа на возвращение домой «на рабочий стол» после нескольких лет веб-разработки, особенно на уровне пользовательского интерфейса. И guice отлично соответствует моим требованиям к внедрению зависимостей: чистая Java.

Чтобы все было правильно, мне пришлось много раз подправить первоначальный пример jweekend, но все необходимые изменения были логически и не пахнут как хак. В качестве первого шага я обновил версии артефактов, а затем добавил DataView из примеров повторителей . Разработанный пример CRUD теперь создается с внедрением зависимостей вместо исходного шаблона локатора (ala DatabaseLocator.getDb ()):

@Inject
Provider<ObjectContainer> oc;

 

Тогда механизм обновления и некоторые другие исключения должны быть решены, но вам нужно только проверить источники и посмотреть, что возможно!

Как примечание стороны

Имейте в виду, что есть плагин NetBeans для Wicket 1.4.x и плагин IntelliJ для него. Для всех ребят из NetBeans, которые заинтересованы в функции «развертывание при сохранении», вам нужно только включить «Компилировать при сохранении», а затем изменить код или HTML в Wicket, если вы запускаете приложение через jetty: run (конфигурация Jetty уже сделано в пом). В настоящее время это работает только с db4o в качестве отдельного сервера. Насколько мне известно, этот способ создания прототипов пользовательского интерфейса может быть даже быстрее, чем с Grails, где перекомпиляция может занять несколько секунд.

Вывод

Окунись в мир калитки прямо сейчас!

С http://karussell.wordpress.com/