[ DWR Website | Web Application Index ]

# DWR and TIBCO General Interface

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.

- Demo
- How it works

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.