X-Git-Url: http://git.dolda2000.com/gitweb/?a=blobdiff_plain;f=src%2Fdolda%2Fjsvc%2Futil%2FPerSession.java;h=0bb1ab03f0dbb63d8acb832d6c6f9498b2db2b7e;hb=0fc245dfd4f7bb5f5c3ffbdfe0b1df37430ddc1d;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..0bb1ab0 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 Destroyable) { + final Destroyable cr = (Destroyable)resp; + sess.listen(new Session.Listener() { + public void destroy(Session sess) { + cr.destroy(); + } + }); + } } } resp.respond(req);