users@jersey.java.net

Re: [Jersey] Jersey & OSGi <was> Re: [Jersey] Jersey 1.0.3 released

From: Paul Sandoz <Paul.Sandoz_at_Sun.COM>
Date: Thu, 30 Apr 2009 12:27:11 +0200

On Apr 29, 2009, at 10:31 PM, Richard Wallace wrote:

> On Wed, Apr 29, 2009 at 1:10 AM, Paul Sandoz <Paul.Sandoz_at_sun.com>
> wrote:
>>
>> On Apr 28, 2009, at 6:33 PM, Richard Wallace wrote:
>>
>>> Hey Paul,
>>>
>>> The context listener looks ok for the general approach, but still
>>> doesn't solve the problem when running in OSGi because there isn't
>>> really a concept of servlet listeners there (sure you can use Pax
>>> Web
>>> and their extensions, but as of right now there is no standard way
>>> of
>>> registering context listeners).
>>>
>>
>> Oh, i think i misunderstood, i thought a servlet container would
>> still be
>> used? if not then how would HTTP requests be dispatched?
>>
>> I guess i am not understanding the big picture of how things are
>> glued
>> together. When an instance of ServletContainer is obtained what
>> happens
>> next? would the ServletContainer be initialized by calling
>> Servlet.init(ServletConfig ) ?
>>
>
> There is a servlet container, but it's not used by deploying war
> files. Instead, bundles register Servlets with the HttpService
> <http://www.osgi.org/javadoc/r4v41/org/osgi/service/http/HttpService.html
> >.
> The servlet container behind the HttpService then handles initializing
> the Servlet after it's been registered.
>

OK.


>>
>>> For the OSGi use-case, it really would be nice if we had an
>>> additional
>>> constructor that takes a ResourceConfig (to be used as the default
>>> ResourceConfig) and an IoCComponentProviderFactory. This
>>> constructor
>>> could even be restricted to package-only access if the
>>> implementation
>>> of ServletContainerFactory I suggested lived in the
>>> com.sun.jersey.spi.container.servlet package.
>>>
>>
>> OK.
>>
>> One problem is that the ServletContainer does require access to the
>> ServletConfig/ServletContext or FilterConfig/ServletContext, which is
>> obtained when a servlet container calls the init(ServletConfig ) or
>> init(FilterConfig respectively).
>>
>
> Yup, that is done. The problem is, if you look at that HttpService
> interface, there is no way to register context listeners like you were
> talking about. Meaning that we couldn't use them to do the
> initialization of the ResourceConfig, etc.
>

OK, got it now!


>> Perhaps it would be best if the servlet factory returned instance of
>> Servlet?
>>
>
> That's fine, ServletContainer is already an instance of Servlet,
> isn't it?
>

Yes. So we can hide that we are using, or not, ServletContainer.

After being a little slow, i think understand and know what to do now!

After the 1.1.0-ea release i will work on this factory mechanism.

Paul.