public interface ApplicationDeclaration
In order to support this an application configuration file needs to be present on your
server. This file lists out what server side methods are exposed for direct invocation.
The application configuration file should be named appID.app.xml
(where
"appID" is some arbitrary id for your application) and must be present at the
location specified by the project.apps
setting in
the server.properties
file.
The application declaration should be written in xml, and should contain a
rpcBindings
block, which holds ServerObject
definitions for each
exposed method. Here's an example demonstrating the specified format:
<Application> <rpcBindings> <ServerObject ID="MathUtil" className="com.example.package.MathUtil"> <visibleMethods> <method name="addIntegers"/> </visibleMethods> </ServerObject> </rpcBindings> </Application>In this example we're exposing a method "addIntegers" on the server side java class
com.example.package.MathUtil
. A developer could then call DMI.call(...)
on the client side code to invoke this method on the server, and get at the returned value
in the RPCResponse
passed to the RPCCallback. Note that the
application
config file does not explicitly list out a method signature - the appropriate method to
call is detected automatically based on the parameters passed to DMI.call on the client side.
The method may be also written using Server
Scripting
if it is short or
if it is needed to add fuctionality to the referred ServerObject
without modyfing
its
Java code. The example above may be extended with the addAbsIntegers
method
imlpemented
using groovy script, which from the client perspective can be called the same way as the
addIntegers
method above:
<Application> <rpcBindings> <ServerObject ID="MathUtil" className="com.example.package.MathUtil"> <visibleMethods> <method name="addIntegers"/> <method name="addAbsIntegers" language="groovy" args="values"> <script> int res = 0; for (int i: values) { res += Math.abs(i); } return res; </script> </method> </visibleMethods> </ServerObject> </rpcBindings> </Application>See the
DMI overview
for further information on
Direct Method Invocation
in Smart GWT.