You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by dj...@apache.org on 2004/11/04 07:40:00 UTC
svn commit: rev 56574 - in geronimo/trunk/modules: connector-builder/src/java/org/apache/geronimo/connector/deployment kernel/src/java/org/apache/geronimo/gbean
Author: djencks
Date: Wed Nov 3 22:39:59 2004
New Revision: 56574
Modified:
geronimo/trunk/modules/connector-builder/src/java/org/apache/geronimo/connector/deployment/ConnectorModuleBuilder.java
geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/DynamicGAttributeInfo.java
geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/DynamicGBeanDelegate.java
Log:
GERONIMO-432 Add types to dynamic gbean attributes so primitive types work. Also avoid Introspector for Activation Specs to get all the attributes, not just those on the supplied class
Modified: geronimo/trunk/modules/connector-builder/src/java/org/apache/geronimo/connector/deployment/ConnectorModuleBuilder.java
==============================================================================
--- geronimo/trunk/modules/connector-builder/src/java/org/apache/geronimo/connector/deployment/ConnectorModuleBuilder.java (original)
+++ geronimo/trunk/modules/connector-builder/src/java/org/apache/geronimo/connector/deployment/ConnectorModuleBuilder.java Wed Nov 3 22:39:59 2004
@@ -16,18 +16,18 @@
*/
package org.apache.geronimo.connector.deployment;
-import java.beans.BeanInfo;
-import java.beans.IntrospectionException;
import java.beans.Introspector;
-import java.beans.PropertyDescriptor;
import java.beans.PropertyEditor;
import java.io.File;
import java.io.IOException;
+import java.lang.reflect.Method;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.Enumeration;
import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.jar.JarFile;
@@ -41,6 +41,7 @@
import org.apache.geronimo.common.propertyeditor.PropertyEditors;
import org.apache.geronimo.connector.ActivationSpecInfo;
import org.apache.geronimo.connector.ResourceAdapterModuleImpl;
+import org.apache.geronimo.connector.outbound.JCAConnectionFactoryImpl;
import org.apache.geronimo.connector.outbound.connectionmanagerconfig.LocalTransactions;
import org.apache.geronimo.connector.outbound.connectionmanagerconfig.NoPool;
import org.apache.geronimo.connector.outbound.connectionmanagerconfig.NoTransactions;
@@ -51,7 +52,6 @@
import org.apache.geronimo.connector.outbound.connectionmanagerconfig.TransactionSupport;
import org.apache.geronimo.connector.outbound.connectionmanagerconfig.XATransactions;
import org.apache.geronimo.connector.outbound.security.PasswordCredentialRealm;
-import org.apache.geronimo.connector.outbound.JCAConnectionFactoryImpl;
import org.apache.geronimo.deployment.DeploymentException;
import org.apache.geronimo.deployment.service.GBeanHelper;
import org.apache.geronimo.deployment.util.DeploymentUtil;
@@ -68,8 +68,9 @@
import org.apache.geronimo.j2ee.deployment.j2eeobjectnames.J2eeContext;
import org.apache.geronimo.j2ee.deployment.j2eeobjectnames.J2eeContextImpl;
import org.apache.geronimo.j2ee.deployment.j2eeobjectnames.NameFactory;
-import org.apache.geronimo.naming.reference.RefAddrContentObjectFactory;
+import org.apache.geronimo.kernel.Kernel;
import org.apache.geronimo.naming.reference.GBeanGetResourceRefAddr;
+import org.apache.geronimo.naming.reference.RefAddrContentObjectFactory;
import org.apache.geronimo.schema.SchemaConversionUtils;
import org.apache.geronimo.xbeans.geronimo.GerAdminobjectInstanceType;
import org.apache.geronimo.xbeans.geronimo.GerAdminobjectType;
@@ -81,9 +82,9 @@
import org.apache.geronimo.xbeans.geronimo.GerConnectorType;
import org.apache.geronimo.xbeans.geronimo.GerDependencyType;
import org.apache.geronimo.xbeans.geronimo.GerGbeanType;
+import org.apache.geronimo.xbeans.geronimo.GerPartitionedpoolType;
import org.apache.geronimo.xbeans.geronimo.GerResourceadapterType;
import org.apache.geronimo.xbeans.geronimo.GerSinglepoolType;
-import org.apache.geronimo.xbeans.geronimo.GerPartitionedpoolType;
import org.apache.geronimo.xbeans.j2ee.ActivationspecType;
import org.apache.geronimo.xbeans.j2ee.AdminobjectType;
import org.apache.geronimo.xbeans.j2ee.ConfigPropertyType;
@@ -97,7 +98,6 @@
import org.apache.geronimo.xbeans.j2ee.connector_1_0.ConnectorDocument10;
import org.apache.geronimo.xbeans.j2ee.connector_1_0.ConnectorType10;
import org.apache.geronimo.xbeans.j2ee.connector_1_0.ResourceadapterType10;
-import org.apache.geronimo.kernel.Kernel;
import org.apache.xmlbeans.XmlException;
import org.apache.xmlbeans.XmlObject;
@@ -507,29 +507,37 @@
String messageListenerInterface = messagelistenerType.getMessagelistenerType().getStringValue().trim();
ActivationspecType activationspec = messagelistenerType.getActivationspec();
String activationSpecClassName = activationspec.getActivationspecClass().getStringValue();
- GBeanInfoBuilder infoFactory = new GBeanInfoBuilder("org.apache.geronimo.connector.ActivationSpecWrapper", cl);
+ GBeanInfoBuilder infoBuilder = new GBeanInfoBuilder("org.apache.geronimo.connector.ActivationSpecWrapper", cl);
//add all javabean properties that have both getter and setter. Ignore the "required" flag from the dd.
- BeanInfo beanInfo;
+ Map getters = new HashMap();
+ Set setters = new HashSet();
+ Method[] methods = null;
try {
Class activationSpecClass = cl.loadClass(activationSpecClassName);
- beanInfo = Introspector.getBeanInfo(activationSpecClass);
- } catch (IntrospectionException e) {
- throw new DeploymentException("Can not introspect activation spec class", e);
+ methods = activationSpecClass.getMethods();
} catch (ClassNotFoundException e) {
throw new DeploymentException("Can not load activation spec class", e);
}
-
- PropertyDescriptor[] attDescriptors = beanInfo.getPropertyDescriptors();
- for (int j = 0; j < attDescriptors.length; j++) {
- PropertyDescriptor desc = attDescriptors[j];
- if (desc.getName().equals("resourceAdapter") || desc.getReadMethod() == null || desc.getWriteMethod() == null) {
- continue;
+ for (int j = 0; j < methods.length; j++) {
+ Method method = methods[j];
+ String methodName = method.getName();
+ if ((methodName.startsWith("get") || methodName.startsWith("is")) && method.getParameterTypes().length == 0) {
+ String attributeName = (methodName.startsWith("get")) ? methodName.substring(3) : methodName.substring(2);
+ getters.put(Introspector.decapitalize(attributeName), method.getReturnType().getName());
+ } else if (methodName.startsWith("set") && method.getParameterTypes().length == 1) {
+ setters.add(Introspector.decapitalize(methodName.substring(3)));
}
- infoFactory.addAttribute(new DynamicGAttributeInfo(desc.getName(), true));
+ }
+ getters.keySet().retainAll(setters);
+ getters.remove("resourceAdapter");
+
+ for (Iterator iterator = getters.entrySet().iterator(); iterator.hasNext();) {
+ Map.Entry entry = (Map.Entry) iterator.next();
+ infoBuilder.addAttribute(new DynamicGAttributeInfo((String) entry.getKey(), (String) entry.getValue(), true, true, true));
}
- GBeanInfo gbeanInfo = infoFactory.getBeanInfo();
+ GBeanInfo gbeanInfo = infoBuilder.getBeanInfo();
try {
//make sure the class is available, but we don't use it.
cl.loadClass(activationSpecClassName);
@@ -544,7 +552,7 @@
private GBeanMBean setUpDynamicGBean(GBeanInfoBuilder infoFactory, ConfigProperty[] configProperties, ClassLoader cl) throws DeploymentException {
for (int i = 0; i < configProperties.length; i++) {
- infoFactory.addAttribute(new DynamicGAttributeInfo(configProperties[i].getName(), true));
+ infoFactory.addAttribute(new DynamicGAttributeInfo(configProperties[i].getName(), configProperties[i].getType(),true, true, true));
}
GBeanInfo gbeanInfo = infoFactory.getBeanInfo();
Modified: geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/DynamicGAttributeInfo.java
==============================================================================
--- geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/DynamicGAttributeInfo.java (original)
+++ geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/DynamicGAttributeInfo.java Wed Nov 3 22:39:59 2004
@@ -34,4 +34,9 @@
public DynamicGAttributeInfo(String name, boolean persistent, boolean readable, boolean writable) {
super(name, Object.class.getName(), persistent, Boolean.valueOf(readable), Boolean.valueOf(writable), null, null);
}
+
+ public DynamicGAttributeInfo(String name, String type, boolean persistent, boolean readable, boolean writable) {
+ super(name, type, persistent, Boolean.valueOf(readable), Boolean.valueOf(writable), null, null);
+ }
+
}
Modified: geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/DynamicGBeanDelegate.java
==============================================================================
--- geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/DynamicGBeanDelegate.java (original)
+++ geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/DynamicGBeanDelegate.java Wed Nov 3 22:39:59 2004
@@ -144,6 +144,8 @@
private final FastMethod method;
public Operation(Object target, Method method) {
+ assert target != null;
+ assert method != null;
this.target = target;
this.method = FastClass.create(target.getClass()).getMethod(method);
}