Documentation

(jvx:communication)

Push support

This is an old revision of the document!


Sometimes it's important to notify all client about an event or about changed records. This is known as “push”. You push a message to all clients. In web environments a websocket is used for push notification. In JVx we have a push mechanism which is technology independent and it works different in different UI technologies.

How to push a message to other clients?

In our example, we have a button and on button press we send a simple reload notification to all other clients. This is a super simple task.

The action event for the button looks like:

public void doSendNotification(UIActionEvent pEvent) throws Throwable
{
    //saves all changes
    save();
 
    //triggers push
    getConnection().callAction("doReloadAllClients");
}

In our life-cycle object, we need the doReloadAllClients method:

public void doPublish()
{
    ICallBackBroker broker = SessionContext.getCurrentCallBackBroker();
 
    Thread th = new Thread(new Runnable()
    {
        public void run()
        {
            broker.publish("RELOAD", null, PublishMode.AllOtherMasterSessions);						
        }
    });
    th.start();
 
    //with JVx 3.0, not additional thread is required
    //SessionContext.getCurrentCallBackBroker().publish("RELOAD", null, PublishMode.AllOtherMasterSessions);
}

The reload event needs a handler. This handler/listener will be registered in our application:

public class CustomApplication extends Application
                               implements ICallBackResultListener
{
    @Override
    public void setConnection(AbstractConnection pConnection)
    {
        AbstractConnection con = getConnection();
        if (con != null)
        {
            con.removeCallBackResultListener(this);
        }
 
        super.setConnection(pConnection);
 
        pConnection.addCallBackResultListener(this);
    }
 
    public void callBackResult(CallBackResultEvent pEvent)
    {
        if ("RELOAD".equals(pEvent.getInstruction()))
        {
            try
            {
                reload();
            }
            catch (Throwable th)
            {
                error(th);
            }
        }
    }
}    

That's it.

But be careful, because push won't work in load-balanced applications with this standard implementation!

This website uses cookies for visitor traffic analysis. By using the website, you agree with storing the cookies on your computer.More information