Listing 1

<CFCOMPONENT HINT="LISTING 1" EXTENDS="GateKeeper">
	<CFFUNCTION NAME="onAdd" OUTPUT="FALSE">
		<CFARGUMENT NAME="CFEvent" TYPE="struct" REQUIRED="yes">

		<CFSCRIPT>
			props = structNew();
			props.event = CFEvent;
			storeEvent(props);
		</CFSCRIPT>

	</CFFUNCTION>
	<CFFUNCTION NAME="GKonAdd" OUTPUT="FALSE">
		<CFARGUMENT NAME="CFEvent" TYPE="struct" REQUIRED="yes">

			<!--- original onAdd event code --->

	</CFFUNCTION>
</CFCOMPONENT>

Listing 2

<CFCOMPONENT EXTENDS="functions" HINT="Handles incomming gateway requests and put them into queue">
   <CFFUNCTION NAME="storeEvent" OUTPUT="FALSE" ACCESS="PUBLIC" HINT="Processes ingomming messages">
      <CFARGUMENT NAME="inEvent" TYPE="struct" REQUIRED="yes">
	   <CFSCRIPT>

		   try {
				GatewayName = trim(inEvent.event.GATEWAYID);
				if (NOT IsDefined("server.CFCEvents.#GatewayName#")){
					"server.CFCEvents.#GatewayName#" = ArrayNew(2);
				}
				next = ArrayLen(server.CFCEvents[GatewayName])+1;
				server.CFCEvents[GatewayName][next][1] = now();
				server.CFCEvents[GatewayName][next][2] = inEvent.event;

				fireDispatcher = SendGatewayMessage("dispatcher");
			} catch (any ept){
				MailAlert(ept); // send alert
			}

	  </CFSCRIPT>

   </CFFUNCTION>
</CFCOMPONENT>