You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by da...@apache.org on 2004/12/01 09:01:39 UTC

svn commit: r109314 - in geronimo/trunk/modules: connector/src/java/org/apache/geronimo/connector/outbound core/src/test/org/apache/geronimo/management j2ee/src/java/org/apache/geronimo/j2ee/mejb jetty/src/java/org/apache/geronimo/jetty jetty/src/java/org/apache/geronimo/jetty/connector kernel/src/java/org/apache/geronimo/gbean kernel/src/java/org/apache/geronimo/gbean/jmx kernel/src/java/org/apache/geronimo/gbean/runtime kernel/src/java/org/apache/geronimo/kernel kernel/src/java/org/apache/geronimo/kernel/management kernel/src/test/org/apache/geronimo/gbean kernel/src/test/org/apache/geronimo/gbean/runtime kernel/src/test/org/apache/geronimo/kernel network security/src/java/org/apache/geronimo/security/bridge security/src/java/org/apache/geronimo/security/jaas security/src/test/org/apache/geronimo/security/bridge timer/src/java/org/apache/geronimo/timer/jdbc

Author: dain
Date: Wed Dec  1 00:01:37 2004
New Revision: 109314

URL: http://svn.apache.org/viewcvs?view=rev&rev=109314
Log:
Changed the GBeanInfo classes to require full specification and move the "figure things out" code from the GBeanInstance to the GBeanInfoBuilder.

Removed:
   geronimo/trunk/modules/core/src/test/org/apache/geronimo/management/NotificationTypeTest.java
   geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/runtime/Util.java
Modified:
   geronimo/trunk/modules/connector/src/java/org/apache/geronimo/connector/outbound/AbstractConnectionManager.java
   geronimo/trunk/modules/connector/src/java/org/apache/geronimo/connector/outbound/GenericConnectionManager.java
   geronimo/trunk/modules/j2ee/src/java/org/apache/geronimo/j2ee/mejb/MEJB.java
   geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JAASJettyRealm.java
   geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/connector/JettyConnector.java
   geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/DynamicGAttributeInfo.java
   geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/GAttributeInfo.java
   geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/GBeanInfo.java
   geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/GBeanInfoBuilder.java
   geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/GConstructorInfo.java
   geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/GReferenceInfo.java
   geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/jmx/GBeanJMXUtil.java
   geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/runtime/AbstractGBeanReference.java
   geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/runtime/GBeanAttribute.java
   geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/runtime/GBeanCollectionReference.java
   geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/runtime/GBeanInstance.java
   geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/runtime/GBeanOperation.java
   geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/runtime/GBeanReference.java
   geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/runtime/GBeanSingleReference.java
   geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/kernel/Kernel.java
   geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/kernel/LifecycleMonitor.java
   geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/kernel/management/NotificationType.java
   geronimo/trunk/modules/kernel/src/test/org/apache/geronimo/gbean/GBeanInfoFactoryTest.java
   geronimo/trunk/modules/kernel/src/test/org/apache/geronimo/gbean/GBeanInfoTest.java
   geronimo/trunk/modules/kernel/src/test/org/apache/geronimo/gbean/runtime/GBeanAttributeTest.java
   geronimo/trunk/modules/kernel/src/test/org/apache/geronimo/kernel/MockDynamicGBean.java
   geronimo/trunk/modules/network/project.xml
   geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/bridge/AbstractPrincipalMappingUserPasswordRealmBridge.java
   geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jaas/GeronimoLoginConfiguration.java
   geronimo/trunk/modules/security/src/test/org/apache/geronimo/security/bridge/MappingUserPasswordBridgeTest.java
   geronimo/trunk/modules/timer/src/java/org/apache/geronimo/timer/jdbc/JDBCWorkerPersistence.java

Modified: geronimo/trunk/modules/connector/src/java/org/apache/geronimo/connector/outbound/AbstractConnectionManager.java
Url: http://svn.apache.org/viewcvs/geronimo/trunk/modules/connector/src/java/org/apache/geronimo/connector/outbound/AbstractConnectionManager.java?view=diff&rev=109314&p1=geronimo/trunk/modules/connector/src/java/org/apache/geronimo/connector/outbound/AbstractConnectionManager.java&r1=109313&p2=geronimo/trunk/modules/connector/src/java/org/apache/geronimo/connector/outbound/AbstractConnectionManager.java&r2=109314
==============================================================================
--- geronimo/trunk/modules/connector/src/java/org/apache/geronimo/connector/outbound/AbstractConnectionManager.java	(original)
+++ geronimo/trunk/modules/connector/src/java/org/apache/geronimo/connector/outbound/AbstractConnectionManager.java	Wed Dec  1 00:01:37 2004
@@ -32,9 +32,12 @@
  * @version $Rev$ $Date$
  */
 public abstract class AbstractConnectionManager implements ConnectionManagerFactory, ConnectionManager, LazyAssociatableConnectionManager, PoolingAttributes {
-
     protected final Interceptors interceptors;
 
+    //default constructor for use as endpoint
+    public AbstractConnectionManager() {
+        interceptors = null;
+    }
 
     public AbstractConnectionManager(Interceptors interceptors) {
         this.interceptors = interceptors;

Modified: geronimo/trunk/modules/connector/src/java/org/apache/geronimo/connector/outbound/GenericConnectionManager.java
Url: http://svn.apache.org/viewcvs/geronimo/trunk/modules/connector/src/java/org/apache/geronimo/connector/outbound/GenericConnectionManager.java?view=diff&rev=109314&p1=geronimo/trunk/modules/connector/src/java/org/apache/geronimo/connector/outbound/GenericConnectionManager.java&r1=109313&p2=geronimo/trunk/modules/connector/src/java/org/apache/geronimo/connector/outbound/GenericConnectionManager.java&r2=109314
==============================================================================
--- geronimo/trunk/modules/connector/src/java/org/apache/geronimo/connector/outbound/GenericConnectionManager.java	(original)
+++ geronimo/trunk/modules/connector/src/java/org/apache/geronimo/connector/outbound/GenericConnectionManager.java	Wed Dec  1 00:01:37 2004
@@ -36,7 +36,7 @@
 
     //default constructor for use as endpoint
     public GenericConnectionManager() {
-        super(null);
+        super();
     }
 
     public GenericConnectionManager(TransactionSupport transactionSupport,

Deleted: /geronimo/trunk/modules/core/src/test/org/apache/geronimo/management/NotificationTypeTest.java
Url: http://svn.apache.org/viewcvs/geronimo/trunk/modules/core/src/test/org/apache/geronimo/management/NotificationTypeTest.java?view=auto&rev=109313
==============================================================================

Modified: geronimo/trunk/modules/j2ee/src/java/org/apache/geronimo/j2ee/mejb/MEJB.java
Url: http://svn.apache.org/viewcvs/geronimo/trunk/modules/j2ee/src/java/org/apache/geronimo/j2ee/mejb/MEJB.java?view=diff&rev=109314&p1=geronimo/trunk/modules/j2ee/src/java/org/apache/geronimo/j2ee/mejb/MEJB.java&r1=109313&p2=geronimo/trunk/modules/j2ee/src/java/org/apache/geronimo/j2ee/mejb/MEJB.java&r2=109314
==============================================================================
--- geronimo/trunk/modules/j2ee/src/java/org/apache/geronimo/j2ee/mejb/MEJB.java	(original)
+++ geronimo/trunk/modules/j2ee/src/java/org/apache/geronimo/j2ee/mejb/MEJB.java	Wed Dec  1 00:01:37 2004
@@ -44,7 +44,7 @@
 import org.apache.geronimo.kernel.KernelMBean;
 import org.apache.geronimo.kernel.NoSuchAttributeException;
 import org.apache.geronimo.kernel.NoSuchOperationException;
-
+ 
 /**
  * GBean implementing Management interface and supplying proxies to act as the MEJB container.
  *
@@ -253,7 +253,7 @@
     public static final GBeanInfo GBEAN_INFO;
 
     static {
-        GBeanInfoBuilder infoBuilder = new GBeanInfoBuilder(MEJB.class.getName());
+        GBeanInfoBuilder infoBuilder = new GBeanInfoBuilder(MEJB.class);
         infoBuilder.addAttribute("kernel", KernelMBean.class, false);
         infoBuilder.addInterface(Management.class);
 

Modified: geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JAASJettyRealm.java
Url: http://svn.apache.org/viewcvs/geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JAASJettyRealm.java?view=diff&rev=109314&p1=geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JAASJettyRealm.java&r1=109313&p2=geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JAASJettyRealm.java&r2=109314
==============================================================================
--- geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JAASJettyRealm.java	(original)
+++ geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JAASJettyRealm.java	Wed Dec  1 00:01:37 2004
@@ -172,7 +172,7 @@
     public static final GBeanInfo GBEAN_INFO;
 
     static {
-        GBeanInfoBuilder infoFactory = new GBeanInfoBuilder("Jetty Realm", JAASJettyRealm.class.getName());
+        GBeanInfoBuilder infoFactory = new GBeanInfoBuilder("Jetty Realm", JAASJettyRealm.class);
         infoFactory.setConstructor(new String[]{"JettyContainer"});
         infoFactory.addReference("JettyContainer", JettyContainer.class);
         infoFactory.addAttribute("name", String.class, true);

Modified: geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/connector/JettyConnector.java
Url: http://svn.apache.org/viewcvs/geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/connector/JettyConnector.java?view=diff&rev=109314&p1=geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/connector/JettyConnector.java&r1=109313&p2=geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/connector/JettyConnector.java&r2=109314
==============================================================================
--- geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/connector/JettyConnector.java	(original)
+++ geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/connector/JettyConnector.java	Wed Dec  1 00:01:37 2004
@@ -32,6 +32,11 @@
     private final JettyContainer container;
     protected final HttpListener listener;
 
+    public JettyConnector(JettyContainer container) {
+        this.container = container;
+        this.listener = null;
+    }
+
     public JettyConnector(JettyContainer container, HttpListener listener) {
         this.container = container;
         this.listener = listener;
@@ -81,6 +86,7 @@
         GBeanInfoBuilder infoFactory = new GBeanInfoBuilder("Jetty HTTP Connector", JettyConnector.class);
         infoFactory.addAttribute("port", int.class, true);
         infoFactory.addReference("JettyContainer", JettyContainer.class);
+        infoFactory.setConstructor(new String[] {"JettyContainer"});
         GBEAN_INFO = infoFactory.getBeanInfo();
     }
 }

Modified: geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/DynamicGAttributeInfo.java
Url: http://svn.apache.org/viewcvs/geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/DynamicGAttributeInfo.java?view=diff&rev=109314&p1=geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/DynamicGAttributeInfo.java&r1=109313&p2=geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/DynamicGAttributeInfo.java&r2=109314
==============================================================================
--- 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 Dec  1 00:01:37 2004
@@ -23,20 +23,8 @@
  * @version $Rev$ $Date$
  */
 public class DynamicGAttributeInfo extends GAttributeInfo {
-    public DynamicGAttributeInfo(String name) {
-        this(name, false, true, true);
-    }
-
-    public DynamicGAttributeInfo(String name, boolean persistent) {
-        this(name, persistent, true, true);
-    }
-
-    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);
+        super(name, type, persistent, readable, writable, null, null);
     }
     
 }

Modified: geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/GAttributeInfo.java
Url: http://svn.apache.org/viewcvs/geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/GAttributeInfo.java?view=diff&rev=109314&p1=geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/GAttributeInfo.java&r1=109313&p2=geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/GAttributeInfo.java&r2=109314
==============================================================================
--- geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/GAttributeInfo.java	(original)
+++ geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/GAttributeInfo.java	Wed Dec  1 00:01:37 2004
@@ -43,12 +43,12 @@
     /**
      * Is this attribute readable?
      */
-    private final Boolean readable;
+    private final boolean readable;
 
     /**
      * Is this attribute writiable?
      */
-    private final Boolean writable;
+    private final boolean writable;
 
     /**
      * Name of the getter method.
@@ -62,15 +62,11 @@
      */
     private final String setterName;
 
-    public GAttributeInfo(String name, String type, boolean persistent) {
-        this(name, type, persistent, null, null, null, null);
-    }
-
     public GAttributeInfo(String name, String type, boolean persistent, String getterName, String setterName) {
-        this(name, type, persistent, Boolean.valueOf(getterName != null), Boolean.valueOf(setterName != null), getterName, setterName);
+        this(name, type, persistent, getterName != null, setterName != null, getterName, setterName);
     }
 
-    public GAttributeInfo(String name, String type, boolean persistent, Boolean readable, Boolean writable, String getterName, String setterName) {
+    public GAttributeInfo(String name, String type, boolean persistent, boolean readable, boolean writable, String getterName, String setterName) {
         this.name = name;
         this.type = type;
         this.persistent = persistent;
@@ -92,11 +88,11 @@
         return persistent;
     }
 
-    public Boolean isReadable() {
+    public boolean isReadable() {
         return readable;
     }
 
-    public Boolean isWritable() {
+    public boolean isWritable() {
         return writable;
     }
 

Modified: geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/GBeanInfo.java
Url: http://svn.apache.org/viewcvs/geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/GBeanInfo.java?view=diff&rev=109314&p1=geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/GBeanInfo.java&r1=109313&p2=geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/GBeanInfo.java&r2=109314
==============================================================================
--- geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/GBeanInfo.java	(original)
+++ geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/GBeanInfo.java	Wed Dec  1 00:01:37 2004
@@ -28,6 +28,9 @@
 import java.util.Set;
 import java.util.Map;
 import java.util.HashMap;
+import java.util.Arrays;
+
+import org.apache.geronimo.kernel.management.NotificationType;
 
 /**
  * Describes a GBean.
@@ -35,6 +38,8 @@
  * @version $Rev$ $Date$
  */
 public final class GBeanInfo implements Serializable {
+    private static final Set DEFAULT_NOTIFICATIONS = Collections.unmodifiableSet(new HashSet(Arrays.asList(NotificationType.TYPES)));
+
     /**
      * Static helper to try to get the GBeanInfo from the class supplied.
      *
@@ -72,10 +77,24 @@
     private final Set notifications;
     private final Set references;
 
+    public GBeanInfo(String className, Collection attributes, GConstructorInfo constructor, Collection operations, Set references) {
+        this(className, className, attributes, constructor, operations, references, DEFAULT_NOTIFICATIONS);
+    }
+
+    public GBeanInfo(String name, String className, Collection attributes, GConstructorInfo constructor, Collection operations, Set references) {
+        this(name, className, attributes, constructor, operations, references, DEFAULT_NOTIFICATIONS);
+    }
+
+    /**
+     * @deprecated
+     */
     public GBeanInfo(String className, Collection attributes, GConstructorInfo constructor, Collection operations, Set references, Set notifications) {
         this(className, className, attributes, constructor, operations, references, notifications);
     }
 
+    /**
+     * @deprecated
+     */
     public GBeanInfo(String name, String className, Collection attributes, GConstructorInfo constructor, Collection operations, Set references, Set notifications) {
         this.name = name;
         this.className = className;

Modified: geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/GBeanInfoBuilder.java
Url: http://svn.apache.org/viewcvs/geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/GBeanInfoBuilder.java?view=diff&rev=109314&p1=geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/GBeanInfoBuilder.java&r1=109313&p2=geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/GBeanInfoBuilder.java&r2=109314
==============================================================================
--- geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/GBeanInfoBuilder.java	(original)
+++ geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/GBeanInfoBuilder.java	Wed Dec  1 00:01:37 2004
@@ -17,9 +17,10 @@
 package org.apache.geronimo.gbean;
 
 import java.beans.Introspector;
+import java.lang.reflect.Constructor;
 import java.lang.reflect.Method;
-import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
@@ -35,104 +36,57 @@
 
     private final String name;
 
-    private final String className;
+    private final Class gbeanType;
 
     private final Map attributes = new HashMap();
 
-    private GConstructorInfo constructor;
+    private GConstructorInfo constructor = new GConstructorInfo();
 
     private final Map operations = new HashMap();
 
-    private final Set references = new HashSet();
+    private final Map references = new HashMap();
 
-    private final Set notifications = new HashSet();
-
-    public GBeanInfoBuilder(String name) {
-        this(name, name, null);
-    }
-
-    public GBeanInfoBuilder(Class clazz) {
-        this(checkNotNull(clazz).getName(), clazz.getName(), null);
-    }
-
-    public GBeanInfoBuilder(String name, String className) {
-        this(name, className, null);
-    }
-
-    public GBeanInfoBuilder(String name, Class clazz) {
-        this(name, checkNotNull(clazz).getName(), null);
-    }
-
-    public GBeanInfoBuilder(Class clazz, GBeanInfo source) {
-        this(checkNotNull(clazz).getName(), clazz.getName(), source);
+    public GBeanInfoBuilder(Class gbeanType) {
+        this(checkNotNull(gbeanType).getName(), gbeanType, null);
     }
 
-    public GBeanInfoBuilder(String name, GBeanInfo source) {
-        this(checkNotNull(name), name, source);
+    public GBeanInfoBuilder(String name, Class gbeanType) {
+        this(name, checkNotNull(gbeanType), null);
     }
 
-    public GBeanInfoBuilder(String name, ClassLoader cl) {
-        this(checkNotNull(name), name, GBeanInfo.getGBeanInfo(name, cl));
+    public GBeanInfoBuilder(Class gbeanType, GBeanInfo source) {
+        this(checkNotNull(gbeanType).getName(), gbeanType, source);
     }
 
-    public GBeanInfoBuilder(String name, Class clazz, GBeanInfo source) {
-        this(name, checkNotNull(clazz).getName(), source);
+    public GBeanInfoBuilder(String name, ClassLoader classLoader) {
+        this(checkNotNull(name), loadClass(classLoader, name), GBeanInfo.getGBeanInfo(name, classLoader));
     }
 
-    public GBeanInfoBuilder(String name, String className, GBeanInfo source) {
+    public GBeanInfoBuilder(String name, Class gbeanType, GBeanInfo source) {
         checkNotNull(name);
-        checkNotNull(className);
+        checkNotNull(gbeanType);
         this.name = name;
-        this.className = className;
+        this.gbeanType = gbeanType;
         if (source != null) {
-            Set sourceAttributes = source.getAttributes();
-            if (sourceAttributes != null && !sourceAttributes.isEmpty()) {
-                for (Iterator it = sourceAttributes.iterator(); it.hasNext();) {
-                    GAttributeInfo attributeInfo = (GAttributeInfo) it.next();
-                    attributes.put(attributeInfo.getName(), attributeInfo);
-                }
+            for (Iterator i = source.getAttributes().iterator(); i.hasNext();) {
+                GAttributeInfo attributeInfo = (GAttributeInfo) i.next();
+                attributes.put(attributeInfo.getName(), attributeInfo);
             }
-            Set sourceOperations = source.getOperations();
-            if (sourceOperations != null && !sourceOperations.isEmpty()) {
-                for (Iterator it = sourceOperations.iterator(); it.hasNext();) {
-                    GOperationInfo operationInfo = (GOperationInfo) it.next();
-                    operations.put(new GOperationSignature(operationInfo.getName(),
-                            operationInfo.getParameterList()), operationInfo);
-                }
+
+            for (Iterator i = source.getOperations().iterator(); i.hasNext();) {
+                GOperationInfo operationInfo = (GOperationInfo) i.next();
+                operations.put(new GOperationSignature(operationInfo.getName(),
+                        operationInfo.getParameterList()), operationInfo);
             }
-            references.addAll(source.getReferences());
-            notifications.addAll(source.getNotifications());
-            //in case subclass constructor has same parameters as superclass.
-            constructor = source.getConstructor();
-        }
-    }
 
-    /**
-     * Checks whether or not the input argument is null; otherwise it throws
-     * {@link IllegalArgumentException}.
-     *
-     * @param clazz the input argument to validate
-     * @throws IllegalArgumentException if input is null
-     */
-    private static Class checkNotNull(final Class clazz) {
-        if (clazz == null) {
-            throw new IllegalArgumentException("null argument supplied");
-        }
-        return clazz;
-    }
+            for (Iterator iterator = source.getReferences().iterator(); iterator.hasNext();) {
+                GReferenceInfo referenceInfo = (GReferenceInfo) iterator.next();
+                references.put(referenceInfo.getName(), referenceInfo.getReferenceType());
+            }
 
-    /**
-     * Checks whether or not the input argument is null; otherwise it throws
-     * {@link IllegalArgumentException}.
-     *
-     * @param string the input argument to validate
-     * @throws IllegalArgumentException if input is null
-     */
-    private static String checkNotNull(final String string) {
-        if (string == null) {
-            throw new IllegalArgumentException("null argument supplied");
+            //in case subclass constructor has same parameters as superclass.
+            constructor = source.getConstructor();
         }
-        return string;
     }
 
     public void addInterface(Class intf) {
@@ -142,55 +96,68 @@
     //do not use beaninfo Introspector to list the properties.  This method is primarily for interfaces,
     //and it does not process superinterfaces.  It seems to really only work well for classes.
     public void addInterface(Class intf, String[] persistentAttributes) {
-        Set persistentName = new HashSet(Arrays.asList(persistentAttributes));
+        Set persistentNames = new HashSet(Arrays.asList(persistentAttributes));
         Method[] methods = intf.getMethods();
         for (int i = 0; i < methods.length; i++) {
             Method method = methods[i];
-            String name = method.getName();
-            Class[] parameterTypes = method.getParameterTypes();
-            if ((name.startsWith("get") || name.startsWith("is")) && parameterTypes.length == 0) {
-                String attributeName = (name.startsWith("get")) ? name.substring(3) : name.substring(2);
-                attributeName = Introspector.decapitalize(attributeName);
+            if (isGetter(method)) {
+                String attributeName = getAttributeName(method);
                 GAttributeInfo attribute = (GAttributeInfo) attributes.get(attributeName);
-                String type = method.getReturnType().getName();
+                String attributeType = method.getReturnType().getName();
                 if (attribute == null) {
-                    attributes.put(attributeName, new GAttributeInfo(attributeName, type, persistentName.contains(attributeName), name, null));
+                    attributes.put(attributeName,
+                            new GAttributeInfo(attributeName,
+                                    attributeType,
+                                    persistentNames.contains(attributeName),
+                                    method.getName(),
+                                    null));
                 } else {
-                    if (!type.equals(attribute.getType())) {
+                    if (!attributeType.equals(attribute.getType())) {
                         throw new IllegalArgumentException("Getter and setter type do not match: " + attributeName);
                     }
-                    attributes.put(attributeName, new GAttributeInfo(attributeName, type, attribute.isPersistent(), name, attribute.getSetterName()));
+                    attributes.put(attributeName,
+                            new GAttributeInfo(attributeName,
+                                    attributeType,
+                                    attribute.isPersistent(),
+                                    method.getName(),
+                                    attribute.getSetterName()));
                 }
-            } else if (name.startsWith("set") && parameterTypes.length == 1) {
-                String attributeName = name.substring(3);
-                attributeName = Introspector.decapitalize(attributeName);
+            } else if (isSetter(method)) {
+                String attributeName = getAttributeName(method);
+                String attributeType = method.getParameterTypes()[0].getName();
                 GAttributeInfo attribute = (GAttributeInfo) attributes.get(attributeName);
-                String type = method.getParameterTypes()[0].getName();
                 if (attribute == null) {
-                    attributes.put(attributeName, new GAttributeInfo(attributeName, type, persistentName.contains(attributeName), null, name));
+                    attributes.put(attributeName,
+                            new GAttributeInfo(attributeName,
+                                    attributeType,
+                                    persistentNames.contains(attributeName),
+                                    null,
+                                    method.getName()));
                 } else {
-                    if (!type.equals(attribute.getType())) {
+                    if (!attributeType.equals(attribute.getType())) {
                         throw new IllegalArgumentException("Getter and setter type do not match: " + attributeName);
                     }
-                    attributes.put(attributeName, new GAttributeInfo(attributeName, type, attribute.isPersistent(), attribute.getGetterName(), name));
+                    attributes.put(attributeName,
+                            new GAttributeInfo(attributeName,
+                                    attributeType,
+                                    attribute.isPersistent(),
+                                    attribute.getGetterName(),
+                                    method.getName()));
                 }
             } else {
-                List parameters = new ArrayList(parameterTypes.length);
-                for (int j = 0; j < parameterTypes.length; j++) {
-                    parameters.add(parameterTypes[j].getName());
-                }
-                addOperation(new GOperationInfo(name, name, parameters));
+                addOperation(new GOperationInfo(method.getName(), method.getParameterTypes()));
             }
         }
     }
 
-
     public void addAttribute(String name, Class type, boolean persistent) {
-        addAttribute(new GAttributeInfo(name, type.getName(), persistent));
+        addAttribute(name, type.getName(), persistent);
     }
 
     public void addAttribute(String name, String type, boolean persistent) {
-        addAttribute(new GAttributeInfo(name, type, persistent));
+        String getter = searchForGetter(name, type, gbeanType);
+        String setter = searchForSetter(name, type, gbeanType);
+        addAttribute(new GAttributeInfo(name, type, persistent, getter, setter));
     }
 
     public void addAttribute(GAttributeInfo info) {
@@ -198,6 +165,7 @@
     }
 
     public void setConstructor(GConstructorInfo constructor) {
+        assert constructor != null;
         this.constructor = constructor;
     }
 
@@ -218,18 +186,233 @@
     }
 
     public void addReference(GReferenceInfo info) {
-        references.add(info);
+        references.put(info.getName(), info.getReferenceType());
     }
 
     public void addReference(String name, Class type) {
-        addReference(new GReferenceInfo(name, type));
+        references.put(name, type.getName());
     }
 
-    public void addNotification(GNotificationInfo info) {
-        notifications.add(info);
+    public GBeanInfo getBeanInfo() {
+        // get the types of the constructor args
+        // this also verifies that we have a valid constructor
+        Map constructorTypes = getConstructorTypes();
+
+        // build the reference infos now that we know the constructor types
+        Set referenceInfos = new HashSet();
+        for (Iterator iterator = references.entrySet().iterator(); iterator.hasNext();) {
+            Map.Entry entry = (Map.Entry) iterator.next();
+            String referenceName = (String) entry.getKey();
+            String referenceType = (String) entry.getValue();
+
+            String proxyType = (String) constructorTypes.get(referenceName);
+            String setterName = null;
+            if (proxyType == null) {
+                Method setter = searchForSetterMethod(referenceName, referenceType, gbeanType);
+                if (setter == null) {
+                    setter = searchForSetterMethod(referenceName, Collection.class.getName(), gbeanType);
+                    if (setter == null) {
+                        throw new InvalidConfigurationException("Reference must be a constructor argument or have a setter: name=" + referenceName);
+                    }
+                }
+                proxyType = setter.getParameterTypes()[0].getName();
+
+                setterName = setter.getName();
+            }
+
+            if (!proxyType.equals(Collection.class.getName()) && !proxyType.equals(referenceType)) {
+                throw new InvalidConfigurationException("Reference proxy type must be Collection or " + referenceType + ": name=" + referenceName);
+            }
+
+            referenceInfos.add(new GReferenceInfo(referenceName, referenceType, proxyType, setterName));
+        }
+
+
+        return new GBeanInfo(name, gbeanType.getName(), attributes.values(), constructor, operations.values(), referenceInfos);
     }
 
-    public GBeanInfo getBeanInfo() {
-        return new GBeanInfo(name, className, attributes.values(), constructor, operations.values(), references, notifications);
+    private Map getConstructorTypes() throws InvalidConfigurationException {
+        List arguments = constructor.getAttributeNames();
+        String[] argumentTypes = new String[arguments.size()];
+        boolean[] isReference = new boolean[arguments.size()];
+        for (int i = 0; i < argumentTypes.length; i++) {
+            String argumentName = (String) arguments.get(i);
+            if (attributes.containsKey(argumentName)) {
+                GAttributeInfo attribute = (GAttributeInfo) attributes.get(argumentName);
+                argumentTypes[i] = attribute.getType();
+                isReference[i] = false;
+            } else if (references.containsKey(argumentName)) {
+                argumentTypes[i] = (String) references.get(argumentName);
+                isReference[i] = true;
+            }
+        }
+
+        Constructor[] constructors = gbeanType.getConstructors();
+        Set validConstructors = new HashSet();
+        for (int i = 0; i < constructors.length; i++) {
+            Constructor constructor = constructors[i];
+            if (isValidConstructor(constructor, argumentTypes, isReference)) {
+                validConstructors.add(constructor);
+            }
+        }
+
+        if (validConstructors.isEmpty()) {
+            throw new InvalidConfigurationException("Could not find a valid constructor for GBean: " + name);
+        }
+        if (validConstructors.size() > 1) {
+            throw new InvalidConfigurationException("More then one valid constructors found for GBean: " + name);
+        }
+
+        Map constructorTypes = new HashMap();
+        Constructor constructor = (Constructor) validConstructors.iterator().next();
+        Class[] parameterTypes = constructor.getParameterTypes();
+        Iterator argumentIterator = arguments.iterator();
+        for (int i = 0; i < parameterTypes.length; i++) {
+            String parameterType = parameterTypes[i].getName();
+            String argumentName = (String) argumentIterator.next();
+            constructorTypes.put(argumentName, parameterType);
+        }
+        return constructorTypes;
+    }
+
+    private static String searchForGetter(String name, String type, Class gbeanType) throws InvalidConfigurationException {
+        Method getterMethod = null;
+
+        // no explicit name give so we must search for a name
+        String getterName = "get" + name;
+        String isName = "is" + name;
+        Method[] methods = gbeanType.getMethods();
+        for (int i = 0; i < methods.length; i++) {
+            if (methods[i].getParameterTypes().length == 0 && methods[i].getReturnType() != Void.TYPE
+                    && (getterName.equalsIgnoreCase(methods[i].getName()) || isName.equalsIgnoreCase(methods[i].getName()))) {
+
+                // found it
+                getterMethod = methods[i];
+                break;
+            }
+        }
+
+        // if the return type of the getter doesn't match, throw an exception
+        if (getterMethod != null && !type.equals(getterMethod.getReturnType().getName())) {
+            throw new InvalidConfigurationException("Incorrect return type for getter method:" +
+                    " name=" + name +
+                    ", targetClass=" + gbeanType.getName() +
+                    ", getter type=" + getterMethod.getReturnType() +
+                    ", expected type=" + type);
+        }
+
+        if (getterMethod == null) {
+            return null;
+        }
+        return getterMethod.getName();
+    }
+
+    private static String searchForSetter(String name, String type, Class gbeanType) throws InvalidConfigurationException {
+        Method method = searchForSetterMethod(name, type, gbeanType);
+        if (method == null) {
+            return null;
+        }
+        return method.getName();
+    }
+
+    private static Method searchForSetterMethod(String name, String type, Class gbeanType) throws InvalidConfigurationException {
+        // no explicit name give so we must search for a name
+        String setterName = "set" + name;
+        Method[] methods = gbeanType.getMethods();
+        for (int i = 0; i < methods.length; i++) {
+            Method method = methods[i];
+            if (method.getParameterTypes().length == 1 &&
+                    method.getParameterTypes()[0].getName().equals(type) &&
+                    method.getReturnType() == Void.TYPE &&
+                    setterName.equalsIgnoreCase(method.getName())) {
+
+                return method;
+            }
+        }
+
+        // a setter is not necessary for this attribute
+        return null;
+    }
+
+    private static boolean isValidConstructor(Constructor constructor, String[] argumentTypes, boolean[] isReference) {
+        Class[] parameterTypes = constructor.getParameterTypes();
+
+        // same number of parameters?
+        if (parameterTypes.length != argumentTypes.length) {
+            return false;
+        }
+
+        // is each parameter the correct type?
+        for (int i = 0; i < parameterTypes.length; i++) {
+            String parameterType = parameterTypes[i].getName();
+            if (isReference[i]) {
+                // reference: does type match
+                // OR is it a java.util.Collection
+                // OR is it a java.util.Set?
+                if (!parameterType.equals(argumentTypes[i]) &&
+                        !parameterType.equals(Collection.class.getName()) &&
+                        !parameterType.equals(Set.class.getName())) {
+                    return false;
+                }
+            } else {
+                // attribute: does type match?
+                if (!parameterType.equals(argumentTypes[i])) {
+                    return false;
+                }
+            }
+        }
+        return true;
+    }
+
+    private String getAttributeName(Method method) {
+        String name = method.getName();
+        String attributeName = (name.startsWith("get") || name.startsWith("set")) ? name.substring(3) : name.substring(2);
+        attributeName = Introspector.decapitalize(attributeName);
+        return attributeName;
+    }
+
+    private boolean isSetter(Method method) {
+        return method.getName().startsWith("set") && method.getParameterTypes().length == 1;
+    }
+
+    private static boolean isGetter(Method method) {
+        String name = method.getName();
+        return (name.startsWith("get") || name.startsWith("is")) && method.getParameterTypes().length == 0;
+    }
+
+    /**
+     * Checks whether or not the input argument is null; otherwise it throws
+     * {@link IllegalArgumentException}.
+     *
+     * @param clazz the input argument to validate
+     * @throws IllegalArgumentException if input is null
+     */
+    private static Class checkNotNull(final Class clazz) {
+        if (clazz == null) {
+            throw new IllegalArgumentException("null argument supplied");
+        }
+        return clazz;
+    }
+
+    /**
+     * Checks whether or not the input argument is null; otherwise it throws
+     * {@link IllegalArgumentException}.
+     *
+     * @param string the input argument to validate
+     * @throws IllegalArgumentException if input is null
+     */
+    private static String checkNotNull(final String string) {
+        if (string == null) {
+            throw new IllegalArgumentException("null argument supplied");
+        }
+        return string;
+    }
+
+    private static Class loadClass(ClassLoader classLoader, String name) {
+        try {
+            return classLoader.loadClass(name);
+        } catch (ClassNotFoundException e) {
+            throw new InvalidConfigurationException("Could not load class " + name, e);
+        }
     }
 }

Modified: geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/GConstructorInfo.java
Url: http://svn.apache.org/viewcvs/geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/GConstructorInfo.java?view=diff&rev=109314&p1=geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/GConstructorInfo.java&r1=109313&p2=geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/GConstructorInfo.java&r2=109314
==============================================================================
--- geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/GConstructorInfo.java	(original)
+++ geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/GConstructorInfo.java	Wed Dec  1 00:01:37 2004
@@ -28,6 +28,10 @@
 public class GConstructorInfo implements Serializable {
     private final List attributeNames;
 
+    public GConstructorInfo() {
+        this.attributeNames = Collections.EMPTY_LIST;
+    }
+
     public GConstructorInfo(String[] attributeNames) {
         this(Arrays.asList(attributeNames));
     }

Modified: geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/GReferenceInfo.java
Url: http://svn.apache.org/viewcvs/geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/GReferenceInfo.java?view=diff&rev=109314&p1=geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/GReferenceInfo.java&r1=109313&p2=geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/GReferenceInfo.java&r2=109314
==============================================================================
--- geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/GReferenceInfo.java	(original)
+++ geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/GReferenceInfo.java	Wed Dec  1 00:01:37 2004
@@ -32,38 +32,35 @@
     /**
      * Type of this reference.
      */
-    private final String type;
+    private final String referenceType;
+
+    /**
+     * Type of the proxy injected into the bean.
+     */
+    private final String proxyType;
 
     /**
      * Name of the setter method.
-     * The default is "set" + name.  In the case of a default value we do a caseless search for the name.
      */
     private final String setterName;
 
-    public GReferenceInfo() {
-        this(null, null, null);
-    }
-
-    public GReferenceInfo(String name, String type) {
-        this(name, type, null);
-    }
-
-    public GReferenceInfo(String name, Class type) {
-        this(name, type.getName(), null);
-    }
-
-    public GReferenceInfo(String name, String type, String setterName) {
+    public GReferenceInfo(String name, String referenceType, String proxyType, String setterName) {
         this.name = name;
-        this.type = type;
+        this.referenceType = referenceType;
         this.setterName = setterName;
+        this.proxyType = proxyType;
     }
 
     public String getName() {
         return name;
     }
 
-    public String getType() {
-        return type;
+    public String getReferenceType() {
+        return referenceType;
+    }
+
+    public String getProxyType() {
+        return proxyType;
     }
 
     public String getSetterName() {
@@ -72,7 +69,8 @@
 
     public String toString() {
         return "[GReferenceInfo: name=" + name +
-                " type=" + type +
+                " referenceType=" + referenceType +
+                " proxyType=" + proxyType +
                 " setterName=" + setterName +
                 "]";
     }

Modified: geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/jmx/GBeanJMXUtil.java
Url: http://svn.apache.org/viewcvs/geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/jmx/GBeanJMXUtil.java?view=diff&rev=109314&p1=geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/jmx/GBeanJMXUtil.java&r1=109313&p2=geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/jmx/GBeanJMXUtil.java&r2=109314
==============================================================================
--- geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/jmx/GBeanJMXUtil.java	(original)
+++ geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/jmx/GBeanJMXUtil.java	Wed Dec  1 00:01:37 2004
@@ -48,7 +48,7 @@
         int a = 0;
         for (Iterator iterator = gbeanAttributes.iterator(); iterator.hasNext();) {
             GAttributeInfo gAttributeInfo = (GAttributeInfo) iterator.next();
-            attributes[a] = new MBeanAttributeInfo(gAttributeInfo.getName(), gAttributeInfo.getType(), "no description available", gAttributeInfo.isReadable().booleanValue(), gAttributeInfo.isWritable().booleanValue(), isIs(gAttributeInfo));
+            attributes[a] = new MBeanAttributeInfo(gAttributeInfo.getName(), gAttributeInfo.getType(), "no description available", gAttributeInfo.isReadable(), gAttributeInfo.isWritable(), isIs(gAttributeInfo));
             a++;
         }
 

Modified: geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/runtime/AbstractGBeanReference.java
Url: http://svn.apache.org/viewcvs/geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/runtime/AbstractGBeanReference.java?view=diff&rev=109314&p1=geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/runtime/AbstractGBeanReference.java&r1=109313&p2=geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/runtime/AbstractGBeanReference.java&r2=109314
==============================================================================
--- geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/runtime/AbstractGBeanReference.java	(original)
+++ geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/runtime/AbstractGBeanReference.java	Wed Dec  1 00:01:37 2004
@@ -46,7 +46,12 @@
     /**
      * Interface this GBeanInstance uses to refer to the other.
      */
-    private final Class type;
+    private final Class referenceType;
+
+    /**
+     * Proxy type which is injected into the GBeanInstance.
+     */
+    private final Class proxyType;
 
     /**
      * The GBeanInstance to which this reference belongs.
@@ -74,6 +79,8 @@
      */
     private final Set targets = new HashSet();
 
+    private final GReferenceInfo referenceInfo;
+
     /**
      * The kernel to which the reference is bound.
      */
@@ -84,25 +91,34 @@
      */
     private Object proxy;
 
-    public AbstractGBeanReference(GBeanInstance gbeanInstance, GReferenceInfo referenceInfo, Class constructorType) throws InvalidConfigurationException {
+    public AbstractGBeanReference(GBeanInstance gbeanInstance, GReferenceInfo referenceInfo) throws InvalidConfigurationException {
         this.gbeanInstance = gbeanInstance;
+        this.referenceInfo = referenceInfo;
         this.name = referenceInfo.getName();
         try {
-            this.type = ClassLoading.loadClass(referenceInfo.getType(), gbeanInstance.getClassLoader());
+            this.referenceType = ClassLoading.loadClass(referenceInfo.getReferenceType(), gbeanInstance.getClassLoader());
         } catch (ClassNotFoundException e) {
-            throw new InvalidConfigurationException("Could not load reference proxy interface class:" +
-                    " name=" + name +
-                    " class=" + referenceInfo.getType());
+            throw new InvalidConfigurationException("Could not load reference proxy interface class:" + getDescription());
         }
-        if (Modifier.isFinal(type.getModifiers())) {
-            throw new IllegalArgumentException("Proxy interface cannot be a final class: " + type.getName());
+        if (Modifier.isFinal(referenceType.getModifiers())) {
+            throw new IllegalArgumentException("Proxy interface cannot be a final class: " + referenceType.getName());
+        }
+        try {
+            this.proxyType = ClassLoading.loadClass(referenceInfo.getProxyType(), gbeanInstance.getClassLoader());
+        } catch (ClassNotFoundException e) {
+            throw new InvalidConfigurationException("Could not load proxy class:" + getDescription());
         }
 
-        if (constructorType != null) {
-            setInvoker = null;
+        if (referenceInfo.getSetterName() != null) {
+            try {
+                String setterName = referenceInfo.getSetterName();
+                Method setterMethod = gbeanInstance.getType().getMethod(setterName, new Class[] {proxyType});
+                setInvoker = new FastMethodInvoker(setterMethod);
+            } catch (NoSuchMethodException e) {
+                throw new InvalidConfigurationException("Setter method not found " + getDescription());
+            }
         } else {
-            Method setterMethod = searchForSetter(gbeanInstance, referenceInfo);
-            setInvoker = new FastMethodInvoker(setterMethod);
+            setInvoker = null;
         }
 
         listener = new LifecycleAdapter() {
@@ -150,8 +166,16 @@
         return name;
     }
 
-    public final Class getType() {
-        return type;
+    public final GReferenceInfo getReferenceInfo() {
+        return referenceInfo;
+    }
+
+    public final Class getReferenceType() {
+        return referenceType;
+    }
+
+    public final Class getProxyType() {
+        return proxyType;
     }
 
     public Object getProxy() {
@@ -251,37 +275,10 @@
         }
     }
 
-    protected static Method searchForSetter(GBeanInstance gbeanInstance, GReferenceInfo referenceInfo) throws InvalidConfigurationException {
-        if (referenceInfo.getSetterName() == null) {
-            // no explicit name give so we must search for a name
-            String setterName = "set" + referenceInfo.getName();
-            Method[] methods = gbeanInstance.getType().getMethods();
-            for (int i = 0; i < methods.length; i++) {
-                Method method = methods[i];
-                if (method.getParameterTypes().length == 1 &&
-                        method.getReturnType() == Void.TYPE &&
-                        setterName.equalsIgnoreCase(method.getName())) {
-
-                    return method;
-                }
-            }
-        } else {
-            // even though we have an exact name we need to search the methods because
-            // we don't know the parameter type
-            Method[] methods = gbeanInstance.getType().getMethods();
-            String setterName = referenceInfo.getSetterName();
-            for (int i = 0; i < methods.length; i++) {
-                Method method = methods[i];
-                if (method.getParameterTypes().length == 1 &&
-                        method.getReturnType() == Void.TYPE &&
-                        setterName.equals(method.getName())) {
-
-                    return method;
-                }
-            }
-        }
-        throw new InvalidConfigurationException("Target does not have specified method:" +
-                " name=" + referenceInfo.getName() +
-                " targetClass=" + gbeanInstance.getType().getName());
+    protected final String getDescription() {
+        return "Reference Name: " + getName() +
+                ", Reference Type: " + getReferenceType() +
+                ", Proxy Type: " + getProxy() +
+                ", GBeanInstance: " + gbeanInstance.getName();
     }
 }

Modified: geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/runtime/GBeanAttribute.java
Url: http://svn.apache.org/viewcvs/geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/runtime/GBeanAttribute.java?view=diff&rev=109314&p1=geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/runtime/GBeanAttribute.java&r1=109313&p2=geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/runtime/GBeanAttribute.java&r2=109314
==============================================================================
--- geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/runtime/GBeanAttribute.java	(original)
+++ geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/runtime/GBeanAttribute.java	Wed Dec  1 00:01:37 2004
@@ -60,6 +60,8 @@
 
     private final boolean dynamic;
 
+    private final GAttributeInfo attributeInfo;
+
     static GBeanAttribute createSpecialAttribute(GBeanAttribute attribute, GBeanInstance gbeanInstance, String name, Class type, Object value) {
         return new GBeanAttribute(attribute, gbeanInstance, name, type, value);
     }
@@ -109,6 +111,26 @@
         // persistence
         this.persistent = false;
         initializePersistentValue(value);
+
+        // create an attribute info for this gbean
+        if (attribute != null) {
+            GAttributeInfo attributeInfo = attribute.getAttributeInfo();
+            this.attributeInfo = new GAttributeInfo(this.name,
+                    this.type.getName(),
+                    this.persistent,
+                    this.readable,
+                    this.writable,
+                    attributeInfo.getGetterName(),
+                    attributeInfo.getSetterName());
+        } else {
+            this.attributeInfo = new GAttributeInfo(this.name,
+                    this.type.getName(),
+                    this.persistent,
+                    this.readable,
+                    this.writable,
+                    null,
+                    null);
+        }
     }
 
     static GBeanAttribute createFrameworkAttribute(GBeanInstance gbeanInstance, String name, Class type, MethodInvoker getInvoker) {
@@ -144,6 +166,15 @@
         // persistence
         this.persistent = persistent;
         initializePersistentValue(persistentValue);
+
+        // create an attribute info for this gbean
+        attributeInfo = new GAttributeInfo(this.name,
+                this.type.getName(),
+                this.persistent,
+                this.readable,
+                this.writable,
+                null,
+                null);
     }
 
     public GBeanAttribute(GBeanInstance gbeanInstance, GAttributeInfo attributeInfo, boolean isConstructorArg) throws InvalidConfigurationException {
@@ -153,11 +184,12 @@
         if (gbeanInstance == null || attributeInfo == null) {
             throw new IllegalArgumentException("null param(s) supplied");
         }
-        if (attributeInfo.isReadable() == Boolean.FALSE && attributeInfo.isWritable() == Boolean.FALSE && !attributeInfo.isPersistent()) {
-            throw new InvalidConfigurationException("An attribute must be readable, writable, or persistent: +"
-                    + " name=" + attributeInfo.getName() + " targetClass=" + gbeanInstance.getType().getName());
+        if (!attributeInfo.isReadable() && !attributeInfo.isWritable() && !attributeInfo.isPersistent() && !isConstructorArg) {
+            throw new InvalidConfigurationException("An attribute must be readable, writable, persistent or a constructor arg: " +
+                    " name=" + attributeInfo.getName() + " targetClass=" + gbeanInstance.getType().getName());
         }
         this.gbeanInstance = gbeanInstance;
+        this.attributeInfo = attributeInfo;
         this.name = attributeInfo.getName();
         this.isConstructorArg = isConstructorArg;
         try {
@@ -167,17 +199,18 @@
         }
         this.persistent = attributeInfo.isPersistent();
 
+        readable = attributeInfo.isReadable();
+        writable = attributeInfo.isWritable();
+
         // If attribute is persistent or not tagged as unreadable, search for a
         // getter method
         if (attributeInfo instanceof DynamicGAttributeInfo) {
             this.dynamic = true;
-            readable = attributeInfo.isReadable().booleanValue();
             if (readable) {
                 getInvoker = new DynamicGetterMethodInvoker(name);
             } else {
                 getInvoker = null;
             }
-            writable = attributeInfo.isWritable().booleanValue();
             if (writable) {
                 setInvoker = new DynamicSetterMethodInvoker(name);
             } else {
@@ -185,36 +218,34 @@
             }
         } else {
             this.dynamic = false;
-            Method getterMethod = null;
-            if (attributeInfo.isPersistent() || attributeInfo.isReadable() != Boolean.FALSE) {
-                getterMethod = searchForGetter(gbeanInstance, attributeInfo, type);
-            }
-            if (getterMethod != null) {
-                getInvoker = new FastMethodInvoker(getterMethod);
-
-                // this attribute is readable as long as it was not explicitly
-                // tagged as unreadable
-                readable = attributeInfo.isReadable() != Boolean.FALSE;
+            if (attributeInfo.getGetterName() != null) {
+                try {
+                    String getterName = attributeInfo.getGetterName();
+                    Method getterMethod = gbeanInstance.getType().getMethod(getterName, null);
+
+                    if (!getterMethod.getReturnType().equals(type)) {
+                        throw new InvalidConfigurationException("Getter method not found " +getDescription());
+                    }
+                    getInvoker = new FastMethodInvoker(getterMethod);
+                } catch (NoSuchMethodException e) {
+                    throw new InvalidConfigurationException("Getter method not found " +getDescription());
+                }
             } else {
                 getInvoker = null;
-                readable = false;
             }
 
             // If attribute is persistent or not tagged as unwritable, search
             // for a setter method
-            Method setterMethod = null;
-            if (attributeInfo.isPersistent() || attributeInfo.isWritable() != Boolean.FALSE) {
-                setterMethod = searchForSetter(gbeanInstance, attributeInfo, type);
-            }
-            if (setterMethod != null) {
-                setInvoker = new FastMethodInvoker(setterMethod);
-
-                // this attribute is writable as long as it was not explicitly
-                // tagged as unwritable
-                writable = attributeInfo.isWritable() != Boolean.FALSE;
+            if (attributeInfo.getSetterName() != null) {
+                try {
+                    String setterName = attributeInfo.getSetterName();
+                    Method setterMethod = gbeanInstance.getType().getMethod(setterName, new Class[] {type});
+                    setInvoker = new FastMethodInvoker(setterMethod);
+                } catch (NoSuchMethodException e) {
+                    throw new InvalidConfigurationException("Setter method not found " + getDescription());
+                }
             } else {
                 setInvoker = null;
-                writable = false;
             }
         }
 
@@ -250,6 +281,10 @@
         return name;
     }
 
+    public GAttributeInfo getAttributeInfo() {
+        return attributeInfo;
+    }
+
     public boolean isReadable() {
         return readable;
     }
@@ -316,7 +351,7 @@
         if (special) {
             return persistentValue;
         }
-        
+
         // get the target to invoke
         Object target = gbeanInstance.getTarget();
         if (target == null && !framework) {
@@ -356,103 +391,6 @@
 
     public String getDescription() {
         return "Attribute Name: " + getName() + ", Type: " + getType() + ", GBeanInstance: " + gbeanInstance.getName();
-    }
-
-    private static Method searchForGetter(GBeanInstance gbeanInstance, GAttributeInfo attributeInfo, Class type) throws InvalidConfigurationException {
-        Method getterMethod = null;
-        if (attributeInfo.getGetterName() == null) {
-            // no explicit name give so we must search for a name
-            String getterName = "get" + attributeInfo.getName();
-            String isName = "is" + attributeInfo.getName();
-            Method[] methods = gbeanInstance.getType().getMethods();
-            for (int i = 0; i < methods.length; i++) {
-                if (methods[i].getParameterTypes().length == 0 && methods[i].getReturnType() != Void.TYPE
-                        && (getterName.equalsIgnoreCase(methods[i].getName()) || isName.equalsIgnoreCase(methods[i].getName()))) {
-
-                    // found it
-                    getterMethod = methods[i];
-                    break;
-                }
-            }
-        } else {
-            // we have an explicit name, so no searching is necessary
-            try {
-                getterMethod = gbeanInstance.getType().getMethod(attributeInfo.getGetterName(), null);
-                if (getterMethod.getReturnType() == Void.TYPE) {
-                    throw new InvalidConfigurationException("Getter method return VOID:" +
-                            " name=" + attributeInfo.getName() +
-                            ", type=" + type.getName() +
-                            ", targetClass=" + gbeanInstance.getType().getName());
-                }
-            } catch (Exception e) {
-                // we will throw the formatted exception below
-            }
-        }
-
-        // if the return type of the getter doesn't match, throw an exception
-        if (getterMethod != null && !type.equals(getterMethod.getReturnType())) {
-            throw new InvalidConfigurationException("Incorrect return type for getter method:" +
-                    " name=" + attributeInfo.getName() +
-                    ", targetClass=" + gbeanInstance.getType().getName() +
-                    ", getter type=" + getterMethod.getReturnType() +
-                    ", expected type=" + type.getName());
-        }
-
-        // if this attribute was explicity tagged as being readable but there is not getter
-        if (getterMethod == null && attributeInfo.isReadable() == Boolean.TRUE) {
-            throw new InvalidConfigurationException("Getter method not found on target:" +
-                    " name=" + attributeInfo.getName() +
-                    ", type=" + type.getName() +
-                    ", targetClass=" + gbeanInstance.getType().getName());
-        }
-
-        return getterMethod;
-    }
-
-    private static Method searchForSetter(GBeanInstance gbeanInstance, GAttributeInfo attributeInfo, Class type) throws InvalidConfigurationException {
-        if (attributeInfo.getSetterName() == null) {
-            // no explicit name give so we must search for a name
-            String setterName = "set" + attributeInfo.getName();
-            Method[] methods = gbeanInstance.getType().getMethods();
-            for (int i = 0; i < methods.length; i++) {
-                Method method = methods[i];
-                if (method.getParameterTypes().length == 1 &&
-                        method.getParameterTypes()[0].equals(type) &&
-                        method.getReturnType() == Void.TYPE &&
-                        setterName.equalsIgnoreCase(method.getName())) {
-
-                    return method;
-                }
-            }
-        } else {
-            // we have an explicit name, so no searching is necessary
-            try {
-                Method method = gbeanInstance.getType().getMethod(attributeInfo.getSetterName(), new Class[]{type});
-                if (method.getReturnType() != Void.TYPE) {
-                    throw new InvalidConfigurationException("Setter method must return VOID:" +
-                            " name=" + attributeInfo.getName() +
-                            ", type=" + type.getName() +
-                            ", targetClass=" + gbeanInstance.getType().getName());
-                }
-                return method;
-            } catch (Exception e) {
-                // we will throw the formatted exception below
-            }
-        }
-
-        // An attribute must have a setter if it was explicitly tagged as
-        // writable or if it is persistent and it is not a constructor arg
-        // (if it is persistent we must have a way to set the data into the
-        // instance)
-        if (attributeInfo.isWritable() == Boolean.TRUE) {
-            throw new InvalidConfigurationException("Setter method not found on target:" +
-                    " name=" + attributeInfo.getName() +
-                    ", type=" + type.getName() +
-                    ", targetClass=" + gbeanInstance.getType().getName());
-        }
-
-        // a setter is not necessary for this attribute
-        return null;
     }
 
     private static final class DynamicGetterMethodInvoker implements MethodInvoker {

Modified: geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/runtime/GBeanCollectionReference.java
Url: http://svn.apache.org/viewcvs/geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/runtime/GBeanCollectionReference.java?view=diff&rev=109314&p1=geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/runtime/GBeanCollectionReference.java&r1=109313&p2=geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/runtime/GBeanCollectionReference.java&r2=109314
==============================================================================
--- geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/runtime/GBeanCollectionReference.java	(original)
+++ geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/runtime/GBeanCollectionReference.java	Wed Dec  1 00:01:37 2004
@@ -26,8 +26,8 @@
  * @version $Rev: 71492 $ $Date: 2004-11-14 21:31:50 -0800 (Sun, 14 Nov 2004) $
  */
 public class GBeanCollectionReference extends AbstractGBeanReference {
-    public GBeanCollectionReference(GBeanInstance gbeanInstance, GReferenceInfo referenceInfo, Class constructorType) throws InvalidConfigurationException {
-        super(gbeanInstance, referenceInfo, constructorType);
+    public GBeanCollectionReference(GBeanInstance gbeanInstance, GReferenceInfo referenceInfo) throws InvalidConfigurationException {
+        super(gbeanInstance, referenceInfo);
     }
 
     public synchronized void start() throws Exception {
@@ -42,7 +42,7 @@
         }
 
         // add a dependency on our target and create the proxy
-        setProxy(new ProxyCollection(getName(), getType(), getKernel().getProxyManager(), getTargets()));
+        setProxy(new ProxyCollection(getName(), getReferenceType(), getKernel().getProxyManager(), getTargets()));
     }
 
     public synchronized void stop() {

Modified: geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/runtime/GBeanInstance.java
Url: http://svn.apache.org/viewcvs/geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/runtime/GBeanInstance.java?view=diff&rev=109314&p1=geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/runtime/GBeanInstance.java&r1=109313&p2=geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/runtime/GBeanInstance.java&r2=109314
==============================================================================
--- geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/runtime/GBeanInstance.java	(original)
+++ geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/runtime/GBeanInstance.java	Wed Dec  1 00:01:37 2004
@@ -19,7 +19,7 @@
 
 import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
-import java.util.Arrays;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -42,7 +42,6 @@
 import org.apache.geronimo.gbean.GReferenceInfo;
 import org.apache.geronimo.gbean.InvalidConfigurationException;
 import org.apache.geronimo.gbean.WaitingException;
-import org.apache.geronimo.gbean.DynamicGAttributeInfo;
 import org.apache.geronimo.kernel.Kernel;
 import org.apache.geronimo.kernel.LifecycleListener;
 import org.apache.geronimo.kernel.NoSuchAttributeException;
@@ -209,23 +208,14 @@
 
         name = gbeanInfo.getName();
 
-        // get the constructor
-        constructor = Util.searchForConstructor(gbeanInfo, type);
-
-        // build a map from constructor argument names to type
-        Class[] constructorParameterTypes = constructor.getParameterTypes();
-        Map constructorTypes = new HashMap(constructorParameterTypes.length);
-        List constructorAttributeNames = gbeanInfo.getConstructor().getAttributeNames();
-        for (int i = 0; i < constructorParameterTypes.length; i++) {
-            Class type = constructorParameterTypes[i];
-            constructorTypes.put(constructorAttributeNames.get(i), type);
-        }
+        //
+        Set constructorArgs = new HashSet(gbeanInfo.getConstructor().getAttributeNames());
 
         // attributes
         Map attributesMap = new HashMap();
         for (Iterator iterator = gbeanInfo.getAttributes().iterator(); iterator.hasNext();) {
             GAttributeInfo attributeInfo = (GAttributeInfo) iterator.next();
-            attributesMap.put(attributeInfo.getName(), new GBeanAttribute(this, attributeInfo, constructorTypes.containsKey(attributeInfo.getName())));
+            attributesMap.put(attributeInfo.getName(), new GBeanAttribute(this, attributeInfo, constructorArgs.contains(attributeInfo.getName())));
         }
         addManagedObjectAttributes(attributesMap);
         attributes = (GBeanAttribute[]) attributesMap.values().toArray(new GBeanAttribute[attributesMap.size()]);
@@ -237,11 +227,10 @@
         Set referencesSet = new HashSet();
         for (Iterator iterator = gbeanInfo.getReferences().iterator(); iterator.hasNext();) {
             GReferenceInfo referenceInfo = (GReferenceInfo) iterator.next();
-            Class constructorType = (Class) constructorTypes.get(referenceInfo.getName());
-            if (Util.isCollectionValuedReference(this, referenceInfo, constructorType)) {
-                referencesSet.add(new GBeanCollectionReference(this, referenceInfo, constructorType));
+            if (referenceInfo.getProxyType().equals(Collection.class.getName())) {
+                referencesSet.add(new GBeanCollectionReference(this, referenceInfo));
             } else {
-                referencesSet.add(new GBeanSingleReference(this, referenceInfo, constructorType));
+                referencesSet.add(new GBeanSingleReference(this, referenceInfo));
             }
         }
         references = (GBeanReference[]) referencesSet.toArray(new GBeanReference[gbeanInfo.getReferences().size()]);
@@ -270,8 +259,33 @@
             opCounter++;
         }
 
+        // get the constructor
+        List arguments = gbeanInfo.getConstructor().getAttributeNames();
+        Class[] parameterTypes = new Class[arguments.size()];
+        for (int i = 0; i < parameterTypes.length; i++) {
+            String argumentName = (String) arguments.get(i);
+            if (attributeIndex.containsKey(argumentName)) {
+                Integer index = (Integer) attributeIndex.get(argumentName);
+                GBeanAttribute attribute = attributes[index.intValue()];
+                parameterTypes[i] = attribute.getType();
+            } else if (referenceIndex.containsKey(argumentName)) {
+                Integer index = (Integer) referenceIndex.get(argumentName);
+                GBeanReference reference = references[index.intValue()];
+                parameterTypes[i] = reference.getProxyType();
+            }
+        }
+        try {
+            constructor = type.getConstructor(parameterTypes);
+        } catch (NoSuchMethodException e) {
+            throw new InvalidConfigurationException("Could not find a valid constructor for GBean: " + gbeanInfo.getName());
+        }
+
+        // rebuild the gbean info based on the current attributes, operations, and references because
+        // the above code add new attributes and operations
+        this.gbeanInfo = rebuildGBeanInfo(gbeanInfo.getConstructor());
+
+        // create the raw invokers
         rawInvoker = new RawInvoker(this);
-        this.gbeanInfo = rebuildGBeanInfo(gbeanInfo);
 
         // set the initial attribute values
         try {
@@ -757,10 +771,6 @@
                 } else {
                     throw new InvalidConfigurationException("Unknown attribute or reference name in constructor: name=" + name);
                 }
-                assert parameters[i] == null || parameterTypes[i].isPrimitive() || parameterTypes[i].isAssignableFrom(parameters[i].getClass()):
-                        "Attempting to construct " + objectName + " of type " + gbeanInfo.getClassName()
-                        + ". Constructor parameter " + i + " should be " + parameterTypes[i].getName()
-                        + " but is " + parameters[i].getClass().getName();
             }
 
             // create instance
@@ -990,54 +1000,34 @@
                 }));
     }
 
-    public String toString() {
-        if (objectName == null) {
-            return super.toString();
-        }
-        return objectName.toString();
-    }
-
-    // todo this is a lame hack to get around the gbean info not being accurate when the gbean instance is creted
-    private GBeanInfo rebuildGBeanInfo(GBeanInfo source) {
+    private GBeanInfo rebuildGBeanInfo(GConstructorInfo constructor) {
         Set attributeInfos = new HashSet();
         for (int i = 0; i < attributes.length; i++) {
             GBeanAttribute attribute = attributes[i];
-            if (attribute.isDynamic()) {
-                attributeInfos.add(new DynamicGAttributeInfo(attribute.getName(),
-                        attribute.getType().getName(),
-                        attribute.isPersistent(),
-                        attribute.isReadable(),
-                        attribute.isWritable()
-                ));
-            } else {
-                attributeInfos.add(new GAttributeInfo(attribute.getName(),
-                        attribute.getType().getName(),
-                        attribute.isPersistent(),
-                        Boolean.valueOf(attribute.isReadable()),
-                        Boolean.valueOf(attribute.isWritable()),
-                        null,
-                        null
-                ));
-            }
+            attributeInfos.add(attribute.getAttributeInfo());
         }
         Set operationInfos = new HashSet();
         for (int i = 0; i < operations.length; i++) {
-            GBeanOperation operation = operations[i];
-            operationInfos.add(new GOperationInfo(operation.getName(), operation.getParameterTypes()));
+            operationInfos.add(operations[i].getOperationInfo());
         }
 
         Set referenceInfos = new HashSet();
         for (int i = 0; i < references.length; i++) {
-            GBeanReference reference = references[i];
-            referenceInfos.add(new GReferenceInfo(reference.getName(), reference.getType()));
+            referenceInfos.add(references[i].getReferenceInfo());
         }
 
-        return Util.perfect(new GBeanInfo(source.getName(),
-                source.getClassName(),
+        return new GBeanInfo(name,
+                type.getName(),
                 attributeInfos,
-                source.getConstructor(),
+                constructor,
                 operationInfos,
-                referenceInfos,
-                new HashSet(Arrays.asList(NotificationType.TYPES))), classLoader);
+                referenceInfos);
+    }
+
+    public String toString() {
+        if (objectName == null) {
+            return super.toString();
+        }
+        return objectName.toString();
     }
 }

Modified: geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/runtime/GBeanOperation.java
Url: http://svn.apache.org/viewcvs/geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/runtime/GBeanOperation.java?view=diff&rev=109314&p1=geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/runtime/GBeanOperation.java&r1=109313&p2=geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/runtime/GBeanOperation.java&r2=109314
==============================================================================
--- geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/runtime/GBeanOperation.java	(original)
+++ geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/runtime/GBeanOperation.java	Wed Dec  1 00:01:37 2004
@@ -38,6 +38,7 @@
     private final List parameterTypes;
     private final MethodInvoker methodInvoker;
     private final boolean framework;
+    private final GOperationInfo operationInfo;
 
     static GBeanOperation createFrameworkOperation(GBeanInstance gbeanInstance, String name, List parameterTypes, MethodInvoker methodInvoker) {
         return new GBeanOperation(gbeanInstance, name, parameterTypes, methodInvoker);
@@ -49,12 +50,14 @@
         this.name = name;
         this.parameterTypes = Collections.unmodifiableList(new ArrayList(parameterTypes));
         this.methodInvoker = methodInvoker;
+        this.operationInfo = new GOperationInfo(this.name, this.parameterTypes);
     }
 
     public GBeanOperation(GBeanInstance gbeanInstance, GOperationInfo operationInfo) throws InvalidConfigurationException {
         framework = false;
         this.gbeanInstance = gbeanInstance;
         this.name = operationInfo.getName();
+        this.operationInfo = operationInfo;
 
         // get an array of the parameter classes
         this.parameterTypes = Collections.unmodifiableList(new ArrayList(operationInfo.getParameterList()));
@@ -101,6 +104,10 @@
 
     public List getParameterTypes() {
         return parameterTypes;
+    }
+
+    public GOperationInfo getOperationInfo() {
+        return operationInfo;
     }
 
     public boolean isFramework() {

Modified: geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/runtime/GBeanReference.java
Url: http://svn.apache.org/viewcvs/geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/runtime/GBeanReference.java?view=diff&rev=109314&p1=geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/runtime/GBeanReference.java&r1=109313&p2=geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/runtime/GBeanReference.java&r2=109314
==============================================================================
--- geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/runtime/GBeanReference.java	(original)
+++ geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/runtime/GBeanReference.java	Wed Dec  1 00:01:37 2004
@@ -19,6 +19,7 @@
 import java.util.Set;
 
 import org.apache.geronimo.kernel.Kernel;
+import org.apache.geronimo.gbean.GReferenceInfo;
 
 /**
  * @version $Rev$ $Date$
@@ -26,7 +27,11 @@
 public interface GBeanReference {
     String getName();
 
-    Class getType();
+    GReferenceInfo getReferenceInfo();
+
+    Class getReferenceType();
+
+    Class getProxyType();
 
     Set getPatterns();
 

Modified: geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/runtime/GBeanSingleReference.java
Url: http://svn.apache.org/viewcvs/geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/runtime/GBeanSingleReference.java?view=diff&rev=109314&p1=geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/runtime/GBeanSingleReference.java&r1=109313&p2=geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/runtime/GBeanSingleReference.java&r2=109314
==============================================================================
--- geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/runtime/GBeanSingleReference.java	(original)
+++ geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/runtime/GBeanSingleReference.java	Wed Dec  1 00:01:37 2004
@@ -44,8 +44,8 @@
      */
     private ObjectName proxyTarget;
 
-    public GBeanSingleReference(GBeanInstance gbeanInstance, GReferenceInfo referenceInfo, Class constructorType) throws InvalidConfigurationException {
-        super(gbeanInstance, referenceInfo, constructorType);
+    public GBeanSingleReference(GBeanInstance gbeanInstance, GReferenceInfo referenceInfo) throws InvalidConfigurationException {
+        super(gbeanInstance, referenceInfo);
     }
 
     public synchronized void start() throws Exception {
@@ -79,7 +79,7 @@
 
         // add a dependency on our target and create the proxy
         ObjectName target = (ObjectName) targets.iterator().next();
-        setProxy(kernel.getProxyManager().createProxy(target, getType()));
+        setProxy(kernel.getProxyManager().createProxy(target, getReferenceType()));
         proxyTarget = target;
         kernel.getDependencyManager().addDependency(objectName, target);
     }

Deleted: /geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/runtime/Util.java
Url: http://svn.apache.org/viewcvs/geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/runtime/Util.java?view=auto&rev=109313
==============================================================================

Modified: geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/kernel/Kernel.java
Url: http://svn.apache.org/viewcvs/geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/kernel/Kernel.java?view=diff&rev=109314&p1=geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/kernel/Kernel.java&r1=109313&p2=geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/kernel/Kernel.java&r2=109314
==============================================================================
--- geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/kernel/Kernel.java	(original)
+++ geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/kernel/Kernel.java	Wed Dec  1 00:01:37 2004
@@ -572,6 +572,7 @@
         configurationManagerInstance = new GBeanInstance(this, configurationData, lifecycleBroadcaster, getClass().getClassLoader());
         configurationManagerInstance.start();
         configurationManager = (ConfigurationManager) configurationManagerInstance.getTarget();
+        assert configurationManager != null: "ConfigurationManager failed to start";
 
         // wrap it in an mbean and register it
         GBeanMBean configurationManagerGBean = new GBeanMBean(this, configurationManagerInstance, lifecycleBroadcaster);

Modified: geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/kernel/LifecycleMonitor.java
Url: http://svn.apache.org/viewcvs/geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/kernel/LifecycleMonitor.java?view=diff&rev=109314&p1=geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/kernel/LifecycleMonitor.java&r1=109313&p2=geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/kernel/LifecycleMonitor.java&r2=109314
==============================================================================
--- geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/kernel/LifecycleMonitor.java	(original)
+++ geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/kernel/LifecycleMonitor.java	Wed Dec  1 00:01:37 2004
@@ -31,6 +31,7 @@
 import javax.management.NotificationListener;
 import javax.management.ObjectName;
 import javax.management.NotificationBroadcaster;
+import javax.management.NotificationFilter;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -76,7 +77,7 @@
             ObjectName source = (ObjectName) iterator.next();
             try {
                 if (server.isInstanceOf(source, NotificationBroadcaster.class.getName())) {
-                    server.addNotificationListener(source, this, NotificationType.STATE_CHANGE_FILTER, null);
+                    server.addNotificationListener(source, this, STATE_CHANGE_FILTER, null);
                 }
             } catch (InstanceNotFoundException e) {
                 // the instance died before we could get going... not a big deal
@@ -98,7 +99,7 @@
         for (Iterator iterator = boundListeners.keySet().iterator(); iterator.hasNext();) {
             ObjectName target = (ObjectName) iterator.next();
             try {
-                server.removeNotificationListener(target, this, NotificationType.STATE_CHANGE_FILTER, null);
+                server.removeNotificationListener(target, this, STATE_CHANGE_FILTER, null);
             } catch (Exception ignore) {
                 // don't care... we tried
             }
@@ -264,7 +265,7 @@
             if (!boundListeners.containsKey(source)) {
                 // register for state change notifications
                 try {
-                    server.addNotificationListener(source, this, NotificationType.STATE_CHANGE_FILTER, null);
+                    server.addNotificationListener(source, this, STATE_CHANGE_FILTER, null);
                 } catch (InstanceNotFoundException e) {
                     // the instance died before we could get going... not a big deal
                     return;
@@ -290,6 +291,27 @@
             } else if (NotificationType.STATE_FAILED.equals(type)) {
                 fireFailedEvent(source);
             }
+        }
+    }
+
+    /**
+     * A notification filter which only lets all J2EE state change notifications pass.
+     * Specifically this is STATE_STARTING, STATE_RUNNING, STATE_STOPPING, STATE_STOPPED
+     * and STATE_FAILED.
+     */
+    private static final NotificationFilter STATE_CHANGE_FILTER = new J2EEStateChangeFilter();
+
+    private static final class J2EEStateChangeFilter implements NotificationFilter {
+        private J2EEStateChangeFilter() {
+        }
+
+        public boolean isNotificationEnabled(Notification notification) {
+            String type = notification.getType();
+            return NotificationType.STATE_STARTING.equals(type) ||
+                    NotificationType.STATE_RUNNING.equals(type) ||
+                    NotificationType.STATE_STOPPING.equals(type) ||
+                    NotificationType.STATE_STOPPED.equals(type) ||
+                    NotificationType.STATE_FAILED.equals(type);
         }
     }
 }

Modified: geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/kernel/management/NotificationType.java
Url: http://svn.apache.org/viewcvs/geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/kernel/management/NotificationType.java?view=diff&rev=109314&p1=geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/kernel/management/NotificationType.java&r1=109313&p2=geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/kernel/management/NotificationType.java&r2=109314
==============================================================================
--- geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/kernel/management/NotificationType.java	(original)
+++ geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/kernel/management/NotificationType.java	Wed Dec  1 00:01:37 2004
@@ -17,8 +17,6 @@
 
 package org.apache.geronimo.kernel.management;
 
-import javax.management.Notification;
-import javax.management.NotificationFilter;
 
 /**
  * Static constants class which contains all of the J2EE notification types from the
@@ -78,45 +76,4 @@
         STATE_STARTING, STATE_RUNNING, STATE_STOPPING, STATE_STOPPED, STATE_FAILED,
         ATTRIBUTE_CHANGED
     };
-
-    /**
-     * A notification filter which lets all J2EE notifications pass
-     */
-    public static final NotificationFilter NOTIFICATION_FILTER = new J2EENotificationFilter();
-
-    private static final class J2EENotificationFilter implements NotificationFilter {
-        private J2EENotificationFilter() {
-        }
-
-        public boolean isNotificationEnabled(Notification notification) {
-            String type = notification.getType();
-            for (int i = 0; i < TYPES.length; i++) {
-                if (TYPES[i].equals(type)) {
-                    return true;
-                }
-            }
-            return false;
-        }
-    }
-
-    /**
-     * A notification filter which only lets all J2EE state change notifications pass.
-     * Specifically this is STATE_STARTING, STATE_RUNNING, STATE_STOPPING, STATE_STOPPED
-     * and STATE_FAILED.
-     */
-    public static final NotificationFilter STATE_CHANGE_FILTER = new J2EEStateChangeFilter();
-
-    private static final class J2EEStateChangeFilter implements NotificationFilter {
-        private J2EEStateChangeFilter() {
-        }
-
-        public boolean isNotificationEnabled(Notification notification) {
-            String type = notification.getType();
-            return STATE_STARTING.equals(type) ||
-                    STATE_RUNNING.equals(type) ||
-                    STATE_STOPPING.equals(type) ||
-                    STATE_STOPPED.equals(type) ||
-                    STATE_FAILED.equals(type);
-        }
-    }
 }

Modified: geronimo/trunk/modules/kernel/src/test/org/apache/geronimo/gbean/GBeanInfoFactoryTest.java
Url: http://svn.apache.org/viewcvs/geronimo/trunk/modules/kernel/src/test/org/apache/geronimo/gbean/GBeanInfoFactoryTest.java?view=diff&rev=109314&p1=geronimo/trunk/modules/kernel/src/test/org/apache/geronimo/gbean/GBeanInfoFactoryTest.java&r1=109313&p2=geronimo/trunk/modules/kernel/src/test/org/apache/geronimo/gbean/GBeanInfoFactoryTest.java&r2=109314
==============================================================================
--- geronimo/trunk/modules/kernel/src/test/org/apache/geronimo/gbean/GBeanInfoFactoryTest.java	(original)
+++ geronimo/trunk/modules/kernel/src/test/org/apache/geronimo/gbean/GBeanInfoFactoryTest.java	Wed Dec  1 00:01:37 2004
@@ -27,31 +27,13 @@
  * @version $Rev$ $Date$
  */
 public class GBeanInfoFactoryTest extends TestCase {
-
-    /*
-     * void GBeanInfoBuilder(String)
-     */
-    public void testGBeanInfoFactoryString() {
-        assertNotNull(new GBeanInfoBuilder(""));
-        try {
-            new GBeanInfoBuilder((String) null);
-            fail("IllegalArgumentException expected");
-        } catch (IllegalArgumentException expected) {
-        }
-
-        final String gbeanName = "gbeanName";
-        GBeanInfoBuilder gbeanInfoFactory = new GBeanInfoBuilder(gbeanName);
-        assertEquals(gbeanName, gbeanInfoFactory.getBeanInfo().getName());
-        assertEquals(gbeanName, gbeanInfoFactory.getBeanInfo().getClassName());
-    }
-
     /*
      * void GBeanInfoBuilder(Class)
      */
     public void testGBeanInfoFactoryClass() {
         assertNotNull(new GBeanInfoBuilder(String.class));
         try {
-            new GBeanInfoBuilder((Class) null);
+            new GBeanInfoBuilder(null);
             fail("IllegalArgumentException expected");
         } catch (IllegalArgumentException expected) {
         }
@@ -83,12 +65,11 @@
         } catch (IllegalArgumentException expected) {
         }
 
-        final Class className = String.class;
-        GBeanInfoBuilder gbeanInfoFactory = new GBeanInfoBuilder(className, MockGBean.getGBeanInfo());
-        assertEquals(className.getName(), gbeanInfoFactory.getBeanInfo().getName());
-        assertEquals(className.getName(), gbeanInfoFactory.getBeanInfo().getClassName());
-        assertTrue(gbeanInfoFactory.getBeanInfo().getAttributes().isEmpty());
-        assertTrue(gbeanInfoFactory.getBeanInfo().getOperations().isEmpty());
+        GBeanInfoBuilder gbeanInfoFactory = new GBeanInfoBuilder(MockGBean.class, MockGBean.getGBeanInfo());
+        assertEquals(MockGBean.class.getName(), gbeanInfoFactory.getBeanInfo().getName());
+        assertEquals(MockGBean.class.getName(), gbeanInfoFactory.getBeanInfo().getClassName());
+        assertEquals(2, gbeanInfoFactory.getBeanInfo().getAttributes().size());
+        assertEquals(0, gbeanInfoFactory.getBeanInfo().getOperations().size());
     }
 
     /*
@@ -97,18 +78,18 @@
     public void testAddInterfaceClass() {
         GBeanInfoBuilder gbeanInfoFactory;
 
-        gbeanInfoFactory = new GBeanInfoBuilder("");
+        gbeanInfoFactory = new GBeanInfoBuilder(MockGBean.class);
         gbeanInfoFactory.addInterface(Serializable.class);
         assertTrue(gbeanInfoFactory.getBeanInfo().getAttributes().size() == 0);
         assertTrue(gbeanInfoFactory.getBeanInfo().getOperations().size() == 0);
 
-        gbeanInfoFactory = new GBeanInfoBuilder("");
+        gbeanInfoFactory = new GBeanInfoBuilder(MockGBean.class);
         gbeanInfoFactory.addInterface(GBeanLifecycle.class);
         GBeanInfo gbeanInfo = gbeanInfoFactory.getBeanInfo();
         assertTrue(gbeanInfo.getAttributes().size() == 0);
         assertTrue(gbeanInfo.getOperations().size() == 3);
 
-        gbeanInfoFactory = new GBeanInfoBuilder("");
+        gbeanInfoFactory = new GBeanInfoBuilder(MockGBean.class);
         gbeanInfoFactory.addInterface(SetterOnlyInterface.class);
         gbeanInfo = gbeanInfoFactory.getBeanInfo();
         assertEquals(1, gbeanInfo.getAttributes().size());
@@ -116,7 +97,7 @@
         assertEquals("int", gattrInfo.getName());
         assertEquals("setInt", gattrInfo.getSetterName());
         assertNull(gattrInfo.getGetterName());
-        
+
         Set opsSet = gbeanInfo.getOperations();
         assertEquals(0, opsSet.size());
 
@@ -129,37 +110,59 @@
         assertEquals("setInt", gattrInfo.getSetterName());
         opsSet = gbeanInfo.getOperations();
         assertEquals(0, opsSet.size());
-        
+
     }
 
     private static interface SetterOnlyInterface {
-
         public void setInt(int i);
     }
 
     private static interface GetterOnlyInterface {
-
         public int getInt();
     }
 
     final static GNotificationInfo notificationInfo = new GNotificationInfo("notification", Collections.singleton(null));
 
-    final static GReferenceInfo refInfo = new GReferenceInfo("reference", String.class);
-
-    public static final class MockGBean {
+    public static final class MockGBean implements GBeanLifecycle, SetterOnlyInterface, GetterOnlyInterface {
 
         public static final GBeanInfo GBEAN_INFO;
 
         static {
             GBeanInfoBuilder infoFactory = new GBeanInfoBuilder(MockGBean.class);
             infoFactory.setConstructor(new String[]{"foo", "bar"});
-            infoFactory.addNotification(notificationInfo);
-            infoFactory.addReference(refInfo);
+            infoFactory.addAttribute("foo", String.class, false);
+            infoFactory.addAttribute("bar", String.class, false);
+            infoFactory.addReference("reference", String.class);
             GBEAN_INFO = infoFactory.getBeanInfo();
         }
 
         public static GBeanInfo getGBeanInfo() {
             return GBEAN_INFO;
+        }
+
+        public MockGBean() {
+        }
+        
+        public MockGBean(String foo, String bar) {
+        }
+
+        public void setReference(String reference) {
+        }
+
+        public void setInt(int i) {
+        }
+
+        public int getInt() {
+            return 0;
+        }
+
+        public void doStart() {
+        }
+
+        public void doStop() {
+        }
+
+        public void doFail() {
         }
     }
 

Modified: geronimo/trunk/modules/kernel/src/test/org/apache/geronimo/gbean/GBeanInfoTest.java
Url: http://svn.apache.org/viewcvs/geronimo/trunk/modules/kernel/src/test/org/apache/geronimo/gbean/GBeanInfoTest.java?view=diff&rev=109314&p1=geronimo/trunk/modules/kernel/src/test/org/apache/geronimo/gbean/GBeanInfoTest.java&r1=109313&p2=geronimo/trunk/modules/kernel/src/test/org/apache/geronimo/gbean/GBeanInfoTest.java&r2=109314
==============================================================================
--- geronimo/trunk/modules/kernel/src/test/org/apache/geronimo/gbean/GBeanInfoTest.java	(original)
+++ geronimo/trunk/modules/kernel/src/test/org/apache/geronimo/gbean/GBeanInfoTest.java	Wed Dec  1 00:01:37 2004
@@ -17,7 +17,6 @@
 
 package org.apache.geronimo.gbean;
 
-import java.util.Collections;
 import java.util.List;
 import java.util.Set;
 
@@ -27,8 +26,8 @@
  * @version $Rev$ $Date$
  */
 public class GBeanInfoTest extends TestCase {
-    private static final String CONSTRUCTOR_ARG_0 = "ConstructorArg-0";
-    private static final String CONSTRUCTOR_ARG_1 = "ConstructorArg-1";
+    private static final String CONSTRUCTOR_ARG_0 = "ConstructorArg_0";
+    private static final String CONSTRUCTOR_ARG_1 = "ConstructorArg_1";
 
     public void testGetGBeanInfo() {
         // 1. Test GBean that exists
@@ -51,22 +50,6 @@
         }
     }
 
-    /*
-     * void GBeanInfo(String, Set, GConstructorInfo, Set, Set, Set)
-     */
-    public void testGBeanInfoStringSetGConstructorInfoSetSetSet() {
-        GBeanInfo gbeanInfo = new GBeanInfo(null, null, null, null, null, null);
-        assertNotNull(gbeanInfo);
-    }
-
-    /*
-     * void GBeanInfo(String, String, Set, GConstructorInfo, Set, Set, Set)
-     */
-    public void testGBeanInfoStringStringSetGConstructorInfoSetSetSet() {
-        GBeanInfo gbeanInfo = new GBeanInfo(null, null, null, null, null, null, null);
-        assertNotNull(gbeanInfo);
-    }
-
     public void testGetName() {
         assertEquals(MockGBean.class.getName(), gbeanInfo.getName());
     }
@@ -77,15 +60,14 @@
 
     public void testGetAttributeSet() {
         Set attrSet = gbeanInfo.getAttributes();
-        assertEquals(2, attrSet.size());
+        assertEquals(4, attrSet.size());
         assertTrue(attrSet.contains(persistentAttrInfo));
         assertTrue(attrSet.contains(nonPersistentAttrInfo));
     }
 
     public void testGetPersistentAttributes() {
         List attrList = gbeanInfo.getPersistentAttributes();
-        assertEquals(1, attrList.size());
-        assertEquals(persistentAttrInfo, attrList.get(0));
+        assertEquals(3, attrList.size());
     }
 
     public void testGetConstructor() {
@@ -102,16 +84,11 @@
         assertTrue(gbeanOpSet.contains(opInfo));
     }
 
-    public void testGetNotificationsSet() {
-        Set gbeanNotificationSet = gbeanInfo.getNotifications();
-        assertEquals(1, gbeanNotificationSet.size());
-        assertTrue(gbeanNotificationSet.contains(notificationInfo));
-    }
-
     public void testGetReferencesSet() {
         Set gbeanRefSet = gbeanInfo.getReferences();
         assertEquals(1, gbeanRefSet.size());
-        assertTrue(gbeanRefSet.contains(refInfo));
+        GReferenceInfo newRefInfo = (GReferenceInfo) gbeanRefSet.iterator().next();
+        assertEquals(refInfo.getName(), newRefInfo.getName());
     }
 
     public void testToString() {
@@ -123,17 +100,15 @@
 
     final static String nonPersistentAttrName = "nonPersistentAttribute";
 
-    final static GAttributeInfo nonPersistentAttrInfo = new GAttributeInfo(nonPersistentAttrName, String.class.getName(), false);
+    final static GAttributeInfo nonPersistentAttrInfo = new GAttributeInfo(nonPersistentAttrName, String.class.getName(), false, "getFoo", "setFoo");
 
     final static String persistentAttrName = "persistentAttribute";
 
-    final static GAttributeInfo persistentAttrInfo = new GAttributeInfo(persistentAttrName, String.class.getName(), true);
+    final static GAttributeInfo persistentAttrInfo = new GAttributeInfo(persistentAttrName, String.class.getName(), true, "getFoo", "setFoo");
 
     final static GOperationInfo opInfo = new GOperationInfo("operation");
 
-    final static GNotificationInfo notificationInfo = new GNotificationInfo("notification", Collections.singleton(null));
-
-    final static GReferenceInfo refInfo = new GReferenceInfo("reference", String.class);
+    final static GReferenceInfo refInfo = new GReferenceInfo("reference", String.class.getName(), String.class.getName(), "setReference");
 
     public void setUp() {
         gbeanInfo = MockGBean.getGBeanInfo();
@@ -154,17 +129,24 @@
 
             infoFactory.addOperation(opInfo);
 
-            infoFactory.addNotification(notificationInfo);
-
             infoFactory.addReference(refInfo);
 
+            infoFactory.addAttribute(CONSTRUCTOR_ARG_0, String.class, true);
+            infoFactory.addAttribute(CONSTRUCTOR_ARG_1, String.class, true);
             infoFactory.setConstructor(new String[]{CONSTRUCTOR_ARG_0, CONSTRUCTOR_ARG_1});
 
+
             GBEAN_INFO = infoFactory.getBeanInfo();
         }
 
         public static GBeanInfo getGBeanInfo() {
             return GBEAN_INFO;
+        }
+
+        public MockGBean(String ConstructorArg_0, String ConstructorArg_1) {
+        }
+
+        public void setReference(String reference) {
         }
     }
 }

Modified: geronimo/trunk/modules/kernel/src/test/org/apache/geronimo/gbean/runtime/GBeanAttributeTest.java
Url: http://svn.apache.org/viewcvs/geronimo/trunk/modules/kernel/src/test/org/apache/geronimo/gbean/runtime/GBeanAttributeTest.java?view=diff&rev=109314&p1=geronimo/trunk/modules/kernel/src/test/org/apache/geronimo/gbean/runtime/GBeanAttributeTest.java&r1=109313&p2=geronimo/trunk/modules/kernel/src/test/org/apache/geronimo/gbean/runtime/GBeanAttributeTest.java&r2=109314
==============================================================================
--- geronimo/trunk/modules/kernel/src/test/org/apache/geronimo/gbean/runtime/GBeanAttributeTest.java	(original)
+++ geronimo/trunk/modules/kernel/src/test/org/apache/geronimo/gbean/runtime/GBeanAttributeTest.java	Wed Dec  1 00:01:37 2004
@@ -19,7 +19,6 @@
 import javax.management.ObjectName;
 
 import junit.framework.TestCase;
-import org.apache.geronimo.gbean.DynamicGAttributeInfo;
 import org.apache.geronimo.gbean.GAttributeInfo;
 import org.apache.geronimo.gbean.GBeanData;
 import org.apache.geronimo.gbean.InvalidConfigurationException;
@@ -114,27 +113,28 @@
         }
 
         {
-            final GAttributeInfo attributeInfo = new GAttributeInfo(attributeName, String.class.getName(), false, Boolean.TRUE, Boolean.FALSE, null, null);
+            final GAttributeInfo attributeInfo = new GAttributeInfo(attributeName, String.class.getName(), false, true, false, null, null);
             GBeanAttribute attribute = new GBeanAttribute(gbeanInstance, attributeInfo, false);
             assertTrue(attribute.isReadable());
             assertFalse(attribute.isWritable());
         }
 
         {
-            final GAttributeInfo attributeInfo = new GAttributeInfo(persistentPrimitiveAttributeName, int.class.getName(), false, Boolean.FALSE, Boolean.TRUE, null, null);
+            final GAttributeInfo attributeInfo = new GAttributeInfo(persistentPrimitiveAttributeName, int.class.getName(), false, false, true, null, null);
             GBeanAttribute attribute = new GBeanAttribute(gbeanInstance, attributeInfo, false);
             assertFalse(attribute.isReadable());
             assertTrue(attribute.isWritable());
         }
 
-        {
-            final GAttributeInfo attributeInfo = new GAttributeInfo("AnotherFinalInt", int.class.getName(), false, Boolean.TRUE, Boolean.TRUE, null, null);
-            try {
-                new GBeanAttribute(gbeanInstance, attributeInfo, false);
-                fail("Getter and setter methods do not have the same types; InvalidConfigurationException expected");
-            } catch (InvalidConfigurationException expected) {
-            }
-        }
+//        // todo recreate this in the info builder tests since the compariason now happens there
+//        {
+//            final GAttributeInfo attributeInfo = new GAttributeInfo("AnotherFinalInt", int.class.getName(), false, true, true, null, null);
+//            try {
+//                new GBeanAttribute(gbeanInstance, attributeInfo, false);
+//                fail("Getter and setter methods do not have the same types; InvalidConfigurationException expected");
+//            } catch (InvalidConfigurationException expected) {
+//            }
+//        }
 
         {
             // the attribute name and getter name are different, yet both
@@ -225,139 +225,8 @@
             } catch (InvalidConfigurationException expected) {
             }
         }
-
-        {
-            final DynamicGAttributeInfo dynamicAttributeInfo = new DynamicGAttributeInfo(attributeName);
-            GBeanAttribute attribute = new GBeanAttribute(gbeanInstance, dynamicAttributeInfo, false);
-            assertFalse(attribute.isPersistent());
-            assertEquals(dynamicAttributeInfo.isPersistent(), attribute.isPersistent());
-            assertTrue(attribute.isReadable());
-            assertEquals(dynamicAttributeInfo.isReadable().booleanValue(), attribute.isReadable());
-            assertTrue(attribute.isWritable());
-            assertEquals(dynamicAttributeInfo.isWritable().booleanValue(), attribute.isWritable());
-            assertEquals(dynamicAttributeInfo.getName(), attribute.getName());
-        }
-
-        {
-            final DynamicGAttributeInfo dynamicAttributeInfo = new DynamicGAttributeInfo(attributeName, true);
-            GBeanAttribute attribute = new GBeanAttribute(gbeanInstance, dynamicAttributeInfo, false);
-            assertTrue(attribute.isPersistent());
-            assertEquals(dynamicAttributeInfo.isPersistent(), attribute.isPersistent());
-            assertTrue(attribute.isReadable());
-            assertEquals(dynamicAttributeInfo.isReadable().booleanValue(), attribute.isReadable());
-            assertTrue(attribute.isWritable());
-            assertEquals(dynamicAttributeInfo.isWritable().booleanValue(), attribute.isWritable());
-            assertEquals(dynamicAttributeInfo.getName(), attribute.getName());
-        }
-
-        {
-            final DynamicGAttributeInfo dynamicAttributeInfo = new DynamicGAttributeInfo(attributeName, true, false,
-                    true);
-            GBeanAttribute attribute = new GBeanAttribute(gbeanInstance, dynamicAttributeInfo, false);
-            assertTrue(attribute.isPersistent());
-            assertEquals(dynamicAttributeInfo.isPersistent(), attribute.isPersistent());
-            assertFalse(attribute.isReadable());
-            assertEquals(dynamicAttributeInfo.isReadable().booleanValue(), attribute.isReadable());
-            assertTrue(attribute.isWritable());
-            assertEquals(dynamicAttributeInfo.isWritable().booleanValue(), attribute.isWritable());
-            assertEquals(dynamicAttributeInfo.getName(), attribute.getName());
-        }
-
-        {
-            final DynamicGAttributeInfo dynamicAttributeInfo = new DynamicGAttributeInfo(attributeName, true, false,
-                    false);
-            GBeanAttribute attribute = new GBeanAttribute(gbeanInstance, dynamicAttributeInfo, false);
-            assertTrue(attribute.isPersistent());
-            assertEquals(dynamicAttributeInfo.isPersistent(), attribute.isPersistent());
-            assertFalse(attribute.isReadable());
-            assertEquals(dynamicAttributeInfo.isReadable().booleanValue(), attribute.isReadable());
-            assertFalse(attribute.isWritable());
-            assertEquals(dynamicAttributeInfo.isWritable().booleanValue(), attribute.isWritable());
-            assertEquals(dynamicAttributeInfo.getName(), attribute.getName());
-        }
     }
 
-//    public final void testOnline() throws Exception {
-//
-//        // 1. setValue throws Exception
-//        {
-//            final Integer valueThatCausesException = new Integer(-1);
-//
-//            final GBeanAttribute attribute = new GBeanAttribute(gbeanInstance, throwingExceptionAttributeInfo);
-//            attribute.setValue(valueThatCausesException);
-//
-//            final Kernel kernel = new Kernel("test.kernel");
-//            try {
-//                kernel.boot();
-//                kernel.loadGBean(name, gbeanInstance);
-//                attribute.start();
-//                fail("Setter upon call with " + valueThatCausesException + " should have thrown exception");
-//            } catch (/* IllegalArgument */Exception expected) {
-//            } finally {
-//                // @todo possible BUG: gbeanInstance holds information on being online
-//                // although kernel is shutdown
-//                // explicit unloading GBean
-//                kernel.unloadGBean(name);
-//                kernel.shutdown();
-//            }
-//        }
-//
-//        // 2. setValue throws Error
-//        {
-//            final Integer valueThatCausesError = new Integer(-2);
-//
-//            final GBeanAttribute attribute = new GBeanAttribute(gbeanInstance, throwingExceptionAttributeInfo);
-//            attribute.setValue(valueThatCausesError);
-//
-//            final Kernel kernel = new Kernel("test.kernel");
-//            try {
-//                kernel.boot();
-//                kernel.loadGBean(name, gbeanInstance);
-//                attribute.start();
-//                fail("Setter upon call with " + valueThatCausesError + " should have thrown error");
-//            } catch (Error expected) {
-//            } finally {
-//                // @todo possible BUG: see the above finally block
-//                kernel.unloadGBean(name);
-//                kernel.shutdown();
-//            }
-//        }
-//
-//        // 3. setValue throws Throwable
-//        {
-//            final Integer valueThatCausesThrowable = new Integer(-3);
-//
-//            final GBeanAttribute attribute = new GBeanAttribute(gbeanInstance, throwingExceptionAttributeInfo);
-//            attribute.setValue(valueThatCausesThrowable);
-//
-//            final Kernel kernel = new Kernel("test.kernel");
-//            try {
-//                kernel.boot();
-//                kernel.loadGBean(name, gbeanInstance);
-//                attribute.start();
-//                fail("Setter upon call with " + valueThatCausesThrowable + " should have thrown throwable");
-//            } catch (Throwable expected) {
-//            } finally {
-//                kernel.shutdown();
-//            }
-//        }
-//
-//        {
-//            try {
-//                GBeanMBean gmbean2 = new GBeanMBean(MockGBean.getGBeanInfo());
-//                GBeanAttribute attribute2 = new GBeanAttribute(gmbean2, throwingExceptionAttributeInfo);
-//                attribute2.start();
-//                fail("AssertionError or NullPointerException expected");
-//            } catch (Exception expected) {
-//            } catch (AssertionError expected) {
-//            }
-//        }
-//    }
-//
-//    public final void testOffline() {
-//        //TODO Implement offline().
-//    }
-//
     public final void testGetValue() throws Exception {
         {
             // attribute that isn't readable and persistent
@@ -382,25 +251,6 @@
                 gbeanInstance.stop();
             }
         }
-
-        {
-            final DynamicGAttributeInfo dynamicAttributeInfo = new DynamicGAttributeInfo(MockDynamicGBean.MUTABLE_INT_ATTRIBUTE_NAME, true, true, true);
-            GBeanAttribute attribute = new GBeanAttribute(dynamicGBeanInstance, dynamicAttributeInfo, false);
-
-            try {
-                dynamicGBeanInstance.start();
-
-                final Integer zero = new Integer(0);
-                assertEquals(zero, attribute.getValue());
-
-                final Integer one = new Integer(1);
-                attribute.setValue(one);
-                assertEquals(one, attribute.getValue());
-            } finally {
-                dynamicGBeanInstance.stop();
-            }
-
-        }
     }
 
     public final void testSetValue() throws Exception {
@@ -519,9 +369,8 @@
                 throw new UnsupportedOperationException("Throws exception to rise test coverage");
             }
         };
-        attributeInfo = new GAttributeInfo(attributeName, String.class.getName(), false);
-//        throwingExceptionAttributeInfo = new GAttributeInfo("ExceptionMutableInt", int.class.getName(), true);
-        persistentPrimitiveAttributeInfo = new GAttributeInfo(persistentPrimitiveAttributeName, int.class.getName(), true);
+        attributeInfo = new GAttributeInfo(attributeName, String.class.getName(), false, "getName", "setName");
+        persistentPrimitiveAttributeInfo = new GAttributeInfo(persistentPrimitiveAttributeName, int.class.getName(), true, "getMutableInt", "setMutableInt");
     }
 
     protected void tearDown() throws Exception {

Modified: geronimo/trunk/modules/kernel/src/test/org/apache/geronimo/kernel/MockDynamicGBean.java
Url: http://svn.apache.org/viewcvs/geronimo/trunk/modules/kernel/src/test/org/apache/geronimo/kernel/MockDynamicGBean.java?view=diff&rev=109314&p1=geronimo/trunk/modules/kernel/src/test/org/apache/geronimo/kernel/MockDynamicGBean.java&r1=109313&p2=geronimo/trunk/modules/kernel/src/test/org/apache/geronimo/kernel/MockDynamicGBean.java&r2=109314
==============================================================================
--- geronimo/trunk/modules/kernel/src/test/org/apache/geronimo/kernel/MockDynamicGBean.java	(original)
+++ geronimo/trunk/modules/kernel/src/test/org/apache/geronimo/kernel/MockDynamicGBean.java	Wed Dec  1 00:01:37 2004
@@ -19,6 +19,7 @@
 import org.apache.geronimo.gbean.DynamicGBean;
 import org.apache.geronimo.gbean.GBeanInfo;
 import org.apache.geronimo.gbean.GBeanInfoBuilder;
+import org.apache.geronimo.gbean.DynamicGAttributeInfo;
 
 /**
  * @version $Rev$ $Date$
@@ -59,7 +60,7 @@
 
     static {
         GBeanInfoBuilder infoFactory = new GBeanInfoBuilder("MockDynamicGBean", MockDynamicGBean.class);
-        infoFactory.addAttribute("mutableInt", Integer.class, false);
+        infoFactory.addAttribute(new DynamicGAttributeInfo("mutableInt", Integer.class.getName(), false, true, true));
         GBEAN_INFO = infoFactory.getBeanInfo();
     }
 }

Modified: geronimo/trunk/modules/network/project.xml
Url: http://svn.apache.org/viewcvs/geronimo/trunk/modules/network/project.xml?view=diff&rev=109314&p1=geronimo/trunk/modules/network/project.xml&r1=109313&p2=geronimo/trunk/modules/network/project.xml&r2=109314
==============================================================================
--- geronimo/trunk/modules/network/project.xml	(original)
+++ geronimo/trunk/modules/network/project.xml	Wed Dec  1 00:01:37 2004
@@ -99,7 +99,6 @@
             <version>&log4j-version;</version>
             <url>http://jakarta.apache.org/log4j</url>
         </dependency>
-
     </dependencies>
 
     <build>

Modified: geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/bridge/AbstractPrincipalMappingUserPasswordRealmBridge.java
Url: http://svn.apache.org/viewcvs/geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/bridge/AbstractPrincipalMappingUserPasswordRealmBridge.java?view=diff&rev=109314&p1=geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/bridge/AbstractPrincipalMappingUserPasswordRealmBridge.java&r1=109313&p2=geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/bridge/AbstractPrincipalMappingUserPasswordRealmBridge.java&r2=109314
==============================================================================
--- geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/bridge/AbstractPrincipalMappingUserPasswordRealmBridge.java	(original)
+++ geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/bridge/AbstractPrincipalMappingUserPasswordRealmBridge.java	Wed Dec  1 00:01:37 2004
@@ -163,11 +163,6 @@
         infoFactory.addAttribute("userNameTargetCallbackName", String.class, true);
         infoFactory.addAttribute("passwordSourceType", Class.class, true);
 
-        infoFactory.setConstructor(new String[]{
-            "userNameSourceType",
-            "userNameTargetCallbackName",
-            "passwordSourceType"});
-
         GBEAN_INFO = infoFactory.getBeanInfo();
     }
 

Modified: geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jaas/GeronimoLoginConfiguration.java
Url: http://svn.apache.org/viewcvs/geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jaas/GeronimoLoginConfiguration.java?view=diff&rev=109314&p1=geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jaas/GeronimoLoginConfiguration.java&r1=109313&p2=geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jaas/GeronimoLoginConfiguration.java&r2=109314
==============================================================================
--- geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jaas/GeronimoLoginConfiguration.java	(original)
+++ geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jaas/GeronimoLoginConfiguration.java	Wed Dec  1 00:01:37 2004
@@ -17,17 +17,16 @@
 
 package org.apache.geronimo.security.jaas;
 
-import javax.security.auth.login.AppConfigurationEntry;
-import javax.security.auth.login.Configuration;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Hashtable;
 import java.util.Iterator;
 import java.util.Map;
+import javax.security.auth.login.AppConfigurationEntry;
+import javax.security.auth.login.Configuration;
 
-import org.apache.commons.logging.LogFactory;
 import org.apache.commons.logging.Log;
-
+import org.apache.commons.logging.LogFactory;
 import org.apache.geronimo.gbean.GBeanInfo;
 import org.apache.geronimo.gbean.GBeanInfoBuilder;
 import org.apache.geronimo.gbean.GBeanLifecycle;
@@ -146,7 +145,7 @@
     private static final GBeanInfo GBEAN_INFO;
 
     static {
-        GBeanInfoBuilder infoFactory = new GBeanInfoBuilder(GeronimoLoginConfiguration.class.getName());
+        GBeanInfoBuilder infoFactory = new GBeanInfoBuilder(GeronimoLoginConfiguration.class);
         infoFactory.addReference("Configurations", ConfigurationEntryFactory.class);
 
         GBEAN_INFO = infoFactory.getBeanInfo();

Modified: geronimo/trunk/modules/security/src/test/org/apache/geronimo/security/bridge/MappingUserPasswordBridgeTest.java
Url: http://svn.apache.org/viewcvs/geronimo/trunk/modules/security/src/test/org/apache/geronimo/security/bridge/MappingUserPasswordBridgeTest.java?view=diff&rev=109314&p1=geronimo/trunk/modules/security/src/test/org/apache/geronimo/security/bridge/MappingUserPasswordBridgeTest.java&r1=109313&p2=geronimo/trunk/modules/security/src/test/org/apache/geronimo/security/bridge/MappingUserPasswordBridgeTest.java&r2=109314
==============================================================================
--- geronimo/trunk/modules/security/src/test/org/apache/geronimo/security/bridge/MappingUserPasswordBridgeTest.java	(original)
+++ geronimo/trunk/modules/security/src/test/org/apache/geronimo/security/bridge/MappingUserPasswordBridgeTest.java	Wed Dec  1 00:01:37 2004
@@ -17,14 +17,14 @@
 
 package org.apache.geronimo.security.bridge;
 
-import org.apache.geronimo.security.IdentificationPrincipal;
-import org.apache.geronimo.security.ContextManager;
-
 import java.security.Principal;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
 import javax.security.auth.Subject;
+
+import org.apache.geronimo.security.ContextManager;
+import org.apache.geronimo.security.IdentificationPrincipal;
 
 
 /**

Modified: geronimo/trunk/modules/timer/src/java/org/apache/geronimo/timer/jdbc/JDBCWorkerPersistence.java
Url: http://svn.apache.org/viewcvs/geronimo/trunk/modules/timer/src/java/org/apache/geronimo/timer/jdbc/JDBCWorkerPersistence.java?view=diff&rev=109314&p1=geronimo/trunk/modules/timer/src/java/org/apache/geronimo/timer/jdbc/JDBCWorkerPersistence.java&r1=109313&p2=geronimo/trunk/modules/timer/src/java/org/apache/geronimo/timer/jdbc/JDBCWorkerPersistence.java&r2=109314
==============================================================================
--- geronimo/trunk/modules/timer/src/java/org/apache/geronimo/timer/jdbc/JDBCWorkerPersistence.java	(original)
+++ geronimo/trunk/modules/timer/src/java/org/apache/geronimo/timer/jdbc/JDBCWorkerPersistence.java	Wed Dec  1 00:01:37 2004
@@ -320,11 +320,11 @@
 
     static {
         GBeanInfoBuilder infoFactory = new GBeanInfoBuilder(JDBCWorkerPersistence.class);
-        infoFactory.addAttribute("sequenceSQL", String.class, true);
-        infoFactory.addAttribute("insertSQL", String.class, true);
-        infoFactory.addAttribute("deleteSQL", String.class, true);
-        infoFactory.addAttribute("fixedRateUpdateSQL", String.class, true);
-        infoFactory.addAttribute("selectSQL", String.class, true);
+//        infoFactory.addAttribute("sequenceSQL", String.class, true);
+//        infoFactory.addAttribute("insertSQL", String.class, true);
+//        infoFactory.addAttribute("deleteSQL", String.class, true);
+//        infoFactory.addAttribute("fixedRateUpdateSQL", String.class, true);
+//        infoFactory.addAttribute("selectSQL", String.class, true);
 
         infoFactory.addAttribute("createSequenceSQL", String.class, true);
         infoFactory.addAttribute("createTableSQL", String.class, true);
@@ -333,7 +333,8 @@
 
         infoFactory.addReference("managedConnectionFactoryWrapper", ManagedConnectionFactoryWrapper.class);
 
-        infoFactory.setConstructor(new String[]{"kernel", "managedConnectionFactoryWrapper", "sequenceSQL", "insertSQL", "deleteSQL", "fixedRateUpdateSQL", "selectSQL"});
+//        infoFactory.setConstructor(new String[]{"kernel", "managedConnectionFactoryWrapper", "sequenceSQL", "insertSQL", "deleteSQL", "fixedRateUpdateSQL", "selectSQL"});
+        infoFactory.setConstructor(new String[]{"kernel", "managedConnectionFactoryWrapper"});
 
         GBEAN_INFO = infoFactory.getBeanInfo();
     }