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 });
}
}
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 });
}
}
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;
}
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;
}
}
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;
}
Aggregations