[Glass] ZnZincServerAdaptor on Gemstone
Dale Henrichs
dale.henrichs at gemtalksystems.com
Wed Jun 17 11:40:37 PDT 2020
Iwan,
Have you looked at gsApplicationTools[1][2]? The GemServers in
gsApplicationTools are designed to work with Zinc instead of FFI.
In my Seaside installation this is the class hierarchy for
ZnZincServerAdaptor:
Object
GRObject
WAObject
WAServerAdaptor
ZnZincServerAdaptor
WAGsZincAdaptor
WAZincNewGemServerAdaptor
The class WAGsZincAdaptor and WAZincNewGemServerAdaptor are Zinc
adaptors designed to work in GemStone. To get those classes loaded you
should load Seaside with at Metacello expression that loads 'Zinc
Project' along with your other `loads:` arguments and that should get
you all of the Seaside classes needed to uze Zinc servers in GemStone.
If you decide not to use gsApplicationTools, you should at least take a
look at gsApplicationTools for examples on how to use the adaptors.
Dale
[1] https://github.com/dalehenrich/gsApplicationTools
[2]
https://github.com/GsDevKit/gsApplicationTools/blob/master/docs/gettingStarted.md#table-of-contents
On 6/17/20 5:00 AM, Iwan Vosloo via Glass wrote:
> Hello.
>
> We're currently using WAFastCGIAdaptor in Gemstone 3.4.1. Calling
> start on it does not return and utilises the current process to serve
> requests.
>
> We'd like to use ZnZincServerAdaptor in the same way, but I can't
> figure out how to do that. (We're using v2.4.3.6 of
> github://GsDevKit/zinc).
>
> What I've tried to do is to subclass from ZnSingleThreadedServer, and
> on it override start to something that does not fork:
>
> ZnForegroundServer:
>
> start
> self stop: false.
> self class default = self
> ifTrue: [ self register ].
> [ self listenLoop ] repeat
>
> Then, I'd start the adaptor like this:
>
> (ZnZincServerAdaptor port: portInteger)
> serverClass: ZnForegroundServer;
> start.
>
> Running the above blocks and listens on the socket. But as soon as I
> try to hit it with a web browser, the browser is left waiting for a
> response while the server breaks with:
>
> ERROR 2710 , a ConnectionClosed occurred (error 2710), , Connection
> closed while waiting for data. (ConnectionClosed)
>
> I realise I don't understand this code at all, but I thought this
> ought to be do-able. Any advice would be appreciated!
>
> For interest, here is the stack trace when run from topaz:
>
> ==> 1 ConnectionClosed (AbstractException) >> _signalWith: @6 line 25
> 2 ConnectionClosed (AbstractException) >> signal: @3 line 7
> 3 ConnectionClosed class (AbstractException class) >> signal: @3 line 4
> 4 SocketStreamSocket >> receiveDataSignallingTimeout:into:startingAt:
> @11 line 14
> 5 SocketStream >> receiveData @6 line 15
> 6 SocketStream >> next @7 line 9
> 7 ZnLineReader >> processNext @6 line 4
> 8 ZnLineReader >> nextLine @3 line 3
> 9 ZnRequestLine >> readFrom: @4 line 3
> 10 ZnRequestLine class >> readFrom: @3 line 3
> 11 ZnRequest >> readHeaderFrom: @2 line 2
> 12 ZnRequest (ZnMessage) >> readFrom: @2 line 2
> 13 ZnRequest class (ZnMessage class) >> readFrom: @3 line 3
> 14 [] in ZnServer >> reader @7 line 4
> 15 [] in ZnSingleThreadedServer >> readRequest: @16 line 6
> 16 [] in ZnSingleThreadedServer >> withMaximumEntitySizeDo: @11 line 6
> 17 [] in DynamicVariable class >> value:during: @16 line 9
> 18 ExecBlock0 (ExecBlock) >> ensure: @2 line 12
> 19 ZnMaximumEntitySize class (DynamicVariable class) >> value:during:
> @7 line 10
> 20 ZnForegroundServer (ZnSingleThreadedServer) >>
> withMaximumEntitySizeDo: @6 line 5
> 21 ZnForegroundServer (ZnSingleThreadedServer) >> readRequest: @3 line 6
> 22 [] in ZnSingleThreadedServer >> executeOneRequestResponseOn: @13
> line 12
> 23 ExecBlock0 (ExecBlock) >> on:do: @3 line 44
> 24 [] in ZnSingleThreadedServer >> executeOneRequestResponseOn: @9
> line 16
> 25 [] in DynamicVariable class >> value:during: @16 line 9
> 26 ExecBlock0 (ExecBlock) >> ensure: @2 line 12
> 27 ZnCurrentServer class (DynamicVariable class) >> value:during: @7
> line 10
> 28 ZnForegroundServer (ZnSingleThreadedServer) >>
> executeOneRequestResponseOn: @5 line 9
> 29 [] in ZnSingleThreadedServer >> serveConnectionOn: @31 line 13
> 30 ExecBlock0 (ExecBlock) >> on:do: @3 line 44
> 31 [] in ZnSingleThreadedServer >> serveConnectionOn: @27 line 14
> 32 ExecBlock0 (ExecBlock) >> ensure: @2 line 12
> 33 [] in ZnSingleThreadedServer >> serveConnectionOn: @21 line 16
> 34 [] in ExecBlock >> ifCurtailed: @8 line 6
> 35 ExecBlock0 (ExecBlock) >> ensure: @2 line 12
> 36 ExecBlock0 (ExecBlock) >> ifCurtailed: @4 line 8
> 37 [] in ZnSingleThreadedServer >> serveConnectionOn: @17 line 19
> 38 ExecBlock0 (ExecBlock) >> on:do: @3 line 44
> 39 ZnForegroundServer (ZnSingleThreadedServer) >> serveConnectionOn:
> @5 line 22
> 40 [] in ZnSingleThreadedServer >> listenLoop @12 line 12
> 41 [] in ExecBlock >> ifCurtailed: @8 line 6
> 42 ExecBlock0 (ExecBlock) >> ensure: @2 line 12
> 43 ExecBlock0 (ExecBlock) >> ifCurtailed: @4 line 8
> 44 ZnForegroundServer (ZnSingleThreadedServer) >> listenLoop @4 line 14
> 45 ZnForegroundServer >> start @8 line 5
> 46 ZnZincServerAdaptor >> basicStart @3 line 2
> 47 [] in WAServerManager >> start: @9 line 3
> 48 [] in ExecBlock >> ifCurtailed: @8 line 6
> 49 ExecBlock0 (ExecBlock) >> ensure: @2 line 12
> 50 ExecBlock0 (ExecBlock) >> ifCurtailed: @4 line 8
> 51 WAServerManager >> start: @5 line 4
> 52 ZnZincServerAdaptor (WAServerAdaptor) >> start @3 line 2
>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.gemtalksystems.com/mailman/private/glass/attachments/20200617/02e5b42d/attachment-0001.htm>
More information about the Glass
mailing list