首页 文章

OSGi环境中的Servlet和/或JAX-RS资源类

提问于
浏览
1

目前我在我的OSGi服务注册表中注册了HttpServlets . 这些由另一个组件处理,并在运行中添加到Jetty服务器 . 这非常有效,我需要完整的这个过程,例如当使用Vaadin或只是一个具有某些特定功能的普通HttpServlet时 .

但是,我想重新使用这种方法来注册使用JAX-RS的Servlet(在我的情况下是当前的Jersey实现) . 我的想法是简单地重用我的HttpServlet并添加JAX-RS注释 .

当然,这不是开箱即用的,因为注释不是由OSGi服务代理传递的,而其他组件或服务器需要支持这一点 . 因此,我决定扩展HttpServlet的抽象类来处理服务并将其传递给Jersey ServletContainer . 然后应该使用Application配置ServletContainer,包括原始的HttpServlets对象作为singleton .

它似乎不起作用,我不明白为什么 . 错误是:

18:26:02.190 WARN o.g.jersey.internal.inject.Providers - 在SERVER运行时中注册的提供者path.to.MyServlet不实现适用于SERVER运行时的任何提供者接口 . 由于约束配置问题,将忽略提供程序path.to.MyServlet .

MyServlet:

@Path("/")
public class MyServlet extends AbstractServlet {

    @GET @Path("/{path}")
    public Response root(@PathParam("path") String path) {
        // ...
    }

}

AbstractServlet:

public abstract class AbstractServlet extends HttpServlet {

    private ServletContainer servletContainer = null;

    public AbstractServlet() {
        this.servletContainer = new ServletContainer(ResourceConfig.forApplication(new ApplicationAdapter(this)));
    }

    @Override
    public void destroy() {
        this.servletContainer.destroy();
    }

    @Override
    public void service(ServletRequest request, ServletResponse response) throws ServletException,IOException {
        this.servletContainer.service(request, response);
    }

    @Override
    public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException { 
        this.servletContainer.service(request, response);
    }

    // ... (delegate all methods from HttpServlet to ServletContainer)

    @ApplicationPath("/")
    private class ApplicationAdapter extends Application {

        private final Object object;

        public ApplicationAdapter(final Object object) {
            this.object = object;
        }

        @Override
        public Set<Object> getSingletons() {
            return new HashSet<Object>(Arrays.asList(this.object));
        }

    }
}

1 回答

  • 1

    如果你正在考虑在OSGi上做jax-rs那么你应该看一下Aries JAX-RS whiteboard .

    这是即将发布的JAX-RS Whiteboard OSGi spec的参考资料,它将成为OSGi R7发布的一部分 . 规格和参考动作应在几周内发布 .

    文档和示例仍然有点稀疏,但肯定值得注意 .

相关问题