>> 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

Reply via email to