cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Christian Grobmeier <grobme...@gmail.com>
Subject Re: Getting null instead of the actual value
Date Fri, 16 Sep 2011 14:16:50 GMT
Hello Andrus,

thanks for your help so far. I have now modfied the code to use a
namedQuery when selecting the user. I have then modeled a prefetch of
the role. I made several tests, all successful for now. I will test
again a little bit later. If it works than my error was somehow
related to the prefetching. If not.... then I will try make more clear
what I have done.

Cheers
Christian

On Fri, Sep 16, 2011 at 12:51 PM, Andrus Adamchik
<andrus@objectstyle.org> wrote:
> Hi Christian,
>
> Sorry, I think I am bit lost. Pieces of code shown in this thread don't fall together
in one sequence of events in my head, so I can't give specific advice and can only keep guessing.
The first message with pseudo code didn't sound right at all.
>
>> But if a make up a new request
>> and select the User, it claims it has no roles which leads to a
>> failure.
>
> Do you prefetch the roles when fetching a user (as in SelectQuery.addPrefetch(..))? That's
one possible way to refresh relationships.
>
> Andrus
>
>
>
> On Sep 16, 2011, at 12:40 PM, Christian Grobmeier wrote:
>>>> ObjectContext ctx = // get context
>>>> User user = ctx.newObject(User.class);
>>>> ObjectContext ctx = // get another context (from ThreadLocal - should be
the same?)
>>>
>>> If this whole piece of code is from the same request, and the first context is
obtained from ThreadLocal, then the contexts should be the same. (A potential race condition
- how did the context got into ThreadLocal in the first place? If it comes from the session,
multiple request threads can get the same context, if the user clicks quickly or there's lots
of AJAX calls on the pages).
>>
>>
>> I use the CayenneFilter in my web.xml. Once a request comes in, it
>> looks like it is the SessionContextRequestHandler who creates my
>> context and binds it to the current thread.
>>
>> Basically it is three steps: register, activate and then login what
>> user does. It fails when the user does his login (sometimes). At this
>> point there is no ajax at all, just plain stuff.
>>
>>
>>
>>
>>>> After your explaination my guess is that I am not allowed to call this:
>>>> BaseContext.getThreadObjectContext();
>>>> twice before I commit. Does this make sense?
>>>
>>> No, you can call getThreadObjectContext as many times as you need. You get the
same context within request, which is probably what you want.
>>
>>
>> Yes, exactly.
>>
>>>
>>>
>>>> <query name="getUserRole"
>>>> factory="org.apache.cayenne.map.SelectQueryBuilder" root="obj-entity"
>>>> root-name="Role">
>>>>       <property name="cayenne.SelectQuery.distinct" value="true"/>
>>>>       <property name="cayenne.GenericSelectQuery.cacheStrategy"
>>>> value="SHARED_CACHE"/>
>>>>       <qualifier><![CDATA[name = "user"]]></qualifier>
>>>> </query>
>>>
>>> This query fetches Roles, not UserRoles. From your earlier messages, you were
actually looking for UserRoles, and then traversing relationships to Roles from them, no?
>>
>>
>> My "design" is: User <-> UserRoles <-> Roles
>>
>> I have a fixed role  like "user" or "admin" in the roles table. I want
>> to select the existing user role from the table (I do it by the name,
>> which is some kind of key for me) and add it to a user with creating a
>> new UserRoles object.
>>
>> This is actually were is it seems to fail. In my database all three
>> entities are existing and look good. But if a make up a new request
>> and select the User, it claims it has no roles which leads to a
>> failure.
>>
>> My guts say it might also be somehow caching related. When I login i
>> create a simple SelectQuery which selects the User.class by login
>> name. Might it be a good idea to make something like this?
>>
>> SelectQuery query = ...
>> query.setCacheStrategy(QueryCacheStrategy.NO_CACHE);
>>
>> It would give me a very bad taste in my mouth if I would need that.
>>
>> Cheers,
>> Christian
>>
>>
>>> Andrus
>>
>>
>>
>> --
>> http://www.grobmeier.de
>>
>
>



-- 
http://www.grobmeier.de

Mime
View raw message