dev@jersey.java.net

RE: [Jersey] OSGi Support

From: David Tkaczyk <djt69_at_comcast.net>
Date: Tue, 26 Jan 2010 09:08:58 -0500

OK Paul. thank you. do you have an ETA for the next release? And what will
it be, 1.1.6? Any hints from Jakub would be greatly appreciated.

 

  _____

From: Paul.Sandoz_at_Sun.COM [mailto:Paul.Sandoz_at_Sun.COM]
Sent: Tuesday, January 26, 2010 5:02 AM
To: dev_at_jersey.dev.java.net
Subject: Re: [Jersey] OSGi Support

 

Hi David,

 

We decided to defer OSGi to the next release (which will occur when OSGi
support is ready). We were not happy with the degree of testing.

 

For now you need to check out the Jersey trunk

 

  svn checkout https://jersey.dev.java.net/svn/jersey/trunk/jersey jersey
--username username

 

and do:

 

  cd osgi

  mvn clean install

 

and then use those built OSGi specific maven artifacts.

 

Jakub can provide further details, especally w.r.t. your code.

 

Paul.

 

On Jan 25, 2010, at 7:59 PM, David Tkaczyk wrote:





Hi Paul,

 

I had hoped that 1.1.5 would fix my issues with felix/grizzly/jersey. I am
still unable to get grizzly to load my jersey servlet properly. I've tried
a bunch of different things with no luck. I see a test case that uses
embedded grizzly, but none that actually use HttpService. The Grizzly test
cases use the Jersey client, but do not create a Jersey Servlet. I have
posted on Grizzly as well with no luck yet.

 

I am able to successfully get an HttpService object from Felix and the
Grizzly bundle. My trouble happens when trying to register a Jersey Servlet
with this HttpService object. I'll post my code and the error message
below. There's not much to it, but I can't get it to work.

 

Can you please have your OSGi guy see if he can get this to work? There's
got to be something small I'm missing. I am getting very desperate to get
this to finally hitch up.

 

Thanks for all your help past and present,

Dave

 

package camiant.osgi.msr.rest;

 

import org.osgi.framework.ServiceReference;

import org.osgi.service.http.HttpService;

import org.osgi.util.tracker.ServiceTrackerCustomizer;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import com.sun.jersey.spi.container.servlet.ServletContainer;

 

public class RestGrizzlyServiceTrackerCustomizer implements
ServiceTrackerCustomizer {

 

  private static final Logger LOGGER =
LoggerFactory.getLogger(RestGrizzlyServiceTrackerCustomizer.class);

  private HttpService grizzlyService = null;

 

  @Override

  public Object addingService(ServiceReference serviceRef) {

    LOGGER.info("Adding service: " +
serviceRef.getBundle().getSymbolicName());

   

    grizzlyService =
(HttpService)serviceRef.getBundle().getBundleContext().getService(serviceRef
);

    try {

      ServletContainer jerseyServletContainer = new ServletContainer(new
MSRRestApplication());

      grizzlyService.registerServlet("/rs", jerseyServletContainer, null,
null);

    } catch (Exception e) {

      e.printStackTrace();

      grizzlyService = null;

    }

 

    return grizzlyService;

  }

 

  @Override

  public void modifiedService(ServiceReference serviceRef, Object
httpService) {

    LOGGER.info("Modifying service: " +
serviceRef.getBundle().getSymbolicName());

    removedService(serviceRef, httpService);

    addingService(serviceRef);

  }

 

  @Override

  public void removedService(ServiceReference serviceRef, Object
httpService) {

    LOGGER.info("Removing service: " +
serviceRef.getBundle().getSymbolicName());

    ((HttpService)httpService).unregister("/rs");

    serviceRef.getBundle().getBundleContext().ungetService(serviceRef);

    httpService = null;

  }

}

 

package camiant.osgi.msr.rest;

 

import java.util.Collections;

import java.util.Set;

import javax.ws.rs.ApplicationPath;

import javax.ws.rs.core.Application;

import camiant.osgi.msr.rest.resource.Resource1;

 

@ApplicationPath("/rs")

public class MSRRestApplication extends Application {

  @Override

  public Set<Class<?>> getClasses() {

    return Collections.<Class<?>>singleton(Resource1.class);

  }

}

 

package camiant.osgi.msr.rest.resource;

 

import javax.ws.rs.GET;

import javax.ws.rs.Path;

import javax.ws.rs.Produces;

 

@Path("/msr")

public class Resource1 {

  @GET

  @Path("/keytypes")

  @Produces("text/plain")

  public String getKeyTypes() {

    return "this is a key type!!!!!!!!!";

  }

}

 

2010-01-25 13:54:37,675-0500 INFO RestGrizzlyServiceTrackerCustomizer:19 -
Adding service: com.sun.grizzly.osgi.grizzly-httpservice-bundle

ERROR: EventDispatcher: Error during dispatch.
(com.sun.jersey.spi.service.ServiceConfigurationError:
com.sun.jersey.spi.container.WebApplicationProvider: The class
com.sun.jersey.server.impl.container.WebApplicationProviderImpl implementing
provider interface com.sun.jersey.spi.container.WebApplicationProvider could
not be instantiated: null)

com.sun.jersey.spi.service.ServiceConfigurationError:
com.sun.jersey.spi.container.WebApplicationProvider: The class
com.sun.jersey.server.impl.container.WebApplicationProviderImpl implementing
provider interface com.sun.jersey.spi.container.WebApplicationProvider could
not be instantiated: null

            at
com.sun.jersey.spi.service.ServiceFinder.fail(ServiceFinder.java:380)

            at
com.sun.jersey.spi.service.ServiceFinder.access$600(ServiceFinder.java:144)

            at
com.sun.jersey.spi.service.ServiceFinder$LazyObjectIterator.hasNext(ServiceF
inder.java:683)

            at
com.sun.jersey.spi.container.WebApplicationFactory.createWebApplication(WebA
pplicationFactory.java:61)

            at
com.sun.jersey.spi.container.servlet.ServletContainer.create(ServletContaine
r.java:325)

            at
com.sun.jersey.spi.container.servlet.ServletContainer$InternalWebComponent.c
reate(ServletContainer.java:240)

            at
com.sun.jersey.spi.container.servlet.WebComponent.load(WebComponent.java:548
)

            at
com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:201
)

            at
com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.
java:307)

            at
com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.
java:470)

            at javax.servlet.GenericServlet.init(GenericServlet.java:242)

            at
com.sun.grizzly.http.servlet.ServletAdapter.loadServlet(ServletAdapter.java:
428)

            at
com.sun.grizzly.osgi.httpservice.OSGiServletAdapter.startServlet(OSGiServlet
Adapter.java:99)

            at
com.sun.grizzly.osgi.httpservice.OSGiMainAdapter.registerServletAdapter(OSGi
MainAdapter.java:178)

            at
com.sun.grizzly.osgi.httpservice.HttpServiceImpl.registerServlet(HttpService
Impl.java:92)

            at
camiant.osgi.msr.rest.RestGrizzlyServiceTrackerCustomizer.addingService(Rest
GrizzlyServiceTrackerCustomizer.java:24)

            at
org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker
.java:896)

            at
org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:261)

            at
org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:233)

            at
org.osgi.util.tracker.ServiceTracker$Tracked.serviceChanged(ServiceTracker.j
ava:840)

            at
org.apache.felix.framework.util.EventDispatcher.invokeServiceListenerCallbac
k(EventDispatcher.java:878)

            at
org.apache.felix.framework.util.EventDispatcher.fireEventImmediately(EventDi
spatcher.java:732)

            at
org.apache.felix.framework.util.EventDispatcher.fireServiceEvent(EventDispat
cher.java:662)

            at
org.apache.felix.framework.Felix.fireServiceEvent(Felix.java:3587)

            at org.apache.felix.framework.Felix.access$000(Felix.java:40)

            at
org.apache.felix.framework.Felix$1.serviceChanged(Felix.java:625)

            at
org.apache.felix.framework.ServiceRegistry.registerService(ServiceRegistry.j
ava:90)

            at
org.apache.felix.framework.Felix.registerService(Felix.java:2711)

            at
org.apache.felix.framework.BundleContextImpl.registerService(BundleContextIm
pl.java:252)

            at
org.apache.felix.framework.BundleContextImpl.registerService(BundleContextIm
pl.java:230)

            at
com.sun.grizzly.osgi.httpservice.Activator.start(Activator.java:89)

            at
org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.jav
a:639)

            at
org.apache.felix.framework.Felix.activateBundle(Felix.java:1700)

            at org.apache.felix.framework.Felix.startBundle(Felix.java:1622)

            at
org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1077)

            at
org.apache.felix.framework.StartLevelImpl.run(StartLevelImpl.java:264)

            at java.lang.Thread.run(Thread.java:619)

Caused by: java.lang.ClassCastException

            at java.lang.Class.cast(Class.java:2990)

            at
com.sun.jersey.spi.service.ServiceFinder$LazyObjectIterator.hasNext(ServiceF
inder.java:641)

            ... 34 more

->

 

  _____

From: Paul.Sandoz_at_Sun.COM [mailto:Paul.Sandoz_at_Sun.COM]
Sent: Tuesday, January 05, 2010 4:11 AM
To: dev_at_jersey.dev.java.net
Subject: Re: [Jersey] OSGi Support

 

 

On Jan 4, 2010, at 7:02 PM, David Tkaczyk wrote:






Thanks Paul -

 

I read your response. I'd be happy to do a bit of testing when 1.5.1 is
ready for beta/release/candidate/whatever. My environment is
Felix/Grizzly/Jersey.

 

 

Great. We will make an announcement when Jakub has something available in
the trunk and SNAPSHOT builds.

 

Paul.

 



Dave

 


  _____


From: Paul.Sandoz_at_Sun.COM [mailto:Paul.Sandoz_at_Sun.COM]
Sent: Tuesday, December 29, 2009 5:31 AM
To: dev_at_jersey.dev.java.net
Subject: Re: [Jersey] OSGi Support

 

Hi David,

 

I will reply fully to your email on the users list.

 

Paul.

 

On Dec 28, 2009, at 9:03 PM, David Tkaczyk wrote:









Hi,

 

I understand that Jersey 1.1.5 will support OSGi. Is there an estimated
delivery date for this version? In the meantime, does anyone have an
example using Felix/HttpService? I have tried 1.1.5 ea and 1.1.4.1 and it
won't find my resource class no matter what I try. There are a few
seemingly outdated examples on the web that I could not get working either.
I keep telling myself I can't be the only one with this problem. Or should
I just be patient and wait for the official release?

 

I have posted a similar question on the "users" mailing list as well.

 

Thanks,
Dave

 

David Tkaczyk

Member of Technical Staff

Office: 508-303-4162

Fax: 508-486-9595

 

 
<http://www.fiercewireless.com/special-reports/camiant-top-wireless-company-
2009-fiercewireless-fierce-15> <image001.gif>

 

 <http://www.camiant.com> www.camiant.com

200 Nickerson Road, Marlborough, MA 01752-4603 USA

 

 <http://twitter.com/camiant> <image002.gif>