You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by jb...@apache.org on 2004/09/17 23:22:25 UTC

svn commit: rev 46271 - geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/kernel/config

Author: jboynes
Date: Fri Sep 17 14:22:24 2004
New Revision: 46271

Modified:
   geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/kernel/config/Configuration.java
Log:
Add better diags when saving configuration

Modified: geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/kernel/config/Configuration.java
==============================================================================
--- geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/kernel/config/Configuration.java	(original)
+++ geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/kernel/config/Configuration.java	Fri Sep 17 14:22:24 2004
@@ -109,11 +109,11 @@
      * Constructor that can be used to create an offline Configuration, typically
      * only used publically during the deployment process for initial configuration.
      *
-     * @param id the unique ID of this Configuration
-     * @param moduleType the module type identifier
-     * @param parent the parent Configuration; may be null
-     * @param classPath a List<URI> of locations that define the codebase for this Configuration
-     * @param gbeanState a byte array contain the Java Serialized form of the GBeans in this Configuration
+     * @param id           the unique ID of this Configuration
+     * @param moduleType   the module type identifier
+     * @param parent       the parent Configuration; may be null
+     * @param classPath    a List<URI> of locations that define the codebase for this Configuration
+     * @param gbeanState   a byte array contain the Java Serialized form of the GBeans in this Configuration
      * @param repositories a Collection<Repository> of repositories used to resolve dependencies
      * @param dependencies a List<URI> of dependencies
      */
@@ -249,13 +249,13 @@
 
     /**
      * Gets the type of the configuration (WAR, RAR et cetera)
-     * 
+     *
      * @return Type of the configuration.
      */
     public ConfigurationModuleType getModuleType() {
         return moduleType;
     }
-    
+
     /**
      * Return the URL that is used to resolve relative classpath locations
      *
@@ -304,7 +304,7 @@
      * Load GBeans from the supplied byte array using the supplied ClassLoader
      *
      * @param gbeanState the serialized form of the GBeans
-     * @param cl the ClassLoader used to locate classes needed during deserialization
+     * @param cl         the ClassLoader used to locate classes needed during deserialization
      * @return a Map<ObjectName, GBeanMBean> of GBeans loaded from the persisted state
      * @throws InvalidConfigException if there is a problem deserializing the state
      */
@@ -350,35 +350,57 @@
      *
      * @param gbeans a Map<ObjectName, GBeanMBean> of GBeans to store
      * @return the persisted GBeans
-     * @throws org.apache.geronimo.kernel.config.InvalidConfigException if there is a problem serializing the state
+     * @throws org.apache.geronimo.kernel.config.InvalidConfigException
+     *          if there is a problem serializing the state
      */
     public static byte[] storeGBeans(Map gbeans) throws InvalidConfigException {
-        ByteArrayOutputStream baos = null;
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        ObjectOutputStream oos;
         try {
-            baos = new ByteArrayOutputStream();
-            ObjectOutputStream oos = new ObjectOutputStream(baos);
-            for (Iterator i = gbeans.entrySet().iterator(); i.hasNext();) {
-                Map.Entry entry = (Map.Entry) i.next();
-                ObjectName objectName = (ObjectName) entry.getKey();
-                GBeanMBean gbean = (GBeanMBean) entry.getValue();
+            oos = new ObjectOutputStream(baos);
+        } catch (IOException e) {
+            throw (AssertionError) new AssertionError("Unable to initialize ObjectOutputStream").initCause(e);
+        }
+        for (Iterator i = gbeans.entrySet().iterator(); i.hasNext();) {
+            Map.Entry entry = (Map.Entry) i.next();
+            ObjectName objectName = (ObjectName) entry.getKey();
+            GBeanMBean gbean = (GBeanMBean) entry.getValue();
+            try {
                 oos.writeObject(objectName);
                 oos.writeObject(gbean.getGBeanInfo());
                 storeGMBeanState(gbean, oos);
+            } catch (Exception e) {
+                throw new InvalidConfigException("Unable to serialize GBeanState for " + objectName, e);
             }
+        }
+        try {
             oos.flush();
-        } catch (Exception e) {
-            throw new InvalidConfigException("Unable to serialize GBeanState", e);
+        } catch (IOException e) {
+            throw (AssertionError) new AssertionError("Unable to flush ObjectOutputStream").initCause(e);
         }
         return baos.toByteArray();
     }
 
-    public static void storeGMBeanState(GBeanMBean gbean, ObjectOutputStream oos) throws IOException, AttributeNotFoundException, ReflectionException {
+    public static void storeGMBeanState(GBeanMBean gbean, ObjectOutputStream oos) throws IOException, ReflectionException {
         List persistentAttributes = gbean.getGBeanInfo().getPersistentAttributes();
         oos.writeInt(persistentAttributes.size());
         for (Iterator j = persistentAttributes.iterator(); j.hasNext();) {
             GAttributeInfo attributeInfo = (GAttributeInfo) j.next();
-            oos.writeObject(attributeInfo.getName());
-            oos.writeObject(gbean.getAttribute(attributeInfo.getName()));
+            String name = attributeInfo.getName();
+            Object value = null;
+            try {
+                value = gbean.getAttribute(name);
+            } catch (ReflectionException e) {
+                throw e;
+            } catch (AttributeNotFoundException e) {
+                throw new AssertionError("Unable to get attribute " + name + " from GBean " + gbean.getObjectName());
+            }
+            try {
+                oos.writeObject(name);
+                oos.writeObject(value);
+            } catch (IOException e) {
+                throw (IOException) new IOException("Unable to write attribute: " + name).initCause(e);
+            }
         }
         Set endpointsSet = gbean.getGBeanInfo().getReferences();
         oos.writeInt(endpointsSet.size());