我正在使用Jersey、CDI2.0(Weld3.0.1.最终实现)和Tomcat编写一个REST web服务。webservice的目标是启动可以运行数分钟甚至数小时的长计算任务。任务应该通过发送到webservice的HTTP POST请求启动,但是请求必须立即完成并将响应发回客户端,而启动的任务应该在另一个线程上执行其工作。
我已经通过使用CDI2.0及其event.fireasync()
方法解决了这个问题,该方法允许异步处理事件。处理POST请求的JAX-RS资源类触发异步事件,然后由单独的@applicationscoped
CDI bean中的异步观察者方法(用@observesasync
注释)处理该事件。
所描述的解决方案效果很好。但是,我注意到,当我在异步事件中同时激发多个长任务时,实际上只有四个任务在运行,而其余的任务都在排队。一旦四个正在运行的事件中的一个完成,第一个排队事件就开始处理。
对于您的第一个问题--默认值将基于可用的处理器。类似于runtime.getruntime().availableProcessors()+1
。但是,我想您所追求的是配置选项。在这里您可以选择,您可以:
fixed_timeout
池(线程在不需要时不会逗留),此配置的关键是org.jboss.weld.executor.threadpooltype
org.jboss.weld.executor.threadpoolsize
关于你的第二个问题--我不得不让你失望。目前还没有办法在焊接中实现这一点。请随意创建一个焊接Jira问题,您可能会在未来看到它。
是否可以调用一个异步方法,以便它从一个同步的方法异步运行?我不关心它挂起同步调用程序直到它返回,而是希望该方法被异步调用。
我在一个KeyListener中为一个非常简单的游戏编程控件。伊芙得到了下面的问题。 我做了类似的事情(只是一个简单的示例,而不是我实现的代码): 如果我同时按下两个键(左,上),你就可以移动charachter对角线。问题是监听器与最后一个按下的KeyEvent一起工作,所以如果我先按左再向上,但没有释放左再向上,对象就不会移动(仍然按左)。 我怎么处理?是否可以在我的keylistener的k
警告试着告诉我什么?我该怎么办? 这是我的代码:它是否使用多线程运行?
问题内容: 我正在使用Selenium WebDriver语法。我知道,在基于Selenium服务器的语法中,您可以执行以下操作来触发javascript事件: 如何在使用WebDriver(例如FirefoxDriver)创建的应用程序中执行相同操作? 问题答案: 不幸的是,Selenium WebDriver设计人员明确决定不在 Selenium 2中包含此功能。 明智的决定是不将此功能包含在
问题内容: 我正在使用Selenium WebDriver语法。我知道,在基于Selenium服务器的语法中,您可以执行以下操作来触发javascript事件: 如何在使用WebDriver(例如FirefoxDriver)创建的应用程序中执行相同操作? 问题答案: 不幸的是,Selenium WebDriver设计人员明确决定不在 Selenium 2中包含此功能。 明智的决定是不将此功能包含在
在我的代码中,我有: 带有普通JPanel的JFrame,其中包含一些JComponent对象。这些JComponents有:-一个JTextFields列表。-一个侦听器,当鼠标插入时高亮显示边框,当鼠标退出时隐藏边框。如果鼠标在jceeExit方法的边框上嵌套,那么当鼠标在jceeExit方法的边框上嵌套时,也会触发jceeExit: 问题是: 代码: 代码是为了解决上述问题而编写的。以下是J