An interesting one today; a Discoverer Plus Workbook called via an eBusiness Suite Menu errored out with:
OracleBI Discoverer: "Contact with the Discoverer Server has been lost. To continue your work, please restart Discoverer Plus. If this problem persists, please contact your Oracle Application Server administrator."
Doh! Who's that Application Server administrator ... oh! me :-(
Attempting to expand the workbook, after going directly into Discoverer Plus errors with:
"This workbook cannot be expanded".
 
Hmm, okay, let's look at the Java Console:
Reading bytes from input stream
   Unmarshalling response
   Session ID:2008111408252618857
   BI Beans Graph version [3.2.3.0.37]
   DiscoApplet[0]: Error received by GlobalStatusListener.workerFailed() in SessionUI.java
   DiscoNetworkException  - Nested exception: org.omg.CORBA.COMM_FAILURE:   vmcid: SUN  minor code: 208 completed: Maybe
   DiscoNetworkException  - Nested exception: org.omg.CORBA.COMM_FAILURE:   vmcid: SUN  minor code: 208 completed: Maybe
   org.omg.CORBA.COMM_FAILURE:   vmcid: SUN  minor code: 208 completed: Maybe
 at com.sun.corba.se.internal.iiop.IIOPConnection.purge_calls(IIOPConnection.java:438)
 at com.sun.corba.se.internal.iiop.ReaderThread.run(ReaderThread.java:70)
 at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(Unknown Source)
 at sun.rmi.transport.StreamRemoteCall.executeCall(Unknown Source)
 at sun.rmi.server.UnicastRef.invoke(Unknown Source)
 at oracle.disco.remote.rmi.serverbase.RMISessionBase_Stub.sendRecieveData(Unknown Source)
 at oracle.disco.model.corbaserver.ModelInterface.sendRecieveData(Unknown Source)
 at oracle.disco.model.corbaserver.ModelInterface.SendReceiveData(Unknown Source)
 at oracle.disco.model.corbaserver.serverrequest.DsrOpenWorkbook.xmlUpdateServer(Unknown Source)
 at oracle.disco.model.corbaserver.serverrequest.DsrCorbaXML.corbaUpdateServer(Unknown Source)
 at oracle.disco.model.corbaserver.serverrequest.DsrGeneralCorbaXML.updateServer(Unknown Source)
 
Ouch! Sounds like it hurts!
A quick blast through Metalink (oops MOS - My Oracle Support) and a bunch of old bugs later, not looking promising, however there's one major clue - the problem is only occurring for some Users. Okay, lets do a side by side comparison of Profile Options as a first guess:
User Level Profile Option Value Comparison Side by Side 
select *
   from (
 with
 prof_di as
 ( select 'USER' level_name, 
 fu.user_name level_value, 
 fpo.profile_option_id,
 fpot.user_profile_option_name,
 fpo.profile_option_name,
 fpov.profile_option_value
 from   fnd_user fu, 
 fnd_profile_options fpo,
 fnd_profile_option_values fpov,
 fnd_profile_options_tl fpot
 where  fu.user_id = fpov.level_value
 and    fpo.profile_option_id = fpov.profile_option_id
 and    fpo.profile_option_name = fpot.profile_option_name
 and    fpot.language = 'US'
 and    fpov.level_id = 10004
 and    fu.user_name = 'SYSADMIN'
 ),
 prof_gr as
 (
 select 'USER' level_name, 
 fu.user_name level_value, 
 fpo.profile_option_id,
 fpot.user_profile_option_name,
 fpo.profile_option_name,
 fpov.profile_option_value
 from   fnd_user fu, 
 fnd_profile_options fpo,
 fnd_profile_option_values fpov,
 fnd_profile_options_tl fpot
 where  fu.user_id = fpov.level_value
 and    fpo.profile_option_id = fpov.profile_option_id
 and    fpo.profile_option_name = fpot.profile_option_name
 and    fpot.language = 'US'
 and    fpov.level_id = 10004
 and    fu.user_name = 'ROBERTSG'
 )
 select pd.profile_option_id
 ,      pd.user_profile_option_name
 ,      pd.profile_option_name
 ,      pd.profile_option_value d_value
 ,      pg.profile_option_value g_value
 ,      decode(pd.profile_option_value,pg.profile_option_value,'EQUAL','DIFF') status
 from   prof_di pd
 ,      prof_gr pg
 where  pd.profile_option_name = pg.profile_option_name (+)
 union
 select pg.profile_option_id
 ,      pg.user_profile_option_name
 ,      pg.profile_option_name
 ,      pd.profile_option_value d_value
 ,      pg.profile_option_value g_value
 ,      decode(pg.profile_option_value,pd.profile_option_value,'EQUAL','DIFF') status
 from   prof_di pd
 ,      prof_gr pg
 where  pg.profile_option_name = pd.profile_option_name (+)
 )
 where status != 'EQUAL';  
The query gets output that includes the following:
USER_PROFILE_OPTION_NAME PROFILE_OPTION_NAME D_VALUE     G_VALUE STATUS
------------------------ ------------------- ----------- ------- ------
ICX: Territory           ICX_TERRITORY       NEW ZEALAND AMERICA DIFF
 
 
Whenever I see anything related to "NLS_LANG" or "Territory" the alarm bells start ringing, and sure enough - for the problem User, just a quick navigate to the "Preferences" responsibility, General Preferences and change the Territory from New Zealand to United States and we're off and laughing again! Alternatively could have looked at the ICX: Territory profile option.
  
What was the real underlying problem? My guess is a clash on date formats for default parameter values ... but that's left for another day.