Re: Missing Injector inconsistently

D Tim Cummings <[email protected]> Sat, 25 Jun 2022 17:33:06 +1000
Newsgroups gmane.comp.java.cayenne.user
Message-ID <[email protected]>
Thanks Andrus. This helps me too. I was clearing the folder 
/var/lib/tomcat9/work/Catalina/localhost after stopping tomcat and 
before starting it again to avoid the error. This hint is worthy of 
being part of the documentation.

Tim

On 24/6/22 17:54, Andrus Adamchik wrote:
> Hi Richard,
>
> I assume the exception happens within BaseContext.attachToRuntimeIfNeeded(). This whole business of attaching to runtime is a hack for auto-deserialization of the context in certain environments. Tomcat does HttpSession serialization for the purpose of session clustering (and addressing restarts). Jetty does not. IMO clustering of Java sessions is a losing battle, and doesn't scale well anyways. I'd recommend to just turn it off [1].
>
> There may be more steps to integrating Cayenne and Tapestry (such as implementing ValueEncoder<Persistent>), but not having to deal with serialized sessions is definitely step #1 :)
>
> Andrus
>
> [1] https://tomcat.apache.org/tomcat-8.5-doc/config/manager.html#Disable_Session_Persistence
>
>
>> On Jun 23, 2022, at 11:41 PM, Richard Frovarp <[email protected]> wrote:
>>
>> I'm using Cayenne 4.1 in the integration I took over to make it just work with Apache Tapestry. I'm getting:
>>
>> Can't attach to Cayenne runtime. Null injector returned from CayenneRuntime.getThreadInjector()
>>
>> The really confusing part is that it works just fine in Jetty, and it sometimes works in Tomcat. With one project it usually doesn't work in Tomcat, and in another it appears to work just fine.
>>
>> So I'm really confused as to what is going on. Watching through an attached debugger, I don't see why it is or isn't using a runtime that already has the injector provided. The integration was created by more talented people than me for Cayenne 3.0, and I see this injector stuff is starting from 3.1. So I'm probably missing something.
>>
>> I saw a previous post to the list talking about adding a filter, but that doesn't seem to match what I need here. I probably do need to change the service that is creating the contexts to always setup an injector??
>>
>> Any pointers are appreciated.
>>
>> Richard