2011-01-15 20 views
12

Jestem programistą Java SE, ale mam bogate środowisko internetowe (PHP, Perl/CGI itd.) I teraz rozpoczynam nowy projekt. Będzie miał interfejs sieciowy, logikę biznesową spaghetti, relacyjną bazę danych jako pamięć masową i połączenia z innymi usługami. Robię to od zera.Java EE 6 i alternatywy

Moi koledzy powiedzieli mi, żebym użył sprężynowego, sprężystego bezpieczeństwa i rozpórek. Spojrzałem krótko na specyfikację Java EE 6 i stwierdziłem, że obejmuje ona prawie wszystkie aspekty aplikacji korporacyjnej. Pytałem moich kolegów, dlaczego potrzebują sprężyn i podpórek, ale wygląda na to, że używają technologii tylko dlatego, że są im obce i nie znają klasycznego stosu Java EE 6.

Moje pytanie brzmi: co jest złego w Java EE 6? Dlaczego potrzebuję wiosny, jeśli istnieją odnośniki JNDI? Utworzenie fałszywego InitialContext dla testów jednostkowych zajmie dzień lub dwa. I to wszystko: stoję z dala od narzędzi zewnętrznych, takich jak wiosna. Dlaczego potrzebuję ochrony sprężynowej, jeśli w specyfikacji Servlets istnieje zabezpieczenie? Potrafię mapować dowolne żądanie do dowolnego serwletu za pomocą pliku web.xml, nie jest wymagany plik struts.xml. Mogę użyć filtrów serwletów zamiast kolumn przechwytujących. Jest RMI, więc nie potrzebuję wiosennego pilota. I tak dalej ..

Dlaczego powinienem zawracać sobie głowę tymi wszystkimi fantazyjnymi rzeczami, jeśli jest Java EE 6?

Naprawdę chcę znaleźć sytuację, gdy Java EE 6 to za mało. Czy masz jakieś?

Dzięki!

+3

Od tego czasu jest całkiem olbrzymia różnica między klasycznym J2EE a współczesną Java EE 6. O czym ty mówisz? Następnie Spring and Struts były świetnymi dodatkami na szczycie J2EE. Ale teraz Java EE 6 zapewnia prawie to samo już wyjęciu z pudełka. Twoi koledzy mogą wciąż wisieć w starożytności. – BalusC

+0

Przepraszam) Java EE 6. Nie będę używać Java 1.2))) –

+0

Proszę zmienić/retag swoje pytanie następnie. Możesz równie dobrze to przemyśleć :) Podobne pytanie [tutaj] (http://stackoverflow.com/questions/2084169/choosing-a-java-web-framework-now) i [tutaj] (http://stackoverflow.com/questions/1960280/what-to-learn-for-making-java-web-applications-in-java-ee-6). – BalusC

Odpowiedz

1

Wiosna nie jest konieczna do Java EE. Wiosna sprawia, że ​​skomplikowane komponenty Java EE są łatwe w użyciu.

+0

Wiem to) Ale mogę użyć JNDI zamiast sprężyny DI. Dlaczego więc potrzebuję wiosny? –

+2

JNDI nie jest w żaden sposób porównywalny do Spring DI. CDI to. – BalusC

0

Wiosenny kontroler modelu, który sprawia, że ​​środowisko Java EE jest bardziej przejrzyste i uporządkowane. Strukturalnie bardziej poprawne jest oddzielenie modeli, widoków i kontrolera.

Zgadzam się z Państwem. Jeśli jest to prosta strona internetowa, myślę, że możesz zrobić wszystko za pomocą tylko Java EE. Wyobraź sobie jednak, że masz dużo kodu, który obsługuje wprowadzanie formularzy i wiele modeli. Każdy kontroler może mieć widok. Możesz utworzyć serwlet, a następnie przesłać dalej na właściwą stronę JSP lub możesz użyć sprężyny, ponieważ już to wszystko robi.

Decyzja jest o tym, jak bardzo potrzebujesz sprężyny. Dobra struktura to taka, która pozwala wybrać i wybrać części do wykorzystania. Myślę, że wiosna to robi dobrze, ponieważ możesz po prostu użyć modelu mvc lub pójść dalej i zrobić z nim więcej.

Ostatnia rzecz, wiosna ma wtrysk zależności, co znacznie ułatwia konfigurację.

+0

Dzięki. Potrafię implementować wzór MVC: każdy serwlet to kontroler, a strona JSP to tylko widok. Nie użyłbym żadnej logiki wewnątrz JSP (ponieważ nie można tego przetestować). Mogę używać JNDI (wyszukiwania usługi) bez wiosny. Jest tak dobry jak zastrzyk na uzależnienie, prawda? –

+0

Myślę, że próbujesz odkryć nowe koło. Co jest fajne, ale dlaczego miałbyś to robić, gdy Wiosna była już testowana przez miliony użytkowników? Jeśli mówisz o doświadczeniu, to jestem całkowicie z tobą. W przeciwnym razie po prostu korzystasz z bibliotek, które zostały utworzone i przetestowane. –

+0

W dobrym projekcie MVC miałbyś tylko jeden aplet. – BalusC

13

Dlaczego ludzie używają Springa i dlaczego jest on tak popularny, wymaga trochę historii.

Kiedyś wiosna była prostsza niż aplikacje Java EE. Mam na myśli specyfikację EJB2.x. Mam wrażenie, że był pewien rodzaj buntu przeciwko skomplikowanej naturze tej specyfikacji. Deweloperzy chcieli prostszej architektury, a Spring zapewniał im możliwość pisania POJO (Plain Old Java Objects) zamiast klas, które musiały implementować określone interfejsy, aby uzyskać pożądaną funkcjonalność.

Wiosna również zyskała dwie zasady: Inwersja kontroli (IoC) i iniekcja zależności. W połączeniu te dwie zasady zapewniły inny sposób łączenia różnych komponentów aplikacji i umieszczania tych komponentów w aplikacji, gdy były uruchomione.To, w połączeniu z ideą pisania POJO, było bardzo atrakcyjne dla wielu osób, ponieważ kod był prostszy i łatwiej było połączyć wszystkie komponenty.

Nowsza specyfikacja EJB3 unieważnia niektóre elementy oferty Spring, ale Spring jest czymś więcej niż kontenerem IoC. Zapewnia doskonałe szablony do dostępu JDBC do bazy danych, wiele prostych sposobów obsługi transakcji, testowanie narzędzi, stos MVC i tak dalej. To było popularne i pozostaje popularne. Jeden żart Słyszałem jest

„EJB3, odpowiedź na pytanie zadane Noone ...”

EJB3 jest dobrym wyborem. Wiosna to dobry wybór. Grails jest również dobrym wyborem (używa Spring, Hibernate pod kołdrą).

+1

Jestem wielkim fanem Grails! Niesamowite, jak szybko możesz zacząć działać. –

+0

@amir, zgadzam się całkowicie. – hvgotcodes

+1

a ja nie. Grails jest fajny, ale od wersji, której używamy - 1.3.3 - nadal dość niestabilny. Musieliśmy sami naprawić kilka błędów (oczywiście po ich zgłoszeniu). I nie były to przypadki, w których chodziło o narożniki. – Bozho

1

"Dlaczego więc potrzebuję wiosny?"

Ilya! W końcu przekonałeś mnie (i, miejmy nadzieję, sam siebie), że nie potrzebujesz wiosny. W rzeczywistości nie ma w tym wszystkim kupy nic specjalnego ... chyba że już do tego przywykłeś. Piszą książkę o technologii internetowej, a następnie dodają do niej resztę informatyki i nazywają ją RESTfull.

"Można jednak wyobrazić sobie dużą ilość kodu, który obsługuje wprowadzanie formularzy i wiele modeli, z których każdy może mieć widok".

Amir! - bardzo dobra uwaga. Prawdziwa różnica między ramami sieciowymi, które znam, jest tym, czym jest definicja komponentu. Struts ma trzy typy komponentów - View, Controler i Model components. Na pierwszy rzut oka wygląda dobrze (lepiej niż niektóre inne na pewno). Ale co możesz zbudować z tych komponentów? - Widok jednej strony, jeden kontroler strony i jeden model strony. Bóg jeden wie, ile będzie kosztować wiązania przedmiotów z tych trzech rzędów komponentów - może ogromna konfiguracja, jeśli w ogóle jest możliwa.

Prawdziwym rozwiązaniem jest (jak już wspomniano powyżej w przytoczonym powyżej) koncepcję komponentów, z których każdy ma swój widok, kontroler i jego model. Do tej pory tak daleko posunął się tylko jeden framework - HybridJava. Co to jest blokowanie stron internetowych na wiosnę?

1

Wygląda na to, że potrzebujesz specjalnych zdolności POC ze Springem, a następnie z Java EE 6, dzięki czemu możesz porównać te dwa podobne do prawdziwego, działającego, praktycznego prototypu.

Powody używam sprężyny są jednak:

  • zdolność do abstrakcyjnego mojej aplikacji od serwera aplikacji. Mogę w ten sposób uruchomić na dowolnym serwerze aplikacji lub poza AS dla testów jednostkowych
  • dużo kodu płyty kotła, który bym musiał napisać, aby ulepszyć mój projekt jest już dostępny
  • IOC/DI - obiekt, który potrzebuje zależności nie wie o tym, jak je zdobyć - wszystko, co wie, to, jakich interfejsów wymaga. Dostarcza je część osób trzecich. Tak, możesz uruchomić własną wersję tej strony trzeciej w Java EE 6, ale jest już dostępna na wiosnę.
  • Bean Managed Transactions - Spring zapewnia wszystkie narzędzia potrzebne do pełnej kontroli niskiego poziomu transakcji. Zawsze sugerowałbym używanie BMT, ponieważ zapewnia elastyczność, jakiej możesz potrzebować.
Powiązane problemy