Patches item #541255, was opened at 2002-04-08 14:44
You can respond by visiting:
http://sourceforge.net/tracker/?func=detail&atid=376687&aid=541255&group_id=22866
Category: JBossCX
Group: v3.0 Rabbit Hole (unstable)
Status: Open
Resolution: None
Priority: 5
Submitted By: Larry Sanderson (lsanders)
Assigned to: Nobody/Anonymous (nobody)
Summary: properties in underlying XA-JDBC drivers
Initial Comment:
XA-JDBC drivers are typically made available to the
App server via the
org.jboss.resource.adapter.jdbc.xa.XAManagedConnectionF
actory MBean. This class provides a generic way to
set JavaBean-style properties on the underlying
XADataSource via the setXADataSourceProperties
method. Unfortunately, only String-based JavaBean
arguments are supported.
The XA driver that I am using requires an integer
property to be set (portNumber). The attached patch
opens up the properties to support all primitive
setXXX methods in addition to Strings.
-Larry
Index:
connector//src/main/org/jboss/resource/adapter/jdbc/xa/
XAManagedConnectionFactory.java
=======================================================
============
RCS
file: /cvsroot/jboss/jbosscx/src/main/org/jboss/resourc
e/adapter/jdbc/xa/XAManagedConnectionFactory.java,v
retrieving revision 1.4
diff -u -w -r1.4 XAManagedConnectionFactory.java
---
connector//src/main/org/jboss/resource/adapter/jdbc/xa/
XAManagedConnectionFactory.java 25 Dec 2001 15:35:18 -
0000 1.4
+++
connector//src/main/org/jboss/resource/adapter/jdbc/xa/
XAManagedConnectionFactory.java 8 Apr 2002 21:20:38 -
0000
@@ -452,24 +452,7 @@
log.trace("got DataSource instance");
Properties props = parseProperties();
- Iterator it = props.keySet().iterator();
- while (it.hasNext())
- {
- String name = null;
- String value = null;
- try
- {
- name = (String)it.next();
- value = props.getProperty(name);
- Method meth = cls.getMethod("set" +
Character.toUpperCase(name.charAt(0)) + name.substring
(1),
- new Class[]{String.class});
- meth.invoke(xads, new Object[]
{value});
- }
- catch (Exception e)
- {
- log.warn("Unable to set
XADataSource property " + name + "=" + value + ":");
- }
- }
+ populate(xads, props);
return xads;
}
catch (Exception e)
@@ -508,6 +491,122 @@
props.put(key, value);
}
return props;
+ }
+
+ /**
+ * Populate the obj with the properties in the
Map. No exceptions
+ * are thrown if a property is specified for which
there is no setter,
+ * however a warning is issued.
+ *
+ * @param props the properties to use.
+ */
+ private void populate(Object obj, Map props)
+ {
+ // get all valid set methods -
+ Method[] methods = obj.getClass().getMethods();
+ HashMap setters = new HashMap();
+
+ for (int i = 0; i < methods.length; i++)
+ {
+ Method meth = methods[i];
+ String name = meth.getName();
+ if (name.startsWith("set"))
+ {
+ String attrName = name.substring(3);
+ if (meth.getParameterTypes().length == 1)
+ {
+ Class type = meth.getParameterTypes()
[0];
+ if (type == String.class ||
type.isPrimitive())
+ {
+ setters.put(attrName, meth);
+ }
+ }
+ }
+ }
+
+ for (Iterator i = props.entrySet().iterator();
i.hasNext();)
+ {
+ Map.Entry entry = (Map.Entry) i.next();
+ String attributeName = (String) entry.getKey
();
+ String attributeValue = (String)
entry.getValue();
+
+ Method meth = (Method)setters.get
(attributeName);
+ if (meth != null)
+ {
+ try
+ {
+ Object val = convert(attributeValue,
meth.getParameterTypes()[0]);
+ meth.invoke(obj, new Object[] {
val });
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ log.warn("Unable to set XADataSource
property " +
+ attributeName + "=" +
attributeValue + ":");
+ }
+ }
+ else
+ {
+ log.warn("No setter method for
attribute " + attributeName +
+ " (value=" + attributeValue
+ ").");
+ }
+ }
+ }
+
+ /**
+ * Convert the specified value to the specified
class. This should be
+ * replaced with the
org.apache.commons.beanUtils.ConvertUtils class.
+ *
+ * @return the value converted to type
+ * @param value the String value to convert
+ * @type the class to convert to. Must be a
primitive type or String.
+ */
+ private Object convert(String value, Class type)
+ {
+ if (type == String.class)
+ {
+ return value;
+ }
+ if (type == Integer.TYPE)
+ {
+ return Integer.valueOf(value);
+ }
+ if (type == Double.TYPE)
+ {
+ return Double.valueOf(value);
+ }
+ if (type == Boolean.TYPE) {
+ return new Boolean(
+ value.equalsIgnoreCase("true") ||
+ value.equalsIgnoreCase("on") ||
+ value.equalsIgnoreCase("yes")
+ );
+ }
+ if (type == Long.TYPE)
+ {
+ return Long.valueOf(value);
+ }
+ if (type == Float.TYPE)
+ {
+ return Float.valueOf(value);
+ }
+ if (type == Byte.TYPE)
+ {
+ return Byte.valueOf(value);
+ }
+ if (type == Short.TYPE)
+ {
+ return Short.valueOf(value);
+ }
+ if (type == Character.TYPE)
+ {
+ return new Character(value.charAt(0));
+ }
+ if (type == Double.TYPE)
+ {
+ return Double.valueOf(value);
+ }
+ return null;
}
}
----------------------------------------------------------------------
You can respond by visiting:
http://sourceforge.net/tracker/?func=detail&atid=376687&aid=541255&group_id=22866
_______________________________________________
Jboss-development mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-development
Sponsored by http://www.ThinkGeek.com/