users@jersey.java.net

[Jersey] _at_Resource not injected in Jersey resource

From: Francois Ross <fross.job_at_gmail.com>
Date: Mon, 11 Jul 2016 17:35:31 -0400

Hi,

*How come @Resource annotations get picked up by servlets but not by Jersey
resources?*

I've been struggling to inject a DataSource via @Resource for a few hours
with no success so far (I got lost along the way reading about jersey CDI,
Weld, HK2, ...). I've set up a small Eclipse project on GitHub showing the
behavior (see here
<https://github.com/fross/jersey-resource-not-injected/tree/master/src/demo>
).

I'm using:

   - Tomcat 7 (dynamic web module version 3.0).
   - a H2 data source configured in META-INF/context.xml
   - jersey-container-servlet 2.23.1

Any help or explanation would be greatly appreciated (I'm a
desktop/embedded software developer).


import javax.annotation.Resource;import javax.sql.DataSource;import
javax.ws.rs.GET;import javax.ws.rs.Path;import
javax.ws.rs.Produces;import javax.ws.rs.core.MediaType;import
javax.ws.rs.core.Response;

@Path("/")public class MyResource {

    @Resource(name = "jdbc/myDatabase")
    private DataSource _dataSource;

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public Response doGet() {
        return Response
                .ok()
                .entity("jersey -> dataSource? " + (_dataSource !=
null)) *// jersey -> dataSource? false*
                .build();
    }
}


import java.io.IOException;
import javax.annotation.Resource;import
javax.servlet.ServletException;import
javax.servlet.annotation.WebServlet;import
javax.servlet.http.HttpServlet;import
javax.servlet.http.HttpServletRequest;import
javax.servlet.http.HttpServletResponse;import javax.sql.DataSource;

@WebServlet(urlPatterns = { "/servlet" })public class MyServlet
extends HttpServlet {

    @Resource(name = "jdbc/myDatabase")
    private DataSource _dataSource;

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse
resp) throws ServletException, IOException {
        try {
            _dataSource.getConnection();
        } catch (Exception e) {
            e.printStackTrace();
        }

        resp.setContentType("text/plain");
        resp.getWriter().write("servlet -> dataSource? " +
(_dataSource != null)); *// servlet -> dataSource? true*
    }
}