-
1. Re: Seam remoting or DWR
fangzx Nov 11, 2007 9:16 PM (in response to fangzx)After two days hard work, I decided to modify remote.js in
jboss-seam-remoting.jar to support synchronous call.
old code:asyncReq.open("POST", Seam.Remoting.resourcePath + path, true);
new code :
asyncReq.open("POST", Seam.Remoting.resourcePath + path, Seam.Remoting.async);
I create an utility method to remoting call that can used by DWR and
JBoss Seam Remoting:
function rmtCall(method, callback, params, isAsync) { var s = method.split('.'); var callParams = []; if (params) { for (i = 0;i < params.length; i++) { callParams.push(params); } } if (Seam.serverSide) { callParams.push(callback); var obj = Seam.Component.newInstance(s[0]); Seam.Remoting.async = isAsync; eval('obj.' + s[1] + '.apply(obj, callParams)'); } else { callParams.push( { callback : callback, async : isAsync }); eval(method + '.apply(' + s[0] + ', callParams)'); } }
Any comments are appreciated. -
2. Re: Seam remoting or DWR
shane.bryzak Nov 11, 2007 11:07 PM (in response to fangzx)I'm not really a fan of synchronous ajax requests, however I think the approach that you've taken is fine.
-
3. Re: Seam remoting or DWR
fangzx Nov 11, 2007 11:16 PM (in response to fangzx)There are times and situations where asynchronous just will not do.
I agree that it is ideal to use async requests as much as possible,
even if it requires refactoring much of your other code to make it work that way.
However, there is value in having the option to make a synchronous call if one should wish,
and there are situations where it may be desired. -
4. Re: Seam remoting or DWR
milli Jan 15, 2008 3:14 AM (in response to fangzx)I'm using flex in one of the pages and need to find out if a user is logged in and get his id. I would need a synchronous WebRemote call in this case so that flex can call a javascript function and get the result.
Fangzx, I couldn't make your utility method to work but I was able to override Seam.Remoting.sendAjaxRequest and use a modified Seam.Remoting.processResponse and Seam.Remoting.processResult methods in the application.
Now I could do both synchronous and asynchronous calls in the application without touching seam-remoting.jar.