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

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

Ya tengo el servlet a continuación en web.xml para JSF:

  Faces Servlet javax.faces.webapp.FacesServlet   Faces Servlet /test/*  

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

  Jersey REST Service org.glassfish.jersey.servlet.ServletContainer  jersey.config.server.provider.packages com.jbm.rest    Jersey REST Service /api/*  

Ahora mi preocupación es que, para mí, parece que este servlet de Jersey reemplazará el 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 única 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 poco sensato ya lanzaría una excepción durante el inicio de la aplicación de Internet. En su caso, ha registrado el servlet JSF en /test/* (lo cual es extraño, por cierto, normalmente 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 despejar un malentendido conceptual, no puedes y no puedes “implementar REST en JSF” en absoluto. Ellos son completamente independientes el uno del otro. Simplemente pueden correr uno al lado del otro en la misma aplicación web en toda paz sin conocerse entre sí. Lo único que podrían compartir es la capa de servicio o beans administrados “compartidos” (CDI). Pero eso es usualmente eso. El diseño de la capa de servicio es a su vez independiente de quién lo está usando.

Este problema específico no está relacionado con JSF ni JAX-RS. Son solo servlets básicos . Vale la pena el esfuerzo para dar un paso atrás a lo básico y pasar un poco de tiempo para aprender más acerca de la piedra angular de básicamente cada aplicación web Java EE.

No se puede tener directamente ambos en la misma clase o capa Java. Lo implementé como abajo

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

Al publicar esto para cualquiera que intente hacer esto en XPages, hay un control REST que puede colocar en la página desde la biblioteca de componentes.

Al igual que al vincular un ActionListener, enlaza una clase java al componente y establece un patrón de url.

Vea esta nota: https://oliverbusse.notesx.net/hp.nsf/blogpost.xsp?documentId=2C4E

y aplicación de ejemplo https://github.com/zeromancer1972/simplerest/blob/master/ODP/XPages/index.xsp