Hi again Alvaro - I am cross posting you to the geoserver list on this one. Remember that geotools is a library and has no plans to be a spatial server
WFS allows extention to use a binary protocol. You will have to talk with the people on this list (Chris Holems, Gabriel ) for details about where to add such support in.
Alvaro Zabala wrote:
i) Are you planning to work in TCP/IP based Spatial Server, with binary communications?
GeoServer is great. But we think that for an enterprise environment (like SDE) http is not a good protocol. It isnt connection oriented, and it is a text based protocol (XML based).
We have developed a pilot of a spatial Server with same philosophy of ArcSDE:
1) Connection oriented. A client makes a connection, and connection lives in server until client closes it. Server Connection is a thread doing something like this:
boolean continue = true;
while (continue) {
try {
doWork();
}catch (Throwable ex) {
continue = false;
}//catch
}//whileAnd doWork() is something like this:
String action = socket.readString();//thread is blocked here
String commadClassName = mappings.getCommandClassNameFor(action);
Command comand = commandFactory.createCommand(commandClassName);
Form form = mappings.getFormForComand(commandClassName,action);
ContextData context = new ContextData(sdeSocket);//Read params from socket
boolean checkPassed = form.validate(context);
Object results = null;
if (checkPassed) {
results = comand.execute(context, form);
String viewClass = mappings.getView(commandClassName, action);
ViewDispatcher dispatcher = ViewDispatcherFactory.createViewDispatcher(viewClass);
dispatcher.renderView(results, socket);
}2)Extensible (with a MVC architecture an dinamic linkage via XML)
3) Binary Communication. Now we are using a propiety protocol. But wed love to a b-xml implementation... Are someone planning to release a B-XML implementation? Is anyone interested in discuss this?
4) Bidirectional communications based in full-duplex sockets. Think in a client making a zoom of all the world. It renders world's countrys while it reads country's features from our server. If we don allow client to finish zoom (making another zoom to canada, for example) with a full duplex socket we neednt to close connection and open another one. Instead, we read data from server by buckets (like fetch size of Oracle), and when we complete a bucket, server waits for a control byte. We send a cancel byte and server stops sending worlds countrys to client, and start wait for another request.