users@jersey.java.net

Re: [Jersey] Dependency injection jersey + grizzly

From: Paul Sandoz <Paul.Sandoz_at_oracle.com>
Date: Tue, 5 Oct 2010 17:42:08 +0200

Hi,

How are you creating the complete jar?

You need to ensure that META-INF/services files from each jar are
merged when making the complete jar.

Paul.

On Sep 27, 2010, at 9:07 PM, spudtm wrote:

>
> Hi guys
>
> I am trying out jersey for a set of REST services and having a similar
> problem with regard to the dependency injection with jersey 1.4 (If
> I use
> 1.0.3 then, there are no errors).
>
> I want to use Abdera ContentHelper in my resources (i.e., '_at_Context
> ContentHelper contentHelper' at the top level of the class
> declaration) for
> easy atom feed entity write. When I run my resources from eclipse,
> the
> dependencies are injected and if I run my mvn project from command
> line as
> 'mvn exec:java' it still works, but when I create a complete jar of
> the
> project (including all the dependencies) and execute the jar file
> (i.e.,
> java -jar <jar file>) it throws up an exception which says
>
> "
> SEVERE: The following errors and warnings have been detected with
> resource
> and/or provider classes:
> SEVERE: Missing dependency for field:
> com.sun.jersey.atom.abdera.ContentHelper <MyClass>.contentHelper
> Sep 23, 2010 7:55:53 PM com.sun.grizzly.http.servlet.ServletAdapter
> doService
> SEVERE: service exception:
> Throwable occurred: com.sun.jersey.spi.inject.Errors
> $ErrorMessagesException
> ...
> "
>
> This is of course jerser+grizzly not been able to get hold of an
> instance of
> ContentHelper.
>
> Following an example
> (http://jersey.576304.n2.nabble.com/Simplest-Dependency-Injection-with-Jersey-td3393338.html#a5564545
> ),
> I have create an injector (See the bottom of the query) and load it
> up with
> my grizzly server as follows.
> jsa.addInitParameter( "com.sun.jersey.config.property.packages",
> "rs.csd.abdn.ac.uk.resources;" +
> "rs.csd.abdn.ac.uk.providers");
>
> From the output of the jersey/grizzly I can see that the class is
> picked.
>
> Can you shed any light on this? The dependencies I am using are
>
> 1) jersey-core
> 2) jersey-server
> 3) jsr311-api
> 4) grizzly-servlet-webserver
> 5) jersey-atom-abdera
> 6) jaxb-api
>
> Thanks
> - Geeth
>
> Injector class
> ========
> package rs.csd.abdn.ac.uk.resources.injector;
>
> import java.lang.reflect.Type;
>
> import javax.annotation.Resource;
> import javax.naming.Context;
> import javax.naming.InitialContext;
> import javax.naming.NamingException;
> import javax.ws.rs.ext.Provider;
>
> import com.sun.jersey.core.spi.component.ComponentContext;
> import com.sun.jersey.core.spi.component.ComponentScope;
> import com.sun.jersey.spi.inject.Injectable;
> import com.sun.jersey.spi.inject.InjectableProvider;
>
> @Provider
> public class ResourceInjector implements
> InjectableProvider<Resource, Type>
> {
> public Injectable getInjectable(ComponentContext cc, Resource
> r,Type t)
> {
> final Object value = get(r);
>
> return new Injectable()
> {
> public Object getValue()
> {
> return value;
> }
> };
> }
>
> public ComponentScope getScope()
> {
> return ComponentScope.Singleton;
> }
>
> private Object get(Resource r)
> {
> try
> {
> Context ctx = new InitialContext();
> try
> {
> return ctx.lookup(r.name());
> }
> catch (NamingException ex)
> {
> return ctx.lookup("java:comp/env/" + r.name());
> }
> }
> catch (Exception ex)
> {
> throw new RuntimeException(ex);
> }
> }
> }
> --
> View this message in context: http://jersey.576304.n2.nabble.com/Dependency-injection-jersey-grizzly-tp5576514p5576514.html
> Sent from the Jersey mailing list archive at Nabble.com.
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe_at_jersey.dev.java.net
> For additional commands, e-mail: users-help_at_jersey.dev.java.net
>