Wednesday, August 1, 2007

"Hello, world!" with DWR tool

DWR is tool for enabling RMI on web-server from JavaScript at the client.

What need you do to create first DWR application.

1) Download DWR library.
2) Add description to web.xml

<servlet>
  <servlet-name>dwr-invoker</servlet-name>
  <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>dwr-invoker</servlet-name>
  <url-pattern>/dwr/*</url-pattern>
</servlet-mapping>

3) Create a class for remote invocation. Let it be following...
package my;
import ...
public class Server {

    private int count = 0;

    public int getCount() {return count;}

    public void increase() {count++}
}

4) Create dwr.xml description at WEB-INF.
<!DOCTYPE dwr PUBLIC
"-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN"
"http://www.getahead.ltd.uk/dwr/dwr10.dtd">

<dwr>
<allow>
<create creator="new" javascript="server">
<param name="class" value="my.Server"/>
</create>
</allow>
</dwr>

This means, if your-web-app/dwr/client.js is requested, DWR will create an instance of my.Server class and a JavaScript stub for it. You may see how this stub looks by link your-wed-app/dwr/interface/server

// Provide a default path to dwr.engine
if (dwr == null) var dwr = {};
if (dwr.engine == null) dwr.engine = {};
if (DWREngine == null) var DWREngine = dwr.engine;

if (server == null) var server = {};
server._path = '/jmxWebApp/dwr';
server.getCount = function(callback) {
dwr.engine._execute(client._path, 'client', 'invoke', callback);
}
server.increase = function(callback) {
dwr.engine._execute(client._path, 'client', 'setAttribute', callback);
}

5) Create page using Server invocaion.


<html>
<head>
    <title>DWR_JMX test</title>
    <script type="text/javascript" src='dwr/engine.js'></script>
    <script type="text/javascript" src='dwr/util.js'></script>
    <script type="text/javascript" src='dwr/server.js'></script>
</head>
<body>
    <script type="text/javascript">
        server.getCount(new Function("data", "alert(data);"));
        server.increase(new Function(alert("Value increased"));
        server.getCount(new Function("data", "alert(data);"));
    </script>
</body>
</html>

2 comments:

Carlos Adrián Rodríguez Oliva said...

What sould we expect when the program runs?

Mary said...

Hello, How do I get in touch with you? There is no email or contact info listed .. please advise .. thanks .. Mary. Please contact me maryregency at gmail dot com