staleO4GLObjectTimeout

Hi
I develop web application and use WSA. WSA and Application Server works in state-free mode.
95% of code are Non-persistent procedures, but for some services I have to call Persistent procedure to create Appserver side remote object.
This object exclusive locks some data while user editing information on client side.

If user abnormally closes Internet Browser window I cant call Release Method to release this Remote Object. As a result I have -1 application server thread + lock of data forever.

I have read documentation and found information about staleO4GLObjectTimeout WSA parameter.
As I understand it is Watchdog (garbage collection) parameter. I set it to 300 (5 minutes). If user abnormally closes browser WSA deletes ProcObject, deletes remove Object and then release Appserver thread this session. Everything works ok, but....
If I call any Procedure after WSA did Proc Object Delete (by timeout) Application cant use this Web Service anymore because to every call I will get WSA Error. The only way to solve a problem - disable + enable Web Service (reboot it).

If I set staleO4GLObjectTimeout to 0 application works OK.
So I have a question. Is it a WSA bug or I have to set some other WSA parameters.

WSA Log:
WSA Startup
[10/04/24@14:50:24.562+0300] P-000000 T-Thread-1 4 Oblik_DocEditor WSA-Object-Pool {Oblik_DocEditor} proxypool created
[10/04/24@14:50:24.562+0300] P-000000 T-Thread-1 4 Oblik_DocEditor WSA-Object-Pool {Oblik_DocEditor} starting staleObject watchdog (timeout= 300 seconds)
[10/04/24@14:50:24.609+0300] P-000000 T-{Oblik_DocEditor}staleObjectWatchdog 4 watchdog start watchdog thread {Oblik_DocEditor}staleObjectWatchdog started.

Normal Execution:
[10/05/09@21:59:33.703+0300] P-000000 T-http-8080-6 4 Oblik_DocEditor 4GL-Provider Excuting SOAP Request: Method: CreatePO_DocEditor URI: urn:eek:blikerp-com-doceditor:Oblik_DocEditor (10928)
....
[10/05/09@21:59:33.703+0300] P-000000 T-http-8080-6 4 Oblik_DocEditor WSA-Object-Pool {Oblik_DocEditor} getProxyObject(<Oblik_DocEditor|PX-000017|AO>) = <Oblik_DocEditor|PX-000017|AO>
[10/05/09@21:59:33.703+0300] P-000000 T-http-8080-6 4 Oblik_DocEditor WSA-Object-Pool {Oblik_DocEditor} creating new ProcObject(<Oblik_DocEditor|PX-000017|AO>,webservices/document/src/DocEditor.p)
[10/05/09@21:59:33.703+0300] P-000000 T-http-8080-6 4 Oblik_DocEditor WSA-Object <Oblik_DocEditor|PX-000018|PO> : addReference() to {Oblik_DocEditor}[SP-000007]
[10/05/09@21:59:33.703+0300] P-000000 T-http-8080-6 4 Oblik_DocEditor Session-Pool {Oblik_DocEditor}[SP-000007] : addReference() count= 2
[10/05/09@21:59:33.703+0300] P-000000 T-http-8080-6 4 Oblik_DocEditor Session-Pool {Oblik_DocEditor}[SP-000007] reserveSession()
[10/05/09@21:59:33.703+0300] P-000000 T-http-8080-6 4 Oblik_DocEditor Session-Pool {Oblik_DocEditor}[SP-000007][AppserverDC://localhost:3094/Oblik_DocEditor] reserveSession(false)
[10/05/09@21:59:33.703+0300] P-000000 T-http-8080-6 4 Oblik_DocEditor Session-Pool {Oblik_DocEditor}[SP-000007][AppserverDC://localhost:3094/Oblik_DocEditor] : newSession() = <session-000011|AppserverDC://localhost:3094/Oblik_DocEditor>
[10/05/09@21:59:33.718+0300] P-000000 T-http-8080-6 4 Oblik_DocEditor Session-Pool {Oblik_DocEditor}[SP-000007] : addReference() to <session-000011|AppserverDC://localhost:3094/Oblik_DocEditor>
[10/05/09@21:59:33.718+0300] P-000000 T-http-8080-6 4 Oblik_DocEditor Session-Pool {Oblik_DocEditor}[SP-000007][AppserverDC://localhost:3094/Oblik_DocEditor] : reserved(<session-000011|AppserverDC://localhost:3094/Oblik_DocEditor>)
[10/05/09@21:59:33.718+0300] P-000000 T-http-8080-6 4 Oblik_DocEditor Session-Pool {Oblik_DocEditor}[SP-000007] : reserved(<session-000011|AppserverDC://localhost:3094/Oblik_DocEditor>)
[10/05/09@21:59:33.750+0300] P-000000 T-http-8080-6 4 Oblik_DocEditor WSA-Object <Oblik_DocEditor|PX-000018|PO> : addReference() count= 1
[10/05/09@21:59:33.750+0300] P-000000 T-http-8080-6 4 Oblik_DocEditor WSA-Object-Pool {Oblik_DocEditor} newProcObject(<Oblik_DocEditor|PX-000017|AO>,webservices/document/src/DocEditor.p) = <Oblik_DocEditor|PX-000018|PO>, session= <session-000011|AppserverDC://localhost:3094/Oblik_DocEditor>
[10/05/09@21:59:33.750+0300] P-000000 T-http-8080-6 4 Oblik_DocEditor 4GL-Provider Created new Proc/SubAppObject with object-id 39e706a46ad531be:2536f74d:1287d662505:-7ffa;<Oblik_DocEditor|PX-000018|PO>;3vWR3KPeVoC39gZ7EShKQg== (10990)

A little later:
Abnormal execution.
[10/05/09@22:07:30.015+0300] P-000000 T-http-8080-6 4 Oblik_DocEditor 4GL-Provider Excuting SOAP Request: Method: CreatePO_DocEditor URI: urn:eek:blikerp-com-doceditor:Oblik_DocEditor (10928)
...
[10/05/09@22:07:30.031+0300] P-000000 T-http-8080-6 3 Oblik_DocEditor 4GL-Provider Locating object with object-id NULL (10988)
[10/05/09@22:07:30.031+0300] P-000000 T-http-8080-6 4 Oblik_DocEditor WSA-Object-Pool {Oblik_DocEditor} <Oblik_DocEditor|PX-000017|AO> not found
[10/05/09@22:07:30.031+0300] P-000000 T-http-8080-6 3 Oblik_DocEditor 4GL-Provider Service urn:eek:blikerp-com-doceditor:Oblik_DocEditor could not find missing object with the UUID header: NULL (10932)
[10/05/09@22:07:30.031+0300] P-000000 T-http-8080-6 1 omk SOAP-Processor The SOAP request (id: 27e) failed, stack trace level 0 (10941)
[10/05/09@22:07:30.031+0300] P-000000 T-http-8080-6 1 omk SOAP-Processor msg=Error in SOAP header: Cannot find object. (10917)]
[10/05/09@22:07:30.031+0300] P-000000 T-http-8080-6 1 omk SOAP-Processor at com.progress.wsa.open4gl.Rpc4glProvider.locateProxyObject(Rpc4glProvider.java:1514)

P.S. I am newbie here, sorry for bad english.
 
Top