I am getting the following error thrown from some engine tier nodes and was hoping that someone could explain what the problems is:
com.bea.wcp.sip.engine.server.UnableToLockException: Could not lock call state even after waiting for more than 5000 ms
Caused by: com.bea.wcp.sip.engine.server.LockTimeoutException: Could not lock call state email@example.com even after waiting for more than 5000 ms
... 52 more
Do I need to be doing explicit lock/unlocking of a session or suchlike? I imagined that the container would take care of all that for me?
1. Before a servlet's doXX() method is entered, the call state (basically the application session and all SIP and HTTP sessions belonging to it) is locked so that only one thread can access it at one time.
2. So there is another doXXX() method or SIP timer that look the session for more than 5 seconds. Maybe there is some not sip related code inside the method such as DB calls that makes the execution of the method too slow. Thread dumps might show this.
3. OCCAS 5.0 introduces its own API for avoiding session locking and if an application knows what it does it can access the session asynchronous as well. So when you can't move the blocking work to a place where no sip session access is needed such as delegating to a JMS listener, you might like to define an WlssAsynchronousAction that does not block the session.
IMPORTANT: But still the first step should be to avoid long running code in a SIP doXX() or timer method.
To reach a wider audience for your question please consider posting on
the My Oracle Support forum