cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Rich Tuers <rtu...@oildex.com>
Subject Re: BaseContext
Date Thu, 14 Feb 2013 15:40:14 GMT
Yes, I thought about doing that and this will probably address this one
issue.  I guess my real question is how do I keep from
BaseContext.getThreadObjectContext() from throwing that
IllegalStateException.  I hit the save button in the UI, create the
"Parent" objects which does get the ObjectContext back from
BaseContext.getThreadObjectContext().   However before I create the child
objects I put a message on a queue that Camel picks up, processes the
information and then puts the child object data back on the queue.  Which
I then pickup and try to create the new children with, using the
BaseContext.getThreadObjectContext().  At this point, it throws the
Illegal state exception.  I'm assuming once I go to Camel I lose the
ThreadLocal and therefore get this exception.

Basic Event Flow
-------------------
1. User hits Save
2. Controller calls "Front-End" service to create Parent Object.  Parent
is successfully saved to the database.
3. Front-end service makes a call to the "back-end" service via Camel (to
get child data).
4. back-end service sends data back to the front-end service.
5. Front-end service tries to create the child objects but gets the
IllegalStateException.


public ObjectContext getDataContext() {
	try {
		// Successful when creating the parent
		return BaseContext.getThreadObjectContext();
	} catch (Exception ex) {
		// Added this code since I was getting the exception.
		// Trying to figure out how to avoid this exception
		return DataContext.createDataContext();
	}
    }



Thanks,
Rich


   


On 2/14/13 8:24 AM, "John Huss" <johnthuss@gmail.com> wrote:

>Try:
>
>parentObject = myNewContext.localObject(parentObject);
>
>Then proceed with the rest.  Then both objects will be in the same
>ObjectContext.
>
>
>On Thu, Feb 14, 2013 at 9:08 AM, Rich Tuers <rtuers@oildex.com> wrote:
>
>> >Hello,
>> >
>> >We are using Cayenne 3.0 and recently implemented the
>> >WebApplicationContextFilter and we are using
>> >BaseContext.getThreadObjectContext().
>> >
>> >This is working great for our JSF Web Application.  However we
>>introduced
>> >Apache Camel into our tech stack.  Our Front-End Web Application post a
>> >message to a queue that our backend picks up, processes the request and
>> >then puts the return results back on a queue which the front end is
>> >listening too.  When the Front-End receives the information I then want
>> >to insert new records into the database.  Therefore I try to get a
>> >BaseContext.getThreadObjectContext() however it throws a
>> >"java.lang.IllegalStateException: Current thread has no bound
>> >ObjectContext".  So it appears the there is no ThreadLocal to attach to
>> >and we are likely outside of the WebApplicationContext.  Everything
>>works
>> >great, when I am within our JSF application flow.
>> >
>> >I've tried to catch the illegal state error and then return a
>> >DataContext.createDataContext().   Unfortunately this did not work
>> >either, I get an error saying something like "the object is not part of
>> >this DataContext".  So I already have the parent object from the
>>original
>> >request, I then use camel to send a request to the back-end, which
>> >returns me data that I need to create the children.  I try setting the
>> >parent on the child and I get this error.
>> >
>> >So I'm not sure what to try next.  Any suggestions would be greatly
>> >appreciated.
>> >
>> >Thank you,
>> >Rich
>>
>>


Mime
View raw message