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 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) { } } }