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 09:40:22 GMT
>> 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

Mime
View raw message