Documentation

Trace: Push support

(jvx:communication)

Push support

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