Migration from OWF to IWC
This tutorial is for developers who are migrating applications previously developed for the Ozone Widget Framework (OWF) to use IWC. This tutorial has the following prerequisites:
Overview
This tutorial covers:
- Handling the required JavaScript dependencies.
- Differences in instantiating IWC vs OWF.
Handling the required JavaScript dependencies
OWF
In OWF, it was required that applications had to:
- Include the
owf-widget-min.js
JavaScript library. - Place the
rpc_relay.uncompressed.html
file in the application's directory & give reference to it with:OWF.relayFile = '<DIR_PATH>/rpc_relay.uncompressed.html';
<html>
<head>
<script type="text/javascript" src="<DIR_PATH>/owf-widget-debug.js"></script>
<script type="text/javascript">
//The location is assumed to be at /<context>/js/eventing/rpc_relay.uncompressed.html if it is not set
OWF.relayFile = '<DIR_PATH>/rpc_relay.uncompressed.html';
</script>
</head>
<body></body>
</html>
IWC
In IWC, the two requirements above unfold as so:
- Include the 'ozpIwc-client.min.js` JavaScript library.
- No longer necessary
<html>
<head>
<script type="text/javascript" src="<DIR_PATH>/ozpIwc-client.min.js"></script>
</head>
<body></body>
</html>
Differences in instantiating IWC vs OWF
OWF
In OWF, it was required to wrap application logic in a callback to OWF.ready
. When OWF was ready for the application,
the application logic would run.
function initPage() {
updateClock();
msg = 'Running in OWF: ' + (OWF.Util.isRunningInOWF()?"Yes":"No");
document.getElementById("message-panel").innerHTML = msg;
document.getElementById("message-panel").style.display = 'block';
setInterval('updateClock()', 1000 )
}
owfdojo.addOnLoad(function() {
OWF.ready(initPage);
});
IWC
In IWC, the application does not need to wait for IWC to be ready to begin
operation. All IWC operations will be queued if the IWC is not ready for the
application. This means applications no longer have the Loading..
splash-screen
of OWF.
A difference in IWC from OWF, the IWC isn't simply running by including the
library, a connection to the IWC domain must be established (covered in the
Setup and Key Terms tutorial). Syntactically this should not be
alarming to developers as they need to reference an instance of ozpIwc.Client
to use the IWC, and said reference prepares the IWC for use.
var iwc = new ozpIwc.Client({peerUrl: "http://localhost:13000"});
// all iwc requests will be queued until IWC is ready.
Knowing when the IWC Client Connects
While the client auto connects and will process any requests queued, the
connect
promise will resolve when the client is connected. This promise can be
called as often as desired, the client will not reconnect by calling it, rather
it will reference the connection to resolve and move on to any chained functions.
Chaining asynchronous code off the IWC Client connection is only necessary if specific information pertaining to the generated client is needed (client's address).
var iwc = new ozpIwc.Client({peerUrl: "http://localhost:13000"});
iwc.connect().then(function(){
// This asynchronous function runs once the client is connected.
});
The below code snippet demonstrates the use of the connect
promise to write
the client's unique address to the application once connected.