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 <[email protected]> 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 <[email protected]> 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 <[email protected]> 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 <[email protected]>
>>> 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 <[email protected]>
>>>> 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 <[email protected]> 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 <[email protected]>
>>>>>> 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;}
>>>>>>> 
>>>>>>> }
>>>>>>> 
>>>>>> 
>>>> 
>> 

Reply via email to