Search in sources :

Example 16 with InjectionException

use of com.sun.enterprise.container.common.spi.util.InjectionException in project Payara by payara.

the class InjectionManagerImpl method createManagedObject.

/**
 * Create a managed object for the given class. The object will be injected and any PostConstruct methods will be
 * called. The returned object can be cast to the clazz type but is not necessarily a direct reference to the managed
 * instance. All invocations on the returned object should be on its public methods.
 *
 * It is the responsibility of the caller to destroy the returned object by calling destroyManagedObject(Object
 * managedObject).
 *
 * @param clazz
 *            Class to be instantiated
 * @return managed object
 * @throws InjectionException
 */
public <T> T createManagedObject(Class<T> clazz) throws InjectionException {
    T managedObject = null;
    try {
        ManagedBean managedBeanAnn = clazz.getAnnotation(ManagedBean.class);
        ManagedBeanManager managedBeanMgr = serviceLocator.getService(ManagedBeanManager.class);
        if (managedBeanAnn != null) {
            // EE style @ManagedBean
            // Create , inject, and call PostConstruct via managed bean manager
            managedObject = managedBeanMgr.createManagedBean(clazz);
        } else {
            JCDIService cdiService = serviceLocator.getService(JCDIService.class);
            if (cdiService != null && cdiService.isCurrentModuleJCDIEnabled()) {
                // Create , inject, and call PostConstruct via managed bean manager
                managedObject = managedBeanMgr.createManagedBean(clazz);
            } else {
                // Not in a 299-enabled module and not annoated with @ManagedBean, so
                // just instantiate using new and perform injection
                Constructor<T> noArgCtor = clazz.getConstructor();
                managedObject = noArgCtor.newInstance();
                // Inject and call PostConstruct
                injectInstance(managedObject);
            }
        }
    } catch (Exception e) {
        throw new InjectionException(localStrings.getLocalString("injection-manager.error-creating-managed-object", "Error creating managed object for class: {0}", clazz), e);
    }
    return managedObject;
}
Also used : InjectionException(com.sun.enterprise.container.common.spi.util.InjectionException) JCDIService(com.sun.enterprise.container.common.spi.JCDIService) ManagedBean(javax.annotation.ManagedBean) NamingException(javax.naming.NamingException) InjectionException(com.sun.enterprise.container.common.spi.util.InjectionException) InvocationTargetException(java.lang.reflect.InvocationTargetException) ManagedBeanManager(com.sun.enterprise.container.common.spi.ManagedBeanManager)

Aggregations

InjectionException (com.sun.enterprise.container.common.spi.util.InjectionException)16 InjectionManager (com.sun.enterprise.container.common.spi.util.InjectionManager)4 Method (java.lang.reflect.Method)4 ComponentInvocation (org.glassfish.api.invocation.ComponentInvocation)4 JndiNameEnvironment (com.sun.enterprise.deployment.JndiNameEnvironment)3 InvocationTargetException (java.lang.reflect.InvocationTargetException)3 NamingException (javax.naming.NamingException)3 Handler (javax.xml.ws.handler.Handler)3 JCDIService (com.sun.enterprise.container.common.spi.JCDIService)2 ManagedBeanManager (com.sun.enterprise.container.common.spi.ManagedBeanManager)2 ComponentEnvManager (com.sun.enterprise.container.common.spi.util.ComponentEnvManager)2 InjectionTarget (com.sun.enterprise.deployment.InjectionTarget)2 ServletAdapter (com.sun.xml.ws.transport.http.servlet.ServletAdapter)2 ServletAdapterList (com.sun.xml.ws.transport.http.servlet.ServletAdapterList)2 ManagedBean (javax.annotation.ManagedBean)2 ServiceLocator (org.glassfish.hk2.api.ServiceLocator)2 InjectionCapable (com.sun.enterprise.deployment.InjectionCapable)1 ResourceReferenceDescriptor (com.sun.enterprise.deployment.ResourceReferenceDescriptor)1 WebBundleDescriptor (com.sun.enterprise.deployment.WebBundleDescriptor)1 AppServSecurityContext (com.sun.enterprise.security.integration.AppServSecurityContext)1