Andrus,
Yes, it is coming from BaseContext.attachToRuntimeIfNeeded(). It appears
that turning off session serialization works. The fact that it sometimes
worked under Tomcat makes it a bit harder to test that the fix is good.
I was able to adapt the previous project to get it working. So
ValueEncoder<Persistent> is implemented and working. We even somehow
have a different app with the same versions of everything working on the
same Tomcat instance where this one was failing. The session bit should
be the last part to make this consistent.
Thanks,
Richard
On 6/24/22 02: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 <rfrov...@apache.org> 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