This is a simple demonstration of integrating a GI user interface with Reverse Ajax. Data is published using Reverse Ajax to the OpenAjax Hub which then passes the data on to GI.
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="JSXAPPS/gidemo" jsxlt="true"> </script> </div>
This causes GI to render the Matrix component from config.xml and the component declaration: appCanvas.xml. So far this is identical to the simple DWR/GI example.
Once these are loaded the init function is called by GI:
function giLoaded() { OpenAjax.hub.subscribe("gidemo.corp", 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(name, 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/dwr-oa-gi.html"); ScriptProxy proxy = new ScriptProxy(sessions); Corporation corp = corporations.getNextChangedCorporation(); proxy.addFunctionCall("OpenAjax.hub.publish", "gidemo.corp", 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.