function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
matsumatsu 

Javaで『INVALID_QUERY_LOCATOR』のエラーが発生する。

以前も「.Net」を使っていてという、似たような質問があったのですが、

解決せず・・・、

 

お知恵をお借りできたら幸いです。

 

Javaで、Salesforceのデータを取得しにいっています。

ソースは省略していますが、以下の通りです。

 

QueryResult qr = null;
QueryOptions qo = new QueryOptions();
qo.setBatchSize(500);
ButtonIventLogin.stub.setHeader(new SforceServiceLocator().getServiceName().getNamespaceURI(), "QueryOptions", qo);//ButtonIventLoginでログイン処理をしています。stubはSoapBindingStubです。
boolean done = false;

String queryS = "select Name , (中略) from CustomObject1";

qr =ButtonIventLogin.stub.query(queryS);
if(qr.getSize() > 0){
    while (!done) {
        for (int i=0;i<qr.getRecords().length;i++) {
            //―個々のデータの処理。Mapに収納するレベル
        }
        if(qr.isDone()){
            done = true;

        }else{
            qr = ButtonIventLogin.stub.queryMore(qr.getQueryLocator()); //―(A)
        }
    }
}

 

(A)の部分で、

『INVALID_QUERY_LOCATOR: Unable to find query cursor data for this QueryLocator, please retry your query.』

が発生します。

 

・発生するタイミングは様々です。

 初めて(A)を通る時に発生することもあれば、

 7~8回目で発生することもあります(2~4回目で発生することが多いです)。

 また、約9000件のデータをエラーなしに取得し終えることもあります。

 (今は開発中ですが、本番では約4万件のデータを取得したいと思っています)

・ログインしてからの時間はあまり経っていません(プログラムを流すまでに1分程度でも、10秒程度でもエラーはおきます)。

・昨日まで発生しなかったのですが、今日になって、そこより前のソースを何も触っていないのに、急に発生するようになりました。

・qo.setBatchSize(500);の部分を(50)や(1000)に変えてみても、様々なタイミングで同じエラーが発生します。

 

困ってしまいまして・・・。

原因と解決策をご存じの方がいらっしゃいましたら、よろしくお願いします。

 

――――――

追記

(A)より前の、qr =ButtonIventLogin.stub.query(queryS);の箇所で

『SERVER_UNAVAILABLE: Unable to complete the creation of the query cursor at this time, please retry your query later.』

も頻繁に発生するようになってしまいました。

ログインから時間はたっていません。

何かご存知の方、よろしくお願いします。

 

Best Answer chosen by Admin (Salesforce Developers) 
WanWanWanWan

『INVALID_QUERY_LOCATOR』のエラーはQueryLocatorが無効になったというメッセージのようです。

QueryLocatorには利用制限があるようです。

 

QueryLoacator 制限

http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_query_querylocator.htm

 

このエラーが発生する原因としては以下が考えられると思います。

 

 ・複数開発者で同じアカウントを利用してQueryを発行(QueryLocatorを取得)している。

 ・スレッドを使って実装している場合はスレッドの中でQueryを発行(QueryLocatorを取得)

 

プログラムの中でQueryを発行した後にすぐにループさせデータを取得開始しているのでQeuryLocatorの15分制限に

かかっている事はないと思いますが、

『INVALID_QUERY_LOCATOR: Unable to find query cursor data for this QueryLocator, please retry your query.』

のエラーはQueryを発行してから15分以降にQueryLocatorを使ったために発生したエラーに見えますね。

 

 

 

All Answers

WanWanWanWan

『INVALID_QUERY_LOCATOR』のエラーはQueryLocatorが無効になったというメッセージのようです。

QueryLocatorには利用制限があるようです。

 

QueryLoacator 制限

http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_query_querylocator.htm

 

このエラーが発生する原因としては以下が考えられると思います。

 

 ・複数開発者で同じアカウントを利用してQueryを発行(QueryLocatorを取得)している。

 ・スレッドを使って実装している場合はスレッドの中でQueryを発行(QueryLocatorを取得)

 

プログラムの中でQueryを発行した後にすぐにループさせデータを取得開始しているのでQeuryLocatorの15分制限に

かかっている事はないと思いますが、

『INVALID_QUERY_LOCATOR: Unable to find query cursor data for this QueryLocator, please retry your query.』

のエラーはQueryを発行してから15分以降にQueryLocatorを使ったために発生したエラーに見えますね。

 

 

 

This was selected as the best answer
matsumatsu

お返事いただいて、ありがとございます。

確認が遅れまして、返信が遅れました。申し訳ないです。

 

QueryLocatorの制限は15分なのですね。。

おっしゃっていただいている通り、15分もかかっていないと思うのですが、

念頭に入れたうえで、再確認したいと思います。