import training.student.StudentRepository;
import javax.inject.Inject;
import javax.ws.rs.*;
@Path("student")
public class StudentWebResource {
@Inject
private StudentRepository studentRepository;
@GET
@Path("count")
@Produces(MediaType.TEXT_PLAIN)
public Integer getCount() {
return studentRepository.studentCount();
}
}
public class Main {
public static void main(String[] args) throws Exception {
startCdiApplication();
}
public static void startCdiApplication() throws Exception {
Weld weld = new Weld();
try {
WeldContainer container = weld.initialize();
Application application = container.instance().select(WebServer.class).get();
application.run();
}
finally {
weld.shutdown();
}
}
}
我怀疑需要修改代码才能通知泽西使用weld进行CDI注入解析:
...
import org.glassfish.grizzly.http.server.HttpServer;
import org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpServerFactory;
import org.glassfish.jersey.jackson.JacksonFeature;
import org.glassfish.jersey.server.ResourceConfig;
public class WebServer implements Application {
/*
* startup the grizzly http server to make available the restful web services
*/
private void startWebServer() throws IOException, InterruptedException {
final ResourceConfig resourceConfig = new ResourceConfig().packages("training.webservice").register(new JacksonFeature());
final HttpServer server = GrizzlyHttpServerFactory.createHttpServer(getBaseUri(), resourceConfig);
server.start();
Thread.currentThread().join();
}
...
@Override
public void run() throws IOException, InterruptedException {
startWebServer();
}
}
在看到这篇stackoverflow帖子后,我实现了以下解决方案。不确定这是不是最好的路线,但它奏效了。
我创建了一个hk2活页夹并注册了该活页夹:
public class WebServiceBinder extends AbstractBinder {
@Override
protected void configure() {
BeanManager bm = getBeanManager();
bind(getBean(bm, StudentRepository.class))
.to(StudentRepository.class);
}
private BeanManager getBeanManager() {
// is there a better way to get the bean manager?
return new Weld().getBeanManager();
}
private <T> T getBean(BeanManager bm, Class<T> clazz) {
Bean<T> bean = (Bean<T>) bm.getBeans(clazz).iterator().next();
CreationalContext<T> ctx = bm.createCreationalContext(bean);
return (T) bm.getReference(bean, clazz, ctx);
}
}
然后将ResourceConfig实例化从上面修改为:
final ResourceConfig resourceConfig = new ResourceConfig()
.packages("training.webservice")
.register(new JacksonFeature())
.register(new WebServiceBinder());
问题内容: 如何允许CDI将资源注入宁静的Web服务资源?我正在使用weld 2(cdi),球衣(jaxrs)和grizzly(Web服务器)在标准java上运行。这是我的简单网络资源: 这是我如何启动简单的Web服务器的方法: 我怀疑需要修改的代码以通知球衣使用焊缝进行CDI注入分辨率: 问题答案: 看到这个stackoverflow帖子之后,我实现了以下解决方案。不知道这是否是最好的选择,但是
我有一台带有Intel CPU的Windows机器(在引导菜单上启用VMX)。我使用VirtualBox在上面运行Ubuntu Guest。我在上面运行qemu,以运行另一个Guest OS,使用kvm(选项)。 我在尝试插入kvm-intel模块时收到以下错误: 我已经检查了来宾操作系统中的vpx标志,但我也没有看到 有没有办法在来宾Ubuntu操作系统中启用kvm支持,以便我可以在Ubuntu
我在mac os X上开发了jersey web服务服务器。我一直在使用maven命令行:运行它进行测试,它工作得很好。我目前正在Grizzly中运行我的web服务。 null 这就是我编译jar文件的方式: 这就是我运行jar文件的方式:。以下是错误: myname-macbook-pro:target myname$java-jar application-1.0-snapshot.jar异常
使用Eclipse Juno Service Release 1,我创建了一个Google App Engine项目,然后手动将JAX-RS和JAXB jar文件复制到war/WEB-INF/lib中(因为试图在“项目方面”属性中添加JAX-RS会导致错误,即需要安装动态WEB模块,我认为这是不需要的,因为jar已经包含在GAE项目中? 当我在本地运行时,项目启动正常,我可以导航到我的虚拟rest
问题内容: 我刚刚开始学习TDD,并且正在使用Tkinter GUI开发程序。唯一的问题是,一旦调用该方法,测试套件就会挂起,直到关闭窗口。 这是我的代码的示例: 测试Tkinter应用程序的合适方法是什么?还是只是“不”? 问题答案: 您可以做的一件事是在单独的线程中生成mainloop并使用您的主线程运行实际的测试;照看mainloop线程。进行断言之前,请确保检查Tk窗口的状态。 多线程处理
问题内容: 运行Airflow的常规说明不适用于Windows环境: Airflow实用程序在命令行中不可用,我在其他地方找不到要手动添加的实用程序。Airflow如何在Windows上运行? 问题答案: 您可以在Windows中激活,并直接按照本教程进行操作。我能够按照上面的步骤启动并成功运行。 安装完成后,请进行编辑以将所有配置指向Windows系统中的某个位置,而不是lxss(ubuntu)