thrift-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Matt Chambers <mvchamb...@me.com>
Subject Re: How to represent java object as return type of service in .thrift file
Date Wed, 17 Jun 2015 18:39:03 GMT
Right, it would be like a proxy to a connection object and you could locate the connection
out of some LRU cache or pool, but the client side object is not usable as a connection for
ODBC.  And as you stated, its madness!

-Matt

> On Jun 17, 2015, at 2:29 PM, Stuart Reynolds <stu@stureynolds.com> wrote:
> 
> Its is *possible* to marshall a DB connection. (e.g. by representing a
> reference to it as an int ID, and sending it back for each query).
> However, its probably madness to do this.
> 
> On Wed, Jun 17, 2015 at 11:23 AM, Matt Chambers <mvchambers@me.com> wrote:
>> 
>> Then you have to construct the connection object on the client side.  Additionally,
making DB connections and then handing them down to the client, even if it was possible and
thankfully it isn’t, is not a good idea anyway.  It kinda defeats the purpose of thrift.
>> 
>> 
>>> On Jun 17, 2015, at 2:17 PM, reena upadhyay <reena2485@gmail.com> wrote:
>>> 
>>> I have built custom ODBC driver which works at client side, and there I
>>> would need a connection object.
>>> 
>>> On Wed, Jun 17, 2015 at 11:43 PM, Stuart Reynolds <stu@stureynolds.com>
>>> wrote:
>>> 
>>>> This isn't going to work. A java.sql.Connection contains data that
>>>> can't be communicated outside of the process (e.g. file system
>>>> objects)
>>>> 
>>>> This is a limitation of (almost all) network communication protocols,
>>>> not specifically thrift.
>>>> I guess, *why* do you want to send a Connection object out of your process?
>>>> There's probably something more sensible that you should send instead.
>>>> 
>>>> 
>>>> 
>>>> 
>>>> On Wed, Jun 17, 2015 at 11:00 AM, reena upadhyay <reena2485@gmail.com>
>>>> wrote:
>>>>> Ok. Thanks for the reply.
>>>>> 
>>>>> But my actual use case is: I want my service to return
>>>> java.sql.Connection
>>>>> object, and this data type is not supported in hive. How it represent
it
>>>> in
>>>>> thrift file?
>>>>> 
>>>>> .thrift file is:
>>>>> 
>>>>> service databaseService{
>>>>>       Connection openConnection(),}
>>>>> 
>>>>> 
>>>>> The openConnection method code in service implementation class:
>>>>> 
>>>>> @Override
>>>>>    public Connection openConnection() throws TException {
>>>>>      // here is the code that fetch the user object from database
>>>>>     return connecton;
>>>>>    }
>>>>> 
>>>>> 
>>>>> On Wed, Jun 17, 2015 at 11:19 PM, nash <nashef@gmail.com> wrote:
>>>>> 
>>>>>> I typically do it like this:
>>>>>> 
>>>>>> struct User {
>>>>>>  1: required string username;
>>>>>>  2: required i32 id;
>>>>>>  3: required string homedir;
>>>>>> }
>>>>>> 
>>>>>> service UserService {
>>>>>> User getUser(1:i32 userid);
>>>>>> }
>>>>>> 
>>>>>> When I compile the thrift file, it generates the User class.
>>>>>> 
>>>>>> --nash
>>>>>> 
>>>>>> On Wed, Jun 17, 2015 at 10:41 AM reena upadhyay <reena2485@gmail.com>
>>>>>> wrote:
>>>>>> 
>>>>>>> I'm developing a service using apache thrift. I have a service
named
>>>>>>> getUser which returns User object. I couldn't find any way to
define
>>>>>>> user-defined data type as a return type for my service defined
in
>>>> .thrift
>>>>>>> file.
>>>>>>> 
>>>>>>> user.thrift file looks like:
>>>>>>> 
>>>>>>> service UserService{
>>>>>>>       User getUser(1:i32 userId),}
>>>>>>> 
>>>>>>> When I am compiling the user.thrift to generate java source code,
I am
>>>>>>> getting "*Type "User" has not been defined*" error. Can anyone
please
>>>>>> help
>>>>>>> me, how to represent this user-defined java object as a data
type in
>>>>>>> thrift.
>>>>>>> 
>>>>>>> The getUser method code in service implementation class:
>>>>>>> 
>>>>>>> @Override
>>>>>>>    public User getUser(int user id) throws TException {
>>>>>>>      // here is the code that fetch the user object from database
>>>>>>>     return user;
>>>>>>>    }
>>>>>>> 
>>>>>>> This is my User class, whose object is being returned by service
>>>> getUser:
>>>>>>> 
>>>>>>> public class User {
>>>>>>> 
>>>>>>> private int userId;private String name;private String city;private
>>>>>>> String country;public int getUserId() {
>>>>>>>   return userId;}public void setUserId(int userId) {
>>>>>>>   this.userId = userId;}public String getName() {
>>>>>>>   return name;}public void setName(String name) {
>>>>>>>   this.name = name;}public String getCity() {
>>>>>>>   return city;}public void setCity(String city) {
>>>>>>>   this.city = city;}public String getCountry() {
>>>>>>>   return country;}public void setCountry(String country) {
>>>>>>>   this.country = country;}
>>>>>>> 
>>>>>>> }
>>>>>>> 
>>>>>> 
>>>> 
>> 


Mime
View raw message