Remote API + File API

111 views
Skip to first unread message

André Salvati

unread,
Aug 18, 2011, 10:05:20 AM8/18/11
to Google App Engine
Hi,

Maybe I've misunderstood docs, but I thought it was possible an
external application to integrate with App Engine by creating a file
in Blobstore. Am I doing something wrong?? Any way to accomplish
this??

http://code.google.com/appengine/docs/java/blobstore/overview.html#Writing_Files_to_the_Blobstore

Thanks.

Code:

public class RemoteAPI {

public static void main(String[] args) throws IOException {

String username = "xx...@gmail.com";
String password = "xxxxx";


RemoteApiOptions options = new RemoteApiOptions()
.server("primepartes.appspot.com", 443)
.credentials(username, password);
RemoteApiInstaller installer = new RemoteApiInstaller();
installer.install(options);

FileService fileService = FileServiceFactory.getFileService();
BlobstoreService blobstoreService =
BlobstoreServiceFactory.getBlobstoreService();

AppEngineFile file = fileService.createNewBlobFile("text/
plain");

FileWriteChannel writeChannel =
fileService.openWriteChannel(file, true);

PrintWriter out = new
PrintWriter(Channels.newWriter(writeChannel, "UTF8"));
out.println("The woods are lovely dark and deep.");
out.println("But I have promises to keep.");

out.close();
writeChannel.closeFinally(); // This line throwns the excepion
bellow

..............

java.lang.IllegalStateException: The current request does not hold the
exclusive lock.
at
com.google.appengine.api.files.FileServiceImpl.close(FileServiceImpl.java:
315)
at
com.google.appengine.api.files.FileWriteChannelImpl.closeFinally(FileWriteChannelImpl.java:
78)
at br.com.teste.RemoteAPI.main(RemoteAPI.java:82)

Wen (Google)

unread,
Aug 18, 2011, 4:35:39 PM8/18/11
to Google App Engine
I read the doc. you pointed out as such: when "out.close()" was
called, the "writeChannel" was not closed; when "readChannel.close()"
was called, the "reader" itself was not closed. So, looks like you
only need to do one or the other. It may have to do with how closing
is implemented on the channels.

So remove "out.close()", and see if the exception would go away.


Wen


On Aug 18, 7:05 am, André Salvati <andre.f.salv...@gmail.com> wrote:
> Hi,
>
> Maybe I've misunderstood docs, but I thought it was possible an
> external application to integrate with App Engine by creating a file
> in Blobstore. Am I doing something wrong?? Any way to accomplish
> this??
>
> http://code.google.com/appengine/docs/java/blobstore/overview.html#Wr...
>
> Thanks.
>
> Code:
>
> public class RemoteAPI {
>
>     public static void main(String[] args) throws IOException {
>
>         String username = "x...@gmail.com";

André Salvati

unread,
Aug 22, 2011, 5:56:03 PM8/22/11
to Google App Engine
Without "out.close()" throws this exception on or
"writeChannel.closeFinally()":

Exception in thread "main" java.lang.IllegalStateException: The
current request does not hold the exclusive lock.
at
com.google.appengine.api.files.FileServiceImpl.close(FileServiceImpl.java:
315)
at
com.google.appengine.api.files.FileWriteChannelImpl.closeFinally(FileWriteChannelImpl.java:
78)
at br.com.teste.RemoteAPI.main(RemoteAPI.java:94)


Excuse me, bill is not enabled for my app, but exception should be
clear about this.

"Note: The Blobstore API is only available for apps with billing
enabled. You still get an amount of quota for free, but billing must
be enabled to use it."

http://code.google.com/appengine/docs/quotas.html#Blobstore

Thanks.

Ronoaldo José de Lana Pereira

unread,
Dec 9, 2011, 12:45:42 PM12/9/11
to google-a...@googlegroups.com
Sorry to revive an old thread

Even when billing is enabled, this seems to be a problem, because remote_api will issue diferent requests and the closeFinally() request won't have the lock anyway, after you create the file.

Any way to acomplish this?

ken.wainwright - gerzump.com

unread,
Jan 2, 2012, 7:49:27 AM1/2/12
to Google App Engine
I have exactly the same problem, and when I set "lock = true;
writeChannel = fileService.openWriteChannel(file, lock);"
I get a "com.google.appengine.api.files.LockException" - did you ever
resolve this issue.



On Dec 9 2011, 5:45 pm, Ronoaldo José de Lana Pereira

Stuart Langley

unread,
Jan 27, 2013, 2:54:25 AM1/27/13
to google-a...@googlegroups.com
Why not just use the Google Cloud Storages APIs then to upload directly to a bucket that you then access from you GAE application?

On Sunday, 27 January 2013 01:37:34 UTC+11, Andrew Kunkel wrote:
I am really hoping to find an answer for this.  I have been searching for the last week without any luck.  I really need a method to add large numbers of images on a regular basis from a remote location and this looks like it could be a solution if I could get past the exception.

On Thursday, November 22, 2012 4:31:59 AM UTC-5, Abdul Nasir wrote:
If you want to read a file from the cloud storage, it works fine. but writing creates problem. have you solved this issue? If yes, please guide me.
Reply all
Reply to author
Forward
0 new messages