Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java EJB@Schedule是同步的还是异步的?_Java_Jsf_Jakarta Ee_Ejb - Fatal编程技术网

Java EJB@Schedule是同步的还是异步的?

Java EJB@Schedule是同步的还是异步的?,java,jsf,jakarta-ee,ejb,Java,Jsf,Jakarta Ee,Ejb,正如@Balus在文章中解释的那样 EJB可用吗?使用@Schedule 如果您的目标是JavaEE6或更高版本(例如JBossAS、GlassFish、TomEE等,因此不是Tomcat等简单的JSP/Servlet容器),那么可以使用@Singleton EJB和@Schedule方法。这样,容器将担心通过ScheduledExecutorService共享和销毁线程 所以我很想知道,通过使用@Schedule,后台进程将通过容器管理的线程异步运行(神奇地),或者它就像一个java.util

正如@Balus在文章中解释的那样

EJB可用吗?使用@Schedule 如果您的目标是JavaEE6或更高版本(例如JBossAS、GlassFish、TomEE等,因此不是Tomcat等简单的JSP/Servlet容器),那么可以使用@Singleton EJB和@Schedule方法。这样,容器将担心通过ScheduledExecutorService共享和销毁线程

所以我很想知道,通过使用@Schedule,后台进程将通过容器管理的线程异步运行(神奇地),或者它就像一个java.util.timer,创建单个线程,所有进程都在这个线程中运行

如果@Schedule仅创建单个线程来管理调度程序,那么在@Schedule中使用进一步的ScheduledExecutorService是否安全?这个ScheduledExecutorService包含更多基于多线程的可运行任务


我有一个长期运行的过程,包括文件操作、数据处理和电子邮件生成,但我真的应该只依赖这个@Schedule注释,而不使用任何executorservices/创建进一步的线程池吗??顺便说一句,我使用的是Glassfish。

就wildfly而言,它有一个执行调度程序的工作池。如果在计划的方法中执行日志,您会注意到每次执行中线程ID都会发生更改。这在理论上是EJB规范所禁止的:“我有一个长时间运行的进程,包括文件操作”,该规范的影响是:“企业bean不得使用java.io包试图访问文件系统中的文件和目录。“@Leonardo那么,文件操作、文件读取、文件夹移动等更可取的方式是什么?我在runnable类中完成了这些loggic,ScheduledExecutorService在Schedule方法中进一步使用了该类。如果使用Singleton SessionBean,容器将管理并发性,并使用默认设置管理任何计时器(通过javax.ejb.Schedule注释获得)将一直等到上一次访问结束,并保证容器管理(或在本例中阻止)并发访问。See无法回答ScheduledExecutor的问题,但关于计时器服务执行中的异常,它们很嘈杂,但不应该杀死Singleton SessionBean。看见