在EJB 3.1中,我们使用@Asynchronous注释了一个方法,并使用Future.get来获取结果。
问题是当我们做future.get()时,是否释放了连接池和资源中的数据库连接,该连接是在异步方法中使用的?
根据您使用的应用程序服务器的已配置连接池策略关闭数据库连接。
在讨论会话bean和容器管理事务时,最后将连接返回到被调用业务方法的事务范围。
由于使用@Asynchronous
注释的会话bean不支持事务传播(例如,参见EJB 3.2规范4.5.3),如果使用REQUIRED
或REQUIRES_NEW
配置方法,则每次调用业务方法时都会创建一个新事务。因此,此事务范围以返回的被调用业务方法结束。
有可能他们是:)否则使用@Asynchronous将很快导致应用程序崩溃,因为缺乏资源...
无论如何,当使用Java-ee中的线程本地存储来存储资源并且@Asynchronous将执行推迟到专用线程时,那里使用的资源(包括JCA连接 - 以及数据库之一)也专用于@Asynchronous方法执行(不是继承自调用者线程)。