X-Git-Url: http://dolda2000.com/gitweb/?a=blobdiff_plain;f=src%2Fdolda%2Fjsvc%2Futil%2FPerSession.java;h=562e2c9618ae878ea3580b32b59780a9fe5d143b;hb=4126b9f4cd5367a198678f08508880b4a38aad1f;hp=7973e0ab78553e4952fcccb5d365dbb0fd1b1791;hpb=c04f28ae77d5a372eb4afd0296c12014fdbcf96e;p=jsvc.git diff --git a/src/dolda/jsvc/util/PerSession.java b/src/dolda/jsvc/util/PerSession.java index 7973e0a..562e2c9 100644 --- a/src/dolda/jsvc/util/PerSession.java +++ b/src/dolda/jsvc/util/PerSession.java @@ -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) { @@ -88,11 +88,19 @@ public class PerSession implements Responder { public void respond(Request req) { Session sess = Session.get(req); Responder resp; - synchronized(sess) { + synchronized(this) { resp = (Responder)sess.get(rcl, null); 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 destroy(Session sess) { + cr.destroy(); + } + }); + } } } resp.respond(req);