如何解决嵌入式码头:没有发生依赖注入
为长篇文章道歉。不知道什么时候太多了。问题是在 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 举报,一经查实,本站将立刻删除。