Search in sources :

Example 51 with RefAddr

use of javax.naming.RefAddr in project derby by apache.

the class ReferenceableDataSource method setBeanProperties.

// Set the Java bean properties for an object from its Reference. The
// Reference contains a set of StringRefAddr values with the key being the
// bean name and the value a String representation of the bean's value. This
// code looks for setXXX() method where the set method corresponds to the
// standard bean naming scheme and has a single parameter of type String,
// int, boolean or short.
private static void setBeanProperties(Object ds, Reference ref) throws Exception {
    for (Enumeration<RefAddr> e = ref.getAll(); e.hasMoreElements(); ) {
        RefAddr attribute = e.nextElement();
        String propertyName = attribute.getType();
        String value = (String) attribute.getContent();
        String methodName = "set" + propertyName.substring(0, 1).toUpperCase(java.util.Locale.ENGLISH) + propertyName.substring(1);
        Method m;
        Object argValue;
        try {
            m = ds.getClass().getMethod(methodName, STRING_ARG);
            argValue = value;
        } catch (NoSuchMethodException nsme) {
            try {
                m = ds.getClass().getMethod(methodName, INT_ARG);
                argValue = Integer.valueOf(value);
            } catch (NoSuchMethodException nsme2) {
                try {
                    m = ds.getClass().getMethod(methodName, BOOLEAN_ARG);
                    argValue = Boolean.valueOf(value);
                } catch (NoSuchMethodException nsme3) {
                    m = ds.getClass().getMethod(methodName, SHORT_ARG);
                    argValue = Short.valueOf(value);
                }
            }
        }
        m.invoke(ds, new Object[] { argValue });
    }
}
Also used : RefAddr(javax.naming.RefAddr) Method(java.lang.reflect.Method)

Example 52 with RefAddr

use of javax.naming.RefAddr in project derby by apache.

the class ClientDataSourceFactory method setBeanProperties.

/**
 * Set the Java bean properties for an object from its Reference. The
 * Reference contains a set of StringRefAddr values with the key being the
 * bean name and the value a String representation of the bean's value. This
 * code looks for setXXX() method where the set method corresponds to the
 * standard bean naming scheme and has a single parameter of type String,
 * int, boolean or short.
 */
private static void setBeanProperties(Object ds, Reference ref) throws Exception {
    for (Enumeration e = ref.getAll(); e.hasMoreElements(); ) {
        RefAddr attribute = (RefAddr) e.nextElement();
        String propertyName = attribute.getType();
        String value = (String) attribute.getContent();
        String methodName = "set" + propertyName.substring(0, 1).toUpperCase(Locale.ENGLISH) + propertyName.substring(1);
        Method m;
        Object argValue;
        try {
            m = ds.getClass().getMethod(methodName, STRING_ARG);
            argValue = value;
        } catch (NoSuchMethodException nsme) {
            try {
                m = ds.getClass().getMethod(methodName, INT_ARG);
                argValue = Integer.valueOf(value);
            } catch (NoSuchMethodException nsme2) {
                try {
                    m = ds.getClass().getMethod(methodName, BOOLEAN_ARG);
                    argValue = Boolean.valueOf(value);
                } catch (NoSuchMethodException nsme3) {
                    m = ds.getClass().getMethod(methodName, SHORT_ARG);
                    argValue = Short.valueOf(value);
                }
            }
        }
        m.invoke(ds, new Object[] { argValue });
    }
}
Also used : RefAddr(javax.naming.RefAddr) Enumeration(java.util.Enumeration) Method(java.lang.reflect.Method)

Example 53 with RefAddr

use of javax.naming.RefAddr in project tomcat70 by apache.

the class TransactionFactory method getObjectInstance.

// ----------------------------------------------------------- Constructors
// -------------------------------------------------------------- Constants
// ----------------------------------------------------- Instance Variables
// --------------------------------------------------------- Public Methods
// -------------------------------------------------- ObjectFactory Methods
/**
 * Create a new User transaction instance.
 *
 * @param obj The reference object describing the DataSource
 */
@Override
public Object getObjectInstance(Object obj, Name name, Context nameCtx, Hashtable<?, ?> environment) throws Exception {
    if (obj instanceof TransactionRef) {
        Reference ref = (Reference) obj;
        ObjectFactory factory = null;
        RefAddr factoryRefAddr = ref.get(Constants.FACTORY);
        if (factoryRefAddr != null) {
            // Using the specified factory
            String factoryClassName = factoryRefAddr.getContent().toString();
            // Loading factory
            ClassLoader tcl = Thread.currentThread().getContextClassLoader();
            Class<?> factoryClass = null;
            if (tcl != null) {
                try {
                    factoryClass = tcl.loadClass(factoryClassName);
                } catch (ClassNotFoundException e) {
                    NamingException ex = new NamingException("Could not load resource factory class");
                    ex.initCause(e);
                    throw ex;
                }
            } else {
                try {
                    factoryClass = Class.forName(factoryClassName);
                } catch (ClassNotFoundException e) {
                    NamingException ex = new NamingException("Could not load resource factory class");
                    ex.initCause(e);
                    throw ex;
                }
            }
            if (factoryClass != null) {
                try {
                    factory = (ObjectFactory) factoryClass.newInstance();
                } catch (Throwable t) {
                    if (t instanceof NamingException)
                        throw (NamingException) t;
                    NamingException ex = new NamingException("Could not create resource factory instance");
                    ex.initCause(t);
                    throw ex;
                }
            }
        }
        if (factory != null) {
            return factory.getObjectInstance(obj, name, nameCtx, environment);
        } else {
            throw new NamingException("Cannot create resource instance");
        }
    }
    return null;
}
Also used : RefAddr(javax.naming.RefAddr) ObjectFactory(javax.naming.spi.ObjectFactory) Reference(javax.naming.Reference) TransactionRef(org.apache.naming.TransactionRef) NamingException(javax.naming.NamingException)

Example 54 with RefAddr

use of javax.naming.RefAddr in project tomcat70 by apache.

the class BeanFactory method getObjectInstance.

// ----------------------------------------------------------- Constructors
// -------------------------------------------------------------- Constants
// ----------------------------------------------------- Instance Variables
// --------------------------------------------------------- Public Methods
// -------------------------------------------------- ObjectFactory Methods
/**
 * Create a new Bean instance.
 *
 * @param obj The reference object describing the Bean
 */
@Override
public Object getObjectInstance(Object obj, Name name, Context nameCtx, Hashtable<?, ?> environment) throws NamingException {
    if (obj instanceof ResourceRef) {
        try {
            Reference ref = (Reference) obj;
            String beanClassName = ref.getClassName();
            Class<?> beanClass = null;
            ClassLoader tcl = Thread.currentThread().getContextClassLoader();
            if (tcl != null) {
                try {
                    beanClass = tcl.loadClass(beanClassName);
                } catch (ClassNotFoundException e) {
                }
            } else {
                try {
                    beanClass = Class.forName(beanClassName);
                } catch (ClassNotFoundException e) {
                    e.printStackTrace();
                }
            }
            if (beanClass == null) {
                throw new NamingException("Class not found: " + beanClassName);
            }
            BeanInfo bi = Introspector.getBeanInfo(beanClass);
            PropertyDescriptor[] pda = bi.getPropertyDescriptors();
            Object bean = beanClass.newInstance();
            /* Look for properties with explicitly configured setter */
            RefAddr ra = ref.get("forceString");
            Map<String, Method> forced = new HashMap<String, Method>();
            String value;
            if (ra != null) {
                value = (String) ra.getContent();
                Class<?>[] paramTypes = new Class[1];
                paramTypes[0] = String.class;
                String setterName;
                int index;
                /* Items are given as comma separated list */
                for (String param : value.split(",")) {
                    param = param.trim();
                    /* A single item can either be of the form name=method
                         * or just a property name (and we will use a standard
                         * setter) */
                    index = param.indexOf('=');
                    if (index >= 0) {
                        setterName = param.substring(index + 1).trim();
                        param = param.substring(0, index).trim();
                    } else {
                        setterName = "set" + param.substring(0, 1).toUpperCase(Locale.ENGLISH) + param.substring(1);
                    }
                    try {
                        forced.put(param, beanClass.getMethod(setterName, paramTypes));
                    } catch (NoSuchMethodException ex) {
                        throw new NamingException("Forced String setter " + setterName + " not found for property " + param);
                    } catch (SecurityException ex) {
                        throw new NamingException("Forced String setter " + setterName + " not allowed for property " + param);
                    }
                }
            }
            Enumeration<RefAddr> e = ref.getAll();
            while (e.hasMoreElements()) {
                ra = e.nextElement();
                String propName = ra.getType();
                if (propName.equals(Constants.FACTORY) || propName.equals("scope") || propName.equals("auth") || propName.equals("forceString") || propName.equals("singleton")) {
                    continue;
                }
                value = (String) ra.getContent();
                Object[] valueArray = new Object[1];
                /* Shortcut for properties with explicitly configured setter */
                Method method = forced.get(propName);
                if (method != null) {
                    valueArray[0] = value;
                    try {
                        method.invoke(bean, valueArray);
                    } catch (IllegalAccessException ex) {
                        throw new NamingException("Forced String setter " + method.getName() + " threw IllegalAccessException for property " + propName);
                    } catch (IllegalArgumentException ex) {
                        throw new NamingException("Forced String setter " + method.getName() + " threw IllegalArgumentException for property " + propName);
                    } catch (InvocationTargetException ex) {
                        throw new NamingException("Forced String setter " + method.getName() + " threw InvocationTargetException for property " + propName);
                    }
                    continue;
                }
                int i = 0;
                for (i = 0; i < pda.length; i++) {
                    if (pda[i].getName().equals(propName)) {
                        Class<?> propType = pda[i].getPropertyType();
                        if (propType.equals(String.class)) {
                            valueArray[0] = value;
                        } else if (propType.equals(Character.class) || propType.equals(char.class)) {
                            valueArray[0] = Character.valueOf(value.charAt(0));
                        } else if (propType.equals(Byte.class) || propType.equals(byte.class)) {
                            valueArray[0] = Byte.valueOf(value);
                        } else if (propType.equals(Short.class) || propType.equals(short.class)) {
                            valueArray[0] = Short.valueOf(value);
                        } else if (propType.equals(Integer.class) || propType.equals(int.class)) {
                            valueArray[0] = Integer.valueOf(value);
                        } else if (propType.equals(Long.class) || propType.equals(long.class)) {
                            valueArray[0] = Long.valueOf(value);
                        } else if (propType.equals(Float.class) || propType.equals(float.class)) {
                            valueArray[0] = Float.valueOf(value);
                        } else if (propType.equals(Double.class) || propType.equals(double.class)) {
                            valueArray[0] = Double.valueOf(value);
                        } else if (propType.equals(Boolean.class) || propType.equals(boolean.class)) {
                            valueArray[0] = Boolean.valueOf(value);
                        } else {
                            throw new NamingException("String conversion for property " + propName + " of type '" + propType.getName() + "' not available");
                        }
                        Method setProp = pda[i].getWriteMethod();
                        if (setProp != null) {
                            setProp.invoke(bean, valueArray);
                        } else {
                            throw new NamingException("Write not allowed for property: " + propName);
                        }
                        break;
                    }
                }
                if (i == pda.length) {
                    throw new NamingException("No set method found for property: " + propName);
                }
            }
            return bean;
        } catch (java.beans.IntrospectionException ie) {
            NamingException ne = new NamingException(ie.getMessage());
            ne.setRootCause(ie);
            throw ne;
        } catch (java.lang.IllegalAccessException iae) {
            NamingException ne = new NamingException(iae.getMessage());
            ne.setRootCause(iae);
            throw ne;
        } catch (java.lang.InstantiationException ie2) {
            NamingException ne = new NamingException(ie2.getMessage());
            ne.setRootCause(ie2);
            throw ne;
        } catch (java.lang.reflect.InvocationTargetException ite) {
            Throwable cause = ite.getCause();
            if (cause instanceof ThreadDeath) {
                throw (ThreadDeath) cause;
            }
            if (cause instanceof VirtualMachineError) {
                throw (VirtualMachineError) cause;
            }
            NamingException ne = new NamingException(ite.getMessage());
            ne.setRootCause(ite);
            throw ne;
        }
    } else {
        return null;
    }
}
Also used : HashMap(java.util.HashMap) BeanInfo(java.beans.BeanInfo) RefAddr(javax.naming.RefAddr) NamingException(javax.naming.NamingException) PropertyDescriptor(java.beans.PropertyDescriptor) Reference(javax.naming.Reference) Method(java.lang.reflect.Method) InvocationTargetException(java.lang.reflect.InvocationTargetException) InvocationTargetException(java.lang.reflect.InvocationTargetException) ResourceRef(org.apache.naming.ResourceRef)

Example 55 with RefAddr

use of javax.naming.RefAddr in project tomcat70 by apache.

the class DataSourceLinkFactory method getObjectInstance.

// ------------------------------------------------- ObjectFactory Methods
/**
 * Create a new DataSource instance.
 *
 * @param obj The reference object describing the DataSource
 */
@Override
public Object getObjectInstance(Object obj, Name name, Context nameCtx, Hashtable<?, ?> environment) throws NamingException {
    Object result = super.getObjectInstance(obj, name, nameCtx, environment);
    // Can we process this request?
    if (result != null) {
        Reference ref = (Reference) obj;
        RefAddr userAttr = ref.get("username");
        RefAddr passAttr = ref.get("password");
        if (userAttr.getContent() != null && passAttr.getContent() != null) {
            result = wrapDataSource(result, userAttr.getContent().toString(), passAttr.getContent().toString());
        }
    }
    return result;
}
Also used : RefAddr(javax.naming.RefAddr) Reference(javax.naming.Reference)

Aggregations

RefAddr (javax.naming.RefAddr)94 Reference (javax.naming.Reference)60 NamingException (javax.naming.NamingException)23 StringRefAddr (javax.naming.StringRefAddr)18 Properties (java.util.Properties)16 ObjectFactory (javax.naming.spi.ObjectFactory)12 InitialContext (javax.naming.InitialContext)9 Method (java.lang.reflect.Method)7 NameNotFoundException (javax.naming.NameNotFoundException)6 EjbRef (org.apache.naming.EjbRef)5 ResourceRef (org.apache.naming.ResourceRef)5 ResourceInfo (org.glassfish.resourcebase.resources.api.ResourceInfo)5 SerializableObjectRefAddr (org.glassfish.resources.naming.SerializableObjectRefAddr)5 InvocationTargetException (java.lang.reflect.InvocationTargetException)4 ArrayList (java.util.ArrayList)4 Enumeration (java.util.Enumeration)4 DataSource (javax.sql.DataSource)4 BeanInfo (java.beans.BeanInfo)3 PropertyDescriptor (java.beans.PropertyDescriptor)3 ResourceLinkRef (org.apache.naming.ResourceLinkRef)3