My work around:

  try {
      writeChannel.closeFinally();
    } catch (IllegalStateException e) {
      success = false;
      log.severe("close(): Error 6: writeChannel.closeFinally() error " + 
e.toString());
    } catch (IOException e) {
      success = false;
      log.severe("close(): Error 7: writeChannel.closeFinally() error " + 
e.toString());
    }
    
    if (success == false) {
      log.severe("close(): Error 8: quitting...");
      return;
    }
    
    BlobKey blobKey = fileService.getBlobKey(file);
    
    // try by finding filename
    if (blobKey == null) {
      log.severe("close(): Blobkey was null. 1. trying workaround.");
      blobKey = tryfindingBlobKey();
    }
    
    // try waiting then check fileservice again
    if (blobKey == null) {
      log.info("close(): 2. trying to get it from fileservice again.");
      try {
        wait(2000);
      } catch (InterruptedException e) {
        log.warning("close(): 3. couldn't wait 2 seconds.");
        e.printStackTrace();
      }
      blobKey = fileService.getBlobKey(file);
    }
    
    // try finding the filename again
    if (blobKey == null) {
      log.severe("close(): 4. Blobkey was null. trying workaround.");
      blobKey = tryfindingBlobKey();
    }
    
    // quit if haven't found it
    if (blobKey == null) {
      success = false;
      log.severe("close(): 5. Workaround, Blobkey was null agian. Couldn't find 
the blobkey using the filename");
      return;
    }
  }

  private BlobKey tryfindingBlobKey() {
    log.info("tryfindingBlobKey(): filename=" + filename);
    
    String skey = null;
    DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
    try {
      Query q = new Query("__BlobInfo__");
      q.addFilter("filename", FilterOperator.EQUAL, filename);
      PreparedQuery e = datastore.prepare(q);
      Iterator<Entity> itr = e.asIterator();
      while (itr.hasNext()) {
        Entity entity = itr.next();
        Key k = entity.getKey(); 
        // #GAE needs a k.getStringId(); // only has k.getId();
        String sk = k.toString();
        String sbk = sk.replaceFirst(".*?\"", "");
        sbk = sbk.replaceFirst("\".*", "");
        skey = sbk;
      }
    } catch (Exception e) {
      success = false;
      log.log(Level.SEVERE, "decode(): ERROR: ", e);
    } 
    
    BlobKey blobKey = null;
    if (skey != null) {
      blobKey = new BlobKey(skey);
    } else {
      log.warning("tryfindingBlobKey(): warn: wasn't able to parse the blobkey 
or find the file: skey=" + skey);
    }
    
    return blobKey;
  }


Brandon Donnelson
http://gwt-examples.googlecode.com



-- 
You received this message because you are subscribed to the Google Groups 
"Google App Engine for Java" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/google-appengine-java/-/eDBmbFdJX01TS2tK.
To post to this group, send email to google-appengine-java@googlegroups.com.
To unsubscribe from this group, send email to 
google-appengine-java+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-appengine-java?hl=en.

Reply via email to