Well, now the source code has moved before the 2nd rev of the
patch was applied.  So here's a 3rd rev against the new location.  I also
put in the JSR-88 JavaDoc for DFM, and made the change suggested earlier
(by Jeremy?) to totally remove the exception squashing in the original
code.

        Note this is unrelated to the other pending JSR-88 patch on 
DConfigBeans.

Aaron
Index: 
specs/j2ee-deployment/src/java/javax/enterprise/deploy/shared/factories/DeploymentFactoryManager.java
===================================================================
RCS file: 
/home/cvspublic/incubator-geronimo/specs/j2ee-deployment/src/java/javax/enterprise/deploy/shared/factories/DeploymentFactoryManager.java,v
retrieving revision 1.1
diff -c -r1.1 DeploymentFactoryManager.java
*** 
specs/j2ee-deployment/src/java/javax/enterprise/deploy/shared/factories/DeploymentFactoryManager.java
       16 Aug 2003 12:28:26 -0000      1.1
--- 
specs/j2ee-deployment/src/java/javax/enterprise/deploy/shared/factories/DeploymentFactoryManager.java
       16 Aug 2003 14:16:26 -0000
***************
*** 66,73 ****
  import java.util.ArrayList;
  
  /**
   *
!  * @version $Revision: 1.1 $ $Date: 2003/08/16 12:28:26 $
   */
  public final class DeploymentFactoryManager {
      private static DeploymentFactoryManager instance;
--- 66,89 ----
  import java.util.ArrayList;
  
  /**
+  * The DeploymentFactoryManager class is a central registry for J2EE
+  * DeploymentFactory objects. The DeploymentFactoryManager retains references
+  * to DeploymentFactory objects loaded by a tool. A DeploymentFactory object
+  * provides a reference to a DeploymentManager. The DeploymentFactoryManager
+  * has been implemented as a singleton. A tool gets a reference to the
+  * DeploymentFactoryManager via the getInstance method. The
+  * DeploymentFactoryManager can return two types of DeploymentManagers, a
+  * connected DeploymentManager and a disconnected DeploymentManager. The
+  * connected DeploymentManager provides access to any product resources that
+  * may be required for configurations and deployment. The method to retrieve a
+  * connected DeploymentManager is getDeploymentManager. This method provides
+  * parameters for user name and password that the product may require for user
+  * authentication. A disconnected DeploymentManager does not provide access to
+  * a running J2EE product. The method to retrieve a disconnected
+  * DeploymentManager is getDisconnectedDeploymentManager. A disconnected
+  * DeploymentManager does not need user authentication information.
   *
!  * @version $Revision: 1.2 $ $Date: 2003/08/16 01:32:54 $
   */
  public final class DeploymentFactoryManager {
      private static DeploymentFactoryManager instance;
***************
*** 77,135 ****
      private DeploymentFactoryManager() {
      }
  
      public static DeploymentFactoryManager getInstance() {
!         if (instance == null) {
              instance = new DeploymentFactoryManager();
          }
          return instance;
      }
  
      public DeploymentFactory[] getDeploymentFactories() {
!         return (DeploymentFactory[]) deploymentFactories.toArray(new 
DeploymentFactory[]{});
      }
  
      public DeploymentManager getDeploymentManager(String uri, String 
username, String password) throws DeploymentManagerCreationException {
!         // RI doesn't care about uri being null, neither do we
! 
!         for (Iterator i = deploymentFactories.iterator(); i.hasNext();) {
!             DeploymentFactory factory = (DeploymentFactory) i.next();
!             if (factory != null) {
!                 if (factory.handlesURI(uri)) {
!                     try {
!                         return factory.getDeploymentManager(uri, username, 
password);
!                     } catch (DeploymentManagerCreationException e) {
!                         // Just like the RI we throw a new exception with a 
generic message
!                         throw new DeploymentManagerCreationException("Could 
not get DeploymentManager");
!                     }
                  }
              }
          }
!         throw new DeploymentManagerCreationException("Could not get 
DeploymentManager");
      }
  
      public DeploymentManager getDisconnectedDeploymentManager(String uri) 
throws DeploymentManagerCreationException {
!         // RI doesn't care about uri being null, neither do we
! 
!         for (Iterator i = deploymentFactories.iterator(); i.hasNext();) {
!             DeploymentFactory factory = (DeploymentFactory) i.next();
!             if (factory != null) {
!                 if (factory.handlesURI(uri)) {
!                     try {
!                         return factory.getDisconnectedDeploymentManager(uri);
!                     } catch (DeploymentManagerCreationException e) {
!                         // Just like the RI we throw a new exception with a 
generic message
!                         throw new DeploymentManagerCreationException("Could 
not get DeploymentManager");
!                     }
                  }
              }
          }
!         throw new DeploymentManagerCreationException("Could not get 
DeploymentManager");
      }
  
      public void registerDeploymentFactory(DeploymentFactory factory) {
!         // apparently we dont care about null values, the Sun RI even adds 
the null
!         // to the list. So after registerDeploymentFactory(null) 
getDeploymentFactories()
!         // return an array with length 1.
!         deploymentFactories.add(factory);
      }
  }
--- 93,192 ----
      private DeploymentFactoryManager() {
      }
  
+     /**
+      * Retrieve the Singleton DeploymentFactoryManager
+      *
+      * @return DeploymentFactoryManager instance
+      */
      public static DeploymentFactoryManager getInstance() {
!         if(instance == null) {
              instance = new DeploymentFactoryManager();
          }
          return instance;
      }
  
+     /**
+      * Retrieve the lists of currently registered DeploymentFactories.
+      *
+      * @return the list of DeploymentFactory objects or an empty array if 
there are none.
+      */
      public DeploymentFactory[] getDeploymentFactories() {
!         return (DeploymentFactory[])deploymentFactories.toArray(new 
DeploymentFactory[deploymentFactories.size()]);
      }
  
+     /**
+      * Retrieves a DeploymentManager instance to use for deployment. The 
caller
+      * provides a URI and optional username and password, and all registered
+      * DeploymentFactories will be checked. The first one to understand the 
URI
+      * provided will attempt to initiate a server connection and return a 
ready
+      * DeploymentManager instance.
+      *
+      * @param uri      The uri to check
+      * @param username An optional username (may be <tt>null</tt> if no
+      *                 authentication is required for this platform).
+      * @param password An optional password (may be <tt>null</tt> if no
+      *                 authentication is required for this platform).
+      *
+      * @return A ready DeploymentManager instance.
+      *
+      * @throws DeploymentManagerCreationException Occurs when the factory
+      *         appropriate to the specified URI was unable to initialize a
+      *         DeploymentManager instance (server down, unable to 
authenticate,
+      *         etc.).
+      */
      public DeploymentManager getDeploymentManager(String uri, String 
username, String password) throws DeploymentManagerCreationException {
!         if(uri == null) {
!             throw new IllegalArgumentException("URI for DeploymentManager 
should not be null");
!         }
!         DeploymentManager manager = null;
!         for(Iterator i = deploymentFactories.iterator(); i.hasNext();) {
!             DeploymentFactory factory = (DeploymentFactory)i.next();
!             if(factory.handlesURI(uri)) {
!                 manager = factory.getDeploymentManager(uri, username, 
password);
!                 if(manager != null) {
!                     return manager;
                  }
              }
          }
!         throw new DeploymentManagerCreationException("Could not get 
DeploymentManager; No registered DeploymentFactory handles this URI");
      }
  
+     /**
+      * Return a disconnected DeploymentManager instance.
+      *
+      * @param uri identifier of the disconnected DeploymentManager to return.
+      *
+      * @return A DeploymentManager instance.
+      *
+      * @throws DeploymentManagerCreationException occurs if the
+      *         DeploymentManager could not be created.
+      */
      public DeploymentManager getDisconnectedDeploymentManager(String uri) 
throws DeploymentManagerCreationException {
!         if(uri == null) {
!             throw new IllegalArgumentException("URI for DeploymentManager 
should not be null");
!         }
!         DeploymentManager manager = null;
!         for(Iterator i = deploymentFactories.iterator(); i.hasNext();) {
!             DeploymentFactory factory = (DeploymentFactory)i.next();
!             if(factory.handlesURI(uri)) {
!                 manager = factory.getDisconnectedDeploymentManager(uri);
!                 if(manager != null) {
!                     return manager;
                  }
              }
          }
!         throw new DeploymentManagerCreationException("Could not get 
DeploymentManager; No registered DeploymentFactory handles this URI");
      }
  
+     /**
+      * Registers a DeploymentFactory so it will be able to handle requests.
+      */ 
      public void registerDeploymentFactory(DeploymentFactory factory) {
!         if(factory == null) {
!             throw new IllegalArgumentException("DeploymentFactory to register 
should not be null");
!         }
!         if(!deploymentFactories.contains(factory)) {
!             deploymentFactories.add(factory);
!         }
      }
  }
Index: 
modules/core/src/test/javax/enterprise/deploy/shared/factories/DeploymentFactoryManagerTest.java
===================================================================
RCS file: 
/home/cvspublic/incubator-geronimo/modules/core/src/test/javax/enterprise/deploy/shared/factories/DeploymentFactoryManagerTest.java,v
retrieving revision 1.1
diff -c -r1.1 DeploymentFactoryManagerTest.java
*** 
modules/core/src/test/javax/enterprise/deploy/shared/factories/DeploymentFactoryManagerTest.java
    14 Aug 2003 09:14:05 -0000      1.1
--- 
modules/core/src/test/javax/enterprise/deploy/shared/factories/DeploymentFactoryManagerTest.java
    16 Aug 2003 14:17:15 -0000
***************
*** 58,66 ****
  import junit.framework.TestCase;
  
  import javax.enterprise.deploy.spi.factories.DeploymentFactory;
- import javax.enterprise.deploy.spi.factories.MockDeploymentFactory;
  import 
javax.enterprise.deploy.spi.exceptions.DeploymentManagerCreationException;
  import javax.enterprise.deploy.spi.DeploymentManager;
  
  /**
   * Low level tests on the DeploymentFactoryManager.
--- 58,66 ----
  import junit.framework.TestCase;
  
  import javax.enterprise.deploy.spi.factories.DeploymentFactory;
  import 
javax.enterprise.deploy.spi.exceptions.DeploymentManagerCreationException;
  import javax.enterprise.deploy.spi.DeploymentManager;
+ import 
org.apache.geronimo.enterprise.deploy.provider.GeronimoDeploymentFactory;
  
  /**
   * Low level tests on the DeploymentFactoryManager.
***************
*** 80,107 ****
  
      public void testGetDeploymentManagerWithoutAnyRegisteredFactories() {
          try {
!             factoryManager.getDeploymentManager(null, null, null);
          } catch (DeploymentManagerCreationException e) {
!             assertEquals("Could not get DeploymentManager", e.getMessage());
!             return;
          }
-         fail("Expected a DeploymentManagerCreationException");
      }
  
      public void 
testDisconnectedGetDeploymentManagerWithoutAnyRegisteredFactories() {
          try {
!             factoryManager.getDisconnectedDeploymentManager(null);
          } catch (DeploymentManagerCreationException e) {
!             assertEquals("Could not get DeploymentManager", e.getMessage());
!             return;
          }
-         fail("Expected a DeploymentManagerCreationException");
      }
  
      public void testRegisterDeploymentFactory() {
          int initialNumberOfFactories = 
factoryManager.getDeploymentFactories().length;
  
!         DeploymentFactory factory = new MockDeploymentFactory();
          factoryManager.registerDeploymentFactory(factory);
  
          int expectedNumberOfFactories = initialNumberOfFactories + 1;
--- 80,133 ----
  
      public void testGetDeploymentManagerWithoutAnyRegisteredFactories() {
          try {
!             factoryManager.getDeploymentManager("invalid-uri", null, null);
!             fail("Expected a DeploymentManagerCreationException");
          } catch (DeploymentManagerCreationException e) {
!             assertTrue(e.getMessage().startsWith("Could not get 
DeploymentManager"));
          }
      }
  
      public void 
testDisconnectedGetDeploymentManagerWithoutAnyRegisteredFactories() {
          try {
!             factoryManager.getDisconnectedDeploymentManager("invalid-uri");
!             fail("Expected a DeploymentManagerCreationException");
          } catch (DeploymentManagerCreationException e) {
!             assertTrue(e.getMessage().startsWith("Could not get 
DeploymentManager"));
!         }
!     }
! 
!     public void testGetDeploymentManagerWithNullURI() {
!         try {
!             factoryManager.getDeploymentManager(null, null, null);
!             fail("Expected an IllegalArgumentException");
!         } catch (IllegalArgumentException e) {
!         } catch(DeploymentManagerCreationException e) {
!             fail("Unexpected Exception: "+e.getMessage());
!         }
!     }
! 
!     public void testDisconnectedGetDeploymentManagerWithNullURI() {
!         try {
!             factoryManager.getDisconnectedDeploymentManager(null);
!             fail("Expected an IllegalArgumentException");
!         } catch (IllegalArgumentException e) {
!         } catch(DeploymentManagerCreationException e) {
!             fail("Unexpected Exception: "+e.getMessage());
!         }
!     }
! 
!     public void testRegisterNull() {
!         try {
!             factoryManager.registerDeploymentFactory(null);
!             fail("Should have gotten an IllegalArgumentException");
!         } catch(IllegalArgumentException e) {
          }
      }
  
      public void testRegisterDeploymentFactory() {
          int initialNumberOfFactories = 
factoryManager.getDeploymentFactories().length;
  
!         DeploymentFactory factory = new GeronimoDeploymentFactory();
          factoryManager.registerDeploymentFactory(factory);
  
          int expectedNumberOfFactories = initialNumberOfFactories + 1;
***************
*** 110,151 ****
          assertEquals(expectedNumberOfFactories, currentNumberOfFactories);
      }
  
-     /**
-      * Relies on succesful completion of @link 
#testRegisterDeploymentFactory()
-      * bacause we need a registered DeploymentManager for this test.
-      */
      public void testGetDeploymentManager() {
!         int numberOfFactories = 
factoryManager.getDeploymentFactories().length;
!         assertTrue("We should have a registered MockDeploymentFactory", 
numberOfFactories > 0);
  
          DeploymentManager deploymentManager = null;
          try {
!             deploymentManager = factoryManager.getDeploymentManager(null, 
null, null);
          } catch (DeploymentManagerCreationException e) {
              fail("Didn't expect a DeploymentManagerException here.");
          }
!         assertNotNull("Expected an instance of the MockDeploymentManager", 
deploymentManager);
      }
  
      public void testDeploymentManagerCreationException() {
          try {
              
factoryManager.getDisconnectedDeploymentManager("throw-exception");
          } catch (DeploymentManagerCreationException e) {
!             assertEquals("Could not get DeploymentManager", e.getMessage());
!             return;
          }
-         fail("Expected a DeploymentManagerCreationException");
      }
  
!     public void testGetNullDeploymentManagerCreationException() {
!         DeploymentManager disconnectedDeploymentManager = null;
!         try {
!             disconnectedDeploymentManager = 
factoryManager.getDisconnectedDeploymentManager("return-null");
!         } catch (DeploymentManagerCreationException e) {
!             fail("Didn't expect a DeploymentManagerException here.");
          }
!         // Apperently the DeploymentFactoryManager doesn't care about the 
DeploymentFactory
!         // returning null
!         assertNull(disconnectedDeploymentManager);
      }
  }
--- 136,178 ----
          assertEquals(expectedNumberOfFactories, currentNumberOfFactories);
      }
  
      public void testGetDeploymentManager() {
!         ensureFactoryRegistered();
!         DeploymentManager deploymentManager = null;
!         try {
!             deploymentManager = 
factoryManager.getDeploymentManager("deployer:geronimo://server:port/application",
 "username", "password");
!         } catch (DeploymentManagerCreationException e) {
!             fail("Didn't expect a DeploymentManagerException here.");
!         }
!         assertNotNull("Expected an instance of the DeploymentManager", 
deploymentManager);
!     }
  
+     public void testGetDisconnectedDeploymentManager() {
+         ensureFactoryRegistered();
          DeploymentManager deploymentManager = null;
          try {
!             deploymentManager = 
factoryManager.getDeploymentManager("deployer:geronimo:", null, null);
          } catch (DeploymentManagerCreationException e) {
              fail("Didn't expect a DeploymentManagerException here.");
          }
!         assertNotNull("Expected an instance of the DeploymentManager", 
deploymentManager);
      }
  
      public void testDeploymentManagerCreationException() {
+         ensureFactoryRegistered();
          try {
              
factoryManager.getDisconnectedDeploymentManager("throw-exception");
+             fail("Expected a DeploymentManagerCreationException");
          } catch (DeploymentManagerCreationException e) {
!             assertTrue(e.getMessage().startsWith("Could not get 
DeploymentManager"));
          }
      }
  
!     private void ensureFactoryRegistered() {
!         int numberOfFactories = 
factoryManager.getDeploymentFactories().length;
!         if(numberOfFactories == 0) {
!             factoryManager.registerDeploymentFactory(new 
GeronimoDeploymentFactory());
          }
!         assertTrue("We should have a registered DeploymentFactory", 
numberOfFactories > 0);
      }
  }

Reply via email to