Thanks for the code. It was something like this that I had in mind. The one thing I don't like is to pass the type as an 'int' parameter in the constructor and having a switch statement that creates the actual object to use. This makes it impossible for others to use their own implementations of 'RPCServiceClientCreator'. Wouldn't it be better to pass a 'RPCServiceClientCreator' directly to the constructor?
Eg. protected AbstractRPCClient( String url, String service, RPCServiceClientCreator serviceCreator) { ... } /Nicklas Pawel Sztromwasser wrote: > Hi Nicklas, > > I had some time and implemented the 'ServiceFactory' functionality. > Gzipped java files are attached. To summarize changes: > > 1) three new classes/interfaces were created (I put them in > net.sf.basedb.ws.client.added package): > a) RPCServiceClientCreator - interface containing RPCServiceClient > getService(String serviceUrl) method for creating RPCServiceClient objects > b) DefaultRPCServiceClientCreator - factory class implementing > interface above. It creates RPCServiceClient objects in the way they > were created in AbstractRPCClient.getService() method. > c) NoChunkRPCServiceClientCreator - the same as above but with CHUNK > option set to false. > > 2) AbstractRPCClient class uses own RPCServiceClientCreator object to > create objects in getService() method. Creator object is initialized in > constructor (type of creator is an argument of additional constructor). > The creator type can be chosen between values supported by > AbstractRPCClient, available as public static constants (currently only > DEFAULT_RPC_SERVICE_CLIENT and NO_CHUNK_RPC_SERVICE_CLIENT). If no > creator type is supplied, default one is used. > > 3) all the subclasses of AbstractRPCClient have additional constructor > with last argument being type of RPCServiceClientCreator which refers to > constructor in superclass. This makes possible to choose creator type > when programming BASE2 webservices clients. > > I attached diffs.txt file which contains diff output on > net/sf/basedb/ws/client/ folders for my version and 2.7.1. Just thought, > it might be helpful. > > I hope the code will be useful. > > Best wishes, > Pawel > > > Nicklas Nordborg wrote: >> Pawel Sztromwasser wrote: >>> Hello BASE developers, >>> >>> We have been recently trying to enable retrieving some data from >>> BASE2 installation directly into our 'home made' analysis tool. We >>> use webservices for that and have to say that you are doing a great >>> job. >> >> Thanks. >> >>> We are really looking forward to use them more extensively. >>> >>> Recently, when I started testing the tool not only within the local >>> network I noticed that the webservice client does not switch off >>> chunking. It results in attached exception cascade. Chunking is on by >>> default in axis2 and some servers (i.e. our gateway to BASE which >>> apparently uses HTTP1.0 and not 1.1) have problems with it. The >>> remedy is to use >>> >>> options.setProperty(HTTPConstants.CHUNKED, false); >>> >>> in net.sf.basedb.ws.client.AbstractRPCClient.getService(). I don't >>> know what are the drawbacks of it, but that was the only way I could >>> run the services in our current setup (BASE2.6 accessible by >>> proxypass from exposed webserver). Could this option be set off by >>> default or configurable somewhere? Or maybe there is some other >>> workaround? >> >> I am afraid that I am not very familiar with all possible options that >> is available in the Axis API:s. There seems to be a lot of them and >> their Javadoc is not very informative about what many of the options >> are used for. The CHUNKED option seems to be related to the way HTTP >> requests are made, but I have to admit that this is the first time I >> have heard of it. This means that I probably know even less than you >> about this. >> >> I think that, in the future, there may be more requests about being >> able to set other options. So, it may be better to think ahead and try >> to figure out some way to be able to do this as easy as possible. With >> the current BASE API the only workaround that doesn't involve changing >> the BASE code is to subclass all AbstractRPCClient subclasses and >> override the 'getService()' method. This is not very elegent since >> there are several such classes and the new 'getService()' will be >> added to each one of them. >> >> A better approach may be to create a 'ServiceFactory' interface which >> has a 'createService()' method. The default implementation would then >> work as the AbstractRPCClient.getService() does today. The last step >> is to figure out a way to switch to another 'ServiceFactory' >> implementation either by having a configuration file or by being able >> to specify it programmatically. >> >> I have opened a ticket for this issue >> http://base.thep.lu.se/ticket/1057. It falls under the 'contributions >> welcome' category since right now we are forced to prioritize other >> things. >> >> /Nicklas >> >> >> >> ------------------------------------------------------------------------- >> Check out the new SourceForge.net Marketplace. >> It's the best place to buy or sell services for >> just about anything Open Source. >> http://sourceforge.net/services/buy/index.php >> _______________________________________________ >> basedb-devel mailing list >> basedb-devel@lists.sourceforge.net >> https://lists.sourceforge.net/lists/listinfo/basedb-devel > > > > ------------------------------------------------------------------------ > > ------------------------------------------------------------------------- > This SF.Net email is sponsored by the Moblin Your Move Developer's challenge > Build the coolest Linux based applications with Moblin SDK & win great prizes > Grand prize is a trip for two to an Open Source event anywhere in the world > http://moblin-contest.org/redirect.php?banner_id=100&url=/ > > > ------------------------------------------------------------------------ > > _______________________________________________ > basedb-devel mailing list > basedb-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/basedb-devel ------------------------------------------------------------------------- This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK & win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/ _______________________________________________ basedb-devel mailing list basedb-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/basedb-devel