I follow John's policy in all web integration.  All external
access comes through a single entry point which identifies the
purpose of the connection and transfers to an appropriate
subroutine.  I also include logging abilities in most code, just
in case.  Code below is made up for this example and not
stylistically elegant nor complete. :

SUBROUTINE ENTRY.POINT(QUERY,RESPONSE)
  INCLUDE WEB.COMMON
  * that routine does initialization, logging, breaks up query,
etc
  BEGIN CASE
    CASE OPERATION="CUSTINQ"
      CALL WEB.CUSTINQ(QUERY,RESPONSE)
    CASE 1 ; * bad request
  END CASE
  INCLUDE WEB.EXIT
RETURN

SUBROUTINE WEB.COMMON
  COMMON VARS(100)
  INCLUDE WEB.EQUATES ; * assign name to all VARS
  IF NOT(INITIALIZED) THEN GOSUB INIT
  IF LOGGING THEN GOSUB LOG
....
RETURN

SUBROUTINE WEB.EXIT
  IF LOGGING THEN GOSUB LOG
  ...
RETURN 

Since all code includes WEB.COMMON, note from above that when
LOGGING is active all routines will log on entry, and all
programs have access to the common LOG function.

HTH
T



> From: John Hester
> Another gotcha I've run into in the past (also not app 
> platform specific) is difficutly isolating bugs in UV 
> subroutines that cause an abort.  The result is a hung 
> unirpc connection and a corresponding consumed 
> license.  If this problem happens in a frequently 
> called subroutine, you can quickly find yourself with 
> no UV licenses left.  To isolate offending 
> subroutines, I created a tracking subroutine that gets 
> called at the beginning of each subroutine...

_______________________________________________
U2-Users mailing list
U2-Users@listserver.u2ug.org
http://listserver.u2ug.org/mailman/listinfo/u2-users

Reply via email to