]> git.dolda2000.com Git - jsvc.git/blobdiff - src/dolda/jsvc/util/PerSession.java
Upon session expiration, call destroy() on ContextResponders from PerSession.
[jsvc.git] / src / dolda / jsvc / util / PerSession.java
index 7973e0ab78553e4952fcccb5d365dbb0fd1b1791..deec82250948ef491b948fd89cb62a2af478980a 100644 (file)
@@ -19,11 +19,11 @@ public class PerSession implements Responder {
     private Object makedata(Session sess) {
        try {
            try {
-               return(dcl.getConstructor().newInstance());
+               return(dcl.getConstructor(Session.class).newInstance(sess));
            } catch(NoSuchMethodException e) {
            }
            try {
-               return(dcl.getConstructor(Session.class).newInstance(sess));
+               return(dcl.getConstructor().newInstance());
            } catch(NoSuchMethodException e) {
            }
        } catch(InstantiationException e) {
@@ -93,6 +93,14 @@ public class PerSession implements Responder {
            if(resp == null) {
                resp = create(sess);
                sess.put(rcl, resp);
+               if(resp instanceof ContextResponder) {
+                   final ContextResponder cr = (ContextResponder)resp;
+                   sess.listen(new Session.Listener() {
+                           public void expire(Session sess) {
+                               cr.destroy();
+                           }
+                       });
+               }
            }
        }
        resp.respond(req);