dev@jsr311.java.net

RE: JSR311: Response isn't adequate

From: Larry Cable <lcable_at_bea.com>
Date: Fri, 29 Feb 2008 11:23:15 -0800

Hey Marc, some containers would allow you to optionally disable (thru depl descriptors) this auto Tx termination
feature, or more typically (as in the case of WLS) we have an extension to the Servlet API that allows an application
to continue writing to the output stream beyond the invocation of Servlet.service() and thus maintains the Tx for the
lifetime of that request (which is subsequently terminated at os.close()).

You might want to talk with the Servlet 3.0 EG to see what their plans are in this regard as I recall when I read their
JSR that providing some support for this was planned ...

Hope this helps

- Larry



From: Marc Hadley
Sent: Fri 2/29/2008 10:39 AM
To: dev_at_jsr311.dev.java.net
Subject: Re: JSR311: Response isn't adequate


On Feb 29, 2008, at 1:20 PM, Bill Burke wrote:
>
> Marc Hadley wrote:
>> On Feb 28, 2008, at 12:10 PM, Bill Burke wrote:
>>>
>>> And I've already told you that this just not cut it for specific
>>> use cases (Blobs). It is going to make EJB integration(really
>>> anybody that uses JTA) unusable in those cases. I don't think
>>> Lobs are an unreasonable use case to support.
>>>
>>>> - In a servlet container you can inject HttpServletResponse and
>>>> use the OutputStream from that but you'll have to set any headers
>>>> yourself before you commence writing.
>>>
>>> So, anything that doesn't fit the @Provider model, we'll have to
>>> escape to Servlet API or worse, have our own vendor specific
>>> extension for? Hmmmm...All because we can't inject an OutputStream.
>>>
>> I'm not I understand why blobs don't fit the provider model ? If
>> the provider runs in the same connection+transaction scope as the
>> resource method and can be injected with all the same stuff what
>> doesn't work ? Sorry if I'm being dense here.
>
>
> That's the thing, the provider has to run in the same transaction
> scope as the resource. Every container I know that does
> transactions usually ends the transaction before a response is sent
> back to the client. (a.k.a EJB TransAttribute.REQUIRED). You
> basically wouldn't be able to use container managed transactions.
> Are you following me? I don't know if I'm being clear.
>
So how would you stream back a blob in servlet, if reading the data
requires an open transaction but the container closes it before
sending the response ?

Marc.

>
>> Injecting an OutputStream is only half the work, if you still want
>> to be able to use Response to specify headers then you'd either
>> have to call that first and somehow pass that to the runtime then
>> start writing to the output stream or we'd have to buffer the
>> output waiting for the method to complete and return the response.
>> Again, sorry if I missed something, I'm still catching up from a
>> few days vacation.
>
> Don't want the buffering. That could be done in the current model.
> I want the ability to stream LOBs and again, some DBs require a
> connection to be open while you're reading a LOB.
>
> --
> Bill Burke
> JBoss, a division of Red Hat
> http://bill.burkecentral.com
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe_at_jsr311.dev.java.net
> For additional commands, e-mail: dev-help_at_jsr311.dev.java.net
>

---
Marc Hadley <marc.hadley at sun.com>
CTO Office, Sun Microsystems.
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe_at_jsr311.dev.java.net
For additional commands, e-mail: dev-help_at_jsr311.dev.java.net
Notice:  This email message, together with any attachments, may contain information  of  BEA Systems,  Inc.,  its subsidiaries  and  affiliated entities,  that may be confidential,  proprietary,  copyrighted  and/or legally privileged, and is intended solely for the use of the individual or entity named in this message. If you are not the intended recipient, and have received this message in error, please immediately return this by email and then delete it.