Nieważne czy nauczysz się Springa czy JEE. Osobiście polecam JEE, ponieważ jest mniejsze i łatwiejsze w konfiguracji (konfiguracja Springa jest trudna dla początkującego). Wystarczy chociażby porównać zależności mavena dla jednej i drugiej opcji. W JEE jest tego dużo mniej. W JEE złożoność również występuje, ale jest ukryta w serwerze aplikacyjnym. Dzieku temu masz out-of-box obsluge np. pol polaczen JDBC. Bez serwera aplikacyjnego masz dodatkowa robote. A programista szybko skupia się na dostarczeniu działającego rozwiązania, a za to sie placi. To iluzja, że zabawki jak Spring Boot spowodują, że nie trzeba mieć dokładnej wiedzy o tym jak Springa skonfigurować jeśli ktoś chce programować na poważnie.
Wiedza, którą wyniesiesz z JEE może być wykorzystana wraz ze Springiem. Zaczyna się mnóstwo nowych projektów w JEE. Robi się to bardzo często, ponieważ tam, gdzie liczy się kasa i dostarczenie produktu na czas wybiera się rozwiązanie, które spowoduje jak najmniej problemów, często chce się mieć kompletny stack. Konfiguracja Springa jest banalna jak rozumiesz, ale wymaga konkretnej wiedzy z obu specyfikacji (np. web.xm, aby zaldowac kontekst Spring). Spring bardzo często korzysta z JEE (filtry, servlety).
Większość osób, które twierdzą, że JEE jest bardziej skomplikowane niz Spring nie pracowała z tym zbyt dużo albo ma przeterminowane informacje z czasów J2EE. Ostatnio na prezentacji jednego z JUGow spotkałem się, że starszy kolega Springowiec opowiadając o Springu twierdził, że w 2015 roku występują podobne problemy jak z EJB 2.1. Po prostu opowiadał coś na podstawie zasłyszanych informacji, ale wprowadzał w błąd. Mamy JEE7.
Pierwsza rzecz: zdefiniuj wymagania. Jak będziesz wiedział co chcesz pisać wybieraj technologie (pod problem jaki chcesz rozwiązać). W przyszłości może się okazać, że będziesz próbował np. budować rozwiązanie korzystające z Hadoop / Big Data. Tego typu zabawki nie są wspierane w JEE. To jest przykładowy powód, dla którego potencjalnie można chcieć wybrać Springowy stos: obsługa innowacyjnych technologii.
Polecam bloga Adam Bien, dobrze pisze o JEE. http://adambien.com/
Ogólnie:
- warto znać jedne i drugie, ale nie wszystko na raz
- Spring nie wymaga serwera aplikacyjnego (w tej chwili taki TomEE też może być łatwo embeeded w aplikacji Javy SE)
- Spring wytycza nowe trendy (wiele rzeczy ze Springa trafia do standardu, jak Spring Batch, który trafił do standardu Java EE 7)
- Spring wykorzystuje specyfikacje z JEE np. Servlety i Filtry w przypadku Web
- dla małych projektów korzystających z Web i bazy danych te technologie są praktycznie równoważne
- doświadczeni programiści poradzą sobie w jednym i drugim
- początkujący powinni wybrać jak najkrótszą drogę (użyj tego co kolega, jak masz się uczyć sam to JEE w wersji 7 i GlassFish/Payara/WildFly)
- jedna i druga technologia nadaje się do małych projektów
- konfiguracja Springa jest wymagajaca, ale warto zdobyc ta wiedze
- trzeba zdobyc doswiadczenie, aby wiedziec kiedy i jak laczyc frameworki (i kiedy nie powinno sie tego robic): w JEE i Springu sa inne frameworki, wiele z nich jest rownowaznych)
- osobiscie wole JEE jesli nie potrzebuje NoSQL
- Spring wspiera mnostwo fantatycznych zabawek jakich w JEE byc moze nigdy nie bedzie np. AMQP, STOMP
- na korzysc JEE przemawia, ze dzisiejsze serwery aplikacyjne sa lekkie (TomEE, GlassFish/Payara, WildFly), to moze 20 MB RAM narzutu nad Tomcatem przy starcie
niezdecydowanyniezdecydowanyniezdecydowany