[jboss-svn-commits] JBL Code SVN: r22296 - in labs/jbossesb/workspace/skeagh: commons/src/main/java/org/jboss/esb/classpath and 3 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Mon Sep 1 12:47:00 EDT 2008
Author: tfennelly
Date: 2008-09-01 12:47:00 -0400 (Mon, 01 Sep 2008)
New Revision: 22296
Modified:
labs/jbossesb/workspace/skeagh/api/service/src/main/java/org/jboss/esb/context/DeploymentContext.java
labs/jbossesb/workspace/skeagh/commons/src/main/java/org/jboss/esb/classpath/ClassUtil.java
labs/jbossesb/workspace/skeagh/runtime/src/main/java/org/jboss/esb/deploy/DeploymentRuntime.java
labs/jbossesb/workspace/skeagh/runtime/src/main/java/org/jboss/esb/deploy/config/digest/SetProperty.java
labs/jbossesb/workspace/skeagh/runtime/src/test/java/org/jboss/esb/deploy/config/MyResource.java
Log:
Setting of the deployment context on deployed objects.
Modified: labs/jbossesb/workspace/skeagh/api/service/src/main/java/org/jboss/esb/context/DeploymentContext.java
===================================================================
--- labs/jbossesb/workspace/skeagh/api/service/src/main/java/org/jboss/esb/context/DeploymentContext.java 2008-09-01 16:07:54 UTC (rev 22295)
+++ labs/jbossesb/workspace/skeagh/api/service/src/main/java/org/jboss/esb/context/DeploymentContext.java 2008-09-01 16:47:00 UTC (rev 22296)
@@ -72,12 +72,12 @@
}
/**
- * Add a list of deployment resources to the context.
- * @param resourcesToAdd A list of deployment resources associated with this deployment.
+ * Set the list of deployment resources on the context.
+ * @param resources A list of deployment resources associated with this deployment.
*/
- public final void addResources(final Map<String, Object> resourcesToAdd)
+ public final void setResources(final Map<String, Object> resources)
{
- this.resources.putAll(resourcesToAdd);
+ this.resources = resources;
}
/**
Modified: labs/jbossesb/workspace/skeagh/commons/src/main/java/org/jboss/esb/classpath/ClassUtil.java
===================================================================
--- labs/jbossesb/workspace/skeagh/commons/src/main/java/org/jboss/esb/classpath/ClassUtil.java 2008-09-01 16:07:54 UTC (rev 22295)
+++ labs/jbossesb/workspace/skeagh/commons/src/main/java/org/jboss/esb/classpath/ClassUtil.java 2008-09-01 16:47:00 UTC (rev 22296)
@@ -25,10 +25,7 @@
import java.io.InputStream;
import java.lang.annotation.Annotation;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.lang.reflect.Proxy;
+import java.lang.reflect.*;
/**
* Utility methods to aid in class/resource loading.
@@ -329,4 +326,30 @@
return false;
}
+
+ /**
+ * Set the field value on the specified object instance.
+ *
+ * @param field The field to set.
+ * @param instance The object instance on which to set.
+ * @param value The object value.
+ * @throws IllegalAccessException cannot access field.
+ */
+ public static void setFieldValue(final Field field, final Object instance, final Object value) throws IllegalAccessException
+ {
+ boolean isAccessible = field.isAccessible();
+
+ if (!isAccessible)
+ {
+ field.setAccessible(true);
+ }
+
+ try
+ {
+ field.set(instance, value);
+ } finally
+ {
+ field.setAccessible(isAccessible);
+ }
+ }
}
Modified: labs/jbossesb/workspace/skeagh/runtime/src/main/java/org/jboss/esb/deploy/DeploymentRuntime.java
===================================================================
--- labs/jbossesb/workspace/skeagh/runtime/src/main/java/org/jboss/esb/deploy/DeploymentRuntime.java 2008-09-01 16:07:54 UTC (rev 22295)
+++ labs/jbossesb/workspace/skeagh/runtime/src/main/java/org/jboss/esb/deploy/DeploymentRuntime.java 2008-09-01 16:47:00 UTC (rev 22296)
@@ -34,6 +34,7 @@
import org.jboss.esb.service.ServiceName;
import org.jboss.esb.util.AssertArgument;
+import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.util.*;
@@ -67,7 +68,21 @@
/**
* Deployed Objects Map.
*/
- private Map<Object, Object> deployedObjects = new LinkedHashMap<Object, Object>();
+ private Map<Object, Object> deployedObjects = new LinkedHashMap<Object, Object>()
+ {
+ public Object put(final Object key, final Object value)
+ {
+ if (containsKey(key))
+ {
+ throw new IllegalStateException("ESB Deployment instance configured with resources/components having the same name '" + key + "'. Resource/component names must be unique!");
+ }
+ return super.put(key, value);
+ }
+ };
+ /**
+ * Undeployed Objects List.
+ */
+ private List<Object> undeployedObjects = new ArrayList<Object>();
/**
* Public default constructor.
@@ -176,23 +191,44 @@
public final void undeploy() throws DeploymentException
{
logger.info("Starting JBoss ESB undeployment: '" + deploymentName + "'.");
- if (!deployedObjects.isEmpty())
+ // Undeploy all objects that were deployed on ESB Startup...
+ undeploy(deployedObjects);
+ // Undeploy any objects manually set in the ESB deployment context...
+ undeploy(context.getAll());
+ logger.info("JBoss ESB undeployment completed successfully: '" + deploymentName + "'.");
+ }
+
+ /**
+ * Undeploy the Objects supplied in the objectMap.
+ *
+ * @param objectMap The map of objects to be undeployed.
+ */
+ private void undeploy(final Map<Object, Object> objectMap)
+ {
+ if (!objectMap.isEmpty())
{
- Map.Entry<Object, Object>[] deploymentSet = new Map.Entry[deployedObjects.size()];
+ Map.Entry<Object, Object>[] deploymentSet = new Map.Entry[objectMap.size()];
- deployedObjects.entrySet().toArray(deploymentSet);
+ objectMap.entrySet().toArray(deploymentSet);
for (int i = deploymentSet.length - 1; i >= 0; i--)
{
- try
+ Object object = deploymentSet[i].getValue();
+
+ // Keeping track of Objects as we undeploy them, so as not to
+ // undeploy the same object twice...
+ if (!undeployedObjects.contains(object))
{
- ClassUtil.execAnnotatedMethod(deploymentSet[i].getValue(), Uninitialize.class);
- } catch (Throwable t)
- {
- logger.debug("Error while undeploying '" + deploymentSet[i].getKey() + "' (" + deploymentSet[i].getValue().getClass().getName() + ").");
+ try
+ {
+ ClassUtil.execAnnotatedMethod(object, Uninitialize.class);
+ undeployedObjects.add(object);
+ } catch (Throwable t)
+ {
+ logger.debug("Error while undeploying '" + deploymentSet[i].getKey() + "' (" + deploymentSet[i].getValue().getClass().getName() + ").");
+ }
}
}
}
- logger.info("JBoss ESB undeployment completed successfully: '" + deploymentName + "'.");
}
/**
@@ -202,6 +238,8 @@
*/
private void deployResources() throws DeploymentException
{
+ Map<String, Object> deployedResources = new LinkedHashMap<String, Object>();
+
for (ConfigurationUnit configurationUnit : configurationUnits)
{
Map<String, Object> resourceMap = configurationUnit.getResources();
@@ -211,9 +249,10 @@
{
try
{
- ClassUtil.execAnnotatedMethod(resource.getValue(), Initialize.class);
+ deployObject(resource.getValue());
logger.debug("Deployed resource '" + resource.getKey() + "' (" + resource.getValue().getClass().getName() + ").");
deployedObjects.put(resource.getKey(), resource.getValue());
+ deployedResources.put(resource.getKey(), resource.getValue());
} catch (InvocationTargetException e)
{
throw new DeploymentException("Unable to deploy resource '" + resource.getKey() + "' (" + resource.getValue().getClass().getName() + ").", e.getCause());
@@ -223,6 +262,9 @@
}
}
}
+
+ // Expose the deployed resources via the DeploymentContext...
+ context.setResources(deployedResources);
}
/**
@@ -241,7 +283,7 @@
{
try
{
- ClassUtil.execAnnotatedMethod(service.getValue().getService(), Initialize.class);
+ deployObject(service.getValue().getService());
logger.debug("Deployed service '" + service.getKey() + "' (" + service.getValue().getClass().getName() + ").");
deployedObjects.put(service.getKey(), service.getValue().getService());
} catch (InvocationTargetException e)
@@ -289,7 +331,7 @@
routerConfig.getRouter().setDispatcher(dispatcher);
// Now deploy the router...
- ClassUtil.execAnnotatedMethod(routerConfig.getRouter(), Initialize.class);
+ deployObject(routerConfig.getRouter());
logger.debug("Deployed InboundRouter '" + routerConfig.getName() + "' (" + routerConfig.getRouter().getClass().getName() + ").");
deployedObjects.put(routerConfig.getName(), routerConfig.getRouter());
} catch (InvocationTargetException e)
@@ -344,7 +386,7 @@
deployTransformers(routerConfig.getTransformers(), routerConfig.getName());
// Now deploy the router...
- ClassUtil.execAnnotatedMethod(routerConfig.getRouter(), Initialize.class);
+ deployObject(routerConfig.getRouter());
logger.debug("Deployed OutboundRouter '" + routerConfig.getName() + "' (" + routerConfig.getRouter().getClass().getName() + ").");
deployedObjects.put(routerConfig.getName(), routerConfig.getRouter());
} catch (InvocationTargetException e)
@@ -374,7 +416,7 @@
{
try
{
- ClassUtil.execAnnotatedMethod(transformer, Initialize.class);
+ deployObject(transformer);
logger.debug("Deployed transformer for router '" + routerConfigName + "' (" + transformer.getClass().getName() + ").");
deployedObjects.put(transformer, transformer);
} catch (InvocationTargetException e)
@@ -389,6 +431,47 @@
}
/**
+ * Deploy the specified object.
+ *
+ * @param object The Object to be deployed.
+ * @throws InvocationTargetException Exception during object deployment.
+ * @throws IllegalAccessException Unable to invoke initialize method on object.
+ */
+ private void deployObject(final Object object) throws InvocationTargetException, IllegalAccessException
+ {
+ // Set the deployment context on the object, if specified...
+ setContext(object, object.getClass());
+ ClassUtil.execAnnotatedMethod(object, Initialize.class);
+ }
+
+ /**
+ * Set the DeploymentContext anywhere it's declared.
+ *
+ * @param object The object on which to set the context.
+ * @param hierarchyClass The class hierarchy on which to check for fields.
+ * @throws IllegalAccessException Unable to access the object field.
+ */
+ private void setContext(final Object object, final Class hierarchyClass) throws IllegalAccessException
+ {
+ // Check all the fields in this class...
+ Field[] fields = object.getClass().getDeclaredFields();
+ for (Field field : fields)
+ {
+ if (field.getType() == DeploymentContext.class)
+ {
+ ClassUtil.setFieldValue(field, object, context);
+ }
+ }
+
+ // Iterate up the inheritance hierarchy...
+ Class superClass = hierarchyClass.getSuperclass();
+ if (superClass != null)
+ {
+ setContext(object, superClass);
+ }
+ }
+
+ /**
* Assert whether or not ESB configurations have been added to this
* Runtime.
*
Modified: labs/jbossesb/workspace/skeagh/runtime/src/main/java/org/jboss/esb/deploy/config/digest/SetProperty.java
===================================================================
--- labs/jbossesb/workspace/skeagh/runtime/src/main/java/org/jboss/esb/deploy/config/digest/SetProperty.java 2008-09-01 16:07:54 UTC (rev 22295)
+++ labs/jbossesb/workspace/skeagh/runtime/src/main/java/org/jboss/esb/deploy/config/digest/SetProperty.java 2008-09-01 16:47:00 UTC (rev 22296)
@@ -27,6 +27,7 @@
import org.milyn.javabean.repository.BeanRepositoryManager;
import org.milyn.xml.DomUtils;
import org.w3c.dom.Element;
+import org.jboss.esb.classpath.ClassUtil;
import java.lang.reflect.Field;
@@ -101,21 +102,10 @@
*/
private void setPropertyValue(final Field field, final Object instance, final String value) throws IllegalAccessException
{
- boolean isAccessible = field.isAccessible();
DataDecoder decoder = DataDecoder.Factory.create(field.getType());
+ Object objValue = decoder.decode(value);
- if (!isAccessible)
- {
- field.setAccessible(true);
- }
-
- try
- {
- field.set(instance, decoder.decode(value));
- } finally
- {
- field.setAccessible(isAccessible);
- }
+ ClassUtil.setFieldValue(field, instance, objValue);
}
/**
Modified: labs/jbossesb/workspace/skeagh/runtime/src/test/java/org/jboss/esb/deploy/config/MyResource.java
===================================================================
--- labs/jbossesb/workspace/skeagh/runtime/src/test/java/org/jboss/esb/deploy/config/MyResource.java 2008-09-01 16:07:54 UTC (rev 22295)
+++ labs/jbossesb/workspace/skeagh/runtime/src/test/java/org/jboss/esb/deploy/config/MyResource.java 2008-09-01 16:47:00 UTC (rev 22296)
@@ -21,16 +21,20 @@
import org.jboss.esb.annotations.Initialize;
import org.jboss.esb.annotations.Uninitialize;
+import org.jboss.esb.context.DeploymentContext;
+import junit.framework.TestCase;
/**
* @author <a href="mailto:tom.fennelly at jboss.com">tom.fennelly at jboss.com</a>
*/
public class MyResource
{
+ private DeploymentContext context;
public static boolean initialised = false;
@Initialize
public void initialise() {
+ TestCase.assertNotNull("Deployment context should have been initialised in resource.", context);
initialised = true;
}
More information about the jboss-svn-commits
mailing list