# LocalControlTest.jws Sample

This topic inludes the source code for the LocalControlTest.jws Sample.

## Sample Location

This sample is located in the following directory in your WebLogic Workshop installation:

BEA_HOME/weblogic81/samples/workshop/SamplesApp/WebServices/localControls/

## Sample Source Code

`001 package localControls; 002 003 /** 004 * @common:target-namespace namespace="http://workshop.bea.com/LocalControlTest" 005 */ 006 public class LocalControlTest implements com.bea.jws.WebService 007 { 008 /** 009 * @common:control 010 * @jc:databaseActions checkInventory="true" 011 */ 012 private localControls.tags.POVerify poVerifyControl; 013 014 /** 015 * @common:control 016 */ 017 private localControls.nestedControls.VerifyFunds verifyFundsControl; 018 019 /** 020 * @common:control 021 */ 022 private localControls.basics.Hello helloControl; 023 024 /** 025 * @common:control 026 */ 027 private localControls.asynch.BufferJC bufferedControl; 028 029 public Callback callback; 030 031 /** 032 * Test the Hello control by clicking the testHello button. Test View 033 * will refresh to display the control's response, a "Hello, World!" 034 * greeting. 035 * 036 * @common:operation 037 */ 038 public String testHello() 039 { 040 return helloControl.sayHello(); 041 } 042 043 /** 044 * Test the BufferJC control by clicking the testBuffered button in Test View, 045 * then click Refresh until the control's response displays as the 046 * results of its callback. 047 * 048 * The BufferJC control demonstrates how a control 049 * can support message buffering. The BufferJC control's startRequest 050 * method is buffered, which means that requests to the method are 051 * automatically queued and fed to the control as resources allow. <br/><br/> 052 * 053 * The BufferJC control is also asynchronous, using a callback to 054 * send its response to its client (this web service). <br/><br/> 055 * 056 * @common:operation 057 * @jws:conversation phase="start" 058 */ 059 public void testBuffered() 060 { 061 bufferedControl.startRequest(); 062 } 063 064 /** 065 * This callback handler receives the BufferJC control's onResultsReady 066 * callback, then forwards the results to this web service's 067 * onBufferTestDone callback. 068 */ 069 public void bufferedControl_onResultsReady(java.lang.String bufferResults) 070 { 071 callback.onBufferTestDone(bufferResults); 072 } 073 074 public interface Callback 075 { 076 /** 077 * Sends a response to the client of this web service when the BufferJC 078 * control's callback is received. 079 * 080 * @jws:conversation phase="finish" 081 */ 082 void onBufferTestDone(String results); 083 084 /** 085 * Sends a response to the client of this web service when the VerifyFunds 086 * control's callback is received. 087 * 088 * @jws:conversation phase="finish" 089 */ 090 void onVerifyFundsTestDone(String responseMessage); 091 } 092 093 094 /** 095 * Tests the VerifyFunds control, which submits purchase 096 * order information after ensuring that inventory and 097 * the customer's account support it. <br/><br/> 098 * 099 * To test the control, enter a PO number (a combination of numerals 100 * that results in a legal int value; letters are allowed, and will be 101 * removed by the POUtil control), customer ID (numerals only), 102 * item number, and item quantity. The following table lists 103 * item numbers and quantities known to the database when 104 * WebLogic Workshop is installed. The VerifyFunds control 105 * decreases quantities with successful orders. This web service 106 * gives the customer a balance of $200.00 to spend for each 107 * request. You can change this amount to test with another.<br/> 108 * 109 * <table style="font-size: 8 pt"> 110 * <tr><td style="width: 100px">itemNumber</td><td style="width: 100px">quantity</td><td>price</td></tr> 111 * 112 * <tr><td>624</td><td>5</td><td>34.95</td></tr> 113 * <tr><td>625</td><td>6</td><td>39.95</td></tr> 114 * <tr><td>629</td><td>10</td><td>34.95</td></tr> 115 * <tr><td>631</td><td>15</td><td>65.95</td></tr> 116 * <tr><td>640</td><td>1</td><td>24.95</td></tr> 117 * 118 * </table> 119 * 120 * @param poNumber A number for this purchase order. May be any 121 * string whose concatenated numerals result in a legal int; non-numeric 122 * characters are allowed, and will be removed by the control. 123 * @param customerID The customer's unique ID. This may be any number. 124 * @param item The number for the item being ordered. Use a number from 125 * the range given above. 126 * @param quantity The number of the specified items to order. Note that 127 * this number must be lower than the quantities given above in order 128 * for this order to succeed. Give larger numbers to test the control's 129 * inventory checking. Also, keep in mind that a successful PO transaction 130 * will decrease the inventory quantity in the database by the amount 131 * ordered. 132 * 133 * @common:operation 134 * @jws:conversation phase="start" 135 * @jws:message-buffer enable="true" 136 */ 137 public void testVerifyFunds(String poNumber, 138 String customerID, int item, int quantity) 139 { 140 /* 141 * The amount the customer can spend. Changing this amount may 142 * change the results of the control's check to verify customer 143 * funds for the purchase. 144 */ 145 double balance = 200.00; 146 147 /* Call the VerifyFunds control with the details of the purchase order. */ 148 verifyFundsControl.submitPO(poNumber, customerID, item, quantity, balance); 149 } 150 151 /** 152 * A handler for the VerifyFunds control's onTransactionComplete callback. 153 * The results are essentially summarized for a callback of this web service. 154 */ 155 public void verifyFundsControl_onTransactionComplete(java.lang.String message, 156 boolean isBalanceAvailable, boolean isInventoryAvailable) 157 { 158 callback.onVerifyFundsTestDone(message + 159 "\n Balance available: " + isBalanceAvailable + 160 "\n Inventory available: " + isInventoryAvailable); 161 } 162 163 /** 164 * Tests the POVerify control, which submits purchase order information, 165 * and will first check inventory if its checkInventory attribute 166 * is set to "true" (as it is by default).<br/><br/> 167 * 168 * To test the control, enter any PO number (a combination of numerals 169 * that results in a legal int value; dashes are allowed, and will be 170 * removed by the POVerify control) and customer ID (numerals only), but 171 * use the item numbers and values given in the following table 172 * to test the control's inventory checking functionality. <br/><br/> 173 * 174 * <table style="font-size: 8 pt"> 175 * <tr><td style="width: 100px">itemNumber</td><td style="width: 100px">quantity</td><td>price</td></tr> 176 * <tr><td>624</td><td>5</td><td>34.95</td></tr> 177 * <tr><td>625</td><td>6</td><td>39.95</td></tr> 178 * <tr><td>629</td><td>10</td><td>34.95</td></tr> 179 * <tr><td>631</td><td>15</td><td>65.95</td></tr> 180 * <tr><td>640</td><td>1</td><td>24.95</td></tr> 181 * </table> 182 * <br/> 183 * 184 * After entering the parameter values in Test View, then click the 185 * testPOVerify button. After Test View refreshes, scroll to the bottom 186 * to see whether the response is "true" (the purchase order addition 187 * succeeded) or "false" (because there isn't enough inventory to support 188 * the purchase).<br/><br/> 189 * 190 * By default, the control's checkInventory property value is set to "true". 191 * To set it to "false", use the following steps: 192 * 193 * <ol> 194 * <li>Switch to Design View for the web service.</li> 195 * <li>On the right side of the design, click the poVerifyControl.</li> 196 * <li>In the Property Editor, under databaseActions, set the checkInventory 197 * property value to "false".</li> 198 * </ol> 199 * 200 * With the value set to "false", inventory will no longer be checked and 201 * the web service will return "true" regardless of whether there are 202 * enough items. 203 * 204 * @param poNumber A number for this purchase order. May be any 205 * number that is a legal int; dashes will be removed. 206 * @param customerID The customer's unique ID. This may be any number. 207 * @param itemNum The number for the item being ordered. Use a number from 208 * the range given above. 209 * @param itemQuant The number of the specified items to order. Note that 210 * this number must be lower than the quantities given above in order 211 * for this order to succeed. Give larger numbers to test the control's 212 * inventory checking. Also, keep in mind that a successful PO transaction 213 * will decrease the inventory quantity in the database by the amount 214 * ordered. 215 * 216 * @common:operation 217 */ 218 public boolean testPOVerify(String poNumber, int customerID, 219 int itemNum, int itemQuant) 220 { 221 return poVerifyControl.addPurchaseOrder(poNumber, customerID, 222 itemNum, itemQuant); 223 } 224 }`