cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From John Huss <johnth...@gmail.com>
Subject Re: BaseContext
Date Thu, 14 Feb 2013 15:47:11 GMT
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 <rtuers@oildex.com> 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" <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
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message