Skip to Content

Archived discussions are read-only. Learn more about SAP Q&A

System received an expired SSO ticket

Hi All,

We are on Portal 7.3 SP07. we have created a Java web application to update data into SAP. The communication betweeen Java Application and SAP is using SAP JCO 3.0 API. We have created a RFC destination in (NWA->Configuration->Security->Destinations) and using this in our application to make a Connection to R/3. The RFC destination is being configured to use SSO Tickets.

The issue that we are facing here is - Applicaiton works fine till the SSO ticket validity is expired. after the SSO ticket validtiy is expired the applciation stops working and we see the below error in the logs.

Exception ActionCreateApplicant()com.sap.conn.jco.JCoException: (103) JCO_ERROR_LOGON_FAILURE: System received an expired SSO ticket on <erp_host_name> sysnr 00#

This issue has been discussed a lot on SCN, however we are not finding any sutiable fix our issue.

What we have analyzed till now is - Once after the SSO ticket validity gets over (8h was defualt we tested with increasing to 24h)  - The JCO destination instead of using a new SSO ticket continues to use the expired SSO ticket which it has cached in the JCO Connnection Pool similar to what is described in the note 1130191. But here the Soloution has been provided for clearing the JCO Pool using the WD JCO Pool viwer tool. But In our case since we are using the JCO 3.0 API's - the methods which were available to access the JCO Pool (JCO.Pool and JCOPoolManager) with previous versions of JCO Connector are not available anymore with the SAP JCO 3.0.

Please help.

Thanks

Hussain

Tags:
Former Member
Former Member replied

We could find our issue.

Instead of just remember the Destination-Name we stored the Destination in an local variable. This variable was available to the User through a Session-Scoped bean. This bean has had a longer livetime than the Destination.

The solution is quiet simple:

instead of useing JCoDestinationManager.getDestination(destinationName); and hold the JCoDestination-Object we just hold the "String destinationName" and call the obove method everytime we need a JCoDestination-Object.

Due to the pooling this will not create much overhead and works like a charm.

0 View this answer in context
Not what you were looking for? View more on this topic or Ask a question