You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@thrift.apache.org by "Mathias Herberts (JIRA)" <ji...@apache.org> on 2010/04/01 09:53:27 UTC

[jira] Updated: (THRIFT-746) Generated services Iface/Client inner classes do not derive from base classes

     [ https://issues.apache.org/jira/browse/THRIFT-746?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Mathias Herberts updated THRIFT-746:
------------------------------------

    Attachment: TServiceClient.patch

The attached patch adds a TServiceClient class (not an interface so we can expose two constructors) and modifies the Java generator so services client inner classes extend TServiceClient when they don't extend any other service.

This way all service clients have a common ancestor and implementing things like client pooling becomes way easier.

> Generated services Iface/Client inner classes do not derive from base classes
> -----------------------------------------------------------------------------
>
>                 Key: THRIFT-746
>                 URL: https://issues.apache.org/jira/browse/THRIFT-746
>             Project: Thrift
>          Issue Type: Improvement
>          Components: Compiler (Java)
>    Affects Versions: 0.2
>         Environment: All
>            Reporter: Mathias Herberts
>         Attachments: TServiceClient.patch
>
>
> When defining a service in Thrift, the generated code looks like
> public class Service {
>   public interface Iface {
>    ...
>   }
>   public static class Client {
>     ...
>   }
> }
> This makes it quite hard to create generic classes which accept any kind of Client or Iface as a parameter. One such use case is the pooling of Client objects.
> One way to circumvent this is to create a top level thrift service and have all other services extend it, but then there will be no coherency across the thrift community.
>  
> What about introducing a TService class:
> public class TService {
>   public interface Iface {}
>   public static class Client {
>        public Client(TProtocol prot) { this(prot,prot); }
>        public Client(TProtocol iprot, TProtocol oprot)   {}
>     }
> }
> and have generated services inherit from it:
> public class Service {
>   public interface Iface extends TService.Iface {
>   }
>   public static class Client extends TService.Client {
>   }
> }
> As a bonus I'll contribute the pooling mechanism I've created for Bibale (based on GenericObjectPool).

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.