org.apache.struts2.cdi
Class CdiObjectFactory

java.lang.Object
  extended by com.opensymphony.xwork2.ObjectFactory
      extended by org.apache.struts2.cdi.CdiObjectFactory
All Implemented Interfaces:
Serializable

public class CdiObjectFactory
extends com.opensymphony.xwork2.ObjectFactory

CdiObjectFactory allows Struts 2 managed objects, like Actions, Interceptors or Results, to be injected by a Contexts and Dependency Injection container (JSR299 / WebBeans). The BeanManager instance will be searched in the container's JNDI context, according to following algorithm:

See Also:
Serialized Form

Field Summary
protected  javax.enterprise.inject.spi.BeanManager beanManager
           
static String CDI_JNDIKEY_BEANMANAGER_APP
          The key under which the BeanManager can be found according to JBoss Weld docs
static String CDI_JNDIKEY_BEANMANAGER_COMP
          The key under which the BeanManager can be found according to CDI API docs
static String CDI_JNDIKEY_BEANMANAGER_COMP_ENV
          The key under which the BeanManager can be found in pure Servlet containers according to JBoss Weld docs.
protected  javax.enterprise.context.spi.CreationalContext ctx
           
 
Constructor Summary
CdiObjectFactory()
           
 
Method Summary
 Object buildBean(String className, Map<String,Object> extraContext, boolean injectInternal)
           
protected  javax.enterprise.context.spi.CreationalContext buildNonContextualCreationalContext(javax.enterprise.inject.spi.BeanManager beanManager)
          Simple wrapper for CreationalContext creation.
protected  javax.enterprise.inject.spi.BeanManager findBeanManager()
          Try to find the CDI BeanManager from JNDI context.
protected  javax.enterprise.inject.spi.InjectionTarget<?> getInjectionTarget(Class<?> clazz)
          Get a InjectionTarget instance for a given class.
 boolean isNoArgConstructorRequired()
          Allow constructor injection
protected  javax.enterprise.inject.spi.BeanManager lookup(Context context, String jndiKeyToCheck)
          Lookup the given JNDI key in the given context.
 void setJndiKey(String jndiKey)
           
 
Methods inherited from class com.opensymphony.xwork2.ObjectFactory
buildAction, buildBean, buildBean, buildConverter, buildInterceptor, buildResult, buildUnknownHandler, buildValidator, getClassInstance, getObjectFactory, injectInternalBeans, setActionFactory, setClassLoader, setContainer, setConverterFactory, setInterceptorFactory, setResultFactory, setUnknownHandlerFactory, setValidatorFactory
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

CDI_JNDIKEY_BEANMANAGER_COMP

public static final String CDI_JNDIKEY_BEANMANAGER_COMP
The key under which the BeanManager can be found according to CDI API docs

See Also:
Constant Field Values

CDI_JNDIKEY_BEANMANAGER_APP

public static final String CDI_JNDIKEY_BEANMANAGER_APP
The key under which the BeanManager can be found according to JBoss Weld docs

See Also:
Constant Field Values

CDI_JNDIKEY_BEANMANAGER_COMP_ENV

public static final String CDI_JNDIKEY_BEANMANAGER_COMP_ENV
The key under which the BeanManager can be found in pure Servlet containers according to JBoss Weld docs.

See Also:
Constant Field Values

beanManager

protected javax.enterprise.inject.spi.BeanManager beanManager

ctx

protected javax.enterprise.context.spi.CreationalContext ctx
Constructor Detail

CdiObjectFactory

public CdiObjectFactory()
Method Detail

setJndiKey

public void setJndiKey(String jndiKey)

findBeanManager

protected javax.enterprise.inject.spi.BeanManager findBeanManager()
Try to find the CDI BeanManager from JNDI context. First, if provided, the key given by struts.objectFactory.cdi.jndiKey will be checked. Then, if nothing was found or no explicit configuration was given, the key CDI_JNDIKEY_BEANMANAGER_COMP will be tested. If nothing is found there, the key CDI_JNDIKEY_BEANMANAGER_APP will be checked. If still nothing is found there, the key CDI_JNDIKEY_BEANMANAGER_COMP_ENV will be checked.

Returns:
the BeanManager, if found. null otherwise.

lookup

protected javax.enterprise.inject.spi.BeanManager lookup(Context context,
                                                         String jndiKeyToCheck)
Lookup the given JNDI key in the given context.

Parameters:
context - the context to use for lookup.
jndiKeyToCheck - the key to lookup.
Returns:
the BeanManager, if found; null if not found or NamingException was thrown.

buildBean

public Object buildBean(String className,
                        Map<String,Object> extraContext,
                        boolean injectInternal)
                 throws Exception
Overrides:
buildBean in class com.opensymphony.xwork2.ObjectFactory
Throws:
Exception

getInjectionTarget

protected javax.enterprise.inject.spi.InjectionTarget<?> getInjectionTarget(Class<?> clazz)
Get a InjectionTarget instance for a given class. If the appropriate target is not found in cache, a nw instance will be created.

Parameters:
clazz - The class to get a InjectionTarget instance for.
Returns:
if found in cache, an existing instance. A new instance otherwise.

buildNonContextualCreationalContext

protected javax.enterprise.context.spi.CreationalContext buildNonContextualCreationalContext(javax.enterprise.inject.spi.BeanManager beanManager)
Simple wrapper for CreationalContext creation.

Parameters:
beanManager - the BeanManager to use for creating the context.
Returns:
the context to use, if given BeanManager was not null. null otherwise.

isNoArgConstructorRequired

public boolean isNoArgConstructorRequired()
Allow constructor injection

Overrides:
isNoArgConstructorRequired in class com.opensymphony.xwork2.ObjectFactory


Copyright © 2000-2015 Apache Software Foundation. All Rights Reserved.