Современные Java-стеки для веб-приложений

💡 Усі статті, обговорення, новини про Java — в одному місці. Приєднуйтесь до Java спільноти!

Привет! Возник вопрос подбора адекватного стека для запуска нового веб-приложения. Приложение — обычный энтерпрайз, из важных требований — 1) полная поддержка AJAX, 2) хороший, расширяемый грид (поскольку требования к гриду ещё не очень понятны), 3) графики. Крутиться будет, скорее всего, на WebSphere 7.0, но full blown Java EE, вероятно, не будет возможен. Поэтому рекомендуется ограничиться решением на веб-контейнере. Уровень БД — на Oracle.

Вариант, который я более менее хорошо знаю и могу предложить заказчику, это: 1) уровень данных — Hibernate, Spring Data, 2) DI, Service layer — Spring Core, 3) Server MVC — Spring MVC (JSP или Tiles?), 4) базовая поддержка JavaScript — jQuery, 5) client MVP — Knockout.JS / Sammy.js, 6) грид — jqGrid. По поводу последнего я не очень комфортно себя чувствую, т.к. видел его код изнутри и расширяемость реализована просто по-долбанутому.

Из того, что кажется перспективным (неупорядочено) — GWT, Ext JS, DataTables (просто как замена jqGrid). Заказчик ещё где-то прочитал слово AngularJS и теперь с горящими глазами мне его пишет... Может, и правда лучше взять AngularJS вместо Knockout? К сожалению, ни с чем из этого я особого опыта не имел. В общем, хотелось бы услышать ваши идеи по этому поводу, как бы вы организовали пламбинг для подобного проекта?

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

рест сервисы на play 2 , даеш больше скалы и функциональщины!

Может, и правда лучше взять AngularJS вместо Knockout?

Действительно лучше Angular. Там все сделано более вменяемо и чище. Хорошая тестируемость и модульность. Если вам нравится идея DI и IoC, то AngularJS ее реализует для JS

Из вашего поста непонятно, задаете ли вы какой-то впрос по server side? Вы просто сказали что будете использовать и все.

Крутиться будет, скорее всего, на WebSphere 7.0, но full blown Java EE, вероятно, не будет возможен

Это уже определено на 100%?

А мы тут попробовали REST api на Camel-e (c Restlet-ом) запилить. Полет нормальный. На клиенте — Ember.js , тоже ниче такая штука, удобная пока.

80% процентов работаю с server side. В оставшихся 20 работал с gwt/gxt и обычным джаваскриптом. Так вот, мое впечатление, не претендующее быть абсолютной истиной, gwt это ад, когда нужно что-то сделать, чего в нем не предусмотрено out of the box. То, что было бы в N строк кода в JS, превращается в минимум 5N в gwt

Весь мой коммент — ИМХО.
Работал немного с GWT — это тяжеловато, но по сравнению с JSF это — рай.
Хуже JSF технологии не существует, а 2-я версия делу не помогла.
Но в JS тоже много херни, в соседней ветке TL описывал негативные стороны JS достаточно подробно.

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

Иногда доходит до абсурда — то, что на js сделалось бы добавлением одного класса и потом написанием селектора по этому классу, на gxt выходит в копании в каких-то внутренних view, попытками получить оттуда Element’а нужного компонента и т.д., что, имхо, не добавляет коду простоты и читабельности

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

Согласен, на моей практике просто редко нужно было чтото такое эдакое пилить... Потому если смотреть глобально оно получилось гораздо лутше чем чистый жаба скрипт (ну не чистый, а там жквери, екстжс...).

не это вы просто на JS как ракал пишете

вообще генерация JS с java это уродская технология для дубоголовых JEE программистов. Не надо так делать, пожалуйста

Вы так пишите, как будто это в моих силах взять и перестать:) но насчет генерации js из java полностью согласен. Особенно, когда заявленная одинаковость во всех браузерах оказывается не совсем одинаковой и непонятно как это решать, потому что неправильно работающий кусок никто руками не писал.

Может, и правда лучше взять AngularJS вместо Knockout? К сожалению, ни с чем из этого я особого опыта не имел.
Если нет опыта, то какое такое «вместо»?
Чисто субъективно и одно и второе — гуано, но ангулар более на слуху, то есть решение проблемы будет найти проще.
.
В общем, хотелось бы услышать ваши идеи по этому поводу, как бы вы организовали пламбинг для подобного проекта?
Надо понимать задачу, команду и сроки.
Если в задача не критична, команда открыта к новому и сроки не горят, то можете брать все что угодно.
В джава-экосистеме фреймворки отмирают очень медленно, и что бы вы не выбрали, скорее всего, оно еще долго будет актуальным.
GWT — вполне живой, Sencha — так же живая, AngularJS — сейчас модный (но уже начинает проходить мода).
Из важных моментов:
— по максимуму использовать RESTful (если не получаетсо кошерный REST, то хоть придерживаться WebAPI-стиля). Этого можно добиться и на SpringMVC без всяких Jersey и тд.
— JSP использовать по минимуму, в идеале использовать статические страницы
.
2) DI, Service layer — Spring Core,
Я так понимаю, что расово-религиозного неприятия спринга у вас нет, поэтому смысла брать CDI или Guice нет, но как альтернатива они вполне.
1) уровень данных — Hibernate, Spring Data,
__Реальной__ альтернативы Hibernate я придумать не могу. Можете конечно взять iBatis, но в Украине он как-то не очень популярен.
А вот назачем надо Spring Data?
А вот назачем надо Spring Data?
например репозитории хорошо сокращают бойлерплейт
WT — вполне живой, Sencha — так же живая, AngularJS — сейчас модный (но уже начинает проходить мода).
еще подумалось что к примеру ангулар намного лучше интегрирован в современную экосистему вебдева: всякие бутстрапы, джквери и плагины, а с гвт нужно помучатся или ограничится лукендфилом и унылым набором компонентов.
еще подумалось что к примеру ангулар намного лучше интегрирован в современную экосистему вебдева
Тот же Екс/Сенча сами предоставляют всю эту экосистему.
Тут вопрос сводится таки к «Надо понимать задачу, команду и сроки.» Все 3 технологии живые (у них есть живые сообщества).
Чисто субъективно все три мне лично не нравятся. Мне ближе нормальный фронт-энд на джаваскрипте (на каркасе из Бекбон), но такой подход далеко не всем подходит/нравится. Из того с чем сталкивался, Сенча проще всего идет для энтерпрайз-УИ (минимум кастомизаций дизайна, максимум стандартных компонентов) и легче воспринимается джавистами/дотНетчиками.
.
например репозитории хорошо сокращают бойлерплейт
Как по мне на практике хибера (JPA+HQL) вполне хватает для стандартных задач, а весь бойлерплент пишется 1 раз и его не так уж и много (пару утилитных классов). А от «нестандартных задач» ни Хибернейт, ни СпрингДата не спасают.
Тот же Екс/Сенча сами предоставляют всю эту экосистему.
Ну они хороши для клепания унылых и одинаковых корпоративных внутренних вебморд, для современной апликухи не сильно подходят
его не так уж и много (пару утилитных классов)
О каких именно паре утилитарных классов идет речь? Тебе же для каждого обращения к БД нужно писать какой то код типа
Query q = em.createQuery("select c from Customer c where c.name = :name");
q.setParameter("name", "Joe Smith");
Customer c = (Customer)q.getSingleResult();
а в случае с репозиторием ты просто обьявишь в интерфейсе метод типа getByName(String name) и спринг сам все доимплементирует.
для каждого обращения к БД нужно писать какой то код типа
извините, не смог удержаться: slonik-v-domene.livejournal.com/10818.html

MongoDB позволит хранить данные в JSON формате, что сделает ORM не нужным: положил объект/вычитал объект. Написал небольшой DTO по преобразованию одного объекта в другой и маладец!

MongoDB позволит хранить данные в JSON формате, что сделает ORM не нужным
ну да конечно ©
ну да конечно ©
Аргументировано.

У чувака тоже походу PET, а вы сами писали что на MongoDB это ОК. В чем противоречие?

Заказчик
Вы хоть читайте стартпосты тех топиков, куда коментите ...

Почему уровень БД Oracle ?
Почему не рассмотреть разные варианты или это брендовый золотой молоток ?

Потому что есть некоторые ограничения, внутри которых мы все живём. Есть некоторая налаженная инфраструктура, которая отлажена и поддерживается специалистами. Если вы предложите это отбросить и построить свой новый мир, на вас могут как минимум странно посмотреть...

Величайшие ученые и изобретатели, такие как Леонардо да Винчи, Генри Форд, Томас Эдисон, Никколо Тесла, не беспокоились об общественном мнении. В противном случае мы бы до сих пор жили без электричества и ездили на лошадях.

Общественное мнение для меня стоит на 104 месте, примерно между политической ситуацией в Никарагуа и запоем дяди Васи из другого города.

Напишите свою БД, лучше чем Oracle.

Напишите свою БД, лучше чем Oracle
Автор топика, как Вам идея? Если получится, то Java можно вообще выбросить.

Ну ТС же дал понять, что Oracle скорее всего уже есть, оплачен и настроен. Предлагать после этого что-то иное — это вызывать кучу вопросов как минимум. Даже если в некоторых вопросах PostgreSQL и наравне, нет смысла менять коней на переправе.
У Java есть некоторые бонусы — но желание делать на ней все ...

Автор топика, как Вам идея? Если получится, то Java можно вообще выбросить.

Честно говоря, даже не знаю что Вам сказать. Мой вопрос и проблема чисто утилитарные. Мне _в данном контексте_ совершенно не интересны такие гипотетические плоскости и рассуждения об общественном мнении. В данном контексте, мне программирование ради программирования неинтересно.

В большинстве обсуждение Богдан несет ахинею, но тут действительно он прав и это так очевидно что «ну да конечно» вполне достаточно

www.objectdb.com ,cassandra.apache.org, www.orientdb.org вы последние тендеции смотрите где, простите?

Прощаются с backbone и angular только собирается встретить пик своей популярности...

dou.ua/...ic/8801/#403332
P.S. Давайте еще и операционную систему на Java напишем.
P.P.S. Этим последним тенденциям не один десяток лет. Внутри Oracle в реалиях может и покруче все устроено.

Я готов поучаствовать в разработки ОС на Java совершенно бесплатно. Если шо — пишите, я сразу подключусь, когда будут хоть какие-то таски.

Учитывая срок жизни СУБД Oracle, я практически уверен, что там тонны костылей и каждую версию выпускать все сложнее.

Учитывая срок жизни СУБД Oracle, я практически уверен, что там тонны костылей и каждую версию выпускать все сложнее.

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

При этом они вроде как уже давно перенесли разработку в Индию))

не имеющего альтернатив
почти так

Да-да, чем-то напоминает обратную совместимость архитектуры Windows и MS Word, в котором (по словам разработчиков) несколько миллионов строк кода и он становится тяжелее в 2 раза по сравнению с предыдущей версией.

Странно как у вас субд Oracle не вызывает ассоциаций с таврией, при таком ассоциативном ряде.

Oracle не вызывает ассоциаций с таврией
У меня Microsoft вызывает ассоциации с Жигулем (6/7-ка), который за 50 лет нифига не эволюционировал, а остался на уровне середины 60-х годов.
Честно говоря, не думаю что в Oracle сильно по-другому (vs Microsoft), тоже гигантская корпорация, тоже всех поглощает. Нафига было трогать Sun ? это мне непонятно.

Ладно, если вы настаиваете, что в DB Oracle все пучком, то я вам поверю.

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

А насчет операционки — в нашем с вами мире всё так переменчиво , что может и напишем )))))

Людмила, если запланируете делать глобальный проект на Java не меньше чем новая ОС, пинганите меня пожалуйста на форуме, я тогда постараюсь попасть на работу в DataArt.

однако мой комментарий был направлен больше на многоуважаемого Bogdan Shyiak
А мы с John-ом устраиваем погром в любых темах :-)

Вы вдвоём один человек с раздвоением личности ?
Или всё-таки один с растроением в охапке с

Bogdan
?
Лучше говорить за себя.
Можно подумать вы не следуете за каждым моим комментом.

Вы слишком много о себе думаете.

У меня сейчас глобальный проект, и я его не готова пока менять на операционку, учитывая , что все пилят cloud ;-)

По-моему, автор статьи либо не подумал, когда писал, либо не имел дела с системами, широко использующими БД.

Жииир. Вам стоит узнать больше об авторе. Хотя дата того поста далеко не сегодняшняя, но многое из написанного все же актуально.

Какую реальную альтернативу может предложить автор в рамках существующих реляционных экосистем?

У него в журнале есть хорошие записи.

Теперь нам мучатся и перечитывать весь журнальчик?

Зачем? Продолжайте есть кактусы.

Думаю зависит от прямоты рук и способа приготовления. У твоего кумира не сложилось, можно посочувствовать.

У меня нет кумиров. Что до вопросов и критики слоника, то вам лучше с ним общаться а не со мной.

А, ясно, ты так, поднабросил не имея собственного мнения

dou.ua/...ic/8827/#405245
Конкретное мнение стоит высказывать зная все детали запроса.

Смешно, а что ты делаешь если еще не знаешь в какие запросы проэволюционирует система? Какой фреймворк выбираешь?

Можешь и дальше смеяться над своими фантазиями.

MongoDB — реальная альтернатива. Вы хоть попробуйте прежде, чем обсирать NoSQL решения.

Мне монго дб не подходит, я не люблю schemaless бд, и у него локи на уровне базы данных, и еще куча проблем.

Коментар порушує правила спільноти і видалений модераторами.

Коментар порушує правила спільноти і видалений модераторами.

Коментар порушує правила спільноти і видалений модераторами.

Тот , который покроет больше ))))
Цена/качество/риски — как-то так ,нет?

Я потеряла нить разговора — там что-то типа лучший ORM мира сего? Не кажется ли вам, что идеального то и нет, и любое имя переведет наш разговор pros/cons конкретного. Вы всегда сможете найти, где конкретный слаб, так что выглядит, как приглашение на holy war..

Совершенного нету, но есть самый лучший — hibernate

А что делать, если у вас new NoSQL db — и вот нет там вашего Hibernate ?

Для задач в которых есть смысл применять существующие NoSql db в сложных ОРМах смысла нету

какую-то вы глупость говорите. Хиб решает задачи object-relational mapping-а, то есть объектно-реляционного отображения. А так как носиквел решения являются нереляционными, то никаких орм там быть по природе не может. Так что как-то так.

Я с вами как-бы и согласна, но code.google.com/p/kundera, SpringDataRedis, github.com/...etflix/astyanax и т.п. — например, как тогда правильно назвать?

ну я не знаю какого-то общего названия. Но не орм так точно. Можете придумать свое )

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

object oriented entity mapper как-то смешать нужно)))))

есть самый лучший — hibernate
Hibernate — это всего-лишь надстройка на ужасным JDBC. Если используется объектная БД, то ни та, ни другая настройка не нужна.

Вот представьте, что у вас модель эволюционирует вместе с системой и перекраиваются сущности, но вам нужно сохранить обратную совместимость, т.к. много кода уже написано.

Допустим в вашей гипотетической системе сущностями были собачки и кошечки, вы выделили супер-класс животные и создали по 1 таблице на иерархию или даже по 1 таблице на класс, без разницы. Потом стали добавлять плюшевых животных, нарисованных и несуществующих (вроде драконов, оборотней и еще чего-нибудь). А схема БД уже осталась и работает, ее юзают, но заказчик хочет еще перделку, а переписать с нуля БД вам не дадут, поскольку у клиента уже есть данные в этой структуре [Очень упрощенный случай. ]

Как вы это сделаете с реляционной моделью данных?

Я видел всего 1 вариант. Индусы брали полностью сущность и пихали в 1 столбец БД, а потом распарсивали Tokenizer-ом, разумеется ни о каких индексах и производительности речь тогда ни шла, но мысль сама по себе интересная, хоть и дикая реализация. В моем понимании такой вынужденный хак — первый шаг по уходу от реляционных БД к объектным.

Я полностью согласен, я очень за обьектные БД, проблема в том что нету клевых обьетных БД.

нету клевых обьетных БД.
Можно написать, не вижу преград. Собраться думающими чуваками и написать. Как Торвальдс написал линукс. Поскольку надеяться на корпорации как-то наивно, они будут стричь с нас купоны и пытаться впарить любое ..овно как Microsoft.

Напишешь — позовешь, а пока я хибернейтик поюзаю ))

для каждой задачи нужен свой инструмент. + и — есть и в SQL и в noSQL решениях.

+ и — есть и в SQL и в noSQL решениях.
А приведите пожалуйста объективные минусы noSQL дб, но не такие как «мне не нравятся schemaless DB».

исправил.
каждый может ошибиться. Просто я не юзаю такой термин.

stateless db это было круто ) .
ну так, сходу что в голову приходит
— joins
— комплексные запросы (в разных базах по разному, но ни одна, насколько я знаю, носиквел база даже близко не подобралась пока к мощности sql в плане построения запросов и sql оптимизатору)
— следование принципу ACID тоже похрамывает

+ куча всего внутри RDBMS а-ля triggers, stored procedures, views ...

Я бы предпочел разделять преимущества и костыли. View — это костыли. Хранимые процедуры и триггеры в 30% случаев — тоже костыли.

Использовать можно по разному.
Полно работающих (и не работающих) решений Oracle+Hibernate+Java, как и полно LAMP решений — вопрос что с ними происходит при росте, какова масштабируемость всего up/out, какой ценой оборачивается поддержка, и сколько попугаев выдает один тазик.
Заодно: citforum.ru/...ticles/vietnam
Но конечно можно написать идеальную объектную вещь исключительно под запрос текущего момента. Единственный ньюанс в том, что это сродни «научить ишака говорить» — да и запрос за это время изменится.

Я бы предпочел разделять преимущества и костыли. View — это костыли. Хранимые процедуры и триггеры в 30% случаев — тоже костыли.

это все инструменты, у которых есть прямое назначение.

View — это костыли.

какую же фундаментальную нерешенную проблему, проектировщики рдмс закрывают этим «костылем»?

К сведению: Oracle много лет проводит образовательные мероприятия в Киеве (как и маркетинговые события). Там регулярно бывают доклады отличного уровня.

база Voldemort — пацталом просто. xD
А где же HarryPotter тогда?

Простите, не удержался. Уже распечатываю схему и буду изучать.

Я была уверена , что вы знаете , что такое CAP theorem, извините за то , что ошиблась уровнем вашей неосведомленности

P.S. Вы меня тоже веселите — "пока есть такие , как вы, я буду жить вечно"©

Людмила, а как вы с высоты своей безграничной мудрости обьясните то что кассандра и ХБэйс на разных сторонах треугольника?

HBase — cp-type база, кассандру же настройками можно превратить как в AP так и в CP , так что не совсем верно что на разных сторонах, т.к. кассандра или там или там может быть.

А как именно ты собираешься достигнуть констистентность с кассандрой?

ну я не особо спец в кассандре, руководствуюсь тем, что читал. Ну вот пишут такое " Cassandra provides strong consistency when R + W > N, where R and W are the number of nodes hit by the read and write requests respectively, and N is the replication factor."
Как говорится, за что купил — за то продал )

Не будет там никакой консистентности, предположим клиент пишет в 3 ноды, в первую записал, вторую записал, в третью облупился из-за network partitioning, в итоге клиенту сказали что он не записал, на третьей ноде данных нету, на двух других есть, что бы это обойти нужен 2 phase commit, на который кассандра не пойдет потому что это сильно ударит по латентности.

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

Да, датастакс написал в маркетинговых брошурках, а хомячки ведутся

Тут подробно обсуждают почему это все типо норм ))

mighty-titan.blogspot.com/...onsistency.html

И как эти обсуждения разруливают мой кейс?

Никак, типо «посоны используйте разруливание на read (W=1, R=N), но вот куча запутаного текста которых рассказывает почему датастакс считает что может называть кассандру консистенной в своих брошурках. Просто это не та консистентность, у нас тут свой словарь»

Cassandra values Availability and Partitioning tolerance (AP). Tradeoffs between consistency and latency are tunable in Cassandra. You can get strong consistency with Cassandra (with an increased latency). But, you can’t get row locking: that is a definite win for HBase.©

Мне кажется , или читать официальную документацию уже не модно?

Ну я все лишь указал что strong concistency получится не всегда при W+R>N+1. Пример когда получится — R=N, W=1. Пример когда не получится — R=1, W=N. Когда? Это выше описал глубоконеуважаемый reality_hacker. Но разработчики кассандры загрывают уши и говорят «ла-ла-ла, мы ничего не слышим, кассандра консистентна при W+R>N+1 потому что у на свое определение»

On the contrary to the strong consistency used in most relational databases (ACID for Atomicity Consistency Isolation Durability) Cassandra is at the other end of the spectrum (BASE for Basically Available Soft-state Eventual consistency).
(Та же документация)

en.wikipedia.org/...ual_consistency (Определение)

Как по мне, немного документации и определений — и всё становится на свои места. Или вы до сих пор считаете, что Вас разработчики Cassandra хотят обмануть где-то?

Я лишь говорю что правило R+W>=N+1 упрощено. Настоящий strong consistency может дать например QUORUM или W=1, R=N, но не W=N, R=1

Под настоящим подразумевается en.wikipedia.org/...ong_consistency

All accesses are seen by all parallel processes (or nodes, processors etc.) in the same order (sequentially)

А BASE содежит Eventual Consistency, о том что Cassandra поддерживает BASE все знают. Но она утверждает что поддерживает больше — tunable consistency, причем при определенных параметрах strong consistency. Но эти параметры не очень то определяются правилом R+W>=N+1

Настоящий strong consistency может дать например QUORUM или W=1, R=N
Кворум я думаю тоже подвержен моему примеру, а W=1 это сам понимаешь крутой удар по надежности — когда можно потерять данные при отказе реплики.

что будет делать 2phase commit реализация когда нода подтвердила что она готова сделать комит, ей сказали — комить, но ответа так и не получили?

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

Тот , который покроет больше ))))
Наверное вопрос про конкретную технологию, а не критерии выбора.
Ну они хороши для клепания унылых и одинаковых корпоративных внутренних вебморд, для современной апликухи не сильно подходят
1) Контекст тему — это корпоративное приложение (а не какой-то клиент для инстаграма)
2) По поводу «унылых» посмотрите хотя бы их примеры docs.sencha.com/extjs/4.2.2 более наглядно docs.sencha.com/.../TipsChart.html
И надо помнить что помимо самой технологии еще важно то насколько разработчик хорошо ей владеет.
О каких именно паре утилитарных классов идет речь?
Где-то так
Вместо:
Query q = em.createQuery("select c from Customer c where c.name = :name");
q.setParameter("name«, «Joe Smith»);
Customer c = (Customer)q.getSingleResult();
пишем утилиту _findSingle_ и вызов:
findSingle(Customer.class,
                 "select c from Customer c where c.name = :name and c.city = :city",
                 "name", "Joe Smith", 
                 "city", "Kiev");
метод типа getByName(String name)
А тут второй бонус. Как будет выглядеть метод поиска по имени, фамилии, отделу упорядоченные в обратном порядке? А если давать ему нормальное имя? (Экономия еще меньше, ибо надо таки писать сам запрос) И что делать если такой метод нужен только в одном сервисе?
Снова же во многом это дело привычки. Я не специалист по СпрингДата, пока я не могу понять какую __реальную проблему__ он решает (особенно в контексте РСУБД и существовании Хибернейта), но не буду спорить что штука может быть прикольной рюшечкой.
2) По поводу «унылых» посмотрите хотя бы их примеры docs.sencha.com/extjs/4.2.2 более наглядно docs.sencha.com/.../TipsChart.html
Ну вот это и есть унылый в моем понимании дизайн с контролами из виндовс 311
Как будет выглядеть метод поиска по имени, фамилии, отделу упорядоченные в обратном порядке?
спринг дата разберет названия вроде getByNameByLastNameByDepartmentOrderByNameAsc, но есть уже и готовые хелперы для написания сложных запросов на вроде твоего
Я не специалист по СпрингДата, пока я не могу понять какую __реальную проблему__ он решает (особенно в контексте РСУБД и существовании Хибернейта)
Спринг дата jpa — это надстройка над jpa которая как я уже говорил убирает бойлерплейт
пишем утилиту _findSingle_ и вызов:

По-моему, ничем не лучше SQL-запросов, зашитых в код. Как вы предполагаете тестировать данную утилиту? Допустим, вам для тестов надо написать вариант этой утилиты, работающей с XML? С заданным списком тестовых объектов? Будете писать парсер JPA QL?

Как вы предполагаете тестировать данную утилиту?
Утилиту? Убедится что на замоканом ентитиМенаджере вызываются правильные методы (это легко и ровно 1 раз).
Допустим, вам для тестов надо написать вариант этой утилиты, работающей с XML? С заданным списком тестовых объектов? Будете писать парсер JPA QL?
Буду писать интеграционный тест, но не на утилиту, а на метод который ее вызывает (тот самый getByNameByLastNameByDepartmentOrderByNameAsc или еще выше). Зачем надо парсер HQL не понятно.
В плане тестирования вам все равно прийдется писать интеграционные тесты, то есть реально создавать объекты, писать их в реальную БД и тд. Ибо даже со спрингом вам надо будет проверять конфигурацию.

Согласен, жизнспособно, просто лично я предпочитаю по максимуму обходиться юнит-тестами. Кроме того, API репозитория проще использовать. По сути, вы избавляетесь от слоя DAO, обобщаете его, а всё кастомное выносите на уровень выше. Попробуйте Spring Data хотя бы ради интереса, это довольно прикольно.

Согласен, жизнспособно, просто лично я предпочитаю по максимуму обходиться юнит-тестами.
Я тоже. От только юнит-тесты не заменят интеграционных (но это совсем отдельный разговор).
Попробуйте Spring Data хотя бы ради интереса, это довольно прикольно.
Ради интереса и пробовал (в небольшом проектике). Прикольно, тут я не спорю, но на мой взгляд СпрингДата в контексте РСУБД — это «абстракция над абстракцией», финтифлюшки. Хибер позволяет так же уменьшить бойлерплент (пусть и не так много как СпрингДата). Поэтому я и написал «не могу понять какую __реальную проблему__ он решает», особенно при наличии хибера.
Как будет выглядеть метод поиска по имени, фамилии, отделу упорядоченные в обратном порядке?

Аннотация Spring Data

Если нет опыта, то какое такое «вместо»?

С нокаутом я имел некоторый опыт, а с Angular вообще не сталкивался...

А вот назачем надо Spring Data?

Доступ к данным вы в любом случае будете зашивать в какие-то интерфейсы DAO, чтобы иметь возможность протестировать юнит-тестами компоненты уровнем выше, так же? Мой опыт подсказывает, что с увеличением числа сущностей DAO вырождаются в некую обобщённую реализацию паттерна repository (не претендую, конечно, на истину в последней инстанции — всего лишь мой опыт). Spring Data предоставляет уже готовый механизм создания подобных репозиториев без необходимости написания boilerplate-кода. Собственно, хибернейтовский entity manager тоже по сути репозиторий, но его мокать слегка более геморно (а Criteria API — <b>очень<b> геморно), чем интерфейс репозитория.

Может, и правда лучше взять AngularJS вместо Knockout?
Это ведь не взаимозаменяемые библиотеки. Если есть опыт с knockout + sammy, можно как альтернативу Angular использовать полноценный SPA фреймворк основанный на их функциональности — Durandal.
6) грид — jqGrid.
В свое время имел нюансы с jqGrid и обратной совместью для старых браузеров.
Да и вообще с knockout подобную функциональность намного приятней и удобней реализовывать, пусть и надо чуть кода пописать.

удобен для разработки и командной работы, повторное использование кода в полном обьеме — amd, роутинг, композиции, виджеты.
есть встроенный оптимизатор weyland — минифицирует и пакует все в один файл, вот здесь сайт действительно становится spa в кеше на клиенте и работает достаточно быстро. нету dal слоя сервисов(как я понимаю в angular он есть включая трекинг состояния и т.п). Позволяет работать с нативными js обьектами и забирает работу с ko на сторону библиотеки. В дотнете он стандартное решение для сайтов с webapi бекендом.

пилю свой петпроджект на дж-дж-дж-дж
Jetty — Jersey — Jackson, все обильно смазано Guice’ом,
Фронтенд — любой json-френдли, ну или даже GWT

Велосипедостроитель? Таких фреймворков готовых тоже завались уже ninjaframework или dropwizard.

А вдруг чувак хочет разобраться и понять как и что работает изнутри? Как и я в похожем топике.
Не всем же быть бездумными натягивателями дизайнов на сайты или клепателем формочек, для которых рефлексия и рекурсия сродни черной магии.

А ты свою джаву тоже начал писать уже? Почему бы не концентрироваться на разбирании в предметной области, сопутствующих технологий, получении результата и его продвижении?

Уже начал.
И концентрируюсь на всем, что вы написали, за исключением продвижения. Мне оно не интересно, я пилю такую вещь, которую никто не купит, но 100-200 человек с радостью поюзают, а не поюзают — ничего страшного. Свой пусть и маленький PET-проект я планирую сделать как можно более совершенным с технологической точки зрения. Продавать я ее тоже не буду и как придет время, выложу в открытый доступ. Мой результат — обкатка технологий и фан. Доказывать что успешные бизнесы продают хреновые по качеству вещи не имеет смысла, я уже в курсе.

Если не прибыльные PET-проекты без продвижения не укладываются в ваше восприятие мира, то....прочитайте коммент еще раз:-)

В современном мире совершенный проект базируется на well established foundation, иначе это кусок Г в котором потом никто не разберется.

Коментар порушує правила спільноти і видалений модераторами.

Коментар порушує правила спільноти і видалений модераторами.

Коментар порушує правила спільноти і видалений модераторами.

Коментар порушує правила спільноти і видалений модераторами.

Коментар порушує правила спільноти і видалений модераторами.

scala play framework + AngularJS

«Вам шашечки или ехать?»

По-моему, это очевидно из заголовка и содержания поста :)

Server MVC — Spring MVC (JSP или Tiles?)
Сейчас модно REST делать, возвращать json в джаваскриптовый клиент, джсп не нужен

REST и JSON для AJAX-коммуникаций это понятно, а как базовую страницу клиента генерировать без JSP?

Обычный статический хтмл, зачем именно тебе джсп нужен?

Ок, принимается. Но меня больше интересуют альтернативы описанному стеку.

Это шутка? Сервер приложений на C++?

Підписатись на коментарі