Reputation: 1076
In order to have custom session storage I have implemented a custom sessionManager (by extending NoSqlSessionManager
) and sessionIdManager. My code (along with jars it requires) went into ${jetty.home}/lib/ext
(version 8.1.4 BTW). With start.ini
i included another config file with following content:
<Configure id="Server" class="org.eclipse.jetty.server.Server">
<Set name="sessionIdManager">
<New id="customIdMgr" class="com.me.customSessionIdManager">
<Arg>...</Arg>
</New>
</Set>
</Configure>
Jetty starts and sessionIdManager appears to be working. At least scavenge()
method is being called. So far so good. Next step is to associate my custom sessionManager with the WebAppContext
of my choice. I did it within the overlay template (overlay.xml
) with following content:
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
<Get name="server">
<Get id="customIdMgr" name="sessionIdManager"/>
</Get>
<Set name="sessionHandler">
<New class="org.eclipse.jetty.server.session.SessionHandler">
<Arg>
<New class="com.me.customSessionManager">
<Set name="sessionIdManager"><Ref id="customIdMgr"/></Set>
</New>
</Arg>
</New>
</Set>
</Configure>
However when starting Jetty I get this:
WARN:oejx.XmlConfiguration:Config error at <Get id="customIdMgr" name="sessionIdManager"/> java.lang.NullPointerException
...which implies that the object that was registered in the main jetty configuration is now gone when overlays are processed.
Any idea what I'm doing wrong here?
Upvotes: 2
Views: 2391
Reputation: 1076
After quite a lot of debugging it turns out, the root of the problem is <Get name="server">
returns null. Most probably reference to Server class is injected into WebAppContext much later in the deployment process. So instead of getting Server i referenced it with <Ref id="Server">
and that did the trick.
Upvotes: 2