qpid-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From agazzar...@apache.org
Subject svn commit: r735621 - in /qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management: ./ jmx/ servlet/ wsdm/capabilities/ wsdm/common/ wsdm/muse/engine/ wsdm/muse/resources/
Date Mon, 19 Jan 2009 06:56:15 GMT
Author: agazzarini
Date: Sun Jan 18 22:56:14 2009
New Revision: 735621

URL: http://svn.apache.org/viewvc?rev=735621&view=rev
Log:
QPID-1578 : WS-Resources lifecycle improved adding "destroy" feature

Removed:
    qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/ICommand.java
Modified:
    qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/Messages.java
    qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/Names.java
    qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/jmx/EntityLifecycleNotification.java
    qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/servlet/ConnectQManToBroker.java
    qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/servlet/QManLifeCycleManager.java
    qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/servlet/WSDMAdapter.java
    qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/MBeanCapability.java
    qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/MBeanCapabilityBuilder.java
    qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/QManAdapterCapability.java
    qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/WsdlBuilder.java
    qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/common/ObjectNameIdFactory.java
    qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/muse/engine/WSDMAdapterEnvironment.java
    qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/muse/resources/QManWsResource.java

Modified: qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/Messages.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/Messages.java?rev=735621&r1=735620&r2=735621&view=diff
==============================================================================
--- qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/Messages.java (original)
+++ qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/Messages.java Sun Jan 18 22:56:14 2009
@@ -62,6 +62,8 @@
 	String QMAN_000027_WSDM_ADAPTER_STARTED = "<QMAN-000027> : WS-DM Adapter ready for incoming requests.";
 	String QMAN_000028_TEST_MODULE_NOT_FOUND = "<QMAN-000028> : Qpid emulator not found. Test notifications are disabled.";
 	String QMAN_000029_DEFAULT_URI = "<QMAN-000029> : Default URI will be set to %s";
+	String QMAN_000030_RESOURCE_HAS_BEEN_CREATED =  "<QMAN-000030> : New resource instance has been created and registered. Resource id is %s";
+	String QMAN_000031_RESOURCE_HAS_BEEN_REMOVED = "<QMAN-200031> : WS-Resource %s has been removed";
 		
 	 // DEBUG
 	String QMAN_200001_INCOMING_MESSAGE_HAS_BEEN_RECEIVED = "<QMAN-200001> : New incoming message has been received. Message content is %s";
@@ -105,14 +107,15 @@
 	String QMAN_200039_DEBUG_JMX_NOTIFICATION = "<QMAN-200039> : %s";
 	String QMAN_200040_WS_ARTIFACTS_CACHED = "<QMAN-200040> : WS Artifacts has been stored on cache with the following id : %s";
 	String QMAN_200041_INCOMING_OBJECT_NAME_AND_DERIVED_KEY = "<QMAN-200041> : Incoming object name : %s, derived search key : %s";
-	
-	
+	String QMAN_200042_REMOVING_RESOURCE = "<QMAN-200042> : WS-Resource %s is going to be removed";
 	
 	// WARNING
     String QMAN_300001_MESSAGE_DISCARDED = "<QMAN-300001> : No handler has been configured for processing messages with \"%s\" as opcode. Message will be discarded.";
 	String QMAN_300002_UNKNOWN_SEQUENCE_NUMBER = "<QMAN-300002> : Unable to deal with incoming message because it contains a unknown sequence number (%s).";
     String QMAN_300003_BROKER_ALREADY_CONNECTED = "<QMAN-300003> : Unable to enlist given broker connection data : QMan is already connected with broker %s";
     String QMAN_300004_INVALID_CONFIGURATION_FILE = "<QMAN-300004> : The given configuration file (%s) is not valid (it doesn't exist or cannot be read)";
+    
+    String QMAN_300005_QEMU_INITIALIZATION_FAILURE = "<QMAN-300005> : Unable to initialize QEmu module and therefore emulation won't be enabled...";
 	
 	// ERROR
 	String QMAN_100001_BAD_MAGIC_NUMBER_FAILURE = "<QMAN-100001> : Message processing failure : incoming message contains a bad magic number (%s) and therefore will be discaded.";
@@ -138,5 +141,13 @@
 	String QMAN_100023_BUILD_WS_ARTIFACTS_FAILURE = "<QMAN-100023> : Unable to build WS artifacts.";
 	String QMAN_100024_CAPABILITY_INSTANTIATION_FAILURE = "<QMAN-100024> : Unable to instantiate generated capability class for %s.";
 	String QMAN_100025_WSRF_FAILURE = "<QMAN-100025> : Resource manager raised an exception while creating capability for %s.";	
-	String QMAN_100026_SOAP_ADDRESS_REPLACEMENT_FAILURE = "<QMAN-100026> : Exception occurred while replacing the placeholder soap address with resource actual location.";		
+	String QMAN_100026_SOAP_ADDRESS_REPLACEMENT_FAILURE = "<QMAN-100026> : Exception occurred while replacing the placeholder soap address with resource actual location.";
+	
+	//// NEW 
+	String QMAN_100027_RESOURCE_SHUTDOWN_FAILURE = "<QMAN-100027> : Shutdown failure while destroying resource %s.";
+	String QMAN_100029_MALFORMED_RESOURCE_URI_FAILURE = "<QMAN-100029> : Unable to define URI for QMan resources using \"%s\". It violates RFC 2396";
+	String QMAN_100030_JMX_CORE_STARTUP_FAILURE = "<QMAN-100030> : QMan JMX core Unexpected failure while starting up.";
+	String QMAN_100031_WS_RESOURCE_ALREADY_INITIALIZED = "<QMAN-100032> : Bad request has been received on this WS-Resource : Initialization is not possible because the resource has already been initialized.";
+	String QMAN_100032_WS_RESOURCE_NOT_YET_INITIALIZED = "<QMAN-100032> : Bad request has been received on this WS-Resource : Shutdown is not possible because the resource hasn't yet been initialized.";
+	String QMAN_100033_WS_RESOURCE_ALREADY_SHUTDOWN = "<QMAN-100033> : Bad request has been received on this WS-Resource : Shutdown is not possible because the resource has already been shutdown.";
 }
\ No newline at end of file

Modified: qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/Names.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/Names.java?rev=735621&r1=735620&r2=735621&view=diff
==============================================================================
--- qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/Names.java (original)
+++ qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/Names.java Sun Jan 18 22:56:14 2009
@@ -45,7 +45,7 @@
     public static String PACKAGE = "package";
     public static String CLASS = "class";
     public static String EVENT = "event";
-    public static String OBJECT_ID="objectID";    
+    public static String OBJECT_ID="objectId";    
     public static String BROKER_ID = "brokerID";
     public static String DOMAIN_NAME = "Q-MAN";
         
@@ -61,12 +61,34 @@
     
     public static String NOT_AVAILABLE = "N.A.";
     
+    public static ObjectName QPID_EMULATOR_OBJECT_NAME;
+    static 
+    {
+	    try 
+	    {
+	    	QPID_EMULATOR_OBJECT_NAME = new ObjectName(
+	    			new StringBuilder()
+	    				.append(DOMAIN_NAME)
+	    				.append(':')
+	    				.append("Name=Qpid,Type=Emulator")
+	    				.toString());
+	    } catch(Exception exception)
+	    {
+	    	throw new ExceptionInInitializerError(exception);
+	    }
+    }    
+    
     public static ObjectName QMAN_OBJECT_NAME;
     static 
     {
 	    try 
 	    {
-	    	QMAN_OBJECT_NAME = new ObjectName(new StringBuilder().append(DOMAIN_NAME).append(':').append("Type=Service").toString());
+	    	QMAN_OBJECT_NAME = new ObjectName(
+	    			new StringBuilder()
+	    				.append(DOMAIN_NAME)
+	    				.append(':')
+	    				.append("Type=Service")
+	    				.toString());
 	    } catch(Exception exception)
 	    {
 	    	throw new ExceptionInInitializerError(exception);
@@ -75,8 +97,13 @@
     
     // WSDM Stuff
     public static String NAMESPACE_URI = "http://amqp.apache.org/qpid/management/qman";
+    public static String ADDRESSING_URI = "http://amqp.apache.org/qpid/management/qman/addressing";
+    public static String ADDRESSING_PREFIX = "qman-wsa";
+    
+    public static final QName RESOURCE_ID_QNAME = new QName(ADDRESSING_URI, "ResourceId", ADDRESSING_PREFIX);   
 	public final static String PREFIX = "qman";
 	public final static String QMAN_RESOURCE_NAME = "QManWsResource";
+	
     public final static String VALIDATE_WSRP_PARAM = "validate-wsrp-schema";
 
     public static final String WEB_APP_CLASSES_FOLDER = "/WEB-INF/classes";

Modified: qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/jmx/EntityLifecycleNotification.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/jmx/EntityLifecycleNotification.java?rev=735621&r1=735620&r2=735621&view=diff
==============================================================================
--- qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/jmx/EntityLifecycleNotification.java (original)
+++ qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/jmx/EntityLifecycleNotification.java Sun Jan 18 22:56:14 2009
@@ -46,8 +46,8 @@
 	public static final String SCHEMA_REQUESTED = "org.apache.qpid.management.lifecycle.entity.schema.requested";
 	public static final String MALFORMED_SCHEMA = "org.apache.qpid.management.lifecycle.error.schema";
 	
-	public static final String INSTANCE_ADDED = "org.apache.qpid.management.lifecycle.entity.instance.created";
-	public static final String INSTANCE_REMOVED = "org.apache.qpid.management.lifecycle.entity.instance.removed";
+	public static final String INSTANCE_ADDED = "qman.lifecycle.entity.instance.created";
+	public static final String INSTANCE_REMOVED = "qman.lifecycle.entity.instance.removed";
 	
 	private String _packageName = Names.NOT_AVAILABLE;
 	private String _className = Names.NOT_AVAILABLE;

Modified: qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/servlet/ConnectQManToBroker.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/servlet/ConnectQManToBroker.java?rev=735621&r1=735620&r2=735621&view=diff
==============================================================================
--- qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/servlet/ConnectQManToBroker.java (original)
+++ qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/servlet/ConnectQManToBroker.java Sun Jan 18 22:56:14 2009
@@ -69,6 +69,14 @@
 		}
 	}
 	
+	/**
+	 * This is a startup module only so an override of the default servlet 
+	 * behaviour must be done in order to prevent incoming http requests processing.
+	 * 
+	 * @param request the http request.
+	 * @param response the http response.
+	 * @throws ServletException each time this method is called.
+	 */
 	@Override
 	public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException
 	{

Modified: qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/servlet/QManLifeCycleManager.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/servlet/QManLifeCycleManager.java?rev=735621&r1=735620&r2=735621&view=diff
==============================================================================
--- qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/servlet/QManLifeCycleManager.java (original)
+++ qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/servlet/QManLifeCycleManager.java Sun Jan 18 22:56:14 2009
@@ -24,34 +24,24 @@
 import javax.servlet.ServletContextEvent;
 import javax.servlet.ServletContextListener;
 
+import org.apache.qpid.management.Messages;
 import org.apache.qpid.management.Names;
 import org.apache.qpid.management.domain.services.QMan;
 import org.apache.qpid.management.domain.services.StartupFailureException;
+import org.apache.qpid.transport.util.Logger;
 
 /**
- * QMan lifecycle management.
+ * QMan JMX lifecycle manager.
+ * Provides lifecycle management of QMan JMX core including startup and shutdown. 
  * 
  * @author Andrea Gazzarini
  */
 public class QManLifeCycleManager implements ServletContextListener 
 {
+	private final static Logger LOGGER = Logger.get(QManLifeCycleManager.class);
+	
 	/**
-	 * Stops QMan.
-	 * 
-	 * @param event the application context event.
-	 */
-	public void contextDestroyed(ServletContextEvent event) 
-	{
-		ServletContext context = event.getServletContext();
-		
-		QMan qman = (QMan) context.getAttribute(Names.APPLICATION_NAME);		
-		qman.stop();
-		
-		context.setAttribute(Names.APPLICATION_NAME, qman);
-	}
-
-	/**
-	 * Starts QMan.
+	 * Starts QMan JMX Core.
 	 * 
 	 * @param event the application context event.
 	 */
@@ -61,12 +51,29 @@
 		{
 			QMan qman = new QMan();
 			qman.start();
-
-			event.getServletContext().setAttribute(Names.APPLICATION_NAME, qman);
+			event.getServletContext().setAttribute(
+					Names.APPLICATION_NAME, 
+					qman);
 		} catch (StartupFailureException exception) 
 		{
-			// TODO : LOG ERROR.
-			exception.printStackTrace();
+			LOGGER.error(
+					exception, 
+					Messages.QMAN_100030_JMX_CORE_STARTUP_FAILURE);
 		}
 	}
+	
+	/**
+	 * Sutdown QMan JMX Core.
+	 * 
+	 * @param event the application context event.
+	 */
+	public void contextDestroyed(ServletContextEvent event) 
+	{
+		ServletContext context = event.getServletContext();
+		
+		QMan qman = (QMan) context.getAttribute(Names.APPLICATION_NAME);		
+		qman.stop();
+		
+		context.removeAttribute(Names.APPLICATION_NAME);
+	}	
 }
\ No newline at end of file

Modified: qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/servlet/WSDMAdapter.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/servlet/WSDMAdapter.java?rev=735621&r1=735620&r2=735621&view=diff
==============================================================================
--- qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/servlet/WSDMAdapter.java (original)
+++ qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/servlet/WSDMAdapter.java Sun Jan 18 22:56:14 2009
@@ -51,9 +51,15 @@
 	
 	@Override
 	public void init() throws ServletException {
-		_isolationLayer = new WSDMAdapterIsolationLayer(getServletContext());
+        LOGGER.debug(Messages.QMAN_000026_WSDM_ADAPTER_STARTS);
+        
+        
+        _isolationLayer = new WSDMAdapterIsolationLayer(getServletContext());
         _isolationLayer.initialize();
-	}
+        
+        LOGGER.debug(Messages.QMAN_000027_WSDM_ADAPTER_STARTED);
+        
+ 	}
 	
 	/**
 	 * Accepts http requests containing a soap envelope (request) and therefore
@@ -92,23 +98,11 @@
 			writer.flush();	
 			
 			XmlDebugger.debug(soapEnvelopeRequest);
-			XmlDebugger.debug(soapEnvelopeResposeAsString);
-		}
-	}
-
-	/**
-	 * Stops QMan Adapter.
-	 */
-	public void destroy() 
-	{
-		try 
-		{
-			_isolationLayer.shutdown();
-		} catch (Exception exception) 
-		{
-			LOGGER.error(
-					exception, 
-					Messages.QMAN_100022_ISOLATION_LAYER_SHUTDOWN_FAILURE);
+			try {
+				XmlDebugger.debug(soapEnvelopeResposeAsString);
+			} catch(Exception exception) {
+				System.out.println("Unable to parse response.");
+			}
 		}
 	}
 }
\ No newline at end of file

Modified: qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/MBeanCapability.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/MBeanCapability.java?rev=735621&r1=735620&r2=735621&view=diff
==============================================================================
--- qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/MBeanCapability.java (original)
+++ qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/MBeanCapability.java Sun Jan 18 22:56:14 2009
@@ -160,13 +160,12 @@
 	 * 
 	 * @param name
 	 * @param value
-	 * TODO TODO TODO!!! Vedi che poi fà co 'sto metodo che è un pò una monnezza!!!
+	 * TODO : Vedi che poi fà co 'sto metodo che è un pò una monnezza!!!
 	 * @return The XML representation of the resource property value(s).
 	 * 
 	 */
 	@SuppressWarnings("unchecked")
-	protected Element[] getPropertyElements(QName name, Object value)
-			throws BaseFault {
+	protected Element[] getPropertyElements(QName name, Object value) throws BaseFault {
 		//
 		// in this case, we have to determine if there IS a property
 		// and it's null, or there is no property
@@ -226,19 +225,20 @@
 		Serializer ser = registry.getSerializer(type);
 
 		for (int n = 0; n < length; ++n)
+		{
 			properties[n] = serializeValue(ser, Array.get(valuesArray, n), name);
-
+		}
 		return properties;
 	}
 
 	private Element serializeValue(Serializer ser, Object value, QName name) throws BaseFault 
 	{
-		try {
+		try 
+		{
 			return ser.toXML(value, name);
-		}
-
-		catch (SoapFault error) {
-			throw WsbfUtils.convertToFault(error);
+		} catch (SoapFault exception) 
+		{
+			throw WsbfUtils.convertToFault(exception);
 		}
 	}
 }
\ No newline at end of file

Modified: qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/MBeanCapabilityBuilder.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/MBeanCapabilityBuilder.java?rev=735621&r1=735620&r2=735621&view=diff
==============================================================================
--- qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/MBeanCapabilityBuilder.java (original)
+++ qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/MBeanCapabilityBuilder.java Sun Jan 18 22:56:14 2009
@@ -101,7 +101,6 @@
 			}		
 		} catch(Exception exception)
 		{
-			System.err.println(buffer);
 			throw new BuilderException(exception);
 		}
 	}
@@ -133,7 +132,7 @@
 	
 	public void onOperation(MBeanOperationInfo operation) 
 	{
-		// TODO
+		// TODO : operation on mbean capability
 	}
 
 	public Class<MBeanCapability> getCapabilityClass() 
@@ -157,7 +156,6 @@
 			_capabilityClassDefinition.addMethod(getPropertyNames);
 		} catch(Exception exception) 
 		{ 
-			System.err.println(_properties);
 			throw new BuilderException(exception);
 		}
 	}
@@ -167,7 +165,10 @@
 	{
 		try 
 		{
-			_capabilityClass = _capabilityClassDefinition.toClass();
+			// Class loader and protection domain are needed for Qpid emulation.
+			_capabilityClass = _capabilityClassDefinition.toClass(
+					QManAdapterCapability.class.getClassLoader(),
+					QManAdapterCapability.class.getProtectionDomain());
 		} catch (Exception exception) 
 		{
 			throw new BuilderException(exception);

Modified: qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/QManAdapterCapability.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/QManAdapterCapability.java?rev=735621&r1=735620&r2=735621&view=diff
==============================================================================
--- qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/QManAdapterCapability.java (original)
+++ qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/QManAdapterCapability.java Sun Jan 18 22:56:14 2009
@@ -21,11 +21,12 @@
 package org.apache.qpid.management.wsdm.capabilities;
 
 import java.lang.management.ManagementFactory;
+import java.net.URI;
 
 import javax.management.InstanceNotFoundException;
 import javax.management.MBeanServer;
 import javax.management.Notification;
-import javax.management.NotificationFilterSupport;
+import javax.management.NotificationFilter;
 import javax.management.NotificationListener;
 import javax.management.ObjectName;
 
@@ -33,35 +34,51 @@
 import org.apache.muse.core.Resource;
 import org.apache.muse.core.ResourceManager;
 import org.apache.muse.core.serializer.SerializerRegistry;
+import org.apache.muse.ws.addressing.EndpointReference;
 import org.apache.muse.ws.addressing.soap.SoapFault;
 import org.apache.qpid.management.Messages;
 import org.apache.qpid.management.Names;
 import org.apache.qpid.management.jmx.EntityLifecycleNotification;
 import org.apache.qpid.management.wsdm.common.ThreadSessionManager;
+import org.apache.qpid.management.wsdm.muse.engine.WSDMAdapterEnvironment;
 import org.apache.qpid.management.wsdm.muse.serializer.ByteArraySerializer;
 import org.apache.qpid.transport.util.Logger;
 
 /**
- * MBean Server capabilty interface implementor.
- * Providers all the operations of the MBeanServer interface using the platform MBeanServer.
+ * QMan Adapter capability.
+ * Basically it acts as a lifecycle manager of all ws resource that correspond to entities on JMX side.
+ * 
+ * @author Andrea Gazzarini
 */
 public class QManAdapterCapability extends AbstractCapability
 {	
-	private MBeanServer _mxServer;
 	private final static Logger LOGGER = Logger.get(QManAdapterCapability.class);
-	
+
+	private MBeanServer _mxServer;
 	private WsArtifactsFactory _artifactsFactory; 
+	private URI _resourceURI;
 	
+	/**
+	 * This listener handles "create" mbean events and therefore provides procedure to create and initialize
+	 * corresponding ws resources.
+	 */
 	private final NotificationListener listenerForNewInstances = new NotificationListener() 
 	{
+		/**
+		 * Handles JMX "create" notification type.
+		 * 
+		 * @param notification the entity lifecycle notification.
+		 * @param data user data associated with the incoming notifiication : it is not used at the moment.
+		 */
 		public void handleNotification(Notification notification, Object data) 
 		{
-			EntityLifecycleNotification lifecycleNotification = (EntityLifecycleNotification) notification;
-			ObjectName eventSourceName = lifecycleNotification.getObjectName();
-			ThreadSessionManager.getInstance().getSession().setObjectName(eventSourceName);
-			
+			ObjectName eventSourceName = null;
 			try 
-			{
+			{				
+				EntityLifecycleNotification lifecycleNotification = (EntityLifecycleNotification) notification;
+				eventSourceName = lifecycleNotification.getObjectName();
+				ThreadSessionManager.getInstance().getSession().setObjectName(eventSourceName);
+			
 				LOGGER.debug(Messages.QMAN_200039_DEBUG_JMX_NOTIFICATION, notification);
 
 				ResourceManager resourceManager = getResource().getResourceManager();
@@ -72,42 +89,91 @@
 						artifacts.getCapabilityClass(), 
 						eventSourceName);
 				
-				
 				ThreadSessionManager.getInstance().getSession().setWsdlDocument(artifacts.getWsdl());
 				ThreadSessionManager.getInstance().getSession().setResourceMetadataDescriptor(artifacts.getResourceMetadataDescriptor());
 				
-//				ResourceManager resourceManager = getResource().getResourceManager();
-//				
-//				Resource resource = resourceManager.createResource(Names.QMAN_RESOURCE_NAME);
-//				resource.setWsdlPortType(Names.QMAN_RESOURCE_PORT_TYPE_NAME);
+				resource.setWsdlPortType(Names.QMAN_RESOURCE_PORT_TYPE_NAME);
+				capability.setCapabilityURI(Names.NAMESPACE_URI+"/"+capability.getClass().getSimpleName());
 				resource.addCapability(capability);
 				resource.initialize();
 				resourceManager.addResource(resource.getEndpointReference(), resource);
+				
+				LOGGER.info(
+						Messages.QMAN_000030_RESOURCE_HAS_BEEN_CREATED,
+						eventSourceName);
 			} catch (ArtifactsNotAvailableException exception) 
 			{
-				LOGGER.error(exception,Messages.QMAN_100023_BUILD_WS_ARTIFACTS_FAILURE);
+				LOGGER.error(
+						exception,
+						Messages.QMAN_100023_BUILD_WS_ARTIFACTS_FAILURE);
 			} catch (IllegalAccessException exception) 
 			{
-				LOGGER.error(exception,Messages.QMAN_100024_CAPABILITY_INSTANTIATION_FAILURE,eventSourceName);
+				LOGGER.error(
+						exception,
+						Messages.QMAN_100024_CAPABILITY_INSTANTIATION_FAILURE,
+						eventSourceName);
 			} catch (InstantiationException exception) 
 			{
-				LOGGER.error(exception,Messages.QMAN_100024_CAPABILITY_INSTANTIATION_FAILURE,eventSourceName);
+				LOGGER.error(
+						exception,
+						Messages.QMAN_100024_CAPABILITY_INSTANTIATION_FAILURE,
+						eventSourceName);
 			} catch (SoapFault exception) 
 			{
-				LOGGER.error(exception,Messages.QMAN_100025_WSRF_FAILURE,eventSourceName);	
+				LOGGER.error(
+						exception,Messages.QMAN_100025_WSRF_FAILURE,
+						eventSourceName);	
 			} catch (Exception exception) 
 			{
-				LOGGER.error(exception,Messages.QMAN_100025_WSRF_FAILURE,eventSourceName);	
+				LOGGER.error(
+						exception,
+						Messages.QMAN_100025_WSRF_FAILURE,
+						eventSourceName);	
 			} 
-
 		}
 	};
 	
+	/**
+	 * This listener handles "remove" mbean events and therefore provides procedure to shutdown and remove
+	 * corresponding ws resources.
+	 */
 	private final NotificationListener listenerForRemovedInstances = new NotificationListener() 
 	{
+		/**
+		 * Handles JMX "remove" notification type.
+		 * 
+		 * @param notification the entity lifecycle notification.
+		 * @param data user data associated with the incoming notifiication : it is not used at the moment.
+		 */
 		public void handleNotification(Notification notification, Object data) 
 		{
-			LOGGER.warn("TBD : Notification Listener for removed instances has not yet implemeted!");
+			EntityLifecycleNotification lifecycleNotification = (EntityLifecycleNotification) notification;
+			ObjectName eventSourceName = lifecycleNotification.getObjectName();
+
+			LOGGER.debug(Messages.QMAN_200042_REMOVING_RESOURCE, eventSourceName);
+
+			EndpointReference endpointPointReference = new EndpointReference(_resourceURI);			
+			endpointPointReference.addParameter(
+					Names.RESOURCE_ID_QNAME, 
+					eventSourceName.getCanonicalName());
+			
+			ResourceManager resourceManager = getResource().getResourceManager();
+			try 
+			{
+				Resource resource = resourceManager.getResource(endpointPointReference);
+				resource.shutdown();
+				
+				LOGGER.info(
+						Messages.QMAN_000031_RESOURCE_HAS_BEEN_REMOVED, 
+						eventSourceName);
+			}
+			catch(Exception exception) 
+			{
+				LOGGER.error(
+						exception, 
+						Messages.QMAN_100027_RESOURCE_SHUTDOWN_FAILURE, 
+						eventSourceName);
+			}
 		}
 	};	
 			
@@ -120,24 +186,71 @@
 		// What is the stringified name of the class? byte[].getClass().getName() is [B but is not working (ClassNotFound).
 		// So, at the end, this is hard-coded here!
 		SerializerRegistry.getInstance().registerSerializer(byte[].class, new ByteArraySerializer());
-		
+		WSDMAdapterEnvironment environment = (WSDMAdapterEnvironment) getEnvironment();
+		String resourceURI = environment.getDefaultURIPrefix()+Names.QMAN_RESOURCE_NAME;
 		try 
 		{
+			_resourceURI = URI.create(resourceURI);
+			
 			_mxServer = ManagementFactory.getPlatformMBeanServer();
 			_artifactsFactory = new WsArtifactsFactory(getEnvironment(),_mxServer);
 			
-			NotificationFilterSupport filterForNewInstances = new NotificationFilterSupport();
-			filterForNewInstances.enableType(EntityLifecycleNotification.INSTANCE_ADDED);
-			
-			NotificationFilterSupport filterForRemovedInstances = new NotificationFilterSupport();
-			filterForNewInstances.enableType(EntityLifecycleNotification.INSTANCE_REMOVED);
+			/**
+			 * NotificationFilter for "create" only events.
+			 */
+			NotificationFilter filterForNewInstances = new NotificationFilter(){
+
+				private static final long serialVersionUID = 1733325390964454595L;
+
+				public boolean isNotificationEnabled(Notification notification)
+				{
+					return EntityLifecycleNotification.INSTANCE_ADDED.equals(notification.getType());
+				}
+				
+			};
+
+			/**
+			 * NotificationFilter for "remove" only events.
+			 */
+			NotificationFilter filterForRemovedInstances = new NotificationFilter(){
+
+				private static final long serialVersionUID = 1733325390964454595L;
+
+				public boolean isNotificationEnabled(Notification notification)
+				{
+					return EntityLifecycleNotification.INSTANCE_REMOVED.equals(notification.getType());
+				}
+				
+			};
 			
-			_mxServer.addNotificationListener(Names.QMAN_OBJECT_NAME, listenerForNewInstances, filterForNewInstances, null);
-			_mxServer.addNotificationListener(Names.QMAN_OBJECT_NAME, listenerForRemovedInstances, filterForRemovedInstances, null);
+			_mxServer.addNotificationListener(
+					Names.QMAN_OBJECT_NAME, 
+					listenerForNewInstances, 
+					filterForNewInstances, 
+					null);
+			
+			_mxServer.addNotificationListener(
+					Names.QMAN_OBJECT_NAME, 
+					listenerForRemovedInstances, 
+					filterForRemovedInstances, 
+					null);
 
 			try {
-				_mxServer.addNotificationListener(new ObjectName("A:A=1"), listenerForNewInstances, filterForNewInstances, null);
-			} catch (Exception exception) {
+				_mxServer.addNotificationListener(
+						Names.QPID_EMULATOR_OBJECT_NAME, 
+						listenerForNewInstances, 
+						filterForNewInstances, null);
+
+				_mxServer.addNotificationListener(
+						Names.QPID_EMULATOR_OBJECT_NAME, 
+						listenerForRemovedInstances, 
+						filterForRemovedInstances, null);
+
+			} catch(IllegalArgumentException exception)
+			{
+				LOGGER.info(exception,Messages.QMAN_000029_DEFAULT_URI,resourceURI);				
+			}
+			catch (Exception exception) {
 				LOGGER.info(Messages.QMAN_000028_TEST_MODULE_NOT_FOUND);
 			} 
 			

Modified: qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/WsdlBuilder.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/WsdlBuilder.java?rev=735621&r1=735620&r2=735621&view=diff
==============================================================================
--- qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/WsdlBuilder.java (original)
+++ qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/WsdlBuilder.java Sun Jan 18 22:56:14 2009
@@ -155,17 +155,17 @@
 	
 	public void onOperation(MBeanOperationInfo operation) 
 	{
-		// TODO
+		// TODO : Operations on wsdl
 	}
 
 	public void endAttributes() 
 	{
-		// TODO
+		// N.A.
 	}
 
 	public void endOperations() 
 	{
-		// TODO
+		// N.A.
 	}
 
 	public Document getWsdl() 
@@ -184,9 +184,10 @@
 		_document = WsdlUtils.createWSDL(_environment, wsdlPath, true);
 		try 
 		{
-			Attr location = (Attr) XPathAPI.selectSingleNode(_document, "/wsdl:definitions/wsdl:service/wsdl:port/wsdl-soap:address/@location");
+			Attr location = (Attr) XPathAPI.selectSingleNode(
+					_document, 
+					"/wsdl:definitions/wsdl:service/wsdl:port/wsdl-soap:address/@location");
 					
-			// TODO : come faccio a recuperare l'URL sul quale gira l'applicazione?
 			StringBuilder builder = new StringBuilder("http://")
 				.append(InetAddress.getLocalHost().getHostName())
 				.append(':')
@@ -198,7 +199,9 @@
 			location.setValue(builder.toString());
 		} catch(Exception exception)
 		{
-			LOGGER.error(exception,Messages.QMAN_100026_SOAP_ADDRESS_REPLACEMENT_FAILURE);
+			LOGGER.error(
+					exception,
+					Messages.QMAN_100026_SOAP_ADDRESS_REPLACEMENT_FAILURE);
 		}
 	}
 }

Modified: qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/common/ObjectNameIdFactory.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/common/ObjectNameIdFactory.java?rev=735621&r1=735620&r2=735621&view=diff
==============================================================================
--- qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/common/ObjectNameIdFactory.java (original)
+++ qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/common/ObjectNameIdFactory.java Sun Jan 18 22:56:14 2009
@@ -23,19 +23,26 @@
 import javax.xml.namespace.QName;
 
 import org.apache.muse.core.routing.ResourceIdFactory;
-import org.apache.muse.ws.addressing.WsaConstants;
+import org.apache.qpid.management.Names;
 
 /**
  * ResourceIdFactory implementation that is using an objectName as 
  * resource identifier.
+ * This is done in order to make a relationship between an MBean (which is part of the
+ * JMX core domain model) and a WS-Resource (the same entity as is represented on WS-DM adapter side).
  * 
  * @author Andrea Gazzarini
  */
 public class ObjectNameIdFactory implements ResourceIdFactory 
 {
+	/**
+	 * Returns the name of the identifier element.
+	 * 
+	 *  @return the name of the identifier element.
+	 */
 	public QName getIdentifierName() 
 	{
-		return WsaConstants.DEFAULT_RESOURCE_ID_QNAME;
+		return Names.RESOURCE_ID_QNAME;
     }
 
 	/**

Modified: qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/muse/engine/WSDMAdapterEnvironment.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/muse/engine/WSDMAdapterEnvironment.java?rev=735621&r1=735620&r2=735621&view=diff
==============================================================================
--- qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/muse/engine/WSDMAdapterEnvironment.java (original)
+++ qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/muse/engine/WSDMAdapterEnvironment.java Sun Jan 18 22:56:14 2009
@@ -23,7 +23,8 @@
 {
 	private final static Logger LOGGER = Logger.get(WSDMAdapterEnvironment.class);
 	private final File _realDirectory;
-    
+    private final ServletContext _servletContext;
+	
     /**
      * Builds a new qman environment with the given application context.
      *  
@@ -31,32 +32,17 @@
      */
     public WSDMAdapterEnvironment(ServletContext servletContext)
     {
-        String realDirectoryPath = servletContext.getRealPath(Names.WEB_APP_CLASSES_FOLDER);
+    	this._servletContext = servletContext;
+    	String realDirectoryPath = servletContext.getRealPath(Names.WEB_APP_CLASSES_FOLDER);
         
         _realDirectory = (realDirectoryPath != null) 
         	? new File(realDirectoryPath) 
         	: FileUtils.CURRENT_DIR;
-
-        String host = null;
-   
-        try {
-			host = InetAddress.getLocalHost().getHostName();
-		} catch (UnknownHostException e) {
-			host = "localhost";
-		}
         	
-        String defaultURI = new StringBuilder()
-        	.append("http://")
-        	.append(host)
-        	.append(":")
-        	.append(System.getProperty(Names.ADAPTER_PORT))
-        	.append(servletContext.getContextPath())
-        	.append("/services/adapter")
-        	.toString();
+        String defaultURI = getDefaultURIPrefix()+"adapter";
+        setDefaultURI(defaultURI);
         
         LOGGER.info(Messages.QMAN_000029_DEFAULT_URI, defaultURI);
-        
-        setDefaultURI(defaultURI);
     }
     
     /**
@@ -78,4 +64,23 @@
     {
         return _realDirectory;
     }
+    
+    public String getDefaultURIPrefix()
+    {
+    	String host = null;
+    	  try {
+  			host = InetAddress.getLocalHost().getHostName();
+  		} catch (UnknownHostException e) {
+  			host = "localhost";
+  		}
+  		
+        return new StringBuilder()
+    		.append("http://")
+    		.append(host)
+    		.append(":")
+    		.append(System.getProperty(Names.ADAPTER_PORT))
+    		.append(_servletContext.getContextPath())
+    		.append("/services/")
+    		.toString();    	
+    }
 }
\ No newline at end of file

Modified: qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/muse/resources/QManWsResource.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/muse/resources/QManWsResource.java?rev=735621&r1=735620&r2=735621&view=diff
==============================================================================
--- qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/muse/resources/QManWsResource.java (original)
+++ qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/muse/resources/QManWsResource.java Sun Jan 18 22:56:14 2009
@@ -52,7 +52,6 @@
 import org.apache.muse.ws.resource.properties.schema.impl.SimpleResourcePropertiesSchema;
 import org.apache.muse.ws.wsdl.WsdlUtils;
 import org.apache.qpid.management.Messages;
-import org.apache.qpid.management.Names;
 import org.apache.qpid.management.wsdm.common.ThreadSessionManager;
 import org.apache.qpid.transport.util.Logger;
 import org.w3c.dom.Document;
@@ -60,26 +59,215 @@
 
 /**
  * QMan WS resource.
- * This is the WS Resource wrapper of a QMan managed entity.
+ * We could say that this is a QMan manageable entity under the 
+ * WS-DM perspective.
  * 
  * @author Andrea Gazzarini
- * TODO :Refactoring :: use STATE Pattern!
  */
 @SuppressWarnings("unchecked")
 public class QManWsResource implements WsResource
 {    
 	private final static Logger LOGGER = Logger.get(QManWsResource.class);
+		
+	/**
+	 * Internal state of this resource.
+	 * 
+	 * @author Andrea Gazzarini
+	 */
+	interface State 
+	{
+		/**
+		 * Provides initialization of this resource.
+		 * 
+		 * @throws SoapFault when the initialization fails.
+		 */
+		void initialize() throws SoapFault;
+		
+		/**
+		 * Returns true if this resource has been initialized.
+		 * 
+		 * @return true if this resource has been initialized.
+		 */
+		boolean hasBeenInitialized();
+		
+		/**
+		 * Returns true if this resource has been shutdown.
+		 * 
+		 * @return true if this resource has been shutdown.
+		 */
+		boolean hasBeenShutdown();
+		
+		/**
+		 * Shuts down this resource.
+		 * 
+		 * @throws SoapFault when the shutdown procedure fails.
+		 */
+		void shutdown() throws SoapFault;		
+	}
 	
-	// Utility class for logging.
-	private final static class Log {
-		static void debugElement(String message,Element element) 
+	private final State _hasBeenShutdown = new State()
+	{
+		/**
+		 * Return false because this resource has been shutdown so therefore 
+		 * initialization occurred.
+		 * 
+		 * @return true;
+		 */
+		public boolean hasBeenInitialized()
 		{
-			if (LOGGER.isDebugEnabled())
-			{
-				LOGGER.debug(message, XmlUtils.toString(element));
-			}
+			return true;
 		}
-	}
+
+		/**
+		 * Returns true because this state indicates that resource has been shutdown.
+		 * 
+		 * @return true.
+		 */
+		public boolean hasBeenShutdown()
+		{
+			return true;
+		}
+
+		/**
+		 * Since this resource has been shutdown the initialization
+		 * cannot be performed again.
+		 * As conseguence of that this method throws an exception.
+		 * 
+		 * @throws SoapFault each time this method is called.
+		 */
+		public void initialize() throws SoapFault
+		{
+			LOGGER.error(Messages.QMAN_100031_WS_RESOURCE_ALREADY_INITIALIZED);
+			throw new SoapFault(Messages.QMAN_100031_WS_RESOURCE_ALREADY_INITIALIZED);
+		}
+
+		public void shutdown() throws SoapFault
+		{
+			LOGGER.error(Messages.QMAN_100033_WS_RESOURCE_ALREADY_SHUTDOWN);
+			throw new SoapFault(Messages.QMAN_100033_WS_RESOURCE_ALREADY_SHUTDOWN);			
+		}
+	};
+	
+	private final State _hasBeenInitialized = new State()
+	{
+		/**
+		 * Returns true because this is the state where a resource is when it 
+		 * has been initialized.
+		 * 
+		 * @return true.
+		 */
+		public boolean hasBeenInitialized()
+		{
+			return true;
+		}
+
+		/**
+		 * Returns false because this resource has been initialized but no shutdown request
+		 * has been received.
+		 * 
+		 * @return false.
+		 */
+		public boolean hasBeenShutdown()
+		{
+			return false;
+		}
+
+		/**
+		 * A resource in this state cannot be initialized again so if this method is called an
+		 * exception is thrown.
+		 * 
+		 * @throws SoapFault each time this method is called.
+		 */
+		public void initialize() throws SoapFault
+		{
+			LOGGER.error(Messages.QMAN_100031_WS_RESOURCE_ALREADY_INITIALIZED);
+			throw new SoapFault(Messages.QMAN_100031_WS_RESOURCE_ALREADY_INITIALIZED);
+		}
+		
+		/**
+		 * Shuts down this resource.
+		 * 
+		 * @throws SoapFault when the shutdown procedure fails.
+		 */
+		public void shutdown() throws SoapFault 
+		{
+	        shutdownCapabilities();
+            
+	        ResourceManager manager = getResourceManager();
+	        
+	        if (manager.getResource(_enpointReference) != null)
+	        {
+	            manager.removeResource(_enpointReference);
+	        }
+	        
+	        _currentState = _hasBeenShutdown;
+		}		
+	};
+	
+	/**
+	 * The initial state of this resource.
+	 * As the name suggests, it is not yet initialized.
+	 */
+	private final State _notYetInitialized = new State() 
+	{
+		/**
+		 * Provides initialization of this resource.
+		 * 
+		 * @throws SoapFault when the initialization fails.
+		 */
+		public void initialize() throws SoapFault
+		{
+	        _properties = new SimpleResourcePropertyCollection();
+	        _wsdl = ThreadSessionManager.getInstance().getSession().getWsdlDocument();
+	        
+	        ResourcePropertiesSchema schema = createPropertiesSchema(_wsdl);
+	        _properties.setSchema(schema);
+	      
+	        MetadataDescriptor metadata = createMetadataDescriptor(_wsdl);
+	        _properties.setMetadata(metadata);
+	                
+	        initializeCapabilities();
+	        	        
+	        _properties.applyMetadata();
+	        _properties.validateMetadata();
+	        
+	        // Resource intialization completed : Let's make a state change.
+	        _currentState = _hasBeenInitialized;
+		}
+
+		/**
+		 * Shuts down this resource.
+		 * 
+		 * @throws SoapFault when the shutdown procedure fails.		 */
+		public void shutdown() throws SoapFault
+		{
+			LOGGER.error(Messages.QMAN_100032_WS_RESOURCE_NOT_YET_INITIALIZED);
+			throw new SoapFault(Messages.QMAN_100032_WS_RESOURCE_NOT_YET_INITIALIZED);			
+		}
+		
+		/**
+		 * Returns false because this state indicates that 
+		 * the resource has not yet been initialized.
+		 * 
+		 * @return false;
+		 */
+		public boolean hasBeenInitialized()
+		{
+			return false;
+		}
+
+		/**
+		 * Returns false because the resource, when is in this state 
+		 * hasn't been initialized and as conseguence of that hasn't 
+		 * been shutdonm.
+		 * 
+		 * @return false;
+		 */
+		public boolean hasBeenShutdown()
+		{
+			return false;
+		}
+	};
 	
     private Map<String,Capability>  _capabilitiesByAction = new HashMap<String, Capability>();
     private Map<String, Capability> _capabilitiesByURI = new LinkedHashMap<String, Capability>();
@@ -88,14 +276,15 @@
     private Environment _environment;    
     private EndpointReference _enpointReference;
     
-    private boolean _hasBeenInitialized;
-    private boolean _hasBeenShutdown;
+    private State _currentState = _notYetInitialized;
     
     private ResourceManager _resourceManager;
     private ResourcePropertyCollection _properties;
 
     private Map<String,String> _initParameters = Collections.EMPTY_MAP;
     
+    // Workaround : muse is using and hardcoded java.util.logging.Logger but we should use 
+    // SLF4j so this is the original implementatation that won't never be used (on QMan classes)
     private java.util.logging.Logger _logger;
     
     private Document _wsdl;    
@@ -116,7 +305,10 @@
         String uri = capability.getCapabilityURI();
         _capabilitiesByURI.put(uri, capability);
         
-        LOGGER.debug(Messages.QMAN_200033_CAPABILITY_CLASS_HAS_BEEN_ADDED, capability.getClass(),uri);
+        LOGGER.debug(
+        		Messages.QMAN_200033_CAPABILITY_CLASS_HAS_BEEN_ADDED, 
+        		capability.getClass(),
+        		uri);
     }
     
     /**
@@ -124,31 +316,20 @@
      * 
      * @return the capability associated with the given URI.
      */
-    public final Capability getCapability(String capabilityURI)
+    public Capability getCapability(String capabilityURI)
     {
         return _capabilitiesByURI.get(capabilityURI);
     }
     
-    /**
-     * Returns all the WS-Action URIs supported by this resource.
-     * 
-     * @return all of the WS-A Action URIs supported by this resource.
-     */
-    protected Collection getCapabilityActions()
-    {
-        return Collections.unmodifiableSet(_capabilitiesByAction.keySet());
-    }
-    
-    /**
-     * Returns the capability associated with the given action.
-     * 
-     * @param action the wsa:action of the requested capability.
-     * @return the capability associated with the given action.
-     */
-    protected Capability getCapabilityForAction(String action)
-    {
-        return (Capability)_capabilitiesByAction.get(action);
-    }
+//    /**
+//     * Returns all the WS-Action URIs supported by this resource.
+//     * 
+//     * @return all of the WS-A Action URIs supported by this resource.
+//     */
+//    protected Collection getCapabilityActions()
+//    {
+//        return Collections.unmodifiableSet(_capabilitiesByAction.keySet());
+//    }
     
     /**
      * Returns a collection with all registered capability URIs.
@@ -258,7 +439,7 @@
      */
     public final boolean hasBeenInitialized()
     {
-        return _hasBeenInitialized;
+        return _currentState.hasBeenInitialized();
     }
     
     /**
@@ -268,7 +449,7 @@
      */
     public final boolean hasBeenShutdown()
     {
-        return _hasBeenShutdown;
+        return _currentState.hasBeenShutdown();
     }
     
     /**
@@ -282,62 +463,6 @@
     }
     
     /**
-     * Creates a metadata descriptor for this resource.
-     * 
-     * @param wsdl the WSDL document. 
-     * @return a metadata descriptor for this resource.
-     * @throws SoapFault when it's not possible build the descriptor.
-     */
-    protected MetadataDescriptor createMetadataDescriptor(Document wsdl) throws SoapFault
-    {
-        try 
-        {    	
-	        Element portTypeXML = WsdlUtils.getPortType(wsdl, getWsdlPortType());
-	        
-	        String rmdName = XmlUtils.getAttribute(portTypeXML, WsrmdConstants.DESCRIPTOR_ATTR_QNAME);
-	        String rmdPath = XmlUtils.getAttribute(portTypeXML, WsrmdConstants.DESCRIPTOR_LOCATION_ATTR_QNAME);
-	        
-	        LOGGER.debug(Messages.QMAN_200034_RMD_NAME, rmdName);
-	        LOGGER.debug(Messages.QMAN_200035_RMD_PATH, rmdPath);
-	        
-	        Environment env = getEnvironment();
-	        String path = env.createRelativePath(getWsdlPath(), rmdPath);        
-	        Document rmdDoc = env.getDocument(path);
-	        
-	        Element[] additionalProperties = ThreadSessionManager.getInstance().getSession().getResourceMetadataDescriptor();
-	        Element metadataDescriptor = WsrmdUtils.getMetadataDescriptor(rmdDoc, rmdName);
-        
-	        for (Element element : additionalProperties) 
-	        {
-				rmdDoc.adoptNode(element);
-				metadataDescriptor.appendChild(element);
-				
-				Log.debugElement(Messages.QMAN_200036_ADDITIONAL_RMD_PROPERTY,element);
-			}
-			
-			return new SimpleMetadataDescriptor(metadataDescriptor);
-        } 
-        catch(Exception exception)
-        {
-        	LOGGER.error(exception,Messages.QMAN_100021_RMD_BUID_FAILURE,getContextPath());
-        	throw new SoapFault(exception);
-        }
-    }
-
-    /**
-     * Creates a WSRP document representing schema properties for this resource.
-     * 
-     * @param wsdl the DOM document holding the resource's WSDL.       
-     * @return the WSRP document schema.
-     */
-    protected ResourcePropertiesSchema createPropertiesSchema(Document wsdl)
-    {
-        QName wsrpName = WsrpUtils.getPropertiesName(wsdl, getWsdlPortType());
-        Element wsrpDoc = WsdlUtils.getElementDeclaration(wsdl, wsrpName);        
-        return new SimpleResourcePropertiesSchema(wsrpName, wsrpDoc);
-    }    
-    
-    /**
      * Returns the collection containing all properties of this resource.
      * 
      * @return the collection containing all properties of this resource.
@@ -359,55 +484,16 @@
     
     /**
      * Initializes this resources.
+     * Note that the what needs to be done depends on the current state of this
+     * resource.
      * 
      * @throws SoapFault when the initialization fails.
      */
     public void initialize() throws SoapFault
     {    	
-        _properties = new SimpleResourcePropertyCollection();
-        _wsdl = ThreadSessionManager.getInstance().getSession().getWsdlDocument();
-        
-        ResourcePropertiesSchema schema = createPropertiesSchema(_wsdl);
-        _properties.setSchema(schema);
-      
-        MetadataDescriptor metadata = createMetadataDescriptor(_wsdl);
-        _properties.setMetadata(metadata);
-                
-        initializeCapabilities();
-        
-        _hasBeenInitialized = true;
-        
-        _properties.applyMetadata();
-        
-        if (Boolean.parseBoolean(getInitializationParameter(Names.VALIDATE_WSRP_PARAM)))
-	    {
-        	_properties.validateSchema();	        	
-	    }
-
-        _properties.validateMetadata();
-    }
-    
-    /**
-     * Initializes capabilities of this resource.
-     * 
-     * @throws SoapFault when at least one capability fails to initialize.
-     */
-    public void initializeCapabilities() throws SoapFault
-    {
-        for (Entry<String, Capability> entry : _capabilitiesByURI.entrySet()) 
-        {
-        	Capability capability = entry.getValue();
-			capability.initialize();
-			
-			for (Object action : capability.getActions()) 
-			{
-                _capabilitiesByAction.put((String)action, capability);
-			}
-			
-			capability.initializeCompleted();
-		}
+    	_currentState.initialize();
     }
-    
+        
     /**
      * Invokes the action specified in the given soap request on this resource.
      * 
@@ -422,7 +508,10 @@
         // Sanity check : is there a capability for the given action?
         if (capability == null)
         {
-            SoapFault wsaFault = new SoapFault(String.format(Messages.ACTION_NOT_SUPPORTED, action,getContextPath()));
+            SoapFault wsaFault = new SoapFault(
+            		String.format(
+            				Messages.ACTION_NOT_SUPPORTED, 
+            				action,getContextPath()));
 
             wsaFault.setCode(SoapConstants.SENDER_QNAME);
             wsaFault.setSubCode(WsaConstants.ACTION_NOT_SUPPORTED_FAULT_QNAME);
@@ -431,7 +520,10 @@
             XmlUtils.setElement(detail, WsaConstants.ACTION_QNAME, action);
             wsaFault.setDetail(detail);
             
-            LOGGER.error(Messages.QMAN_100020_ACTION_NOT_SUPPORTED, action,getContextPath());
+            LOGGER.error(
+            		Messages.QMAN_100020_ACTION_NOT_SUPPORTED, 
+            		action,
+            		getContextPath());
 
             return wsaFault.toXML();
         }
@@ -545,23 +637,39 @@
      */
     public synchronized void shutdown() throws SoapFault
     {
-        if (hasBeenShutdown())
-            throw new SoapFault(("ResourceAlreadyDestroyed"));
-        
-        if (!hasBeenInitialized())
-            throw new SoapFault(("ResourceNotInitialized"));
-
-        _hasBeenShutdown = true;
+    	_currentState.shutdown();
+    }
         
-        shutdownCapabilities();
-                
-        ResourceManager manager = getResourceManager();
-
-        //
-        // remove resource visibility
-        // 
-        if (manager.getResource(_enpointReference) != null)
-            manager.removeResource(_enpointReference);
+    /**
+     * Returns a string representation of this resource.
+     * Basically the resource endpoint reference (as a string) is returned.
+     * 
+     * @return the resource endpoint reference (as a string) is returned.
+     */
+    public String toString()
+    {
+        return getEndpointReference().toString();
+    }     
+    
+    /**
+     * Initializes capabilities of this resource.
+     * 
+     * @throws SoapFault when at least one capability fails to initialize.
+     */
+    private void initializeCapabilities() throws SoapFault
+    {
+        for (Entry<String, Capability> entry : _capabilitiesByURI.entrySet()) 
+        {
+        	Capability capability = entry.getValue();
+			capability.initialize();
+			
+			for (Object action : capability.getActions()) 
+			{
+                _capabilitiesByAction.put((String)action, capability);
+			}
+			
+			capability.initializeCompleted();
+		}
     }
     
     /**
@@ -569,7 +677,7 @@
      * 
      * @throws SoapFault when at least one capability shutdown fails.
      */
-    protected void shutdownCapabilities() throws SoapFault
+    private void shutdownCapabilities() throws SoapFault
     {
         for (Entry<String,Capability> entry : _capabilitiesByURI.entrySet()) 
         {
@@ -577,16 +685,80 @@
         	capabilty.prepareShutdown();
         	capabilty.shutdown();
 		}        
-    }
+    }    
     
     /**
-     * Returns a string representation of this resource.
-     * Basically the resource endpoint reference (as a string) is returned.
+     * Creates a metadata descriptor for this resource.
      * 
-     * @return the resource endpoint reference (as a string) is returned.
+     * @param wsdl the WSDL document. 
+     * @return a metadata descriptor for this resource.
+     * @throws SoapFault when it's not possible build the descriptor.
      */
-    public String toString()
+    private MetadataDescriptor createMetadataDescriptor(Document wsdl) throws SoapFault
     {
-        return getEndpointReference().toString();
-    }     
+        try 
+        {    	
+	        Element portTypeXML = WsdlUtils.getPortType(wsdl, getWsdlPortType());
+	        
+	        String rmdName = XmlUtils.getAttribute(
+	        		portTypeXML, 
+	        		WsrmdConstants.DESCRIPTOR_ATTR_QNAME);
+	        
+	        String rmdPath = XmlUtils.getAttribute(
+	        		portTypeXML, 
+	        		WsrmdConstants.DESCRIPTOR_LOCATION_ATTR_QNAME);
+	        
+	        LOGGER.debug(Messages.QMAN_200034_RMD_NAME, rmdName);
+	        LOGGER.debug(Messages.QMAN_200035_RMD_PATH, rmdPath);
+	        
+	        Environment env = getEnvironment();
+	        String path = env.createRelativePath(getWsdlPath(), rmdPath);        
+	        Document rmdDoc = env.getDocument(path);
+	        
+	        Element[] additionalProperties = 
+	        	ThreadSessionManager
+	        		.getInstance()
+	        		.getSession()
+	        		.getResourceMetadataDescriptor();
+	        
+	        Element metadataDescriptor = WsrmdUtils.getMetadataDescriptor(rmdDoc, rmdName);
+        
+	        for (Element element : additionalProperties) 
+	        {
+				rmdDoc.adoptNode(element);
+				metadataDescriptor.appendChild(element);
+			}
+			
+			return new SimpleMetadataDescriptor(metadataDescriptor);
+        } 
+        catch(Exception exception)
+        {
+        	LOGGER.error(exception,Messages.QMAN_100021_RMD_BUID_FAILURE,getContextPath());
+        	throw new SoapFault(exception);
+        }
+    }    
+    
+    /**
+     * Returns the capability associated with the given action.
+     * 
+     * @param action the wsa:action of the requested capability.
+     * @return the capability associated with the given action.
+     */
+    private Capability getCapabilityForAction(String action)
+    {
+        return (Capability)_capabilitiesByAction.get(action);
+    }    
+    
+    /**
+     * Creates a WSRP document representing schema properties for this resource.
+     * 
+     * @param wsdl the DOM document holding the resource's WSDL.       
+     * @return the WSRP document schema.
+     */
+    private ResourcePropertiesSchema createPropertiesSchema(Document wsdl)
+    {
+        QName wsrpName = WsrpUtils.getPropertiesName(wsdl, getWsdlPortType());
+        Element wsrpDoc = WsdlUtils.getElementDeclaration(wsdl, wsrpName);        
+        return new SimpleResourcePropertiesSchema(wsrpName, wsrpDoc);
+    }        
 }
\ No newline at end of file



Mime
View raw message