Tag: 异步

如何正确处理来自ListenableFuture番石榴的exception?

我有一个库,我已经为我们的客户提供了两种方法,sync和async。 他们可以调用他们认为适合他们目的的任何方法。 executeSynchronous() – 等到我有结果,返回结果。 executeAsynchronous() – 立即返回一个Future,如果需要,可以在其他事情完成后处理。 它们将传递具有用户标识的DataKey对象。 我们将根据用户ID确定调用哪台机器。 因此,我们将使用AsyncRestTemplate对URL进行http调用,然后根据它是否成功将响应发送给它们。 以下是我的界面: public interface Client { // for synchronous public DataResponse executeSync(final DataKey key); // for asynchronous public Future executeAsync(final DataKey key); } 以下是我的实施: public class DataClient implements IClient { // does this have to be final? private final AsyncRestTemplate restTemplate = new AsyncRestTemplate(); @Override […]

如何使用spring配置Async和Sync Event发布者

我试图使用spring事件实现一个事件框架。我开始知道spring事件框架的默认行为是sync。 但是在Spring上下文初始化期间,如果它找到一个id为applicationEventMulticaster的bean,它就会表现为Async。 现在我想在我的应用程序中同时拥有同步和异步事件发布者,因为某些事件需要同步发布。 我尝试使用SysncTaskExecutor配置同步事件多播器,但我找不到将其注入我的AsyncEventPublisher的applicationEventPublisher属性的方法。 我的spring配置文件如下 有人可以帮我从这里出去吗 ?

Spring Deferred结果丢失了http会话

我在异步模式下使用带有Spring MVC和Spring安全性的Tomcat 7。 然后我使用DeferredResult来发出异步请求。 该机制工作正常,但问题是当deferredResult使setResult()并返回promise时,我丢失了所有会话,并且我的下一个请求给了我403禁止,因为我没有在SecurityContextHolder上进行身份validation。 我想是因为promise的返回是在另一个没有会话的线程中完成的。 有人可以把我放在正确的方向。 解决方案:onCompletion回调方法我传递了在地图中创建deferredResult时放置的会话。 deferredResult.onCompletion(new Runnable() { @Override public void run() { request.getSession().setAttribute(SPRING_SECURITY_CONTEXT, securityContextContainer.get(deferredResult)); securityContextContainer.remove(deferredResult); } });

Grails – 与第三方API的异步通信

我正在尝试使用grails来与在线交易平台进行交互。 特别是盈透证券(IB) http://interactivebrokers.com/en/p.php?f=programInterface&ib_entity=llc API的工作方式是你需要运行他们的客户端程序,Trader Workstation(TWS http://interactivebrokers.com/en/p.php?f=tws&ib_entity=llc )然后我们使用API​​来做东西。 使用API​​基本上涉及创建“代理”对象,调用connect()成员函数(这使得与TWS软件的本地端口连接)并调用类似getData()的东西 此方案中的Grails值是GORMfunction和提供的Web框架。 我希望能够定义从db实现中抽象出来的对象,轻松执行持久性操作,并轻松地为用户提供用于执行CRUD和自定义操作的UI。 我的挑战是IB API对请求和回复使用异步通信。 即,当我调用getData()时,API知道在准备发送它们时使用回调函数dataResults()。 为了使dataResults()可以调用,我创建的代理对象仍然需要四处接收回复。 在控制器函数内部,如果我创建一个代理对象并调用getData(),当请求完成时,代理对象显然也会消失。 所以我永远无法收到回复。 我认为可能有一些方法可以通过开始后台线程来做到这一点,但我不确定这是我想要的路径。 有没有人对最佳方法有什么建议? 我没有和grails结婚,我使用它的原因就在上面。 如果有一个桌面应用程序框架,我也可以在以后轻松创建一个Web界面,我肯定对此持开放态度。 提前致谢。

Spring Async RMI Call

是否可以异步调用Java RMI? 我希望我的RMI调用立即返回,并且服务器在任务完成后调用回调。 我目前正在使用Spring框架的RMI支持,我在spring找不到任何描述它的文档,我怀疑我需要自己实现它。 如果可能,请提供示例。 提前致谢!

我们是否应始终使用异步JAX-RS资源用于移动后端?

我正在使用Java EE构建Mobile后端API – JAX-RS 2.0技术。 由于大多数移动客户端消耗都是异步http调用 所以我的问题是: 我应该为所有JAX-RS资源使用异步function吗? 原因如果不是? 以下是模板Mobile Async API @Path(“/async_api”) public class AsyncResource { @GET @Path(“/loadUsers”) @Produces(MediaType.APPLICATION_JSON) public void loadUsers(@Suspended AsyncResponse asyncResponse) { //TODO: ManagedExecutorService new Thread(new Runnable() { @Override public void run() { List users = loadBigUsers(); asyncResponse.resume(users); } private List loadBigUsers() { return null; // Return big list } }).start(); […]

异步写入GAE数据存储区

在我的Java应用程序中,有时我的用户会做一些需要数据存储区写入的工作,但我不想让用户在数据存储区写入时保持等待。 我希望在数据存储在后台时立即向用户返回响应。 似乎相当清楚我可以通过使用GAE任务队列来执行此操作,将任务排入队列以存储数据。 但我也看到有一个Async数据存储区API,看起来它比处理任务队列要容易得多。 我可以调用AsyncDatastoreService.put()然后从我的servlet返回吗? 该API会存储我的数据而不让用户等待吗?

是弹簧异步传递对象线程安全到以前的更新

我们使用spring异步框架,示例代码如下,如果Entity对象是可变的并且在调用put之前已经更新,JVM会保证put会看到更改吗? @Async(“daoExecutor”) @Repository public class GenericDaoImpl implements GenericDao { public CompletableFuture put(Entity e) { } }

使用我的自定义Servlet的GWT RPC机制

我目前有一个GWT应用程序,它使用RequestBuilde将消息发送到我拥有的servlet(使用POST和GET ),我的servlet(在doPost和doGet )“暂停”请求(这是通过使用Servlets 3.0规范完成的)和将其添加到队列中。 另外,我有一个守护程序线程,它在后台运行,并在有新数据时“播放”请求。 这对我来说很有用,除了我现在只是发送字符串这个事实,我想利用RPC机制发送对象。 我的问题是: 如果我创建扩展RemoteServiceServlet myServiceImpl类,我应该如何处理doPost和doGet呢? 我需要暂停我的请求以利用异步支持,应该在哪里完成? 我可能在myServiceImpl类的RPC方法中调用this.getThreadLocalRequest()方法,但我不确定它会有多么明智。 我不确定我是否理解GWT如何处理来自该异步接口的客户端的调用。 有没有机会调用doGet作为servlet的例子,并确保它调用所需的RPC方法? 对不起,如果我搞得一团糟,那就是我找不到更详细的技术信息,正如RPC业务的工作原理一样。 感谢任何借贷手 以太

@Singleton @Startup完全异步?

我一起使用@Singleton和@Startup注释来创建一个长时间运行的进程。 通过使用这些注释,我可以安全地假设我的进程将是一个完全异步运行的单个线程吗?