Облегченная веб-инфраструктура Java — особые требования

Впервые я столкнулся, например. Фреймворк Ruby Sinatra или PHP Zend Framework, мне было интересно, есть ли что-то адекватное в Java, здесь все кажется таким раздутым. Несмотря на то, что вокруг существует множество фреймворков, я пока не нашел ни одного, который я считаю идеальным для той архитектуры, которую я хотел бы реализовать.

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

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

Итак, это то, что я ищу, фреймворк с открытым исходным кодом со следующими функциями:

  • Соглашение о конфигурации
  • Нет конфигурации XML, кроме web.xml
  • Чистая Java (без Scala, без Groovy,...)
  • естественные URL-адреса в стиле REST, такие как /news/2011/july (без .do, без .jsp, ...)
  • REST-осведомленный
  • это не должно заставлять меня развертываться на сервере приложений (например, EJB должен быть необязательным)
  • поддержка сеанса была бы хорошей, но не обязательной
  • генерация кода, как в Rails, была бы замечательной, но не обязательной
  • минимум зависимостей, небольшие габариты
  • MVC would be nice, but
    • I'd like to be able to choose the M part, choose the persistence libraries on my own (no bundling).
    • Нет автоматически сгенерированного кода для представления, ни HTML, ни Javascript, ни CSS
    • Интегрированный язык шаблонов был бы хорош, но он должен быть минималистичным (простой поток управления, доступ к переменным шаблона).
    • Поддержка макета (т.е. вы можете указать общий шаблон для похожих видов)
    • Свободный выбор фреймворка Javascript для представлений

В основном это будет означать структуру MVC, которая выполняет маршрутизацию за меня и предлагает поддержку шаблонов для представлений, но все остальное полностью модульное, никакой магии. Есть ли какая-нибудь минималистичная структура, которая бы это обеспечивала (или, по крайней мере, была бы достаточно модульной, чтобы ее можно было настроить таким образом)?


person emboss    schedule 10.07.2011    source источник
comment
Как именно Spring 3 терпит неудачу? Я думаю, что он удовлетворяет всем функциональным возможностям, которые вы хотите. Вы можете выполнить множество настроек на основе аннотаций. Это слишком тяжеловесно?   -  person Ray Toal    schedule 10.07.2011
comment
@Ray Toal: я должен признать, что некоторое время назад у меня был опыт работы со Spring. В то время он казался монолитным, и, на мой вкус, в инъекциях зависимостей было слишком много волшебства. Но это могло измениться. Не могли бы вы дать несколько ссылок, которые могли бы продемонстрировать, насколько это соответствует описанию? С удовольствием познакомлюсь с ними, заранее спасибо!   -  person emboss    schedule 10.07.2011
comment
Если вы ищете фреймворки, которые не раздуты, я бы не использовал Zend в качестве сравнения.   -  person Perception    schedule 10.07.2011
comment
@Perception: Хорошо, я должен был быть более конкретным и просто сослаться на часть ZF MVC :)   -  person emboss    schedule 10.07.2011
comment
@emboss: список новых функций в Spring 3 находится по адресу static.springsource.org/spring/docs/3.0.x/. Это правда, что Spring массивен и намного больше, чем среда MVC, но он относительно ненавязчив и теперь упакован в несколько разных jar-файлов, поэтому работа с одним только MVC более или менее возможна. (Кроме того, аннотации немного упрощают ситуацию. Если вы действительно хотите, чтобы Java казалась легковесной, Lombok projectlombok.org стоит посмотреть.)   -  person Ray Toal    schedule 10.07.2011


Ответы (3)


Как насчет Play Framework?

Соглашение о конфигурации

В Play всего несколько конфигурационных файлов. Большая часть его структуры является условной. Например, базовая структура выглядит так:

|
+---/app - All executable artifacts go here (java files, conf files and view templates). 
|     |
|     +---/model  - Your model Java classes.
|     |
|     +---/view   - Your view templates.
|     |
|     +---/controller - Your controller classes
|     
|---/conf - Contains all configuration files for the application. Initially contains application configuration and routing table.
|     
|---/lib  - Libraries your appliaction needs. Added automatically to classpath.
|     
|---/log  
|     
|---/public - Public stuff are your static assets that your server gives directly
|     
|---/test
|     
|---/tmp  - All your temporarily compiled .class files are here

Нет конфигурации XML, кроме web.xml

Play не имеет XML-конфигурации, в том числе web.xml. Вместо этого у него есть файл маршрутизации. Посмотрите пример ниже, что он использует для маршрутизации.

Чистая Java (без Scala, без Groovy,...)

Это чистая Java, но вы можете использовать Scala или Groovy через плагин.

  • естественные URL-адреса в стиле REST, такие как /news/2011/july (без .do, без .jsp, ...)
  • REST-осведомленный

С сайта:
Play is a real "Share nothing" system. Ready for REST, it is easily scaled by running multiple instances of the same application on several servers.

На самом деле маршрутизация в стиле Rest довольно проста:

 # Play 'routes' configuration file…

 # Method   URL path         Controller

GET        /                Application.index
GET        /about           Application.about
POST       /item            Item.addItem
GET        /item/{id}       Item.getItem
GET        /item/{id}.pdf   Item.getItemPdf

Нетрудно догадаться, что куда идет, как только вы немного привыкнете к игре.

  • это не должно заставлять меня развертываться на сервере приложений (например, EJB должен быть необязательным)

Это не так. Фактически вы развертываете, сохраняя свои файлы. EJB совершенно необязательны, как и .war, .ear и другие формы развертывания.

генерация кода, как в Rails, была бы замечательной, но не обязательной

Я не думаю, что он генерирует много кода, но я не уверен в этом на 100%. Он автоматически создает все необходимые папки и создает базовую примерную страницу. Я не знаю, генерирует ли Rails что-нибудь еще...

MVC был бы хорош, но
- я хотел бы иметь возможность выбирать часть M, выбирать библиотеки постоянства самостоятельно (без связывания).
- Нет автоматически сгенерированного кода для представления, ни HTML, Javascript или CSS
. Интегрированный язык шаблонов был бы хорош, но он должен быть минималистичным (простой поток управления,

См. MVC в Play.

  • Думаю, это второстепенный контрпункт. Модели Play должны использовать JPA или расширять определенный класс Model, который поставляется с Play. Дополнительную информацию см. в разделе Play framework-model.
  • Он не генерирует HTML, хотя вы можете использовать свой язык шаблонов внутри ваших .html,.css,.js и других файлов для создания динамических страниц.
  • У меня есть встроенный язык шаблонов, основанный на языке шаблонов Groovy, например.

    You have ${emails.unread ?: 'no'} ${emails.unread?.pluralize('email')} !

Другие плюсы:

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

Минусы:

  • Это 51 МБ, не уверен, что это можно назвать легким :/
person Daniel Fath    schedule 10.07.2011
comment
Пока это звучит хорошо... Я посмотрю на это, спасибо! Небольшой недостаток - это Groovy, но я думаю, вы могли бы просто продавать его как язык шаблонов. - person emboss; 10.07.2011
comment
Я думаю, это не легкий вес. Размер фреймворка составляет 51 МБ (меньше, чем у Zend, но намного больше, чем у Sinatra). Не уверен, насколько быстр сервер, но вы можете спросить об этом на форуме. - person Daniel Fath; 10.07.2011
comment
Вы можете избежать groovy в качестве шаблона, если установите Japid Template Engine. Он использует Java вместо Groovy и чертовски быстр, как показывает этот тест: jtict.com/blog/rails-wicket-grails-play-lift-jsp - person jassuncao; 10.07.2011
comment
Хороший. Это немного громоздкий вывод, но он довольно быстрый, о чем просил ОП. - person Daniel Fath; 10.07.2011
comment
Я думаю, что это определенно соответствует большинству моих требований. Спасибо за хороший анализ! - person emboss; 11.07.2011

В прошлом я использовал структуру Stripes в нескольких проектах, и мне кажется, что она соответствует все/большинство ваших критериев, особенно соглашение о конфигурации. Конфигурации XML нет — есть один файл stripes.properties с общей поведенческой конфигурацией (это одноразовое дополнение к вашему пути к классам). Однократное редактирование файла web.xml необходимо для настройки «диспетчера полос», который представляет собой фильтр, который направляет запросы соответствующим компонентам действий. Компоненты ActionBean обнаруживаются автоматически, поэтому вам не нужно даже обновлять файл web.xml при добавлении дополнительных компонентов Action Beans. Все ваши URL-адреса настраиваются с использованием аннотаций в компонентах действий, остальные поддерживаются, динамические привязки ActionBean, проверка и преобразование на стороне сервера с помощью встроенных аннотаций для простых типов с возможностью создания собственных обработчиков проверки и преобразователей для сложных типов. Работает с JSP и вашими пользовательскими библиотеками JS/CSS. Документация и форумы поддержки великолепны. Это быстро узнать, если вы будете следовать их учебник.

person Moe Matar    schedule 10.07.2011
comment
Ссылка не работает. - person Thomas S.; 31.10.2017

Spring Roo: мне было легко начать. Он может генерировать код пользовательского интерфейса, но его использование зависит от вас.

person Rohit    schedule 10.07.2011