Staram się zapoznać z JavaEE. Jestem trochę zdezorientowany, co do przeznaczenia każdego „komponentu” (z braku lepszego słowa): Session Beans i Servlets oraz jak prawidłowo współdziałają z aplikacją internetową ( JavaScript po stronie klienta).

Próbując to zrozumieć buduję prostą aplikację internetową. Jaki jest preferowany sposób użycia każdego komponentu do zbudowania czegoś podobnego do następującego:

  1. Użytkownik odwiedza stronę "Zaloguj się"
  2. Użytkownik wprowadza dane i przesyła dane o kliknięciach. Następnie wysyłam prośbę za pomocą AJAX o zalogowanie użytkownika.
  3. Strona serwera następnie sprawdza poprawność danych wprowadzonych przez użytkownika i „loguje” użytkownika (zwraca profil użytkownika itp.)

Czy wysyłając żądanie, mam wysłać je do serwletu (który używa EJB) czy do ziarna sesji przez WSDL? Jak mam zachować „stan” dla tego użytkownika przy użyciu którejkolwiek z metod? Zakładam, że w przypadku Session Beans jest to tak proste, jak dodawanie adnotacji za pomocą @Stateful.

Zakładam również, że żądania wysyłane ze strony klienta muszą być w formacie SOAP. Jak łatwo jest użyć czegoś lżejszego (takiego jak JSON)? Chociaż wolałbym użyć czegoś lekkiego, nie jest to konieczne, jeśli SOAP przyspiesza/łatwiej rozwija.

4
Level9000 26 czerwiec 2011, 00:00
3
Wydaje się, że nie jesteś pewien, o co konkretnie chcesz zapytać? Proponuję zapoznać się z samouczkiem java ee: download.oracle.com/javaee/6 /tutorial/doc Jest całkiem dobry na początek i po przeczytaniu będziesz zaznajomiony ze wszystkimi "komponentami" i będziesz wiedział, jak zbudować swoją przykładową aplikację
 – 
peshkira
26 czerwiec 2011, 01:55
(ziarna sesji to fasola potomna w EJB) request nie rozmawiaj bezpośrednio z ziarnami sesji (model) mogą rozmawiać przez serwlet (kontroler), jeśli chcesz poznać "EJB". W każdym razie w typowej aplikacji JEE serwlet otrzyma żądanie z przeglądarki i jeśli chcesz użyć EJB, możesz użyć. Jest to jeszcze jeden wybór, który można wykonać za pośrednictwem JSP i serwletu z zapytaniem do bazy danych i zwróceniem odpowiedzi za pośrednictwem serwletu do przeglądarki w tym przypadku użycia WSDL i SOAP są zupełnie nieistotne.
 – 
static void main
12 wrzesień 2014, 00:26

3 odpowiedzi

Najlepsza odpowiedź

Samouczek Java Enterprise Edition dotyczy prawie wszystkich poruszanych tematów; jaki jest cel z różnymi rodzajami ziaren, jak zaimplementować usługi sieciowe, jak zaimplementować uwierzytelnianie itp.

Gorąco polecam poświęcenie czasu na zbudowanie przykładowej aplikacji, zwłaszcza jeśli jesteś całkowicie nowy w Java Enterprise Edition (Java EE). Ważne jest, aby dobrze zrozumieć podstawowe koncepcje, ponieważ określenie, na czym należy się skupić na początku, może być trudne ze względu na rozległość i głębię technologii oraz standardów, z których składa się Java EE.

Należy pamiętać, że chociaż Java EE z pewnością stara się wspierać najlepsze praktyki i umożliwiać projektowanie i tworzenie bezpiecznych aplikacji korporacyjnych, które dobrze działają i skalują się, nie nakazuje ani nie ogranicza aplikacji korporacyjnych do korzystania z jednego konkretnego protokołu, formatu danych i wzorzec projektowy aplikacji dla przedsiębiorstw. Niektóre protokoły i formaty są lepiej obsługiwane od razu przez podstawowe implementacje frameworka, a niektóre opcje są zależne od dostawcy, ale bardzo niewiele konkretnych opcji technologicznych jest zablokowanych w specyfikacji.

Aby odpowiedzieć na niektóre pytania, Java EE świetnie obsługuje protokół SOAP, ale nie preferuje ani nie ogranicza usług sieciowych do protokołu SOAP. Dzięki JAXB i JAX-RS równie łatwo można tworzyć usługi sieciowe zgodne z REST, które akceptują i zwracają XML lub JSON, lub jedno i drugie. Od Ciebie zależy, czy chcesz użyć protokołu SOAP, REST, czy innego protokołu.

To także Twój wybór, czy chcesz używać frameworków, takich jak JAX-RS, czy też tworzyć Servlety do obsługi żądań i odpowiedzi HTTP. W wielu przypadkach JAX-RS będzie miał wszystko, czego potrzebujesz, co oznacza, że ​​będziesz mógł zaimplementować swoje usługi sieciowe jako zwykłe stare metody Javy z kilkoma adnotacjami, bez konieczności przejmowania się porządkowaniem i rozmieszczaniem zawartości i parametrów.

Podobnie w przypadku JAXB to od Ciebie zależy, czy chcesz używać WSDL, czy nie. To świetnie, jeśli masz definicje WSDL, ale nie ma problemu, jeśli ich nie masz.

W wielu przypadkach zazwyczaj utrzymuje się stan przy użyciu struktury Java Persistence Architecture (JPA) oraz uzyskuje się dostęp do takich danych i manipuluje nimi za pomocą bezstanowych komponentów bean sesji. Deweloperzy nowi w Javie EE często są kuszeni, aby używać stanowych komponentów sesji, aby utrzymać stan, który jest lepiej zarządzany w trwałej pamięci masowej. Samouczek przedstawia różne rodzaje ziaren i ich przeznaczenie.

3
Arjan Tijms 6 maj 2013, 10:49

Usługi sieciowe (WSDL, SOAP itp.) są zwykle używane do komunikacji między aplikacjami.

Wewnątrz pojedynczej aplikacji internetowej zwykle wykonujesz proste żądania GET/POST, używając lub nie AJAX, i otrzymujesz pełną stronę HTML lub fragment danych HTML (AJAX) lub XML lub JSON (AJAX). Przeglądarka zwykle komunikuje się z serwletem, ale rzadko używa się serwletów bezpośrednio.

Zwykłym sposobem jest użycie frameworka nad serwletami. Frameworki można podzielić na dwie duże kategorie: frameworki oparte na działaniu (Stripes, Spring MVC, Struts itp.) lub frameworki oparte na komponentach (JSF, Wicket, Tapestry itp.).

W aplikacji n-warstwowej wszystkie powyższe technologie mają zawierać tylko warstwę prezentacji. Ta warstwa prezentacji komunikuje się z warstwą biznesową, gdzie dzieje się rzeczywista logika biznesowa, gdzie transakcje są wykorzystywane do uzyskiwania dostępu do baz danych, systemów przesyłania wiadomości itp. W tej warstwie biznesowej wykorzystywane są EJB.

1
JB Nizet 26 czerwiec 2011, 02:40

Możesz stworzyć podstawową architekturę w następujący sposób:

Utwórz EAR w ramach dwóch różnych projektów, takich jak EJB Jar i aplikacja internetowa WAR

Możesz tworzyć serwlety, które będą wywoływać pewną klasę delegata, która ma logikę odwołującą się do EJB.

 ServletClass {   
     do/post(){
     DelegateClass d = new DelegateClass();
     d.callMethod(withParam);
   }
  }


    DelegateClass   {
       @EJB
       EJBlocalinterface  ejbintance;
       void callMethod(DefinPrarm){
          ejbinstance.callEJBMethod();
       }
    }



    @Statelss
    EJBbeanClass implements EJBlocalinterface{
        void callEJBmethod(someParam){
        }
    }
0
JavaSun 15 kwiecień 2013, 14:42