Versiones comparadas

Clave

  • Se ha añadido esta línea.
  • Se ha eliminado esta línea.
  • El formato se ha cambiado.

...

El mensaje se codificará como JSON y se entregará como parámetro a la función JavaScript onmessage asociada con el nombre del canal. Puede ser cualquier objeto, desde un String a colección o un mapa e incluso un POJO (JAVABEAN). Para conocer los tipos de parámetros admitidos (y descendientes) por Json.encode(Object) son: Boolean, Number, CharSequence, Date, Enum, Temporal, Collections, Map; Si el tipo de objeto no coincide con ninguno de ellos, entonces se inspeccionara el objeto como unPOJO un POJO (JAVABEAN), donde las propiedades públicas (con getter público) se codificarán como un objeto JS. Los objetos de las clases clases Date y Temporal, cumples el estándar RFC 1123, por lo que, si es necesario, puedes usar new Date() en JavaScript.

Aunque los websockets admiten la comunicación bidireccional, el envío de <fw:socket> está diseñado para la comunicación unidireccional, de servidor a cliente. En caso de que desee enviar datos de cliente a servidor, contina realizando peticiones Faces AJAX como se hace de manera habitual. Si es necesario hacerlo desde JavaScript, puedes usar <p:remoteCommand>. De esa forma se mantiene el estado de vista de Faces, la sesión HTTP y, lo que es más importante, todas las restricciones de seguridad especificada para los servicios. Es decir, esas restricciones de seguridad no están disponibles durante un mensaje de websockets. Véase también. WS spec issue 238.


Ámbitos (Scopes) y Usuarios

Por defecto, los websockets tienen ámbito aplicación (application scope), es decir,  cualquier vista/sesión de la aplicación web, teniendo el mismo canal websocket abierto, recibirá el mismo mensaje push. El mensaje push puede ser enviado por cualquier usuario o por la propia aplicación. Está característica es útil para recibir notificaciones globales a nivel de aplicación lanzados por ella y que permiten actualizar una página concreta de esta, ejemplo: estadísticas del sitio web, listas top100, actualización de stock, etc.


El atributo opcional scope puede establecerse con el valor session, para restringir los mensajes push a todas las vistas de la sesión actual del usuario. El mensaje solo puede ser enviado por el usuario y no por la aplicación. Está característica es útil para recibir notificaciones a nivel de sesión sobre vistas lanzadas por el mismo usuario, ejemplo: el resultado de una tarea asíncrona lanzada por una acción del usuario).

Bloque de código
<fw:socket channel="someChannel" scope="session" ... />


El atributo opcional scope puede establecerse con el valor session, para restringir los mensajes push sólo a la vista actual. Los mensajee push no son vistos por otras vistas en la misma sesión, incluso si son la misma URL. El mensaje solo puede ser enviado por el usuario y no por la aplicación. Está característica es útil para recibir notificaciones a nivel de vista (página) lanzadas por el mismo usuario, ejemplo: una barra de progreso sobre una acción especifica en la vista (página) actual).

Bloque de código
<fw:socket channel="someChannel" scope="view" ... />


Los valores permitidos en el atributo scope son: application, session y view; (en minúsculas) y NO se permiten expresiones EL.


Además, el atributo opcional user puede establecerse con un identificador único, que hace referencia al usuario autenticado. Pude ser el nombre del usuario o un ID calculado. De esta forma, un mensjae push puede ser enviado a un usuario especifico y puede ser enviado por cualquier usuario o por la propia aplicación.  El valor el atributo user tiene que implementar la interface Serializable y debe gastar poca memoria, por lo que la entidad que representa al usuario como la clase org.umu.atica.servicios.gesper.gente.entity.Persona o org.jboss.seam.security.Identity (y descendientes) no son recomendables. Podemos generar identificadores únicos mediante la clase java.util.UUID.


Ejemplo de uso con el username:

Bloque de código
<fw:socket channel="someChannel" user="#{credentials.username}" ... />


sss