comparison src/luan/modules/http/LuanHandler.java @ 1454:219f2b937f2b

remove log4j
author Franklin Schmidt <fschmidt@gmail.com>
date Sun, 08 Mar 2020 14:11:30 -0600
parents 56fb5cd8228d
children b89212fd04b5
comparison
equal deleted inserted replaced
1453:928be2a4d565 1454:219f2b937f2b
33 import luan.modules.BasicLuan; 33 import luan.modules.BasicLuan;
34 import luan.modules.logging.LuanLogger; 34 import luan.modules.logging.LuanLogger;
35 35
36 36
37 public final class LuanHandler implements Handler, Closeable { 37 public final class LuanHandler implements Handler, Closeable {
38 private static final Logger sysLogger = LoggerFactory.getLogger(LuanHandler.class); 38 private static final Logger logger = LoggerFactory.getLogger(LuanHandler.class);
39 39
40 private static final Set<LuanHandler> dontGc = Collections.newSetFromMap(new ConcurrentHashMap<LuanHandler,Boolean>()); 40 private static final Set<LuanHandler> dontGc = Collections.newSetFromMap(new ConcurrentHashMap<LuanHandler,Boolean>());
41 41
42 private final Luan luanInit; 42 private final Luan luanInit;
43 private final String domain; 43 private final String domain;
44 private final Logger luanLogger;
45 private final ReadWriteLock rwLock = new ReentrantReadWriteLock(); 44 private final ReadWriteLock rwLock = new ReentrantReadWriteLock();
46 private volatile Luan currentLuan; 45 private volatile Luan currentLuan;
47 private volatile boolean isDisabled = false; 46 private volatile boolean isDisabled = false;
48 47
49 private static final Method resetLuanMethod; 48 private static final Method resetLuanMethod;
62 } 61 }
63 62
64 public LuanHandler(Luan luanInit,String domain) { 63 public LuanHandler(Luan luanInit,String domain) {
65 this.luanInit = luanInit; 64 this.luanInit = luanInit;
66 this.domain = domain; 65 this.domain = domain;
67 this.luanLogger = luanInit.getLogger(LuanHandler.class);
68 try { 66 try {
69 Fns fns = new Fns(this); 67 Fns fns = new Fns(this);
70 LuanTable Http = (LuanTable)luanInit.require("luan:http/Http.luan"); 68 LuanTable Http = (LuanTable)luanInit.require("luan:http/Http.luan");
71 if( Http.get("reset_luan") == null ) 69 if( Http.get("reset_luan") == null )
72 Http.put( "reset_luan", new LuanJavaFunction(luanInit,resetLuanMethod,fns) ); 70 Http.put( "reset_luan", new LuanJavaFunction(luanInit,resetLuanMethod,fns) );
75 Http.put( "dont_gc", new LuanJavaFunction(luanInit,dontGcMethod,fns) ); 73 Http.put( "dont_gc", new LuanJavaFunction(luanInit,dontGcMethod,fns) );
76 } catch(LuanException e) { 74 } catch(LuanException e) {
77 throw new RuntimeException(e); 75 throw new RuntimeException(e);
78 } 76 }
79 if( domain != null ) 77 if( domain != null )
80 sysLogger.info("new "+domain); 78 logger.info("new "+domain);
81 currentLuan = newLuan(); 79 currentLuan = newLuan();
82 } 80 }
83 81
84 protected void finalize() throws Throwable { 82 protected void finalize() throws Throwable {
85 if( domain != null ) 83 if( domain != null )
86 sysLogger.info("gc "+domain); 84 logger.info("gc "+domain);
87 } 85 }
88 86
89 private Luan newLuan() { 87 private Luan newLuan() {
90 Luan luan; 88 Luan luan;
91 synchronized(luanInit) { 89 synchronized(luanInit) {
92 LuanCloner cloner = new LuanCloner(LuanCloner.Type.COMPLETE); 90 LuanCloner cloner = new LuanCloner(LuanCloner.Type.COMPLETE);
93 luan = (Luan)cloner.clone(luanInit); 91 luan = (Luan)cloner.clone(luanInit);
94 } 92 }
93 LuanLogger.startThreadLogging(luan);
95 try { 94 try {
96 PackageLuan.load(luan,"site:/init.luan"); 95 PackageLuan.load(luan,"site:/init.luan");
97 } catch(LuanException e) { 96 } catch(LuanException e) {
98 //e.printStackTrace(); 97 //e.printStackTrace();
99 String err = e.getLuanStackTraceString(); 98 String err = e.getLuanStackTraceString();
100 luanLogger.error(err); 99 logger.error(err);
100 } finally {
101 LuanLogger.endThreadLogging();
101 } 102 }
102 return luan; 103 return luan;
103 } 104 }
104 105
105 /*
106 public Luan getLuan() {
107 return luan;
108 }
109 */
110 static final String NOT_FOUND = "luan-not-found"; 106 static final String NOT_FOUND = "luan-not-found";
111 107
112 @Override public Response handle(Request request) { 108 @Override public Response handle(Request request) {
113 if( isDisabled ) 109 if( isDisabled )
114 return null; 110 return null;
120 private Response handle(Request request,boolean notFound) { 116 private Response handle(Request request,boolean notFound) {
121 Thread thread = Thread.currentThread(); 117 Thread thread = Thread.currentThread();
122 String oldName = thread.getName(); 118 String oldName = thread.getName();
123 thread.setName(request.headers.get("host")+request.path); 119 thread.setName(request.headers.get("host")+request.path);
124 rwLock.readLock().lock(); 120 rwLock.readLock().lock();
121 LuanLogger.startThreadLogging(currentLuan);
125 try { 122 try {
126 return service(request,notFound); 123 return service(request,notFound);
127 } catch(LuanException e) { 124 } catch(LuanException e) {
128 String err = e.getLuanStackTraceString(); 125 String err = e.getLuanStackTraceString();
129 luanLogger.error(err+"\n"+request.rawHead.trim()+"\n"); 126 logger.error(err+"\n"+request.rawHead.trim()+"\n");
130 String msg = "Internel Server Error\n\n" + err; 127 String msg = "Internel Server Error\n\n" + err;
131 return Response.errorResponse( Status.INTERNAL_SERVER_ERROR, msg ); 128 return Response.errorResponse( Status.INTERNAL_SERVER_ERROR, msg );
132 } finally { 129 } finally {
130 LuanLogger.endThreadLogging();
133 rwLock.readLock().unlock(); 131 rwLock.readLock().unlock();
134 thread.setName(oldName); 132 thread.setName(oldName);
135 } 133 }
136 } 134 }
137 135
138 public void close() { 136 public void close() {
139 Object obj = dontGc.remove(this); 137 Object obj = dontGc.remove(this);
140 //sysLogger.info("close "+domain+" "+(obj!=null)); 138 //logger.info("close "+domain+" "+(obj!=null));
141 } 139 }
142 140
143 public Object call_rpc(String fnName,Object... args) throws LuanException { 141 public Object call_rpc(String fnName,Object... args) throws LuanException {
144 rwLock.readLock().lock(); 142 rwLock.readLock().lock();
143 LuanLogger.startThreadLogging(currentLuan);
145 try { 144 try {
146 LuanFunction fn; 145 LuanFunction fn;
147 synchronized(luanInit) { 146 synchronized(luanInit) {
148 enableLoad("luan:Rpc.luan"); 147 enableLoad("luan:Rpc.luan");
149 LuanTable rpc = (LuanTable)currentLuan.require("luan:Rpc.luan"); 148 LuanTable rpc = (LuanTable)currentLuan.require("luan:Rpc.luan");
154 LuanCloner cloner = new LuanCloner(LuanCloner.Type.INCREMENTAL); 153 LuanCloner cloner = new LuanCloner(LuanCloner.Type.INCREMENTAL);
155 fn = (LuanFunction)cloner.get(fn); 154 fn = (LuanFunction)cloner.get(fn);
156 } 155 }
157 return fn.call(args); 156 return fn.call(args);
158 } finally { 157 } finally {
158 LuanLogger.endThreadLogging();
159 rwLock.readLock().unlock(); 159 rwLock.readLock().unlock();
160 } 160 }
161 } 161 }
162 162
163 public static void start(Server server) throws Exception { 163 public static void start(Server server) throws Exception {
194 currentLuan = luan; 194 currentLuan = luan;
195 } 195 }
196 196
197 private void dont_gc() { 197 private void dont_gc() {
198 dontGc.add(this); 198 dontGc.add(this);
199 //sysLogger.info("dont_gc "+domain); 199 //logger.info("dont_gc "+domain);
200 } 200 }
201 201
202 public static final class Fns { 202 public static final class Fns {
203 private final Reference<LuanHandler> ref; 203 private final Reference<LuanHandler> ref;
204 204