2017-09-20 4 views
1

Après la mise à niveau vers la jetée 9.4, je remarque une exception ClassNotFoundException pour org.eclipse.jetty.server.session.HashSessionManager. Je pense que je dois utiliser un FileSessionDataStore mais je ne vois pas comment cela est supposé être mis sur un SessionHandler.Mise à niveau vers la jetée 9.4 remplacement du HashSessionManager

La configuration que j'ai actuellement est:

<Configure class="org.eclipse.jetty.webapp.WebAppContext"> 
    ... 
    <Set name="sessionHandler"> 
     <New class="org.eclipse.jetty.server.session.SessionHandler"> 
      <Arg> 
       <New class="org.eclipse.jetty.server.session.HashSessionManager"> 
        <Set name="storeDirectory">my/store/path</Set> 
       </New> 
      </Arg> 
     </New> 
    </Set> 
</Configure> 

Je ne vois pas ce que je dois faire, SessionHandler ne prend pas SessionDataStore, mais un SessionCache peut être réglée sur elle, mais il semble que les implémentations de SessionCache veulent un SessionHandler dans le constructeur, je ne vois pas comment faire cela en XML.

Répondre

5

Dans l'architecture de session jetée-9.4, vous avez SessionHandler prend un SessionCache, qui prend en option un SessionDataStore. Voir OneServletContextWithSession pour un exemple de programmation.

Cet exemple utilise le NullSessionDataStore, mais le principe est le même que le FileSessionDataStore, qui remplace l'ancienne capacité HashSessionManager pour stocker des sessions sur le disque.

La documentation de la jetée contient des informations on changes from previous versions of Jetty session management to the 9.4 style. Si vous suivez des liens dans la documentation, vous trouverez également des informations détaillées sur la nouvelle architecture de session. Comme la documentation l'explique, la manière la plus simple de configurer des sessions dans jetty-9.4 lors de l'exécution de la distribution est d'activer le module approprié. Toutefois, si vous utilisez embedded, ou vous voulez simplement de mettre en place la gestion de session pour une webapp particulière en XML, voici quelques exemples de code de mise en place du FileSessionDataStore:

<Get id="sh" name="sessionHandler"> 
    <Set name="sessionCache"> 
     <New class="org.eclipse.jetty.server.session.DefaultSessionCache"> 
      <Arg><Ref id="sh"/></Arg> 
      <Set name="sessionDataStore"> 
      <New class="org.eclipse.jetty.server.session.FileSessionDataStore"> 
       <Set name="storeDir">/tmp/sessions</Set> 
      </New> 
      </Set> 
     </New> 
    </Set> 
</Get> 
1

Ah, je crois que je travaillais dehors, il est à peu il a fini comme:

<Set name="sessionHandler"> 
    <New class="org.eclipse.jetty.server.session.SessionHandler"> 
    </New> 
</Set> 

<Call name="getSessionHandler" id="sessionHandler" /> 

<Ref refid="sessionHandler"> 
    <Set name="SessionCache">  
     <New class="org.eclipse.jetty.server.session.DefaultSessionCache"> 
      <Arg> 
       <Ref refid="sessionHandler"/> 
      </Arg> 
      <Set name="SessionDataStore"> 
       <New class="org.eclipse.jetty.server.session.FileSessionDataStore"> 
         <Set name="StoreDir">my/store/path</Set> 
       </New> 
      </Set> 
     </New> 
    </Set> 
</Ref> 

J'ai suivi le plus facile à lire pur exemple java j'ai trouvé à http://useof.org/java-open-source/org.eclipse.jetty.server.session.FileSessionDataStore

Si cela ne Je suis heureux d'éditer la réponse afin de ne pas tromper les autres.