LINUX.ORG.RU

Стек для java для get things done

 


0

2

А порекомендует ли кто хороший стек для джава программирования для максимальной продуктивности, простоты и отсутствия костылей?

Пока смотрел и трогал палочкой - dropwizard, в принципе Ок, пока не начал пытаться прикрутить аутентификацию, куча мрачного кода, а когда дошел до oauth2, то вообще поседел.



Последнее исправление: cetjs2 (всего исправлений: 1)

Нет такого стека. Если бы был (а я за этим слежу), не пилил бы сейчас собственный стек для java.

Единственно можешь попробовать Spring или Grails (хотя это не java, а полудохлик groovy), если не воротит от жирноты, оверхедов и сделаного по принципу и так сойдет.

foror ★★★★★
()
Последнее исправление: foror (всего исправлений: 3)

Spring для проектов общего назначения — нормально. OAuth2 через Spring Social легко реализуется.

Legioner ★★★★★
()

Если говорить о библиотеках-фреймворках, то обязательными ингридиентами современного Java-приложения будут следующие: Maven (можно заменить на Gradle по желанию) для сборки, Spring для связывания компонентов, JUnit и Mockito для тестирования, SLF4J для журналирования. Ну а дальше в зависимости от задачи.

CARS ★★★★
()

Для ынтерпрайз стабильности рекомендую стек от оракла - jsf Primefaces, jpa toplink, итп, главное чтобы это была именно стандвртная javaee

Для более кастома SpringMVC, Hibernate jpa

stevejobs ★★★★☆
()
Ответ на: комментарий от stevejobs

Фу, писал с телефона в маршрутке

Там в основном разница в том, что для «стандартной джавы» есть готовые вещи например для кластеризации. Не то чтобы очень хорошие, но они есть, и если ты совсем не шаришь в теме, это сильно поможет. А в Spring скорей всего придется разбираться и писать все самостоятельно.

В качестве сервера есть несколько опций. Если это какой-то микросервис, то можно юзать просто Jetty. Если более полноценный сервак, который уже надо админить, но без надобности в кластеризации и прочем - то Tomcat. Если нужны продвинутые фичи, то следует посмотреть на Wildfly. Если нужны фичи, и есть деньги - то Weblogic. Но в общем, Wildfly должно хватить для обычных проектов, тем более что там есть всякие штуки типа интеграции с Infinispan, с JMS ActiveMQ с Apache Camel, итп

Система сборки - Maven.

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

Чтобы подключать некоторые либы без прямого включения в проект (иногда задалбывает за ними следить) - погугли Webjars

Сам клиент можно писать по-олдускульному на HTML (тогда смотри на JSP или Thymeleaf для спринга - Thymeleaf более «свежий», для EJB/JSF сам разберешься. Для JSP обязательно использование JSTL и расширений .jspx и .tagx), либо прямо на JS (тогда смотри на React и Flux для него, либо AngularJS)

Насчет клиента, если хочется иметь JS прокси для Java-классов, посмотреть на Apache DWR

Сам JS мне не нравится, поэтому рекомендую взглянуть на CoffeeScript и TypeScript

Вместо CSS можно использовать LESS. Особенно если юзаешь вместе с Twitter Bootstrap, который написан на LESS - тогда ты можешь твикать сам Бутстрап, настраивая его переменные в лессе, и использовать переменные бутстрапа в своем интерфейсе. Если тебе это надо, то ты понимаешь, зачем это все.

И еще, в Спринге есть несколько вариантов конфигурации: XML, аннотации, java-конфиг и groovy-конфиг. Рекомендую начать с изучения аннотаций (@Component, @Autowired итп) и потом уже разобраться для чего нужно юзать остальные варианты. В Hibernate тоже есть минимум 2 способа, но там однозначно нужно начинать с аннотаций.

stevejobs ★★★★☆
()
Ответ на: комментарий от f1xmAn

так-то я с тобой полностью согласен, целиком за jetty или вообще netty

но я недавно наблюдал за жалкими попытками анскилледа руками навелосипедить кластеризацию для томката... и это было очень, очень печально. Помойму он даже не асилил написать аналог синглтон-бина (бин который деплоится сразу на все сервера в кластере, но живет только на одном из них, и в случае падения кластер переподнимает этот бин на живом сервере). Не говоря уж о чем-то из более матчасти типа умного балансера очередей. Т.е. если ТС внезапно взял джаву чтобы навелосипедить high load аппликуху, но при этом совершенно не шарит в этом хайлоаде, разве не будет ему выгодней разобраться с готовым говном за авторством Оракла? По крайней мере можно будет заранее набросать архитектуру скейлинга, по известному набору технологий, а не «потом напишем вот такую залепу» а когда пришло время писать залепу - анскиледы не асилили и вся архитектура на помойку

stevejobs ★★★★☆
()
Последнее исправление: stevejobs (всего исправлений: 1)
Ответ на: комментарий от stevejobs

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

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

reality_hacker
() автор топика
Ответ на: комментарий от anonymous

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

reality_hacker
() автор топика
Ответ на: комментарий от ii8_

НУ вот нужно сесть налабать какой то сервис с РЕСТ АПИ, или веб апликухой и какой то базой данных, и что бы там все было, логгинг, мониторинг, удобный деплоймент, статический контент и мало костылей, что бы сидеть и фокусироваться на задаче а не на том как что прикрутить и как одни костыли совместить с другими, и не приходилось вникать в развесистые индюшачью фреймворки и что бы все было ДРАЙ и КИСС.

reality_hacker
() автор топика
Ответ на: комментарий от CARS

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

reality_hacker
() автор топика
Ответ на: комментарий от reality_hacker

так рест апи можно отдать вообще всем чем угодно?

например, чтобы отдать рест в SpringMVC нужно сделать новый класс, навешать на него аннотацию @Controller, в нем сделать метод и навешать на него аннотацию @RequestMapping (в параметрах - по какому урлу отдавать данные) и @ResponseBody, и метод возвращает объект. Дальше спринг автоматом отдаст объект Jackson'у и он сконвертит его в JSON, результат уйдет по указанному урлу. Ну и всё.

никаких мудрствований, всего делов на несколько строчек

вроде во всех адекватных фреймворках примерно то же самое

stevejobs ★★★★☆
()
Ответ на: комментарий от reality_hacker

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

про мониторинг ничего не понял совсем. Что ты хочешь? jMeter встроенный? VisalVM? Уже есть

про деллоймент - все собирается в war'ки, искаропки. Дальше можешь хоть башем заливать, хоть дженкинсом, хоть salt'ом, совершенно поровну как варка попадет во внутрь каталога webapps на апликейшен сервере

логгинг, какой логгинг? Есть slf4j, его умеют все фреймворки. В шапке класса делаешь Logger LOGGER = new Logger() и потом вызываешь logger.error(String, Exception). Т.е. ну совсем ничего изобретать не надо, работы на несколько секунд.

если делать логгинг в базу, ну сам в три строки пишешь свой класс Logger (можно даже интерфейс у slf4j скопипастить), и внутри создешь хибернейтовскую энтити с текстом ошибки и засылаешь в базку. Работы на 5 минут не больше.

вообще можно притащить какой-нибудь SpringAOP, и повешать логгинг просто на вызовы методов - счастье для ленивого человека (+ просадка производительности)

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

статический контент вообще что угодно умеет. Только если он действительно статический и никак иначе, отдавать его лучше через nginx. Или вот например Jetty само может сервить статику, хотя они в мане тоже советуют использовать nginx

stevejobs ★★★★☆
()
Последнее исправление: stevejobs (всего исправлений: 2)
Ответ на: комментарий от stevejobs

Это все у дропвизарда делается в 500 раз проще, там уже и логгинг сконфигурирован, и хинернейт и джетти, и jax-rs и мониторинг через http://graphite.wikidot.com/screen-shots (прикидываю как ты будешь vizualvm для продакшн серваков гонять) и никаких варников и апп серверов не нужно, а апликуха запускается простым java myapp.jar, т.е. то что предлагаешь, это как бы шаг назад.

reality_hacker
() автор топика
Ответ на: комментарий от stevejobs

У и со своими фантазиями на счет логгинга в БД ты повеселил, тем временем в дропвизарде уже есть сконфигурированный из каробки logback, который может из каробки очень классно логать в базу: http://logback.qos.ch/manual/appenders.html#DBAppender

reality_hacker
() автор топика
Ответ на: комментарий от reality_hacker

ты что, каждый день прикручиваешь logback? В чем оптимизация от использования фреймворка? Сэкономить аж целые 6 часов раз в 5 лет?

stevejobs ★★★★☆
()
Ответ на: комментарий от stevejobs

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

reality_hacker
() автор топика

Посмотришь на этих вечно скачущих java-мартышек с их мавенами, хибернейтами, томкатами, спрингами и прочими апачами и c++ уже не таким страшным кажется...

unt1tled ★★★★
()
Ответ на: комментарий от unt1tled

А как быстро ты забутстрапишь веб апликуху с доступом к БД, рест АПИ, логированием, телеметрией и веб мордой на цпп?

reality_hacker
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.