Mercurial Hosting > luan
annotate src/luan/modules/http/LuanHandler.java @ 1004:3fa54d9d19cd
better handling of BindException
| author | Franklin Schmidt <fschmidt@gmail.com> |
|---|---|
| date | Sat, 22 Oct 2016 23:00:57 -0600 |
| parents | 32d4b569567c |
| children | 0d884377e923 |
| rev | line source |
|---|---|
|
494
2b9bc97f0439
change luan:web to luan:http
Franklin Schmidt <fschmidt@gmail.com>
parents:
493
diff
changeset
|
1 package luan.modules.http; |
|
175
bdbd4740121f
finish web server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
2 |
|
bdbd4740121f
finish web server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
3 import java.io.IOException; |
|
786
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
4 import java.lang.reflect.Method; |
|
1004
3fa54d9d19cd
better handling of BindException
Franklin Schmidt <fschmidt@gmail.com>
parents:
1000
diff
changeset
|
5 import java.net.BindException; |
|
786
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
6 import java.util.concurrent.locks.ReadWriteLock; |
|
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
7 import java.util.concurrent.locks.ReentrantReadWriteLock; |
|
175
bdbd4740121f
finish web server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
8 import javax.servlet.http.HttpServletResponse; |
|
280
2164b4479661
log web exceptions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
264
diff
changeset
|
9 import org.slf4j.Logger; |
|
2164b4479661
log web exceptions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
264
diff
changeset
|
10 import org.slf4j.LoggerFactory; |
|
175
bdbd4740121f
finish web server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
11 import org.eclipse.jetty.server.Request; |
|
1004
3fa54d9d19cd
better handling of BindException
Franklin Schmidt <fschmidt@gmail.com>
parents:
1000
diff
changeset
|
12 import org.eclipse.jetty.server.Server; |
|
175
bdbd4740121f
finish web server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
13 import org.eclipse.jetty.server.handler.AbstractHandler; |
|
786
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
14 import luan.Luan; |
|
175
bdbd4740121f
finish web server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
15 import luan.LuanState; |
|
743
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
16 import luan.LuanTable; |
|
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
17 import luan.LuanFunction; |
|
786
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
18 import luan.LuanJavaFunction; |
|
781
fbbdd369a13a
rename DeepCloner to LuanCloner
Franklin Schmidt <fschmidt@gmail.com>
parents:
777
diff
changeset
|
19 import luan.LuanCloner; |
|
175
bdbd4740121f
finish web server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
20 import luan.LuanException; |
|
743
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
21 import luan.modules.PackageLuan; |
|
175
bdbd4740121f
finish web server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
22 |
|
bdbd4740121f
finish web server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
23 |
|
bdbd4740121f
finish web server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
24 public class LuanHandler extends AbstractHandler { |
|
786
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
25 private final LuanState luanInit; |
|
627
a98812908fbc
add loggerRoot param to LuanHandler
Franklin Schmidt <fschmidt@gmail.com>
parents:
531
diff
changeset
|
26 private final Logger logger; |
|
183
ed19d14360fa
add LuanHandler.setWelcomeFile()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
177
diff
changeset
|
27 private String welcomeFile = "index.html"; |
|
786
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
28 private final ReadWriteLock lock = new ReentrantReadWriteLock(); |
|
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
29 private LuanState luan; |
|
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
30 |
|
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
31 private static final Method resetLuanMethod; |
|
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
32 static { |
|
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
33 try { |
|
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
34 resetLuanMethod = LuanHandler.class.getMethod("reset_luan"); |
|
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
35 } catch(NoSuchMethodException e) { |
|
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
36 throw new RuntimeException(e); |
|
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
37 } |
|
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
38 } |
|
175
bdbd4740121f
finish web server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
39 |
|
627
a98812908fbc
add loggerRoot param to LuanHandler
Franklin Schmidt <fschmidt@gmail.com>
parents:
531
diff
changeset
|
40 public LuanHandler(LuanState luan,String loggerRoot) { |
|
786
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
41 this.luanInit = luan; |
|
627
a98812908fbc
add loggerRoot param to LuanHandler
Franklin Schmidt <fschmidt@gmail.com>
parents:
531
diff
changeset
|
42 if( loggerRoot==null ) |
|
a98812908fbc
add loggerRoot param to LuanHandler
Franklin Schmidt <fschmidt@gmail.com>
parents:
531
diff
changeset
|
43 loggerRoot = ""; |
|
a98812908fbc
add loggerRoot param to LuanHandler
Franklin Schmidt <fschmidt@gmail.com>
parents:
531
diff
changeset
|
44 logger = LoggerFactory.getLogger(loggerRoot+LuanHandler.class.getName()); |
|
786
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
45 try { |
|
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
46 LuanTable Http = (LuanTable)PackageLuan.require(luanInit,"luan:http/Http.luan"); |
|
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
47 Http.rawPut( "reset_luan", new LuanJavaFunction(resetLuanMethod,this) ); |
|
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
48 } catch(LuanException e) { |
|
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
49 throw new RuntimeException(e); |
|
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
50 } |
|
175
bdbd4740121f
finish web server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
51 } |
|
bdbd4740121f
finish web server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
52 |
| 1000 | 53 @Override |
| 54 public void handle(String target,Request request,HttpServletResponse response) | |
|
175
bdbd4740121f
finish web server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
55 throws IOException |
|
bdbd4740121f
finish web server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
56 { |
| 874 | 57 //Thread.dumpStack(); |
|
183
ed19d14360fa
add LuanHandler.setWelcomeFile()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
177
diff
changeset
|
58 if( target.endsWith("/") ) |
|
ed19d14360fa
add LuanHandler.setWelcomeFile()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
177
diff
changeset
|
59 target += welcomeFile; |
|
791
ca81307adf7c
set thread name in LuanHandler
Franklin Schmidt <fschmidt@gmail.com>
parents:
786
diff
changeset
|
60 Thread thread = Thread.currentThread(); |
|
ca81307adf7c
set thread name in LuanHandler
Franklin Schmidt <fschmidt@gmail.com>
parents:
786
diff
changeset
|
61 String oldName = thread.getName(); |
|
ca81307adf7c
set thread name in LuanHandler
Franklin Schmidt <fschmidt@gmail.com>
parents:
786
diff
changeset
|
62 thread.setName(request.getHeader("host")+request.getRequestURI()); |
|
786
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
63 lock.readLock().lock(); |
|
175
bdbd4740121f
finish web server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
64 try { |
|
693
ca169567ce07
module URIs must now include ".luan"
Franklin Schmidt <fschmidt@gmail.com>
parents:
627
diff
changeset
|
65 if( !HttpServicer.service(luan,request,response,"site:"+target+".luan") ) |
|
175
bdbd4740121f
finish web server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
66 return; |
|
bdbd4740121f
finish web server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
67 } catch(LuanException e) { |
|
777
1460d297e960
add bbcode to blog example
Franklin Schmidt <fschmidt@gmail.com>
parents:
775
diff
changeset
|
68 //e.printStackTrace(); |
|
531
f99c79b0b426
change LuanException.getFullMessage() to not require LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents:
521
diff
changeset
|
69 String err = e.getFullMessage(); |
|
280
2164b4479661
log web exceptions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
264
diff
changeset
|
70 logger.error(err); |
|
2164b4479661
log web exceptions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
264
diff
changeset
|
71 response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,err); |
|
786
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
72 } finally { |
|
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
73 lock.readLock().unlock(); |
|
791
ca81307adf7c
set thread name in LuanHandler
Franklin Schmidt <fschmidt@gmail.com>
parents:
786
diff
changeset
|
74 thread.setName(oldName); |
|
175
bdbd4740121f
finish web server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
75 } |
| 1000 | 76 request.setHandled(true); |
|
175
bdbd4740121f
finish web server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
77 } |
|
183
ed19d14360fa
add LuanHandler.setWelcomeFile()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
177
diff
changeset
|
78 |
|
ed19d14360fa
add LuanHandler.setWelcomeFile()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
177
diff
changeset
|
79 public void setWelcomeFile(String welcomeFile) { |
|
ed19d14360fa
add LuanHandler.setWelcomeFile()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
177
diff
changeset
|
80 this.welcomeFile = welcomeFile; |
|
ed19d14360fa
add LuanHandler.setWelcomeFile()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
177
diff
changeset
|
81 } |
|
517
8dcf9e12446b
add Luan.on_luan_close()
Franklin Schmidt <fschmidt@gmail.com>
parents:
494
diff
changeset
|
82 |
|
786
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
83 @Override protected void doStart() throws Exception { |
|
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
84 // Thread.dumpStack(); |
|
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
85 //System.out.println("qqqqqqqqqqqqqqqqqqqq doStart "+this); |
|
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
86 setLuan(); |
|
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
87 super.doStart(); |
|
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
88 } |
|
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
89 |
|
517
8dcf9e12446b
add Luan.on_luan_close()
Franklin Schmidt <fschmidt@gmail.com>
parents:
494
diff
changeset
|
90 @Override protected void doStop() throws Exception { |
|
521
8a217fe5b4f3
cleaner LuanState.onClose()
Franklin Schmidt <fschmidt@gmail.com>
parents:
517
diff
changeset
|
91 synchronized(luan) { |
|
8a217fe5b4f3
cleaner LuanState.onClose()
Franklin Schmidt <fschmidt@gmail.com>
parents:
517
diff
changeset
|
92 luan.close(); |
|
8a217fe5b4f3
cleaner LuanState.onClose()
Franklin Schmidt <fschmidt@gmail.com>
parents:
517
diff
changeset
|
93 } |
|
517
8dcf9e12446b
add Luan.on_luan_close()
Franklin Schmidt <fschmidt@gmail.com>
parents:
494
diff
changeset
|
94 //System.out.println("qqqqqqqqqqqqqqqqqqqq doStop "+this); |
|
8dcf9e12446b
add Luan.on_luan_close()
Franklin Schmidt <fschmidt@gmail.com>
parents:
494
diff
changeset
|
95 super.doStop(); |
|
8dcf9e12446b
add Luan.on_luan_close()
Franklin Schmidt <fschmidt@gmail.com>
parents:
494
diff
changeset
|
96 } |
|
8dcf9e12446b
add Luan.on_luan_close()
Franklin Schmidt <fschmidt@gmail.com>
parents:
494
diff
changeset
|
97 /* |
|
8dcf9e12446b
add Luan.on_luan_close()
Franklin Schmidt <fschmidt@gmail.com>
parents:
494
diff
changeset
|
98 @Override public void destroy() { |
|
8dcf9e12446b
add Luan.on_luan_close()
Franklin Schmidt <fschmidt@gmail.com>
parents:
494
diff
changeset
|
99 System.out.println("qqqqqqqqqqqqqqqqqqqq destroy "+this); |
|
8dcf9e12446b
add Luan.on_luan_close()
Franklin Schmidt <fschmidt@gmail.com>
parents:
494
diff
changeset
|
100 super.destroy(); |
|
8dcf9e12446b
add Luan.on_luan_close()
Franklin Schmidt <fschmidt@gmail.com>
parents:
494
diff
changeset
|
101 } |
|
8dcf9e12446b
add Luan.on_luan_close()
Franklin Schmidt <fschmidt@gmail.com>
parents:
494
diff
changeset
|
102 */ |
|
743
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
103 |
|
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
104 public Object call_rpc(String fnName,Object... args) throws LuanException { |
| 798 | 105 lock.readLock().lock(); |
| 106 try { | |
| 107 LuanFunction fn; | |
| 108 LuanState luan = this.luan; | |
| 109 synchronized(luan) { | |
| 110 PackageLuan.enableLoad(luan,"luan:Rpc.luan"); | |
| 111 LuanTable rpc = (LuanTable)PackageLuan.require(luan,"luan:Rpc.luan"); | |
| 112 LuanTable fns = (LuanTable)rpc.get(luan,"functions"); | |
| 113 fn = (LuanFunction)fns.get(luan,fnName); | |
| 114 if( fn == null ) | |
| 115 throw new LuanException( "function not found: " + fnName ); | |
| 116 LuanCloner cloner = new LuanCloner(LuanCloner.Type.INCREMENTAL); | |
| 117 luan = (LuanState)cloner.clone(luan); | |
| 118 fn = (LuanFunction)cloner.get(fn); | |
| 119 } | |
| 120 return fn.call(luan,args); | |
| 121 } finally { | |
| 122 lock.readLock().unlock(); | |
|
743
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
123 } |
|
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
124 } |
|
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
125 |
|
786
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
126 public void reset_luan() { |
|
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
127 new Thread() { |
|
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
128 public void run() { |
|
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
129 lock.writeLock().lock(); |
|
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
130 try { |
|
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
131 synchronized(luan) { |
|
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
132 luan.close(); |
|
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
133 setLuan(); |
|
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
134 } |
|
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
135 } catch(IOException e) { |
|
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
136 logger.error("reset_luan failed",e); |
|
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
137 } finally { |
|
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
138 lock.writeLock().unlock(); |
|
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
139 } |
|
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
140 } |
|
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
141 }.start(); |
|
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
142 } |
|
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
143 |
|
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
144 private void setLuan() { |
|
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
145 LuanCloner cloner = new LuanCloner(LuanCloner.Type.COMPLETE); |
|
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
146 luan = (LuanState)cloner.clone(luanInit); |
|
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
147 try { |
|
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
148 PackageLuan.load(luan,"site:/init.luan"); |
|
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
149 } catch(LuanException e) { |
|
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
150 String err = e.getFullMessage(); |
|
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
151 logger.error(err); |
|
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
152 } |
|
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
153 } |
|
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
154 |
|
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
155 public Object runLuan(String sourceText,String sourceName) throws LuanException { |
|
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
156 LuanFunction fn = Luan.load(sourceText,sourceName); |
|
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
157 synchronized(luan) { |
| 798 | 158 LuanCloner cloner = new LuanCloner(LuanCloner.Type.INCREMENTAL); |
| 159 LuanState luan = (LuanState)cloner.clone(this.luan); | |
|
786
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
160 return fn.call(luan); |
|
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
161 } |
|
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
162 } |
|
fe63c508a177
add Http.reset_luan()
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
163 |
|
1004
3fa54d9d19cd
better handling of BindException
Franklin Schmidt <fschmidt@gmail.com>
parents:
1000
diff
changeset
|
164 public static void start(Server server) throws Exception { |
|
3fa54d9d19cd
better handling of BindException
Franklin Schmidt <fschmidt@gmail.com>
parents:
1000
diff
changeset
|
165 try { |
|
3fa54d9d19cd
better handling of BindException
Franklin Schmidt <fschmidt@gmail.com>
parents:
1000
diff
changeset
|
166 server.start(); |
|
3fa54d9d19cd
better handling of BindException
Franklin Schmidt <fschmidt@gmail.com>
parents:
1000
diff
changeset
|
167 } catch(BindException e) { |
|
3fa54d9d19cd
better handling of BindException
Franklin Schmidt <fschmidt@gmail.com>
parents:
1000
diff
changeset
|
168 throw new LuanException(e.toString()); |
|
3fa54d9d19cd
better handling of BindException
Franklin Schmidt <fschmidt@gmail.com>
parents:
1000
diff
changeset
|
169 } |
|
3fa54d9d19cd
better handling of BindException
Franklin Schmidt <fschmidt@gmail.com>
parents:
1000
diff
changeset
|
170 } |
|
175
bdbd4740121f
finish web server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
171 } |
