Java 如何检查代码是否在Servlet上下文中执行

Java 如何检查代码是否在Servlet上下文中执行,java,servlets,cdi,Java,Servlets,Cdi,我有一个代码,可以从普通servlet线程或Quartz作业执行。代码基本上是错误记录器,如果日志消息可用,我想添加请求信息。问题是,当从计划任务执行代码时,显然没有可用的请求,这很好。请求信息来自注入实例(CDI),它在下面使用servlet请求的注入实例 @Inject private HttpServletRequest servletRequest; 尝试从servlet外部运行的线程注入HttpServletRequest会导致org.jboss.weld.exceptions.Il

我有一个代码,可以从普通servlet线程或Quartz作业执行。代码基本上是错误记录器,如果日志消息可用,我想添加请求信息。问题是,当从计划任务执行代码时,显然没有可用的请求,这很好。请求信息来自注入实例(CDI),它在下面使用servlet请求的注入实例

@Inject
private HttpServletRequest servletRequest;
尝试从servlet外部运行的线程注入HttpServletRequest会导致
org.jboss.weld.exceptions.IllegalStateException:weld-000710:无法在servlet请求外部注入HttpServletRequest


我的问题是如何检测当前线程是否在servlet上下文中运行,并避免尝试注入请求对象

这与我提出的一个问题类似,尽管不同:我的问题是针对spring的,但我在这里链接到它,希望它能有所帮助。@Taylor确实是类似的。不幸的是,纯吉没有春天那么方便。我目前的解决方法是使用try-catch。事实上,我认为没有任何合适的解决办法。我可以确定线程是否由基于Quartz的线程组名称启动,但这远非理想。这类似于,但与我提出的问题不同:我的问题是针对spring的,但我在这里链接到它,希望它能有所帮助。@Taylor确实类似。不幸的是,纯吉没有春天那么方便。我目前的解决方法是使用try-catch。事实上,我认为没有任何合适的解决办法。我可以确定线程是否是由基于石英的线程组名称启动的,但这远远不够理想。