Question
onSessionEnd
I am calling the following adminapi method from within
onSessionEnd in my application to clean the user's Datasource
connection as shown in the code below...
************************************************************************************************************************
<!--- Login CF API--->
<cfinvoke component="CFIDE.adminapi.administrator" method="login">
<cfinvokeargument name="adminPassword" value="#Arguments.ApplicationScope.AppInt.CFSERVERPW#"/>
</cfinvoke>
<!--- DELETE DataSource --->
<cfinvoke component="CFIDE.adminapi.datasource" method="deleteDatasource">
<cfinvokeargument name="dsnname" value="#Arguments.SessionScope.auth.Temp_DSN#"/>
</cfinvoke>
<!--- Logout CF API--->
<cfinvoke component="CFIDE.adminapi.administrator" method="logout">
</cfinvoke>
************************************************************************************************************************
The code works as expected and does cleanup of the temporarily assigned datasource, however my onError method writes the following: "Error in Method [onSessionEnd] Event handler exception" to my application log shortly after firing. Does anyone have any insight on this problem.
Below is a complete snippet of entire onSessionEnd method. As you will see I am also invoking a com object to delete the DNS on my PSQL server, but I don't believe this is problem.
************************************************************************************************************************
<!--- Cleanup of Temp DSN and TEMP DS on Session End --->
<cffunction access="public" name="onSessionEnd" output="no" returnType="void">
<cfargument name="sessionScope" required="yes">
<cfargument name="applicationScope" required="yes">
<!--- Remove User from List of Active Sessions --->
<cfif StructKeyExists(arguments.sessionScope.auth, "WEB_USER_NAME")>
<cfset structDelete(arguments.applicationScope.sessionTracker,arguments.sessionScope.auth.sessionTracker)>
</cfif>
<!--- Delete DSN from CF Admin --->
<!--- Login CF API--->
<cfinvoke component="CFIDE.adminapi.administrator" method="login">
<cfinvokeargument name="adminPassword" value="#Arguments.ApplicationScope.AppInt.CFSERVERPW#"/>
</cfinvoke>
<!--- DELETE DataSource --->
<cfinvoke component="CFIDE.adminapi.datasource" method="deleteDatasource">
<cfinvokeargument name="dsnname" value="#Arguments.SessionScope.auth.Temp_DSN#"/>
</cfinvoke>
<!--- Loginout CF API--->
<cfinvoke component="CFIDE.adminapi.administrator" method="logout">
</cfinvoke>
<!--- Create PSQL the Session object --->
<cfobject class="dto.dtoSession.1" name="dtoSession" action="create" context="inproc" type="com">
<!--- Connect to Session --->
<cfset session_return = dtoSession.Connect(Arguments.ApplicationScope.AppInt.PSQLServerName,Arguments.ApplicationScope.AppInt.PSQLServerUID,Arguments.ApplicationScope.AppInt.PSQLServerPW)>
<cfif session_return NEQ 0>
<cflog text="PSQL v8 Error Status:#session_return#" type="Warning" log="Application">
</cfif>
<!--- Delete DSN --->
<cfobject class="dto.dtoDSN" name="del_dtoDSN" action="create" context="inproc" type="com">
<cfset delDSN_result = dtoSession.DSNs.Remove(Arguments.SessionScope.auth.Temp_DSN)>
<cfset retVal = dtoSession.disconnect()>
<cfif delDSN_result neq 0>
<cflog text="PSQL v8 DSN Removal error Status:#delDSN_result#" type="Warning" log="Application">
</cfif>
</cffunction>
************************************************************************************************************************
************************************************************************************************************************
<!--- Login CF API--->
<cfinvoke component="CFIDE.adminapi.administrator" method="login">
<cfinvokeargument name="adminPassword" value="#Arguments.ApplicationScope.AppInt.CFSERVERPW#"/>
</cfinvoke>
<!--- DELETE DataSource --->
<cfinvoke component="CFIDE.adminapi.datasource" method="deleteDatasource">
<cfinvokeargument name="dsnname" value="#Arguments.SessionScope.auth.Temp_DSN#"/>
</cfinvoke>
<!--- Logout CF API--->
<cfinvoke component="CFIDE.adminapi.administrator" method="logout">
</cfinvoke>
************************************************************************************************************************
The code works as expected and does cleanup of the temporarily assigned datasource, however my onError method writes the following: "Error in Method [onSessionEnd] Event handler exception" to my application log shortly after firing. Does anyone have any insight on this problem.
Below is a complete snippet of entire onSessionEnd method. As you will see I am also invoking a com object to delete the DNS on my PSQL server, but I don't believe this is problem.
************************************************************************************************************************
<!--- Cleanup of Temp DSN and TEMP DS on Session End --->
<cffunction access="public" name="onSessionEnd" output="no" returnType="void">
<cfargument name="sessionScope" required="yes">
<cfargument name="applicationScope" required="yes">
<!--- Remove User from List of Active Sessions --->
<cfif StructKeyExists(arguments.sessionScope.auth, "WEB_USER_NAME")>
<cfset structDelete(arguments.applicationScope.sessionTracker,arguments.sessionScope.auth.sessionTracker)>
</cfif>
<!--- Delete DSN from CF Admin --->
<!--- Login CF API--->
<cfinvoke component="CFIDE.adminapi.administrator" method="login">
<cfinvokeargument name="adminPassword" value="#Arguments.ApplicationScope.AppInt.CFSERVERPW#"/>
</cfinvoke>
<!--- DELETE DataSource --->
<cfinvoke component="CFIDE.adminapi.datasource" method="deleteDatasource">
<cfinvokeargument name="dsnname" value="#Arguments.SessionScope.auth.Temp_DSN#"/>
</cfinvoke>
<!--- Loginout CF API--->
<cfinvoke component="CFIDE.adminapi.administrator" method="logout">
</cfinvoke>
<!--- Create PSQL the Session object --->
<cfobject class="dto.dtoSession.1" name="dtoSession" action="create" context="inproc" type="com">
<!--- Connect to Session --->
<cfset session_return = dtoSession.Connect(Arguments.ApplicationScope.AppInt.PSQLServerName,Arguments.ApplicationScope.AppInt.PSQLServerUID,Arguments.ApplicationScope.AppInt.PSQLServerPW)>
<cfif session_return NEQ 0>
<cflog text="PSQL v8 Error Status:#session_return#" type="Warning" log="Application">
</cfif>
<!--- Delete DSN --->
<cfobject class="dto.dtoDSN" name="del_dtoDSN" action="create" context="inproc" type="com">
<cfset delDSN_result = dtoSession.DSNs.Remove(Arguments.SessionScope.auth.Temp_DSN)>
<cfset retVal = dtoSession.disconnect()>
<cfif delDSN_result neq 0>
<cflog text="PSQL v8 DSN Removal error Status:#delDSN_result#" type="Warning" log="Application">
</cfif>
</cffunction>
************************************************************************************************************************
