Issue #2097 still exists on the development server; however, I just
committed a workaround. This workaround has a dependency on Apache Commons
Codec:

   http://commons.apache.org/codec/

I'm not aware of any issues in production. For convenience, here's the link
again to the source:


http://code.google.com/p/gaevfs/source/browse/trunk/src/com/newatlanta/appengine/taskqueue/Deferred.java

<http://code.google.com/p/gaevfs/source/browse/trunk/src/com/newatlanta/appengine/taskqueue/Deferred.java>Let
me know if you have any problems (or if you're using it
successfully--positive feedback is always welcomed!).

Vince

On Fri, Jan 1, 2010 at 1:42 AM, John Howe <[email protected]> wrote:

> I greatly appreciate the work that has been done here. But let me ask my
> question another way. Is it known that this does not work?
>
>
> On Thu, Dec 31, 2009 at 5:19 PM, John Howe <[email protected]> wrote:
>
>> I can't seem to find any additional postings on this topic and I'm not
>> sure what the conclusion for being able to use the Deferred capability
>> with the latest Java SDK release. I'm just wondering if Vince's
>> solution works on both server and development environments.
>>
>> On Dec 16, 10:42 am, David Chandler <[email protected]> wrote:
>> > Thanks, Vince.
>> >
>> > Regarding a way to access the Guice injector, I've figured out I can
>> > simply create and access the injector via a static factory, so no
>> > changes are needed to Deferred or Deferrable. This works for AppEngine
>> > since there is only one WAR per JVM. If there were more than web app,
>> > I'm not sure whether Guice ServletModules would work, but that's not
>> > an issue for now.
>> >
>> > /dmchttp://turbomanage.wordpress.com
>> >
>> > On Dec 2, 2:47 pm, Vince Bonfanti <[email protected]> wrote:
>> >
>> >
>> >
>> > > The behavior you're reporting is exactly the opposite of what I'm
>> seeing.
>> > > For me, deserialization always fails on the dev server and always
>> works in
>> > > production. What I'm seeing on the dev server is that the bytes
>> retrieved
>> > > from the task payload (req.getInputStream) are not the same bytes that
>> are
>> > > sent; the result is the StreamCorruptedException. Again, though, I
>> only see
>> > > this on the dev server and never in production. Can you send me an
>> example
>> > > that fails in production? I'd like to understand what's going on
>> before
>> > > applying the Base64 encoder workaround.
>> >
>> > > I'm not at all familiar with Guice, but I think I understand what
>> you're
>> > > trying to do. One thought I've had is that we could pass the
>> > > HttpServletRequest object to the doTask() method. This would allow you
>> to
>> > > add attributes (objects) to the HttpServletRequest within your Guice
>> filter
>> > > and then retrieve them within your doTask() method.
>> >
>> > > Vince
>> >
>> > > On Fri, Nov 27, 2009 at 7:53 PM, David Chandler <
>> [email protected]>wrote:
>> >
>> > > > I've solved the serialization problems by Base64 encoding the
>> > > > serialized task before calling payload() and decoding it in the
>> > > > deserialize(HttpServletRequest) method. I'm guessing something in
>> the
>> > > > task queue chain (either task queue payload storage or the servlet
>> > > > call when task is run) has problems transmitting the binary data, as
>> > > > the exception I was getting at one point was a
>> > > > java.io.StreamCorruptedException.
>> >
>> > > > I'll send another patch to Vince. My solution works, but I'm not
>> > > > completely satisfied that I've diagnosed the problem correctly. I
>> used
>> > > > Apache commons-codec for Base64. Is it safe to use com.sun.misc
>> > > > instead? I see it in appengine.repackaged chain, as well, but don't
>> > > > see it as part of an official Google API.
>> >
>> > > > Somewhat related, I've wired up the Deferred servlet through the
>> > > > GuiceFilter so I can pass a Guice injector to Deferrable tasks.
>> Since
>> > > > the task objects are not created through Guice, but rather by
>> > > > deserializing, I modified doTask() to accept an additional Injector
>> > > > argument. We probably don't want that in the official version of
>> > > > Deferrable, though.
>> >
>> > > > Is there a better way for my Deferrable classes to get access to a
>> > > > Guice "context"? I'm trying to avoid Guice.createInjector(), as it
>> > > > results in a duplicate PersistenceManagerFactory being created since
>> > > > other servlets are also being served through Guice.
>> >
>> > > > Thank you,
>> > > > /dmc
>> >
>> > > > On Nov 27, 5:42 pm, David Chandler <[email protected]> wrote:
>> > > > > Jeff,
>> >
>> > > > > I'm seeing problems with deserialization, too, when deployed on
>> > > > > AppEngine. In dev, I can deserialize(serialize(task)) and it works
>> > > > > just fine, but not so in AppEngine. I get the same error whether
>> the
>> > > > > task payload is the serialized Deferrable task itself or just the
>> Key
>> > > > > with the task in the db, but I haven't yet figured out which is
>> the
>> > > > > cause of the problem.
>> >
>> > > > > The error I'm getting on AppEngine is invalid type code: 00 in
>> > > > > Deferred.deserialize method. I've tried Base64 encoding after
>> > > > > serialization in case it's related to special binary escape
>> sequences
>> > > > > that happen to be in the serialized object stream but still no
>> > > > > success.
>> >
>> > > > > I'm pretty sure AppEngine has written some custom code to do
>> > > > > serialization because I previously got an AppEngine acess control
>> > > > > exception when calling enableResolveObject(true) in a subclass of
>> > > > > ObjectInputStream, and I'm wondering if that's in play somehow...
>> >
>> > > > > /dmc
>>
>> --
>>
>> You received this message because you are subscribed to the Google Groups
>> "Google App Engine for Java" group.
>> To post to this group, send email to
>> [email protected].
>> To unsubscribe from this group, send email to
>> [email protected]<google-appengine-java%[email protected]>
>> .
>> For more options, visit this group at
>> http://groups.google.com/group/google-appengine-java?hl=en.
>>
>>
>>
>  --
> You received this message because you are subscribed to the Google Groups
> "Google App Engine for Java" group.
> To post to this group, send email to
> [email protected].
> To unsubscribe from this group, send email to
> [email protected]<google-appengine-java%[email protected]>
> .
> For more options, visit this group at
> http://groups.google.com/group/google-appengine-java?hl=en.
>

--

You received this message because you are subscribed to the Google Groups 
"Google App Engine for Java" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-appengine-java?hl=en.


Reply via email to