2

カスタムセッションストレージを使用するために、(拡張してNoSqlSessionManager)カスタムsessionManagerと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

...これは、オーバーレイが処理されるときに、メインの桟橋構成に登録されていたオブジェクトがなくなったことを意味します。

私がここで間違っていることについて何か考えはありますか?

4

1 に答える 1

2

<Get name="server">かなり多くのデバッグを行った後、問題の根本は null を返すことであることが判明しました。ほとんどの場合、Server クラスへの参照は、デプロイ プロセスのずっと後の段階で WebAppContext に挿入されます。したがって、サーバーを取得する代わりに、それを参照して、それで<Ref id="Server">うまくいきました。

于 2012-08-24T16:30:47.573 に答える