Totally agree. That makes it much more flexible. Please, feel free to change the code.
Pawel Nicklas Nordborg wrote: > 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 ------------------------------------------------------------------------- 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