Thank you. Just tried this and it works great.  Thanks again.



On 2/14/13 8:47 AM, "John Huss" <[email protected]> wrote:

>You have to bind a context to the thread:
>http://cayenne.apache.org/docs/3.0/api/org/apache/cayenne/BaseContext.html
>#bindThreadObjectContext(org.apache.cayenne.ObjectContext)
>
>Usually this is done by WebApplicationContextFilter.  But if you thread
>isn't associated with a request or isn't covered by the filter then you
>need to create and context and bind it yourself.  Also remember to unbind
>at some point as well.
>
>
>On Thu, Feb 14, 2013 at 9:40 AM, Rich Tuers <[email protected]> wrote:
>
>> 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" <[email protected]> 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 <[email protected]> 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
>> >>
>> >>
>>
>>

Reply via email to