Para ter um armazenamento de sessão personalizado, implementei um sessionManager personalizado (estendendo NoSqlSessionManager
) e sessionIdManager. Meu código (junto com os frascos que ele requer) entrou em ${jetty.home}/lib/ext
(versão 8.1.4 BTW). Com start.ini
Eu incluí outro arquivo de configuração com o seguinte conteúdo:
<Configure id="Server" class="org.eclipse.jetty.server.Server">
<Set name="sessionIdManager">
<New id="customIdMgr" class="com.me.customSessionIdManager">
<Arg>...</Arg>
</New>
</Set>
</Configure>
O Jetty é iniciado e o sessionIdManager parece estar funcionando. Finalmente scavenge()
método está sendo chamado. Por enquanto, tudo bem. O próximo passo é associar meu sessionManager personalizado ao WebAppContext
da minha escolha. Eu fiz isso dentro do modelo de sobreposição (overlay.xml
) com o seguinte conteúdo:
<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>
No entanto, ao iniciar o Jetty, recebo isto:
WARN:oejx.XmlConfiguration:Config error at <Get id="customIdMgr" name="sessionIdManager"/> java.lang.NullPointerException
... o que implica que o objeto que foi registrado na configuração principal do jetty agora desapareceu quando as sobreposições são processadas.
Alguma ideia do que estou fazendo errado aqui?
Respostas:
2 para resposta № 1Depois de muita depuração, a raiz do problema é <Get name="server">
retorna null. A referência mais provável à classe Server é injetada no WebAppContext muito mais tarde no processo de implantação. Então, ao invés de obter o Server i referenciá-lo com <Ref id="Server">
e isso fez o truque.