servicio invocar desde consumir consume jsf servlets jersey jax-rs

invocar - Cómo implementar el servicio RESTful JAX-RS en el marco JSF



java rest client json (3)

En mi laboratorio me pidieron que creara un sitio web simple usando el marco JSF y que también usara REST. Investigué un poco sobre esos dos. Resulta que para REST tengo que usar el marco JAX-RS con Jersey. Me preguntaba cómo puedo integrar estos dos marcos, JAX-RS y JSF.

Ya tengo el siguiente servlet en web.xml para JSF:

<servlet> <servlet-name>Faces Servlet</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>/test/*</url-pattern> </servlet-mapping>

Para Jersey, pensé que tenía que usar el siguiente servlet en web.xml :

<servlet> <servlet-name>Jersey REST Service</servlet-name> <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> <init-param> <param-name>jersey.config.server.provider.packages</param-name> <param-value>com.jbm.rest</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>Jersey REST Service</servlet-name> <url-pattern>/api/*</url-pattern> </servlet-mapping>

Ahora mi preocupación es que, para mí, parece que este servlet de Jersey reemplazará al servlet Faces en web.xml . Esto cambiará mi aplicación de JSF a JAX-RS. Pero quiero mantener JSF y usar JAX-RS también. ¿Cómo puedo hacer eso?



Esta preocupación es innecesaria. Puede tener múltiples servlets de forma segura en una sola aplicación web, siempre que sus patrones de URL no entren en conflicto entre sí. Por lo general, si ese fuera el caso, un contenedor de servlets un poco cuerdo ya arrojaría una excepción durante el inicio de la aplicación web. En su caso, ha registrado el servlet JSF en /test/* (lo cual es extraño, por cierto, usually usa *.xhtml para eso), y ha registrado el servlet JAX-RS en /api/* . Entonces solo tiene que llamarlos usando URL que coincidan con esos patrones de URL.

Y, para aclarar un malentendido conceptual, no puede ni puede "implementar REST en JSF" en absoluto. Son completamente independientes entre sí. Simplemente pueden ejecutarse uno al lado del otro en la misma aplicación web con total tranquilidad sin conocerse el uno al otro. Lo único que podrían compartir es la capa de servicio o beans administrados ''compartidos'' (CDI). Pero eso suele ser todo. El diseño de la capa de servicio es, a su vez, independiente de quién lo esté utilizando.

Este problema específico no está relacionado con JSF ni JAX-RS. Son solo servlets básicos . También podría valer la pena volver a lo básico y dedicar un poco de tiempo a aprender más sobre la piedra angular de básicamente todas las aplicaciones web Java EE.


No puede tener ambos directamente en la misma clase o capa de Java. Lo implementé como a continuación

|---> JSF Managed Beans(Inject logic here) Database --> Daos --> Logic --| |---> JAX-RS (Inject logic here)