Hi all,
I know this isn't strictly ADF, so if there's a better forum for this please let me know. I have a requirement where when a user makes a change to a record, there should be a push notification of the change to all users currently looking at that record. I wrote a WebSocket to handle this and it worked great. However, when I deployed it to a clustered environment, it appears that broadcasting messages only worked per managed server (i.e. if a user makes a change from one managed server, the push notifications only go to users on that same managed server and none of the other ones in the cluster).
I read that coherence could be a solution but I don't think management is willing to pay for it. Is there any way to broadcast to users across an entire cluster?
Here's my code for reference:
@ServerEndpoint(value = "/notify/{request-id}")
public class RequestWebSocket {
private static final long IDLE_TIMEOUT = 30 * 60 * 1000;
private static final String REQUEST_ID_PATH_PARAM = "request-id";
@OnOpen
public void openConnection(Session session) {
session.setMaxIdleTimeout(IDLE_TIMEOUT);
}
@OnClose
public void closedConnection(Session session) {
}
@OnMessage
public void messageReceived(Session session, String message) {
String requestId = session.getPathParameters().get(REQUEST_ID_PATH_PARAM);
for (Session _session : session.getOpenSessions()) {
try {
String _requestId = _session.getPathParameters().get(REQUEST_ID_PATH_PARAM);
/* Send message only to clients viewing changed request */
if(requestId.equals(_requestId) && _session.isOpen() && !session.equals(_session)) { System.out.println("WEBSOCKET: sending");
_session.getBasicRemote().sendText(message);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
@OnError
public void error(Session session, Throwable t) {
throw new RuntimeException(t);
}
}
I'm on WebLogic 12.2.1.4.
Thanks,
Bill