EJB基础二 异步调用

本文介绍了EJB中的异步调用,只需在方法上添加@Asynchronous注解。建议使用void作为返回类型以保持真正的异步特性。示例代码展示了一个无状态EJB的异步调用,并通过Servlet调用来说明其执行顺序。异步调用的主要优点在于处理大批量任务时避免用户等待,但在J2EE中,如servlet、EJB、CDI等都支持异步操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

EJB的异步相当简单。其实就是在方法上加个@Asynchronous

异步方法有两种返回类型,一是void,一是Future<T>,我个人建议还是返回void。因为返回Future<T>还需要等待结果,就是同步了,所以没有了异步意义。就比如下面的代码,就是一个典型的带异步调用的无状态EJB。因为返回的是void,所以可以不处理返回值。

package asyncejb;
 
import java.time.LocalDateTime;
 
import javax.ejb.Asynchronous;
import javax.ejb.Stateless;
 
@Stateless
public class AsyncEjb {
	@Asynchronous
	public void run(){
		System.out.println("EJB "+LocalDateTime.now());
	}
}

在servlet中调用的话。

package asyncejb;
 
import java.io.IOException;
import java.time.LocalDateTime;
 
import javax.ejb.EJB;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
@WebServlet("/async.html")
public class AsyncServlet extends HttpServlet{
 
	private static final long serialVersionUID = 1L;
 
	@EJB
	private AsyncEjb asyncEjb;
 
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		asyncEjb.run();
		System.out.println("Servlet " +LocalDateTime.now());
	}
}


可以根据控制台打印信息知道,在代码顺序上,虽然是先调用EJB,后调用servlet,但是先执行的还是servlet,后执行的是EJB

10:12:13,670 INFO  [stdout] (default task-5) Servlet 2016-01-18T10:12:13.670

10:12:13,673 INFO  [stdout] (EJB default - 3) EJB 2016-01-18T10:12:13.673

 其实异步的用处在哪呢?

异步是用于大批量的任务,可以直接返回结果,避免了用户的等待。

但是J2EE中异步操作太多了,servlet可以异步,EJB可以异步,CDI可以异步,自己写个线程也可以异步。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值