[jboss-jira] [JBoss JIRA] (WFLY-8942) Request Scope is not active during Batchlet
Martin Kouba (JIRA)
issues at jboss.org
Mon Jul 10 03:02:00 EDT 2017
[ https://issues.jboss.org/browse/WFLY-8942?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13433242#comment-13433242 ]
Martin Kouba commented on WFLY-8942:
------------------------------------
[~jamezp] Yep, if you execute a batchlet in a different thread you need to *activate* the request context manually using Weld API, see also http://weld.cdi-spec.org/documentation/#0 and http://docs.jboss.org/weld/reference/latest/en-US/html/contexts.html. However, you cannot propagate the request context bound to an HTTP request. There is an example of using {{BoundRequestContext}} and an external data store. You could even use {{@Inject @Unbound RequestContext}} and store the beans in a thread local (see for example https://github.com/weld/core/blob/2.4/impl/src/main/java/org/jboss/weld/context/activator/ActivateRequestContextInterceptor.java). It depends on your requirements.
It seems the Batch spec is DI technology agnostic, i.e. the active scopes are not defined. It's probably a good idea to activate the request context during execution of batch components. However, I'm no batch expert and so I'm not sure about the boundaries (batchlet execution, etc.).
> Request Scope is not active during Batchlet
> -------------------------------------------
>
> Key: WFLY-8942
> URL: https://issues.jboss.org/browse/WFLY-8942
> Project: WildFly
> Issue Type: Bug
> Components: Batch, CDI / Weld
> Affects Versions: 10.1.0.Final
> Environment: Wildfly 10.1.0 Final
> Reporter: Cody Lerum
> Assignee: James Perkins
> Attachments: batch-chunk.war
>
>
> When executing a Java EE 7 batchlet if an injection of an @RequestScoped bean is attempted.
> Example
> {noformat}
> 20:57:13,995 WARN [org.jberet] (Batch Thread - 13) JBERET000001: Failed to run batchlet org.jberet.job.model.RefArtifact at b5b6a97: org.jboss.weld.context.ContextNotActiveException: WELD-001303: No active contexts for scope type javax.enterprise.context.RequestScoped
> at org.jboss.weld.manager.BeanManagerImpl.getContext(BeanManagerImpl.java:689)
> at org.jboss.weld.bean.ContextualInstanceStrategy$DefaultContextualInstanceStrategy.getIfExists(ContextualInstanceStrategy.java:90)
> at org.jboss.weld.bean.ContextualInstanceStrategy$CachingContextualInstanceStrategy.getIfExists(ContextualInstanceStrategy.java:165)
> at org.jboss.weld.bean.ContextualInstance.getIfExists(ContextualInstance.java:63)
> at org.jboss.weld.bean.proxy.ContextBeanInstance.getInstance(ContextBeanInstance.java:83)
> at org.jboss.weld.bean.proxy.ProxyMethodHandler.getInstance(ProxyMethodHandler.java:125)
> {noformat}
--
This message was sent by Atlassian JIRA
(v7.2.3#72005)
More information about the jboss-jira
mailing list