You need to sign in to do that
Don't have an account?
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.』
も頻繁に発生するようになってしまいました。
ログインから時間はたっていません。
何かご存知の方、よろしくお願いします。
『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
『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を使ったために発生したエラーに見えますね。
お返事いただいて、ありがとございます。
確認が遅れまして、返信が遅れました。申し訳ないです。
QueryLocatorの制限は15分なのですね。。
おっしゃっていただいている通り、15分もかかっていないと思うのですが、
念頭に入れたうえで、再確認したいと思います。