Klienci uzyskują dostęp do sesji lub komponentu bean obiektu za pośrednictwem interfejsów komponentu bean. Kontener EJB generuje implementacje interfejsu w celu wymuszenia i zarządzania tym zachowaniem, działając jako kanał komunikacji między klientem i komponentem bean. W wersjach przed specyfikacją EJB 2.0 wszystkie komponenty zostały zdefiniowane i zaimplementowane jako rozproszone, zdalne komponenty. W rezultacie dwa interfejsy wymagane od komponentów bean zostały określone jako interfejs macierzysty (który ogólnie definiuje metody cyklu życia) i interfejs zdalny (który ogólnie definiuje funkcjonalne metody biznesowe).
Internally, J2EE uses the Java Remote Method Invocation over Internet Inter-ORB Protocol (RMI-IIOP) to enable remote, distributed method calls and applications. While this approach provides many benefits, it also generates a large amount of overhead, with a corresponding performance hit as stubs are referenced, parameters go through the marshaling process, and objects are tossed around the network.
Considerations of performance, practicality, and typical usage in the field resulted in the introduction of local interfaces in the EJB 2.0 specification. As noted, prior terminology referred to the home interface and the remote interface; at this point, depending on which approach is used, local interface and local home interface or remote interface and remote home interface are better terms. Either of the local home or remote home interfaces is referred to as the home interface; either of the local or remote interfaces is referred to as the component interface. This tutorial refers to the interfaces in these terms and uses these conventions for names.
When using J2EE technologies, it is normal to focus on distributed, or remote, beans, but you should keep the local option in mind, when applicable. It may be surprising to learn that a bean can have local interfaces, remote interfaces, or both. However, the client must write to a specific (that is, local or remote) interface. There are some issues to keep in mind when using local interfaces:
Ziarna muszą przebiegać w tej samej maszynie wirtualnej - w końcu są lokalne. Parametry są wysyłane przez odniesienie, a nie przez kopiowanie, tak jak w przypadku zdalnych interfejsów i obiektów. Jeśli zignorujesz to rozróżnienie i nie zapiszesz odpowiednich kodów, mogą wystąpić nieoczekiwane efekty uboczne. Zwykle na decyzję o użyciu dostępu lokalnego lub zdalnego wpływa:
Typ klienta - Jeśli zawsze oczekujesz, że klient będzie komponentem sieci Web lub innym komponentem, wybierz dostęp zdalny.
Niezależnie od tego, czy ziarna są ściśle lub luźno połączone - jeśli ziarna są od siebie nawzajem i często wchodzą w interakcje, należy rozważyć dostęp lokalny.
Skalowalność - dostęp zdalny jest z natury skalowalny i powinien być stosowany, jeśli ważna jest skalowalność. Po pojawieniu się lokalnych interfejsów w specyfikacji EJB 2.0, większość źródeł zaleca, aby komponenty bean obiektów prawie zawsze opierały się na dostępie lokalnym. Dzięki lokalnym interfejsom większość problemów związanych z wydajnością w zakresie dostępu do danych o bardzo drobnym dostępie znika. Jeśli klient jest zdalny, standardowy wzorzec projektu powoduje, że klient używa zdalnego interfejsu do uzyskiwania dostępu do komponentu bean sesji, który następnie działa jako łącznik z komponentem bean obiektu. Sesja sesji komunikuje się z komponentem bean obiektu za pośrednictwem interfejsu lokalnego (z punktu widzenia wzorca, ta technika nazywa się fasadą sesji i może być faktycznie używana w kontekście zdalnym lub lokalnym).
Zgadzam się, że w wielu przypadkach może będę musiał zaprojektować różne interfejsy dla tych dwóch, ale w przypadkach, w których mam ten sam interfejs dla tych dwóch, powinienem być w stanie opisywać je za pomocą zarówno lokalnego, jak i zdalnego. Zaletą tego jest to, że mój klient nie musi się martwić o to, czy jest to wywołanie lokalne czy zdalne (z wyjątkiem sytuacji, gdy określa nazwę jndi). Otrzyma ten sam interfejs w obu przypadkach, dzięki czemu będzie mógł traktować oba z nich jednakowo. –
Cóż, na dobre i na złe, autorzy specyfikacji nie zgodzili się, że taka "lokalna/zdalna niezależność" jest pożądana. Osobiście zgadzam się z autorami specyfikacji na ten temat. – djna