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);
}
}