[ DWR Website | Web Application Index ]

DWR and TIBCO General Interface

This is a simple demonstration of integrating a GI user interface with Reverse Ajax.

The stock data above is totally fictitious and delayed by 15 minutes.

The HTML includes a div which loads a GI component

<div style="width:100%; height:220px;">
  <script
      type="text/javascript"
      src="JSX/js/JSX30.js"
      jsxapppath="gidemo" jsxlt="true"> </script>
</div>

This causes GI to render the Matrix component from config.xml and the component declaration: appCanvas.xml. Once these are loaded the init function is called by GI.

function giLoaded() {
  OpenAjax.subscribe("gidemo", "corporation", objectPublished);
  dwr.engine.setActiveReverseAjax(true);
}

This subscribes to the OpenAjax hub listening for publications to the 'gidemo' + 'corporation' topic. When a publish happens, the objectPublished function is called. It also turns Reverse Ajax on. The objectPublished function looks like this:

function objectPublished(prefix, name, handlerData, corporation) {
  var matrix = giApp.getJSXByName("matrix");
  var inserted = matrix.getRecordNode(corporation.jsxid);
  matrix.insertRecord(corporation, null, inserted == null);
  matrix.repaintData();
}

This simply takes the published data and inserts it into the matrix component. That's it.

There are a number of possible repaint strategies, including the simple matrix.repaintData(); documented above. The full source contains a strategy that enables cell highlighting

Meanwhile, on the server the following code is running in a thread

while (!Thread.currentThread().isInterrupted())
{
    Collection sessions = serverContext.getScriptSessionsByPage("/dwr/gi/index.html");
    ScriptProxy proxy = new ScriptProxy(sessions);

    Corporation corp = corporations.getNextChangedCorporation();
    proxy.addFunctionCall("OpenAjax.publish", "gidemo", "corporation", corp);

    int timeToSleep = random.nextInt(2500);
    Thread.sleep(timeToSleep);
}

This simply finds the people viewing this page, and creates a ScriptProxy to allow us to push Javascript to these users. We then ask the corporations object for a Stock price change, and publish this to the Open Ajax Hub. The hub has not been finally released yet, but we are including a beta with this demo.

For the full source to all the files, including the config.xml and appCanvas.xml see the source in the war file.