• shubham kumar 1725
  • NEWBIE
  • -2 Points
  • Member since 2019

  • Chatter
    Feed
  • 0
    Best Answers
  • 0
    Likes Received
  • 0
    Likes Given
  • 0
    Questions
  • 8
    Replies

 
Hi all,

We need to implement the following pattern at my org:
  • callout to external data source
  • if that callout takes too long (according to some configurable threshold), log an error (ie do some DML)
  • if that callout timed out on the remote server, try it again
Recognizing the potential for the dreaded "You have uncommitted work pending. Please commit or rollback before calling out." error, I put the error logging code in a future method, thus isolating the DML from the callouts. However, the error is still being thrown. I reduced the issue down to this pattern:
public static void foo() {
    Http http = new Http();
    HttpRequest req = new Httprequest();
    req.setEndpoint('https://test.salesforce.com'); //whatever endpoint
    req.setMethod('GET');
    http.send(req); //works fine
    bar();
    http.send(req); //throws calloutexception
}

@future public static void bar() {

}
Am I correct to assume that calling a future method counts as a DML operation? Is there any documentation I'm missing somewhere?

 

When I am trying to launch an android hybrid app created using forcedroid it gives following error

 

12-06 05:57:48.176: D/HttpAccess:constructor(833): User-Agent string: SalesforceMobileSDK/2.1.0 android mobile/4.2.2 (sdk) moapp/1.0 Hybrid
12-06 05:57:48.876: I/SalesforceDroidGapActivity.onCreate(833): onCreate called
12-06 05:57:49.026: I/ClientManager:peekRestClient(833): No user account found
12-06 05:57:49.026: I/ClientManager:peekRestClient(833): com.salesforce.androidsdk.rest.ClientManager$AccountInfoNotFoundException: No user account found
12-06 05:57:49.026: I/ClientManager:peekRestClient(833): at com.salesforce.androidsdk.rest.ClientManager.peekRestClient(ClientManager.java:140)
12-06 05:57:49.026: I/ClientManager:peekRestClient(833): at com.salesforce.androidsdk.ui.sfhybrid.SalesforceDroidGapActivity.onCreate(SalesforceDroidGapActivity.java:118)
12-06 05:57:49.026: I/ClientManager:peekRestClient(833): at android.app.Activity.performCreate(Activity.java:5104)
12-06 05:57:49.026: I/ClientManager:peekRestClient(833): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
12-06 05:57:49.026: I/ClientManager:peekRestClient(833): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
12-06 05:57:49.026: I/ClientManager:peekRestClient(833): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
12-06 05:57:49.026: I/ClientManager:peekRestClient(833): at android.app.ActivityThread.access$600(ActivityThread.java:141)
12-06 05:57:49.026: I/ClientManager:peekRestClient(833): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
12-06 05:57:49.026: I/ClientManager:peekRestClient(833): at android.os.Handler.dispatchMessage(Handler.java:99)
12-06 05:57:49.026: I/ClientManager:peekRestClient(833): at android.os.Looper.loop(Looper.java:137)
12-06 05:57:49.026: I/ClientManager:peekRestClient(833): at android.app.ActivityThread.main(ActivityThread.java:5041)
12-06 05:57:49.026: I/ClientManager:peekRestClient(833): at java.lang.reflect.Method.invokeNative(Native Method)
12-06 05:57:49.026: I/ClientManager:peekRestClient(833): at java.lang.reflect.Method.invoke(Method.java:511)
12-06 05:57:49.026: I/ClientManager:peekRestClient(833): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
12-06 05:57:49.026: I/ClientManager:peekRestClient(833): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
12-06 05:57:49.026: I/ClientManager:peekRestClient(833): at dalvik.system.NativeStart.main(Native Method)
12-06 05:57:49.146: D/dalvikvm(833): GC_CONCURRENT freed 279K, 13% free 2623K/3004K, paused 27ms+24ms, total 192ms
12-06 05:57:49.296: I/SalesforceDroidGapActivity.onResumeNotLoggedIn(833): Should authenticate / online - authenticating
12-06 05:57:49.296: I/SalesforceDroidGapActivity.authenticate(833): authenticate called
12-06 05:57:49.296: I/ClientManager:getRestClient(833): No account of type com.salesforce.androisdk found
12-06 05:57:49.936: D/gralloc_goldfish(833): Emulator without GPU emulation detected.
12-06 05:57:50.096: E/Trace(857): error opening trace file: No such file or directory (2)
12-06 05:57:51.318: D/HttpAccess:constructor(857): User-Agent string: SalesforceMobileSDK/2.1.0 android mobile/4.2.2 (sdk) mobilapp/1.0 Hybrid
12-06 05:58:09.306: D/LockChecker:run(833): isLocked:true elapsedSinceLastActivity:20 timeout:0

 Please help me to resolve this error

 

  • December 06, 2013
  • Like
  • 1