public static T lookup()

in core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/util/JndiUtils.java [125:187]


    public static <T> T lookup(String name, Class<? extends T> expectedClass)
    {
        try
        {
            Object lookedUp = initialContext.lookup(name);

            if (lookedUp != null)
            {
                if (expectedClass.isAssignableFrom(lookedUp.getClass()))
                {
                    // we have a value and the type fits
                    return (T) lookedUp;
                }
                else if (lookedUp instanceof String)
                {
                    // lookedUp might be a class name
                    try
                    {
                        Class<?>lookedUpClass = Class.forName((String) lookedUp);
                        if (expectedClass.isAssignableFrom(lookedUpClass))
                        {
                            try
                            {
                                return (T) lookedUpClass.newInstance();
                            }
                            catch (Exception e)
                            {
                                // could not create instance
                                LOG.log(Level.SEVERE, "Class " + lookedUpClass + " from JNDI lookup for name "
                                        + name + " could not be instantiated", e);
                            }
                        }
                        else
                        {
                            // lookedUpClass does not extend/implement expectedClass
                            LOG.log(Level.SEVERE, "JNDI lookup for key " + name
                                    + " returned class " + lookedUpClass.getName()
                                    + " which does not implement/extend the expected class"
                                    + expectedClass.getName());
                        }
                    }
                    catch (ClassNotFoundException cnfe)
                    {
                        // could not find class
                        LOG.log(Level.SEVERE, "Could not find Class " + lookedUp
                                + " from JNDI lookup for name " + name, cnfe);
                    }
                }
                else
                {
                    // we have a value, but the value does not fit
                    LOG.log(Level.SEVERE, "JNDI lookup for key " + name + " should return a value of "
                            + expectedClass + ", but returned " + lookedUp);
                }
            }

            return null;
        }
        catch (NamingException e)
        {
            throw new UnhandledException("Could not get " + name + " from JNDI", e);
        }
    }