users@jersey.java.net

Re: [Jersey] Re: Atmosphere Spade Server in OSGi

From: Jeanfrancois Arcand <Jeanfrancois.Arcand_at_Sun.COM>
Date: Tue, 29 Sep 2009 22:21:05 -0400

Salut,

Paul Sandoz wrote:
>
> On Sep 28, 2009, at 11:29 PM, Vlatko Davidovski wrote:
>
>> Thanks for your feedback Paul! Could you be more specific in the steps
>> to be taken.
>
> First, I think it is going to require some changes to the Atmosphere
> spade server to ensure better programatic configuration of Jersey:
>
> - The spade server needs to support registering of an instance or a
> class of Application.
>
> Jean-Francois, that should be easy to declare the class of the
> Application to use in the AtmosphereAdapter. You can also declare an
> instance by directly instantiating Jersey's ServletContainer and passing
> the instance to the constructor (in the latest SNAPSHOT source).
>

I need to work on that part as the AtmosphereAdapter can be used without
  Jersey (atmosphere-core), and It will bring a hard dependency if I
instantiate the Servlet directly.

Thanks

-- Jeanfrancois


>
> Second, the hack around OSGi would be to obtain a list of all the
> classes registered in the META-INF/services files. The following files
> are relevant in the spade-server jar:
>
> META-INF/services/com.sun.jersey.spi.inject.InjectableProvider
> META-INF/services/com.sun.jersey.spi.container.WebApplicationProvider
> META-INF/services/jersey-server-components
> META-INF/services/javax.ws.rs.ext.MessageBodyReader
> META-INF/services/javax.ws.rs.ext.MessageBodyWriter
> META-INF/services/com.sun.jersey.spi.container.ContainerProvider
> META-INF/services/com.sun.jersey.spi.StringReaderProvider
> META-INF/services/com.sun.jersey.spi.container.ContainerRequestFilter
>
> META-INF/services/com.sun.jersey.server.impl.model.method.dispatch.ResourceMethodDispatchProvider
>
> META-INF/services/com.sun.jersey.spi.HeaderDelegateProvider
>
> In your ResourceConfig you can add classes declared in the above files
> (see the end of the email for the complete set of classes). Note that
> not all classes may be relevant depending on your
> dependencies/requirements. But i would start by including everything and
> then pick off classes you do not require (it is most likely to be stuff
> in MessageBodyReader and MessageBodyWriter related to say JAXB to Atom
> etc).
>
>
> Third, you will need to explicitly register the JAX-RS RuntmeDelegate
> class declared in:
>
> META-INF/services/javax.ws.rs.ext.RuntimeDelegate
>
> See:
>
> https://jsr311.dev.java.net/nonav/javadoc/javax/ws/rs/ext/RuntimeDelegate.html#setInstance%28javax.ws.rs.ext.RuntimeDelegate%29
>
>
> RuntimeDelegate.setInstance(new
> com.sun.jersey.server.impl.provider.RuntimeDelegate());
>
> This should be done in the static main method of your application before
> any JAX-RS/Jersey classes are utilized.
>
>
> A caveat, i dunno if the above is more complicated than working around
> the OSGi issues as per the blog entry you sent a link to.
>
> Paul.
>
>
>
>
> com.sun.jersey.server.impl.model.method.dispatch.VoidVoidDispatchProvider
> com.sun.jersey.server.impl.model.method.dispatch.HttpReqResDispatchProvider
> com.sun.jersey.server.impl.model.method.dispatch.MultipartFormDispatchProvider
>
> com.sun.jersey.server.impl.model.method.dispatch.FormDispatchProvider
> com.sun.jersey.server.impl.model.method.dispatch.EntityParamDispatchProvider
>
> com.sun.jersey.core.impl.provider.header.LocaleProvider
> com.sun.jersey.core.impl.provider.header.EntityTagProvider
> com.sun.jersey.core.impl.provider.header.MediaTypeProvider
> com.sun.jersey.core.impl.provider.header.CacheControlProvider
> com.sun.jersey.core.impl.provider.header.NewCookieProvider
> com.sun.jersey.core.impl.provider.header.CookieProvider
> com.sun.jersey.core.impl.provider.header.URIProvider
> com.sun.jersey.core.impl.provider.header.DateProvider
> com.sun.jersey.core.impl.provider.header.StringProvider
> com.sun.jersey.server.impl.model.parameter.multivalued.StringReaderProviders$TypeFromStringEnum
>
> com.sun.jersey.server.impl.model.parameter.multivalued.StringReaderProviders$TypeValueOf
>
> com.sun.jersey.server.impl.model.parameter.multivalued.StringReaderProviders$TypeFromString
>
> com.sun.jersey.server.impl.model.parameter.multivalued.StringReaderProviders$StringConstructor
>
> com.sun.jersey.server.impl.model.parameter.multivalued.StringReaderProviders$DateProvider
>
> com.sun.jersey.server.impl.model.parameter.multivalued.JAXBStringReaderProviders$RootElementProvider
>
> com.sun.jersey.server.impl.container.httpserver.HttpHandlerContainerProvider
>
> com.sun.jersey.server.impl.container.grizzly.GrizzlyContainerProvider
> com.sun.jersey.server.impl.container.filter.NormalizeFilter
> com.sun.jersey.server.impl.container.WebApplicationProviderImpl
> com.sun.jersey.core.impl.provider.xml.SAXParserContextProvider
> com.sun.jersey.core.impl.provider.xml.XMLStreamReaderContextProvider
> com.sun.jersey.core.impl.provider.xml.DocumentBuilderFactoryProvider
> com.sun.jersey.core.impl.provider.xml.TransformerFactoryProvider
> com.sun.jersey.core.impl.provider.entity.StringProvider
> com.sun.jersey.core.impl.provider.entity.ByteArrayProvider
> com.sun.jersey.core.impl.provider.entity.FileProvider
> com.sun.jersey.core.impl.provider.entity.InputStreamProvider
> com.sun.jersey.core.impl.provider.entity.DataSourceProvider
> com.sun.jersey.core.impl.provider.entity.RenderedImageProvider
> com.sun.jersey.core.impl.provider.entity.MimeMultipartProvider
> com.sun.jersey.core.impl.provider.entity.FormProvider
> com.sun.jersey.core.impl.provider.entity.FormMultivaluedMapProvider
> com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$App
> com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$Text
> com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$General
> com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$App
> com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$Text
> com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$General
> com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$App
> com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$Text
> com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$General
> com.sun.jersey.core.impl.provider.entity.ReaderProvider
> com.sun.jersey.core.impl.provider.entity.DocumentProvider
> com.sun.jersey.core.impl.provider.entity.SourceProvider$StreamSourceReader
> com.sun.jersey.core.impl.provider.entity.SourceProvider$SAXSourceReader
> com.sun.jersey.core.impl.provider.entity.SourceProvider$DOMSourceReader
> com.sun.jersey.core.impl.provider.entity.XMLRootObjectProvider$App
> com.sun.jersey.core.impl.provider.entity.XMLRootObjectProvider$Text
> com.sun.jersey.core.impl.provider.entity.XMLRootObjectProvider$General
> com.sun.jersey.core.impl.provider.entity.EntityHolderReader
> com.sun.jersey.server.impl.template.ViewableMessageBodyWriter
> com.sun.jersey.core.impl.provider.entity.StringProvider
> com.sun.jersey.core.impl.provider.entity.ByteArrayProvider
> com.sun.jersey.core.impl.provider.entity.FileProvider
> com.sun.jersey.core.impl.provider.entity.InputStreamProvider
> com.sun.jersey.core.impl.provider.entity.DataSourceProvider
> com.sun.jersey.core.impl.provider.entity.RenderedImageProvider
> com.sun.jersey.core.impl.provider.entity.MimeMultipartProvider
> com.sun.jersey.core.impl.provider.entity.FormProvider
> com.sun.jersey.core.impl.provider.entity.FormMultivaluedMapProvider
> com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$App
> com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$Text
> com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$General
> com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$App
> com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$Text
> com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$General
> com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$App
> com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$Text
> com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$General
> com.sun.jersey.core.impl.provider.entity.ReaderProvider
> com.sun.jersey.core.impl.provider.entity.DocumentProvider
> com.sun.jersey.core.impl.provider.entity.StreamingOutputProvider
> com.sun.jersey.core.impl.provider.entity.SourceProvider$SourceWriter
> org.atmosphere.core.BroadcasterInjector
> org.atmosphere.core.BroadcasterLookupInjector
> org.atmosphere.core.AtmosphereEventInjector
>
>
>> Unfortunately I am not that much fluent with all the structure of
>> Jersey and I just recently started using Atmosphere Spade Server.
>> It would be great if you could step by step the required actions and I
>> will do my best to get this thing working under OSGi. At least with
>> the quick fix.
>>
>> Thanks!
>> Vlatko
>>
>>
>> On Sep 28, 2009, at 8:35 PM, Paul Sandoz wrote:
>>
>>>
>>> On Sep 28, 2009, at 3:41 PM, Vlatko Davidovski wrote:
>>>
>>>> Hi Paul!
>>>>
>>>> Thanks so much for the fast reply.
>>>> I was quite happy to see Atmosphere Spade Server as a module in the
>>>> system I am developing (a RESTful device gateway for automation)
>>>> because of the following reasons:
>>>> - it can run standalone
>>>> - supports REST
>>>> - supports Comet
>>>>
>>>> However, as I based my system on OSGi, I am now in a serious dilemma
>>>> on how to continue. Do you have any suggestions on quick fixes I
>>>> could do to get atmosphere (the Jersey part of it) under OSGi until
>>>> a decent solution comes from the dev team?
>>>>
>>>
>>> It seems that you need some changes to the spade server to register
>>> an implementation of Application/ResourceConfig? that should be
>>> possible.
>>>
>>> The tricky but will be supporting Jersey with META-INF/service.
>>>
>>> As a quick fix you could register all the classes declared in those
>>> files for jersey-core and jersey-server and the atmosphere (see
>>> jersey-server-components) in the ResourceConfig e.g. you could have a
>>> special ResourceConfig that does that from which you extend to add
>>> your application stuff.
>>>
>>> Paul.
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: users-unsubscribe_at_atmosphere.dev.java.net
>>> For additional commands, e-mail: users-help_at_atmosphere.dev.java.net
>>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe_at_jersey.dev.java.net
>> For additional commands, e-mail: users-help_at_jersey.dev.java.net
>>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe_at_atmosphere.dev.java.net
> For additional commands, e-mail: users-help_at_atmosphere.dev.java.net
>