为了拥有自定义会话存储,我实现了一个自定义sessionManager(通过扩展NoSqlSessionManager
)和sessionIdManager。我的代码(以及它需要的jar)进入${jetty.home}/lib/ext
(版本8.1.4 BTW)。使用start.ini
我包含了另一个包含以下内容的配置文件:
<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启动,sessionIdManager似乎正在运行。至少调用scavenge()
方法。到现在为止还挺好。下一步是将我的自定义sessionManager与我选择的WebAppContext
相关联。我在叠加模板(overlay.xml
)中完成了以下内容:
<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>
然而,当启动Jetty时,我得到了这个:
WARN:oejx.XmlConfiguration:Config error at <Get id="customIdMgr" name="sessionIdManager"/> java.lang.NullPointerException
...这意味着在处理叠加层时,主jetty配置中注册的对象现在已经消失。
知道我在这里做错了吗?
答案 0 :(得分:2)
经过大量的调试后,问题的根源是<Get name="server">
返回null。最有可能引用Server类的是很久以后在部署过程中注入WebAppContext。因此,不是让服务器i用<Ref id="Server">
引用它,而是诀窍。