嵌入式码头:没有发生依赖注入

问题描述

为长篇文章道歉。不知道什么时候太多了。问题是在 Jersey REST servlet 上没有发生依赖注入。根据产品设计师的要求使用嵌入式 Jetty 和 REST。 这是我拥有的一些代码

AppServer.java

Configuration.ClassList classList = Configuration.ClassList.setServerDefault(server);
classList.addAfter("org.eclipse.jetty.webapp.FragmentConfiguration","org.eclipse.jetty.plus.webapp.EnvConfiguration","org.eclipse.jetty.plus.webapp.PlusConfiguration");
classList.addBefore("org.eclipse.jetty.webapp.JettyWebXmlConfiguration","org.eclipse.jetty.annotations.AnnotationConfiguration");

ServletContextHandler servletCtx = new ServletContextHandler(ServletContextHandler.SESSIONS);
servletCtx.setcontextpath("/rest/v1");
ServletHolder jerseyServlet = servletCtx.addServlet(
        org.glassfish.jersey.servlet.ServletContainer.class,"/*");
jerseyServlet.setinitOrder(0);

jerseyServlet.setinitParameter(
        "jersey.config.server.provider.classnames",MbiResource.class.getCanonicalName());

WebAppContext webAppCtx = new WebAppContext();
webAppCtx.setResourceBase("webapp");
webAppCtx.setcontextpath("/");

HandlerList handlers = new HandlerList();
handlers.setHandlers(new Handler[]{servletCtx,webAppCtx,new DefaultHandler()});

server.setHandler(handlers);

RestResource.java

import org.apache.tomcat.jdbc.pool.DataSource;

import javax.annotation.Resource;
import javax.json.JsonObject;
import javax.ws.rs.Consumes;
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("mbi")
@Consumes({MediaType.TEXT_PLAIN,MediaType.APPLICATION_JSON})
@Produces({MediaType.TEXT_PLAIN,MediaType.APPLICATION_JSON})
public class MbiResource {
    **//this does not work**
    @Resource(mappedname = "jdbc/warehouse-datasource")
    DataSource dataSource;

    @GET
    public String get(){
    **//this does work**
        try{
            InitialContext ic = new InitialContext();
            dataSource = (DataSource) ic.lookup("jdbc/warehouse-datasource");
            return dataSource.toString();
        }catch (Exception ex){
            return ex.getMessage();
        }
    }
}

POM(所有依赖的原因是强制同一个版本)

<jetty.version>9.4.35.v20201120</jetty.version>        
<dependency>
  <groupId>org.eclipse.jetty</groupId>
  <artifactId>jetty-annotations</artifactId>
  <version>${jetty.version}</version>
</dependency>
<dependency>
  <groupId>org.eclipse.jetty</groupId>
  <artifactId>jetty-http</artifactId>
  <version>${jetty.version}</version>
</dependency>
<dependency>
  <groupId>org.eclipse.jetty</groupId>
  <artifactId>jetty-jndi</artifactId>
  <version>${jetty.version}</version>
</dependency>
<dependency>
  <groupId>org.eclipse.jetty</groupId>
  <artifactId>jetty-jsp</artifactId>
  <version>9.2.30.v20200428</version>
</dependency>
<dependency>
  <groupId>org.eclipse.jetty</groupId>
  <artifactId>jetty-plus</artifactId>
  <version>${jetty.version}</version>
</dependency>
<dependency>
  <groupId>org.eclipse.jetty</groupId>
  <artifactId>jetty-server</artifactId>
  <version>${jetty.version}</version>
</dependency>
<dependency>
  <groupId>org.eclipse.jetty</groupId>
  <artifactId>jetty-servlet</artifactId>
  <version>${jetty.version}</version>
</dependency>
<dependency>
  <groupId>org.eclipse.jetty</groupId>
  <artifactId>jetty-webapp</artifactId>
  <version>${jetty.version}</version>
</dependency>
<dependency>
  <groupId>org.ow2.asm</groupId>
  <artifactId>asm</artifactId>
  <version>9.0</version>
</dependency>

这些是我用来研究这个问题的一些参考资料。

https://www.eclipse.org/jetty/documentation/jetty-9/index.html#advanced-embedding

How to embed Jetty and Jersey into my Java application

Embedded Jetty does not find Annotated Servlet

Jersey jdbc @resource not working

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)