LINUX.ORG.RU

JEE & Spring

 , ,


1

1

Вот сидел я сегодня и думал: а, собственно, зачем нужен JEE и какие его преимущества?

А если сравнивать даже не со спрингом, а с другими стэками, то её существование становится вообще непонятным.

С какими другими стеками ты сравнивал?

slyjoeh ★★★
()

а что именно ты подразумеваешь по j2ee и с чем именно из спринга ты его сравниваешь?
я могу предположить, что в спринге появился аналог servlet api, jms, jpa?

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

Да скорее всего очередной школьник, который сконфигурил бин и дернул его из контекста.

slyjoeh ★★★
()

JEE это стандартный API (точнее набор стандартных API). Spring это конкретный фреймворк со своим взглядом на мир. Это немножко разные сравнимые вещи.

В идеале на JEE ты пишешь код и потом он портируем между контейнерами. Если ты на спринге напишешь код, то от спринга ты вряд ли отвяжешься.

Хотя сама концепция JEE выглядит спорно и зачем кому то нужна эта переносимость, мне не очень понятно. Но в теории всё так.

Legioner ★★★★★
()

Он нужен быдлокодерам, которые не в состоянии самостоятельно выбрать, подключить и настроить нужный компонент.

dizza ★★★★★
()

Но вообще сами спеки по себе качественные, как и их реализации. А вот монолитные контейнеры - совершенно ублюдочные и неповоротливые творения.

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

JEE - стандарт. В этом и его преимущество. Реализаций у него несколько, например, glassfish, wildfly (сервера приложений). Любое приложение, написанное на JEE (.war-архив) можно запускать на любом из серверов приложений.

spring - это вообще другая песня и не оттуда.

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

В идеале на JEE ты пишешь код и потом он портируем между контейнерами.

А на практике это совсем не так. Под разные апп-сервера есть множество различных дескрипторов, и это только капля в море. У каждого монстра есть свои плюшки, которые так или иначе приходится использовать. Но и в плане конфигурирования/масштабирования такие апологеты, как WebSphere с трудом сравнятся по моим представлениям с тем же спрингом.

Oracle Weblogic, к примеру - отдельная песня. Особенно если взять их портальный стек Oracle Portal Suite с ADF и прочими некротехнологиями.

Из всех этих диктующих свои правила тяжеловесов таки кидаю симпу JBoss'у за предрасположенность к хибернейту и прочему годному стафу. Ну и WAS'у тоже, ибо непотопляемая классика.

// [dreaming] спринг в продакшене не юзал, но мечтаю попасть на проект с сабжем. -_- [/dreaming]

ТС'у вопрос - таки с какими стеками ты сравнивал J2EE, кроме невполне корректной попытки сравнить его со спрингом? И опять же, не всегда выбор зависит от тебя, скорее наоборот.

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

Любое приложение, написанное на JEE (.war-архив) можно запускать на любом из серверов приложений.

Утопия

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

Ну hello from servlet API какой-нить точно можно запустить ;)

BattleCoder ★★★★★
()

JavaEE (в те времена J2EE) - стандарт, который свормировал современный Java сервер-сайд

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

Spring начал шагать по планете.

Тем временем его фанаты пробрались в комитеты JavaEE и украли из Spring все что можно, сделав современный JavaEE 7-8 по сути спрингом по функционалу, но сделаным хорошо с чистого листа. Компании одобрили и бросили сотни програмистов на разработку современных серверов. Они написали быстрые, легкие, современные сервера вроде Wildfly. Теперь все будут по чуть-чуть закапывать Spring

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

Теперь все будут по чуть-чуть закапывать Spring

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

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

А кому нужен этот ваш ублюдочный спринг когда есть Guice?

Сравнил ежа с голой жопой. Guice - это просто ioc контейнер. В отличии от спринга, в рамках которого поставляется куча прекрасно интегрирующихся компонентов и ioc - лишь мизерная часть.

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

А в чем заключается «прекрасная» интегрированность? Я вот попробовал собрать проектик на спринге года два назад с mvc, jpa, и т.д., это звиздец какой то товарищи, поспрашивал как другие делают, говорят - копипастят из старых проектов. А вот Guice+Dropwizard поднимается за 10 минут и 20 строк кода. В чем профит от неуемного желания индусов из спрингсорс все тулить кое как в спринг? Чем это лучше юникс вея, как у guice и экосистемы?

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

А в чем заключается «прекрасная» интегрированность?

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

Я вот попробовал собрать проектик на спринге года два назад с mvc, jpa, и т.д., это звиздец какой то товарищи

А в чем проблемы то были? Mvc вообще с пол пинка заводится, jpa я никогда не пользовался, но ни с jdbctemplate ни со spring data mongo проблем не возникало особых. Если и возникало - решалось десятиминутным гуглением.

В чем профит от неуемного желания индусов из спрингсорс все тулить кое как в спринг? Чем это лучше юникс вея, как у guice и экосистемы?

А чем спринг не юниксвейный то? Все его компоненты можно использовать по отдельности, тесной связанности нет. Вплоть до того, что видел решение где слой логики был на ejb, а веб кусок на springmvc.

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

спринг в продакшене не юзал, но мечтаю попасть на проект с сабжем. -_-

немудрено то , если тебя умиляет тормозной и страшный jboss то спринг тебе будет как родной

Deleted
()
Ответ на: комментарий от Nagwal

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

Внезапно это осиливает любой ОиЦ контейнер, например джус?

А в чем проблемы то были? Mvc вообще с пол пинка заводится, jpa я никогда не пользовался, но ни с jdbctemplate ни со spring data mongo проблем не возникало особых. Если и возникало - решалось десятиминутным гуглением.

Проблемы в странных доках, нелепом количестве кода и эксэмеля. А прикрутить простенький jdbc хелпер это да, наверное и есть уровень спринга

А чем спринг не юниксвейный то? Все его компоненты можно использовать по отдельности, тесной связанности нет. Вплоть до того, что видел решение где слой логики был на ejb, а веб кусок на springmvc.

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

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

нелепом количестве кода и эксэмеля

нет, нелепом количестве неявных вещей, начиная от угребищных jpa репозиторив и заканчивая телепатическим spring-boot

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

Да, я это тоже видел, просто 2 года назад спринг бута вообще не было, а spring-data был каким то бета новоделом, который никто еще не юзал.

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

Они написали быстрые, легкие, современные сервера вроде Wildfly.

Не смеши пользователя wildlfly, пожалуйста ))

З.Ы. По платене шагают микросервисы и прочие модульные подходы. А всякие монолитные контейнеры нужно закопать рядышком с мейнфреймами.

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

Плюсую. В JEE сделали что-то похожее на Spring 3. А они уже и 4 версию выпустили и 5-я не загорами

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

Микросервисы в отдельных JVM - куча расходов на жирную JVM. Сама идея микросервисов в мире Java будет работать только в контейнерах внутри одной JVM на машину

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

Когда спринг стало можно конфигурить аннотациями вышло не сильно хуже Guice. Плюс у спринга много хороших компонентов помимо IoC, например Security и Data.

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

Это было актуально во времена 128мб памяти на десктопе. Сейчас каждый сервис не то, что в отдельной jvm запускают, но и в отдельном контейнере. Изоляция гораздо важнее экономии каких-то жалких мегабайт оверхеда. Пихать все в одну jvm - это опять дорого к монолитным технологиям, т.е. в соседнюю ямочку на кладбище рядом с мейнфреймами и JEE контейнерами.

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

По платене шагают микросервисы и прочие модульные подходы.

Закопать и посыпать хлоркой, в 99% они нафиг не сдались, зато гимора от них.

Deleted
()
Ответ на: комментарий от dizza

Это смешно просто, смотрел на один класс:

@Anotation1
@Anotation2
@Anotation3
@Anotation4
@Anotation5
... 
@Anotation15
MySuperconfiguration
И что делать если я хочу устанавливать какую то функционаьность в зависимости от переменной среды? На самом деле все проблемы спринга в том что челы которые его делают курят определенно что-то неправильное

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

у спринга много хороших компонентов ... например Security

ты исходный код этого фекалия видел?

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

если я хочу устанавливать какую то функционаьность в зависимости от переменной среды?

юзать эту переменную среды, там документации мало, да, но в spring-boot есть самые изощренные способы конфигурации от чего угодно

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

Все имеют свою область применения. В spring security важно то, что он из коробки прикручивается хоть к ldap, хоть к базе, хоть куда. Если нужно что-то более крутое, ты всегда можешь откатиться к guice-way и сделать самому.

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

Я не понял как именно делается. Вот в guice я делаю так:

if (condition) {
  install(new JpaRealDbModule());
} else {
  install(new JpaInMemoryTestingDbModule());
}
а как такое делать с анотациями?

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

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

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

а как такое делать с анотациями?

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

https://www.google.ru/search?q=spring annotation change config

вот тебе ответ,

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

Код на kotlin, но думаю что все примерно прозрачно


[Configuration]
[ComponentScan(value = array("..."))]
[EnableMBeanExport]
[EnableAspectJAutoProxy]
public open class FaceConfig {

    [Value("\${lucene.index.dir}")]
    private val luceneIndexDirectory: String = ""

    [Bean(destroyMethod = "close")]
    public open fun getSearcher(): SearchService {
        return if (luceneIndexDirectory.isNotEmpty()) SearchService(luceneIndexDirectory) else StubSearchService()
    }
Nagwal ★★★★
()
Ответ на: комментарий от Nagwal

НУ это хорошо если тебе нужно только один бин замутить, но в модуле может инжектится в контекст много бинов, у которых много депенденси, которые тоже нужно устанавливать/конфигурировать.

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

Бинго. Вобщем все как всегда - страсть к велосипедостроению связана с нежеланием читать и вникать в доки.

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

Написать несколько конфигов под разные варианты. Опять kotlin, в среде тестовый проект на нем открыт:

    [Autowired]
    protected val ctx: AnnotationConfigWebApplicationContext? = null

    [PostConstruct]
    protected fun init(): Unit {
        if (someVar) {
            ctx!!.register(javaClass<SomeConfig>())
        } else {
            ctx!!.register(javaClass<AnotherConfig>())
        }
    }
Nagwal ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.