hi Karoly,
yes, it creates servlet build upon web service client (client in web tier) and code for mobile client with using only standrad mipd/cldc abilities,
for example: Amazon ECS sample client generates required servlet and client code,
snippet from client generated code:
PHP Code:
private Object invokeServer(int requestID, Object[] parameters) throws IOException {
HttpConnection connection = (HttpConnection) Connector.open( serverURL );
connection.setRequestMethod(HttpConnection.POST);
connection.setRequestProperty("Content-Type", "application/octet-stream");
connection.setRequestProperty("Accept", "application/octet-stream");
if (sessionCookie == null) {
// if this is the first time this client contatcs the server,
// verify that the version matches
connection.setRequestProperty("version", "14-Jul-2006/11:14:52-CEST");
} else {
connection.setRequestProperty("cookie", sessionCookie);
}
DataOutputStream output = connection.openDataOutputStream();
writeObject(output, this);
/* Write the byte signifying that only one call
* is being made.
*/
output.writeShort(1 /* one call to be made to the server */);
output.writeInt(requestID);
for (int i = 0; i < parameters.length; i++ ) {
writeObject(output, parameters[i]);
}
output.close();
int response;
try {
response = connection.getResponseCode();
} catch (IOException e) {
throw new IOException("No response from " + serverURL);
}
if (response != 200) {
throw new IOException(response + " " + connection.getResponseMessage());
}
DataInputStream input = connection.openDataInputStream();
String sc = connection.getHeaderField("set-cookie");
if (sc != null) {
sessionCookie = sc;
}
short errorCode = input.readShort();
if (errorCode != 1) {
// there was a remote exception
throw new IOException((String) readObject(input));
}
Object returnValue = readObject(input);
input.close();
connection.close();
return returnValue;
}
PHP Code:
private void writeObject(DataOutputStream out, Object o) throws IOException {
if (o == this) {
out.writeShort(1 /* invocation code */);
} else if (o == null) {
out.writeShort(-1);
} else if (o.getClass().isArray()) {
out.writeShort(-2 /* ARRAY TYPE */);
Object[] array = (Object[]) o;
if (o instanceof String[]) {
out.writeShort(7 /* STRING_TYPE */);
} else if ( o instanceof amazonclient.BrowseNode[]) {
out.writeShort(27 /* TYPE_amazonclient_BrowseNode */);
} else if ( o instanceof amazonclient.KeyPhrase[]) {
out.writeShort(28 /* TYPE_amazonclient_KeyPhrase */);
} else if ( o instanceof amazonclient.Track[]) {
out.writeShort(33 /* TYPE_amazonclient_Track */);
} else if ( o instanceof amazonclient.Details[]) {
out.writeShort(26 /* TYPE_amazonclient_Details */);
} else if ( o instanceof amazonclient.CustomerReview[]) {
out.writeShort(30 /* TYPE_amazonclient_CustomerReview */);
} else if ( o instanceof amazonclient.ThirdPartyProductDetails[]) {
out.writeShort(32 /* TYPE_amazonclient_ThirdPartyProductDetails */);
}
.......
....
I never used it in real-life project (to be fair I'm newbie), but that's just interesting option 
hth,
regards,
Peter