¿Qué es la vista local / remota y sin interfaz en EJB?

Estoy tratando de entender cuál es el propósito y por qué necesitamos las diferentes vistas de cliente en EJB. ¿Podría alguien tratar de explicar?

Vista remota del cliente

Cuando su EJB y sus clientes estarán en un entorno distribuido, es decir, los EJB y los clientes residirán en máquinas virtuales Java separadas. Ejemplo: EJB alojados en un WebSphere Application Server y servlets que consumen las API EJB alojadas en un servidor Tomcat.

Vista del cliente local

Solo cuando se garantiza que otros beans o clientes empresariales solo direccionarán el bean dentro de una sola JVM. Ejemplo, EJB así como los Servlets desplegados en el mismo servidor de WebSphere.

Vista sin interfaz

Es casi lo mismo que la vista del cliente local, pero hay diferencias. Su clase de bean no es necesaria para implementar interfaces de vista de cliente en este caso. Todos los métodos públicos de la clase Bean se exponen automáticamente a la persona que llama. la vista sin interfaz siempre adquiere una referencia EJB, al igual que las vistas locales o remotas, a través de la inyección o la búsqueda JNDI; pero, el tipo de Java de la referencia EJB es el tipo de clase de bean en lugar del tipo de una interfaz local. Esta es una conveniencia introducida como parte de Java EE6.

Diferencia entre la vista del cliente local y la vista sin interfaz

En el caso de una vista sin interfaz, el cliente y el bean objective deben estar empaquetados en la misma aplicación (EAR). En el caso de la vista local, el cliente puede empaquetarse en una aplicación separada de la aplicación empresarial. Por lo tanto, esto le da más flexibilidad en términos de granular sus componentes.

Puede usar la vista de cliente local frente a la vista sin interfaz dependiendo de su escenario de uso de API. Es muy probable que la vista sin interfaz reciba características flexibles en futuras especificaciones.

Razón

Históricamente o no, se suponía que un cliente que deseara usar servicios EJB debía “buscar” el bean en el contenedor (con ciertos contextos iniciales). Eso fue porque todas las invocaciones se realizan a través de una referencia especial EJB (proxy) proporcionada por el contenedor. Esto permite que el contenedor proporcione todos los servicios de beans adicionales, como la agrupación, las transacciones gestionadas por contenedor, etc. Por lo tanto, un cliente no puede crear una instancia explícita de un EJB con un new operador. La vista del cliente se proporciona a través de ciertas interfaces a las que el cliente tendría acceso. La realización del proxy en el lado del servidor se realiza en base a estas interfaces. Se definen diferentes vistas de cliente para adaptarse a diferentes escenarios de implementación como se mencionó anteriormente.

Según la Sección 3.2.2 de la especificación EJB 3.1:

El acceso a un enterprise bean a través de la vista del cliente local solo se requiere para ser compatible con clientes locales empaquetados dentro de la misma aplicación que el enterprise bean que proporciona la vista del cliente local. Las implementaciones compatibles de esta especificación pueden admitir opcionalmente el acceso a la vista del cliente local de un enterprise bean desde un cliente local empaquetado en una aplicación diferente. Los requisitos de configuración para el acceso entre aplicaciones a la vista del cliente local son específicos del proveedor y están fuera del scope de esta especificación. Las aplicaciones que dependen del acceso entre aplicaciones a la vista del cliente local no son portátiles.

La vista sin interfaz es solo una característica de conveniencia que permite a un bean exponer una vista de cliente local sin tener que declarar una interfaz separada.