annotate src/luan/modules/http/LuanDomainHandler.java @ 1400:221eedb0f54e

fix inner class gc bug
author Franklin Schmidt <fschmidt@gmail.com>
date Fri, 13 Sep 2019 05:05:51 -0600
parents d8754a50adf1
children 27efb1fcbcb5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1315
5763597ca5c0 add DomainHandler
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
1 package luan.modules.http;
5763597ca5c0 add DomainHandler
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
2
1347
643cf1c37723 move webserver to lib and bug fixes
Franklin Schmidt <fschmidt@gmail.com>
parents: 1336
diff changeset
3 import luan.lib.webserver.Request;
643cf1c37723 move webserver to lib and bug fixes
Franklin Schmidt <fschmidt@gmail.com>
parents: 1336
diff changeset
4 import luan.lib.webserver.Response;
643cf1c37723 move webserver to lib and bug fixes
Franklin Schmidt <fschmidt@gmail.com>
parents: 1336
diff changeset
5 import luan.lib.webserver.Handler;
643cf1c37723 move webserver to lib and bug fixes
Franklin Schmidt <fschmidt@gmail.com>
parents: 1336
diff changeset
6 import luan.lib.webserver.handlers.DomainHandler;
1333
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1332
diff changeset
7 import luan.Luan;
1315
5763597ca5c0 add DomainHandler
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
8 import luan.LuanTable;
5763597ca5c0 add DomainHandler
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
9 import luan.LuanCloner;
1350
d8754a50adf1 better reset_luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 1347
diff changeset
10 import luan.LuanFunction;
1315
5763597ca5c0 add DomainHandler
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
11 import luan.LuanException;
1332
11b7e11f9ed5 cleaner logging
Franklin Schmidt <fschmidt@gmail.com>
parents: 1329
diff changeset
12 import luan.modules.logging.Log4j;
1315
5763597ca5c0 add DomainHandler
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
13
5763597ca5c0 add DomainHandler
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
14
1329
5a39b006acd1 make LuanDomainHandler flexible
Franklin Schmidt <fschmidt@gmail.com>
parents: 1328
diff changeset
15 public class LuanDomainHandler implements Handler, DomainHandler.Factory {
1315
5763597ca5c0 add DomainHandler
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
16
1333
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1332
diff changeset
17 private final Luan luanInit;
1329
5a39b006acd1 make LuanDomainHandler flexible
Franklin Schmidt <fschmidt@gmail.com>
parents: 1328
diff changeset
18 private final DomainHandler domainHandler = new DomainHandler(this);
1315
5763597ca5c0 add DomainHandler
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
19
1333
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1332
diff changeset
20 public LuanDomainHandler(Luan luanInit) {
1315
5763597ca5c0 add DomainHandler
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
21 LuanCloner cloner = new LuanCloner(LuanCloner.Type.COMPLETE);
1333
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1332
diff changeset
22 this.luanInit = (Luan)cloner.clone(luanInit);
1315
5763597ca5c0 add DomainHandler
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
23 }
5763597ca5c0 add DomainHandler
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
24
1329
5a39b006acd1 make LuanDomainHandler flexible
Franklin Schmidt <fschmidt@gmail.com>
parents: 1328
diff changeset
25 @Override public Handler newHandler(String domain) {
1333
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1332
diff changeset
26 Luan luan = newLuan(domain);
1400
221eedb0f54e fix inner class gc bug
Franklin Schmidt <fschmidt@gmail.com>
parents: 1350
diff changeset
27 return new LuanHandler(luan,domain);
1329
5a39b006acd1 make LuanDomainHandler flexible
Franklin Schmidt <fschmidt@gmail.com>
parents: 1328
diff changeset
28 }
5a39b006acd1 make LuanDomainHandler flexible
Franklin Schmidt <fschmidt@gmail.com>
parents: 1328
diff changeset
29
1336
7483108154bb minor logging
Franklin Schmidt <fschmidt@gmail.com>
parents: 1333
diff changeset
30 protected void newLoggerRepository(Luan luan) {
1332
11b7e11f9ed5 cleaner logging
Franklin Schmidt <fschmidt@gmail.com>
parents: 1329
diff changeset
31 Log4j.newLoggerRepository(luan);
11b7e11f9ed5 cleaner logging
Franklin Schmidt <fschmidt@gmail.com>
parents: 1329
diff changeset
32 }
11b7e11f9ed5 cleaner logging
Franklin Schmidt <fschmidt@gmail.com>
parents: 1329
diff changeset
33
1350
d8754a50adf1 better reset_luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 1347
diff changeset
34 protected Luan newLuan(final String domain) {
1329
5a39b006acd1 make LuanDomainHandler flexible
Franklin Schmidt <fschmidt@gmail.com>
parents: 1328
diff changeset
35 LuanCloner cloner = new LuanCloner(LuanCloner.Type.COMPLETE);
1333
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1332
diff changeset
36 Luan luan = (Luan)cloner.clone(luanInit);
1336
7483108154bb minor logging
Franklin Schmidt <fschmidt@gmail.com>
parents: 1333
diff changeset
37 newLoggerRepository(luan);
1350
d8754a50adf1 better reset_luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 1347
diff changeset
38 LuanFunction reset_luan = new LuanFunction(false) {
d8754a50adf1 better reset_luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 1347
diff changeset
39 @Override public Object call(Object[] args) {
d8754a50adf1 better reset_luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 1347
diff changeset
40 domainHandler.removeHandler(domain);
d8754a50adf1 better reset_luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 1347
diff changeset
41 return LuanFunction.NOTHING;
d8754a50adf1 better reset_luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 1347
diff changeset
42 }
d8754a50adf1 better reset_luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 1347
diff changeset
43 };
1328
55b8210b4ec0 add MDC host
Franklin Schmidt <fschmidt@gmail.com>
parents: 1321
diff changeset
44 try {
1329
5a39b006acd1 make LuanDomainHandler flexible
Franklin Schmidt <fschmidt@gmail.com>
parents: 1328
diff changeset
45 LuanTable Http = (LuanTable)luan.require("luan:http/Http.luan");
5a39b006acd1 make LuanDomainHandler flexible
Franklin Schmidt <fschmidt@gmail.com>
parents: 1328
diff changeset
46 Http.put( "domain", domain );
1350
d8754a50adf1 better reset_luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 1347
diff changeset
47 Http.put( "reset_luan", reset_luan );
1329
5a39b006acd1 make LuanDomainHandler flexible
Franklin Schmidt <fschmidt@gmail.com>
parents: 1328
diff changeset
48 } catch(LuanException e) {
5a39b006acd1 make LuanDomainHandler flexible
Franklin Schmidt <fschmidt@gmail.com>
parents: 1328
diff changeset
49 throw new RuntimeException(e);
1328
55b8210b4ec0 add MDC host
Franklin Schmidt <fschmidt@gmail.com>
parents: 1321
diff changeset
50 }
1329
5a39b006acd1 make LuanDomainHandler flexible
Franklin Schmidt <fschmidt@gmail.com>
parents: 1328
diff changeset
51 return luan;
5a39b006acd1 make LuanDomainHandler flexible
Franklin Schmidt <fschmidt@gmail.com>
parents: 1328
diff changeset
52 }
5a39b006acd1 make LuanDomainHandler flexible
Franklin Schmidt <fschmidt@gmail.com>
parents: 1328
diff changeset
53
5a39b006acd1 make LuanDomainHandler flexible
Franklin Schmidt <fschmidt@gmail.com>
parents: 1328
diff changeset
54 @Override public Response handle(Request request) {
5a39b006acd1 make LuanDomainHandler flexible
Franklin Schmidt <fschmidt@gmail.com>
parents: 1328
diff changeset
55 return domainHandler.handle(request);
1315
5763597ca5c0 add DomainHandler
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
56 }
5763597ca5c0 add DomainHandler
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
57 }