Yes. I did, in fact, see that, the first time you wrote it. I’m going to get 
myself some more coffee now.

Thanks,
- hugi



> On 14. feb. 2016, at 14:31, John Huss <[email protected]> wrote:
> 
> The second method I gave. Just bind the injector to the thread earlier.
> On Sun, Feb 14, 2016 at 8:20 AM Hugi Thordarson <[email protected]> wrote:
> 
>> How would you go about creating a new ObjectContext in framework code;
>> i.e. in code that doesn’t know anything about the environment it’s running
>> in?
>> 
>> 
>>> On 14. feb. 2016, at 14:16, John Huss <[email protected]> wrote:
>>> 
>>> It's your responsibility.
>>> 
>>> You can't get the runtime that way, but you probably don't need to
>> (except
>>> for your existing code!). The injector has everything you'd need except
>> the
>>> runtime itself.
>>> On Sun, Feb 14, 2016 at 8:02 AM Hugi Thordarson <[email protected]>
>> wrote:
>>> 
>>>> Thanks John, I had no idea getThreadObjectContext() existed. Does
>> Cayenne
>>>> somehow manage this variable or is it solely my responsibility?
>>>> 
>>>> It isn’t quite exactly what I’m looking for, though—ideally, the method
>>>> I’m looking for would be named getProcessServerRuntime().
>>>> 
>>>> Would CayenneRuntime.getThreadInjector().getInstance(
>> ServerRuntime.class
>>>> ) return the currently operating ServerRuntime?
>>>> 
>>>> - hugi
>>>> 
>>>> 
>>>> 
>>>>> On 14. feb. 2016, at 13:50, John Huss <[email protected]> wrote:
>>>>> 
>>>>> If you just need a context and not the runtime you can use:
>>>>> 
>>>>> BaseContext.getThreadObjectContext();
>>>>> 
>>>>> as long as you bind one to the thread earlier.
>>>>> 
>>>>> Or you can use the thread injector to get other stuff like an
>>>>> EntityResolver, or also a context, if you've bound it to a thread:
>>>>> public static ObjectContext newObjectContext() {
>>>>> ObjectContextFactory factory =
>>>>> 
>>>> 
>> CayenneRuntime.getThreadInjector().getInstance(ObjectContextFactory.class);
>>>>> return factory.createContext();
>>>>> }
>>>>> 
>>>>> 
>>>>> On Sun, Feb 14, 2016 at 7:19 AM Hugi Thordarson <[email protected]>
>>>> wrote:
>>>>> 
>>>>>> Hi all.
>>>>>> 
>>>>>> In almost all of my Cayenne projects, I have a class that holds my
>>>>>> ServerRuntime and creates ObjectContexts from that ServerRuntime; sort
>>>> of a
>>>>>> central station for my DB connectivity. Works fine, but it means my
>>>> code is
>>>>>> somewhat tied to that runtime and calls to
>>>>>> MyCentralCayenneClass.newContext() are littered all over the place.
>>>>>> 
>>>>>> I’m currently writing a lot of unit tests and these use a separate
>>>>>> ServerRuntime with a different configuration that connects to a test
>>>>>> database. But since some of my code is directly creating contexts from
>>>> the
>>>>>> other ServerRuntime (which connects to the production DB) I end up
>> with
>>>>>> unintended consequences. Same thing for framework code that’s supposed
>>>> to
>>>>>> be reusable—how should it obtain ObjectContexts without knowing
>> anything
>>>>>> about the currently active ServerRuntime?
>>>>>> 
>>>>>> I see several solutions to the situtation but I wanted to start out by
>>>>>> checking if there’s a canonical method of solving the problem? (I
>>>> believe
>>>>>> I’m actually asking if there’s a way to obtain something like a global
>>>>>> currently active ServerRuntime, that can be used by reusable code and
>>>>>> tests. But I didn’t want to frame the question in the wrong way
>>>> creating an
>>>>>> XY Problem)
>>>>>> 
>>>>>> Cheers,
>>>>>> - hugi
>>>> 
>>>> 
>> 
>> 

Reply via email to