comparison src/luan/modules/http/jetty/HttpServicer.java @ 1159:3ef883468fd0

remove Http.per_session_pages fix clone closure bug replace Thread.global with Thread.global_callable()
author Franklin Schmidt <fschmidt@gmail.com>
date Mon, 05 Feb 2018 12:37:59 -0700
parents bbad9a21277c
children
comparison
equal deleted inserted replaced
1158:267fdf5e9fbd 1159:3ef883468fd0
16 import javax.servlet.ServletOutputStream; 16 import javax.servlet.ServletOutputStream;
17 import javax.servlet.ServletException; 17 import javax.servlet.ServletException;
18 import javax.servlet.http.Cookie; 18 import javax.servlet.http.Cookie;
19 import javax.servlet.http.HttpServletRequest; 19 import javax.servlet.http.HttpServletRequest;
20 import javax.servlet.http.HttpServletResponse; 20 import javax.servlet.http.HttpServletResponse;
21 import javax.servlet.http.HttpSession;
22 import javax.servlet.http.Part; 21 import javax.servlet.http.Part;
23 import org.slf4j.Logger; 22 import org.slf4j.Logger;
24 import org.slf4j.LoggerFactory; 23 import org.slf4j.LoggerFactory;
25 import org.eclipse.jetty.util.MultiPartInputStream; 24 import org.eclipse.jetty.util.MultiPartInputStream;
26 import luan.Luan; 25 import luan.Luan;
44 { 43 {
45 LuanFunction fn; 44 LuanFunction fn;
46 synchronized(luan) { 45 synchronized(luan) {
47 PackageLuan.enableLoad(luan,"luan:http/Http.luan",modName); 46 PackageLuan.enableLoad(luan,"luan:http/Http.luan",modName);
48 LuanTable module = (LuanTable)PackageLuan.require(luan,"luan:http/Http.luan"); 47 LuanTable module = (LuanTable)PackageLuan.require(luan,"luan:http/Http.luan");
49 LuanTable per_session_pages = (LuanTable)module.rawGet("per_session_pages");
50 Object mod = PackageLuan.load(luan,modName); 48 Object mod = PackageLuan.load(luan,modName);
51 if( mod.equals(Boolean.FALSE) ) 49 if( mod.equals(Boolean.FALSE) )
52 return false; 50 return false;
53 if( !(mod instanceof LuanFunction) ) 51 if( !(mod instanceof LuanFunction) )
54 throw new LuanException( "module '"+modName+"' must return a function" ); 52 throw new LuanException( "module '"+modName+"' must return a function" );
55 if( Boolean.TRUE.equals(per_session_pages.rawGet(mod)) ) { 53 LuanCloner cloner = new LuanCloner(LuanCloner.Type.INCREMENTAL);
56 HttpSession session = request.getSession(); 54 luan = (LuanState)cloner.clone(luan);
57 LuanState sessionLuan = (LuanState)session.getAttribute("luan"); 55 fn = (LuanFunction)cloner.get(mod);
58 if( sessionLuan!=null ) {
59 luan = sessionLuan;
60 } else {
61 LuanCloner cloner = new LuanCloner(LuanCloner.Type.COMPLETE);
62 luan = (LuanState)cloner.clone(luan);
63 session.setAttribute("luan",luan);
64 }
65 fn = (LuanFunction)PackageLuan.require(luan,modName);
66 } else {
67 LuanCloner cloner = new LuanCloner(LuanCloner.Type.INCREMENTAL);
68 luan = (LuanState)cloner.clone(luan);
69 fn = (LuanFunction)cloner.get(mod);
70 }
71 } 56 }
72 57
73 LuanTable module = (LuanTable)PackageLuan.require(luan,"luan:http/Http.luan"); 58 LuanTable module = (LuanTable)PackageLuan.require(luan,"luan:http/Http.luan");
74 59
75 // request 60 // request