[ 
https://issues.apache.org/jira/browse/THRIFT-746?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12852478#action_12852478
 ] 

Bryan Duxbury commented on THRIFT-746:
--------------------------------------

OK, to be clear, can we do this all with interfaces? All clients extend 
TServiceClient, which gives you getInputProtocol and getOutputProtocol, and we 
also generate new factories that extend TServiceClientFactory, which has the 
two getClient methods on it.

I think this would be a great improvement and a solid step towards cleaning up 
the generated service code. 

> 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: TService.patch, TServiceClient.patch, 
> TServiceClient.patch-2
>
>
> 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.

Reply via email to