Michael,
Yes, that is what I wanted. But I also wanted to manage the Datacontext
varibale with a Singleton pattern
I mean, I don't want to have to use it as a parameter in the majority of
my methods.
But if I declare it as a static variable the previous problem happens.
In fact, I'm thinking of a way to do it (to create a DataContect for
every session)
Thanks,
Jorge
Gentry, Michael wrote:
> Jorge,
>
> Is there any reason why you don't want a DataContext object for every
> session? I would think in most session-based applications you would
> want to create a new DataContext object (as a session-scoped variable)
> to use. I would limit a global DataContext object to read-only (or
> read-mostly) data like states or counties or product IDs, etc. (things
> more global in scope and rarely change).
>
> /dev/mrg
>
>
> -----Original Message-----
> From: Jorge Sopena [mailto:jsopen..idsa.es]
> Sent: Tuesday, March 16, 2004 11:16 AM
> To: cayenne-use..bjectstyle.org
> Subject: Re: CayenneRunTimeException when it's sent several
> requests quickly
>
> Thanks Mike,
>
> I've found out what was happened.
> As I said, I create a new DataContext for each request in my
> doGet() method, and I save it in a static variable.
> Then I use a Singleton pattern to recover it.
>
> The first problem is that this static variable is changed in each
> received request.
> And in some circunstancies that could have happened in the middle
> of the two instructions.
> I mean, when I create a new request object the DataContext is one,
> but when I do the search for the customer,
> it could have changed because of a new received request, and I do
> the search with this DataContext.
> So the DataContext for each object is different, and produces this
> error.
>
> I've worked it out, checking if the static variable is null and
> synchronizing the method which create it.
>
> Thanks
>
> Jorge
>
> PD. I've got another problem now, but I'll write a new email.
>
> Mike Kienenberger wrote:
>
>>Jorge Sopena <jsopen..idsa.es> wrote:
>>
>>
>>>Eric,
>>>I just create a DatContext in my doGet() method of my servlet, in the
>>>following way:
>>> ctxt = BasicServletConfiguration.getDefaultContext(session)
>>>
>>>Each time I receive a request, a new DataContext would be created,
>>>wouldn't it?
>>>
>>>What my application has to do is to register these requests with the
>>>customer who did it.
>>>So I create a new Request object in that way:
>>> req =(Request)ctxt.createAndRegisterNewObject("Request");
>>>
>>>And then I set the customer to the request:
>>> r.setCustomer(Customer.search(clientId));
>>>
>>>And it's in that moment when this error happens.
>>>
>>>But the weird thing is that happens only when I do several request
>>>quickly, if they are separated in time everything goes right.
>>>
>>>
>>
>>What you haven't described is what DataContext the result from
>>Customer.search(clientId) uses.
>>If it's not the same as ctxt, you will get an error.
>>
>>If you want to understand what's happening, try outputing the datacontext
>>for both "r.dataContext()" and "Customer.search(clientId).dataContext()."
>>You will probably notice a pattern that will explain the observed behavior.
>>
>>In any case, as I stated yesterday, if you use
>>
>>r.setCustomer(r.dataContext().localObjects(Arrays.asList(new Object[] {
>>Customer.search(clientId) } )));
>>
>>the problem should go away.
>>
>>If it did not, that would indicate a bug in the cayenne framework.
>>
>>-Mike
>>
>>
>>
This archive was generated by hypermail 2.0.0 : Tue Mar 16 2004 - 12:34:11 EST