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>