Completing a work area
Overview
After an application has finished using a work area, it must complete the work area by calling the complete method on the UserWorkArea interface. This terminates the association with the calling thread and destroys the work area. If the complete method is called on a nested work area, the nested work area is terminated and the parent work area becomes the current work area. If there is no work area associated with the calling thread, a NoWorkArea exception is created.
Every work area must be completed, and work areas can be completed only by the originating process. For example, if a server attempts to call the complete method on a work area that originated in a client, a NotOriginator exception is created. Work areas created in a server process are never propagated back to an invoking client process.
The work area service claims full local-remote transparency. Even if two beans happen to be deployed in the same server, and therefore the same JVM and process, a work area begun on an invocation from another is completed and the bean in which the request originated is always in the same state after any remote call.
Example
The following code example shows the completion of the work area created in the client application.
public class SimpleSampleServlet { ... userWorkArea.begin("SimpleSampleServlet"); userWorkArea.set("company", SimpleSampleCompany.Main, PropertyModeType.read_only); userWorkArea.set("priority", SimpleSamplePriority.Silver); ... // Do application work. ... // Terminate the work area. try { userWorkArea.complete(); } catch (NoWorkArea e) { // There is no work area associated with this thread. ... } catch (NotOriginator e) { // The work area was imported into this process. ... } ... }The following code example shows the sample application completing the nested work area it created earlier in the remote invocation.
public class SimpleSampleBeanImpl implements SessionBean { public String [] test() { ... // Begin a nested work area. userWorkArea.begin("SimpleSampleBean"); try { userWorkArea.set("company", SimpleSampleCompany.London_Development); } catch (NotOriginator e) { } SimpleSampleCompany company = (SimpleSampleCompany) userWorkArea.get("company"); SimpleSamplePriority priority = (SimpleSamplePriority) userWorkArea.get("priority"); // Complete all nested work areas before returning. try { userWorkArea.complete(); } catch (NoWorkArea e) { } catch (NotOriginator e) { } } }
Nested work areas
Related tasks
Beginning a new work area