Mark Tubesing 18.May.06 10:51 AM a Web browser Applications Development 7.0 All Platforms
Since there is little Lotus documentation on the topic, I'm curious to know what others have discovered about synchronization of Java Notes objects in the HTTP JVM.
In ND7, there are now (at least) 3 potential code sources running in the HTTP JVM:
1) Web agents
2) Web Services
3) Servlets running under the Domino Servlet Manager
I recently discovered that the server setting "Run web agents concurrently" also applies to web service calls. With this disabled as the default, the server automatically synchronizes concurrent web service calls. By enabling the option, concurrent calls are allowed, obviously improving client response times. However, synchronization is then left to the code (assuming two concurrent calls may need to update the same note, or have similar dependencies). Lotus provided LS developers with synchronization objects in R5 and documented how to use them, but there is no parallel documentation on recommended ways to use the standard Java synchronization mechanisms within Domino. In fact, we are given only this cryptic bit of instruction in the ND7 designer help:
"Java code is cached and shared over multiple instances of a Web service, enhancing performance but imposing the following restraints: do not use static data as changes made by one instance affect all instances; avoid synchronization as the scope of the classes and objects being synchronized may cross instances."
I have a feeling an entire Redbook chapter could be devoted to fully explaining the reasoning for these warnings. Lotus (Julie K?), care to shed any more light on the matter? What are "multiple instances" of a web service? If we are to "avoid synchronization", what is the recommended way to synchronize access to Notes objects?