I've actually decided to postpone my migration to the "new" java library 
because I don't fully understand how to use the OAuth2 credentials/tokens 
in a "long lived service" environment.  I made a version that created a 
single GoogleCredential object, and handed that out to all the 
AdWordsSessions, but I had little confidence that it was going to work 
properly when auto-refreshed, or that it was safe to use just one 
credential across many threads, simultaneously or not.  I'd love to see 
some more full-scale examples, or in-depth documentation, so that I won't 
have to find out through trial and error.

On Friday, October 19, 2012 5:46:34 AM UTC-4, Oliver wrote:
>
> Thanks for the clarification.  We indeed use OAuth2.
>
> My understanding is the Java client library handles the token refresh 
> automatically.  If so, then we don't have any control on ensuring the 
> refresh functionality is done by one thread only, and we will run the risk 
> of multiple simultaneous refreshes.
>
> Is there any chance the Java client library can perhaps add some 
> protection against it (maybe synchronize the bit of the code that does 
> this)?
>
> Oliver
>
> On Thursday, October 18, 2012 9:02:13 PM UTC+1, Kevin Winter wrote:
>>
>> Hi Oliver,
>>   Yes, the session object should be safe to read in multiple threads (the 
>> only caveat is if you are doing OAuth2 and it needs to refresh the token, 
>> that wouldn't be threadsafe).  Technically, you can also update the 
>> credentials as well as partialFailure/validateOnly (and 
>> reportMoneyInMicros).
>>
>> If you're using ClientLogin or OAuth1.0a, you should be fine in your 
>> scenario.  Under certain edge conditions OAuth2 might be OK - you just run 
>> the risk of multiple threads all refreshing it at once.  We wanted to 
>> recommend treating it as non-threadsafe because the caveats certainly 
>> complicate matters.
>>
>> - Kevin Winter
>> AdWords API Team
>>
>> On Thursday, October 18, 2012 6:37:20 AM UTC-4, Oliver wrote:
>>>
>>> Thanks Kevin for such an excellent resource.
>>>
>>> I have a question about the nature of thread safety of the *session *
>>> object.
>>>
>>> So, if we don't make changes to the session* *object at all, does this 
>>> mean we can use multi threads on the session object (together with the 
>>> other objects like *ReportDownloader *and the *service stubs *that they 
>>> hold a reference to the session)?
>>>
>>> The only thing that potentially can change on a session is the customer 
>>> ID, right?  We have a model whereby we cache one session object per account 
>>> ID, hence we never need to change the customer ID on the session.  Are we 
>>> safe to use multi threads in our case?
>>>
>>> Oliver
>>>
>>> On Wednesday, October 17, 2012 10:20:23 PM UTC+1, Kevin Winter wrote:
>>>>
>>>> Updated - thanks for pointing that out.
>>>>
>>>> - Kevin Winter
>>>> AdWords API Team
>>>>
>>>> On Wednesday, October 17, 2012 4:20:05 PM UTC-4, j.e.frank wrote:
>>>>>
>>>>> That's useful.  Can you also update the Migration Guide, because it 
>>>>> contains contradictory information about the AdWordsServices object?  The 
>>>>> migration guide calls it heavyweight and non-threadsafe, and the wiki 
>>>>> page 
>>>>> referenced below calls it lightweight and threadsafe.
>>>>>
>>>>> On Wednesday, October 17, 2012 4:10:57 PM UTC-4, Kevin Winter wrote:
>>>>>>
>>>>>> Hi Oliver,
>>>>>>   I just published a wiki page on thread safety in the new java 
>>>>>> library: 
>>>>>> https://code.google.com/p/google-api-ads-java/wiki/ThreadSafety
>>>>>>
>>>>>> - Kevin Winter
>>>>>> AdWords API Team
>>>>>>
>>>>>> On Wednesday, October 3, 2012 3:34:04 PM UTC-4, Oliver wrote:
>>>>>>>
>>>>>>> Assume we have an MCC with 5 standard adwords accounts inside it.
>>>>>>>
>>>>>>> An application, using the Java client library, authenticates to 
>>>>>>> access the MCC account and gets the required token for the MCC.
>>>>>>>
>>>>>>> We now need to access the 5 accounts within the MCC, sometimes 
>>>>>>> simultaneously.  Can you please confirm the following:
>>>>>>>
>>>>>>> 1) Since the AdwordsSession object is associated with one account 
>>>>>>> ID, I will need to create 5 AdwordsSession objects one for each 
>>>>>>> account. 
>>>>>>> All AdwordsSessions are created using the same token (obtained when 
>>>>>>> authenticating for MCC). Is this correct?
>>>>>>>
>>>>>>> 2) Even though the AdwordsServies class can be used with multiple 
>>>>>>> sessions, it is not thread safe as documented here:
>>>>>>> http://code.google.com/p/google-api-ads-java/wiki/MigrationGuide
>>>>>>>
>>>>>>> Since the 5 accounts might be accessed simultaneously, I should 
>>>>>>> create 5 different AdwordsServices object, one for each account.  Is 
>>>>>>> this 
>>>>>>> correct?
>>>>>>>
>>>>>>>
>>>>>>> Thanks for your help.
>>>>>>>
>>>>>>> Oliver
>>>>>>>
>>>>>>

-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
Also find us on our blog and discussion group:
http://adwordsapi.blogspot.com
http://groups.google.com/group/adwords-api
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~

You received this message because you are subscribed to the Google
Groups "AdWords API Forum" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/adwords-api?hl=en

Reply via email to