Notificar solo a usuarios específicos a través de WebSockets, cuando algo se modifica en la base de datos

Para notificar a todos los usuarios a través de WebSockets, cuando algo se modifica en entidades JPA seleccionadas, utilizo el siguiente enfoque básico.

@ServerEndpoint("/Push")
public class Push {

    private static final Set<Session> sessions = new LinkedHashSet<Session>();

    @OnOpen
    public void onOpen(Session session) {
        sessions.add(session);
    }

    @OnClose
    public void onClose(Session session) {
        sessions.remove(session);
    }

    private static JsonObject createJsonMessage(String message) {
        return JsonProvider.provider().createObjectBuilder().add("jsonMessage", message).build();
    }

    public static void sendAll(String text) {
        synchronized (sessions) {
            String message = createJsonMessage(text).toString();

            for (Session session : sessions) {
                if (session.isOpen()) {
                    session.getAsyncRemote().sendText(message);
                }
            }
        }
    }
}

Cuando se modifica una entidad JPA seleccionada, se genera un evento CDI apropiado que debe observar el siguiente observador CDI.

@Typed
public final class EventObserver {

    private EventObserver() {}

    public void onEntityChange(@Observes EntityChangeEvent event) {
        Push.sendAll("updateModel");
    }
}

El observador / consumidor invoca el método estático.Push#sendAll() definido en el punto final de WebSockets que envía un mensaje JSON como notificación a todos los usuarios / conexiones asociados.

La lógica dentro delsendAll() El método debe modificarse de alguna manera, cuando solo los usuarios seleccionados deben ser notificados.

Notifique solo al usuario responsable de modificar la entidad en cuestión (puede ser un usuario administrador o un usuario registrado que pueda modificar algo solo después de su inicio de sesión exitoso).Notificar solo usuarios específicos (no todos). "Específico" significa, por ejemplo, cuando una publicación se vota en este sitio, solo se notifica al propietario de la publicación (cualquier usuario con suficientes privilegios puede votar la publicación).

Cuando se establece un apretón de manos inicial,HttpSession se puede acceder como se indica enesta respuesta, pero todavía es insuficiente para realizar las tareas mencionadas anteriormente por dos puntos. Dado que está disponible cuando se realiza la primera solicitud de protocolo de enlace, cualquier atributo establecido en esa sesión posterior no estará disponible en el punto final del servidor, es decir, cualquier atributo de sesión establecido después de establecer un protocolo de enlace no estará disponible.

¿Cuál es la forma más aceptable / canónica de notificar solo a los usuarios seleccionados como se mencionó anteriormente? Algunas declaraciones condicionales en elsendAll() Se requiere un método u otra cosa en alguna parte. Parece que tiene que hacer algo más que solo el usuarioHttpSession.

Yo uso GlassFish Server 4.1 / Java EE 7.

Respuestas a la pregunta(1)

Su respuesta a la pregunta