Jetty和自定义sessionIdManager

时间:2012-08-23 08:57:49

标签: java jetty session-management

为了拥有自定义会话存储,我实现了一个自定义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配置中注册的对象现在已经消失。

知道我在这里做错了吗?

1 个答案:

答案 0 :(得分:2)

经过大量的调试后,问题的根源是<Get name="server">返回null。最有可能引用Server类的是很久以后在部署过程中注入WebAppContext。因此,不是让服务器i用<Ref id="Server">引用它,而是诀窍。