avalon-cvs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From hamm...@apache.org
Subject cvs commit: avalon-sandbox/avalon-net/Castle/CastleManagementExtensions/Exception DomainAlreadyExistsException.cs
Date Sun, 28 Dec 2003 18:57:12 GMT
hammett     2003/12/28 10:57:12

  Modified:    avalon-net/Castle/CastleManagementExtensionsTest
                        AssemblyInfo.cs MDefaultRegistryTestCase.cs
               avalon-net/Castle/CastleManagementExtensionsTest/Components
                        DummySmtpServer.cs
               avalon-net/Castle/CastleManagementExtensions AssemblyInfo.cs
                        MServerFactory.cs ManagementInfo.cs
               avalon-net/Castle/CastleManagementExtensions/Default
                        MDefaultRegistry.cs MDefaultServer.cs MInspector.cs
               avalon-net/Castle/CastleManagementExtensions/Default/Strategy
                        ReflectionInvokerStrategy.cs
  Added:       avalon-net/Castle/CastleManagementExtensionsTest
                        InterfacedComponentTestCase.cs
               avalon-net/Castle/CastleManagementExtensionsTest/Components
                        DummyLifecycledService.cs DummyService.cs
                        ISomeService.cs
               avalon-net/Castle/CastleManagementExtensions
                        MRegistrationListener.cs
               avalon-net/Castle/CastleManagementExtensions/Exception
                        DomainAlreadyExistsException.cs
  Log:
  Added Registration events capabilities.
  
  Revision  Changes    Path
  1.2       +47 -0     avalon-sandbox/avalon-net/Castle/CastleManagementExtensionsTest/AssemblyInfo.cs
  
  Index: AssemblyInfo.cs
  ===================================================================
  RCS file: /home/cvs/avalon-sandbox/avalon-net/Castle/CastleManagementExtensionsTest/AssemblyInfo.cs,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- AssemblyInfo.cs	27 Dec 2003 03:13:29 -0000	1.1
  +++ AssemblyInfo.cs	28 Dec 2003 18:57:12 -0000	1.2
  @@ -1,3 +1,50 @@
  +// ============================================================================
  +//                   The Apache Software License, Version 1.1
  +// ============================================================================
  +// 
  +// Copyright (C) 2002-2003 The Apache Software Foundation. All rights reserved.
  +// 
  +// Redistribution and use in source and binary forms, with or without modifica-
  +// tion, are permitted provided that the following conditions are met:
  +// 
  +// 1. Redistributions of  source code must  retain the above copyright  notice,
  +//    this list of conditions and the following disclaimer.
  +// 
  +// 2. Redistributions in binary form must reproduce the above copyright notice,
  +//    this list of conditions and the following disclaimer in the documentation
  +//    and/or other materials provided with the distribution.
  +// 
  +// 3. The end-user documentation included with the redistribution, if any, must
  +//    include  the following  acknowledgment:  "This product includes  software
  +//    developed  by the  Apache Software Foundation  (http://www.apache.org/)."
  +//    Alternately, this  acknowledgment may  appear in the software itself,  if
  +//    and wherever such third-party acknowledgments normally appear.
  +// 
  +// 4. The names "Jakarta", "Avalon", "Excalibur" and "Apache Software Foundation"  
  +//    must not be used to endorse or promote products derived from this  software 
  +//    without  prior written permission. For written permission, please contact 
  +//    apache@apache.org.
  +// 
  +// 5. Products  derived from this software may not  be called "Apache", nor may
  +//    "Apache" appear  in their name,  without prior written permission  of the
  +//    Apache Software Foundation.
  +// 
  +// THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  +// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  +// FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL  THE
  +// APACHE SOFTWARE  FOUNDATION  OR ITS CONTRIBUTORS  BE LIABLE FOR  ANY DIRECT,
  +// INDIRECT, INCIDENTAL, SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLU-
  +// DING, BUT NOT LIMITED TO, PROCUREMENT  OF SUBSTITUTE GOODS OR SERVICES; LOSS
  +// OF USE, DATA, OR  PROFITS; OR BUSINESS  INTERRUPTION)  HOWEVER CAUSED AND ON
  +// ANY  THEORY OF LIABILITY,  WHETHER  IN CONTRACT,  STRICT LIABILITY,  OR TORT
  +// (INCLUDING  NEGLIGENCE OR  OTHERWISE) ARISING IN  ANY WAY OUT OF THE  USE OF
  +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  +// 
  +// This software  consists of voluntary contributions made  by many individuals
  +// on  behalf of the Apache Software  Foundation. For more  information on the 
  +// Apache Software Foundation, please see <http://www.apache.org/>.
  +// ============================================================================
  +
   using System.Reflection;
   using System.Runtime.CompilerServices;
   
  
  
  
  1.2       +19 -1     avalon-sandbox/avalon-net/Castle/CastleManagementExtensionsTest/MDefaultRegistryTestCase.cs
  
  Index: MDefaultRegistryTestCase.cs
  ===================================================================
  RCS file: /home/cvs/avalon-sandbox/avalon-net/Castle/CastleManagementExtensionsTest/MDefaultRegistryTestCase.cs,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- MDefaultRegistryTestCase.cs	27 Dec 2003 03:13:29 -0000	1.1
  +++ MDefaultRegistryTestCase.cs	28 Dec 2003 18:57:12 -0000	1.2
  @@ -63,7 +63,7 @@
   		[Test]
   		public void TestUse()
   		{
  -			MDefaultRegistry registry = new MDefaultRegistry();
  +			MDefaultRegistry registry = new MDefaultRegistry(new MDefaultServer());
   			AssertEquals( 0, registry.Count );
   
   			DummyHttpServer instance = new DummyHttpServer();
  @@ -81,6 +81,24 @@
   			registry.UnregisterManagedObject( name );
   
   			AssertEquals( 0, registry.Count );
  +		}
  +
  +		[Test]
  +		public void TestRegistration()
  +		{
  +			MDefaultRegistry registry = new MDefaultRegistry(new MDefaultServer());
  +
  +			DummyLifecycledService service = new DummyLifecycledService();
  +
  +			ManagedObjectName name = new ManagedObjectName("domain.org:name=Service");
  +
  +			registry.RegisterManagedObject( service, name );
  +			registry.UnregisterManagedObject( name );
  +
  +			AssertEquals( 0, service.beforeRegisterCalled );
  +			AssertEquals( 1, service.afterRegisterCalled );
  +			AssertEquals( 2, service.beforeDeregisterCalled );
  +			AssertEquals( 3, service.afterDeregisterCalled );
   		}
   	}
   }
  
  
  
  1.1                  avalon-sandbox/avalon-net/Castle/CastleManagementExtensionsTest/InterfacedComponentTestCase.cs
  
  Index: InterfacedComponentTestCase.cs
  ===================================================================
  // ============================================================================
  //                   The Apache Software License, Version 1.1
  // ============================================================================
  // 
  // Copyright (C) 2002-2003 The Apache Software Foundation. All rights reserved.
  // 
  // Redistribution and use in source and binary forms, with or without modifica-
  // tion, are permitted provided that the following conditions are met:
  // 
  // 1. Redistributions of  source code must  retain the above copyright  notice,
  //    this list of conditions and the following disclaimer.
  // 
  // 2. Redistributions in binary form must reproduce the above copyright notice,
  //    this list of conditions and the following disclaimer in the documentation
  //    and/or other materials provided with the distribution.
  // 
  // 3. The end-user documentation included with the redistribution, if any, must
  //    include  the following  acknowledgment:  "This product includes  software
  //    developed  by the  Apache Software Foundation  (http://www.apache.org/)."
  //    Alternately, this  acknowledgment may  appear in the software itself,  if
  //    and wherever such third-party acknowledgments normally appear.
  // 
  // 4. The names "Jakarta", "Avalon", "Excalibur" and "Apache Software Foundation"  
  //    must not be used to endorse or promote products derived from this  software 
  //    without  prior written permission. For written permission, please contact 
  //    apache@apache.org.
  // 
  // 5. Products  derived from this software may not  be called "Apache", nor may
  //    "Apache" appear  in their name,  without prior written permission  of the
  //    Apache Software Foundation.
  // 
  // THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  // INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  // FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL  THE
  // APACHE SOFTWARE  FOUNDATION  OR ITS CONTRIBUTORS  BE LIABLE FOR  ANY DIRECT,
  // INDIRECT, INCIDENTAL, SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLU-
  // DING, BUT NOT LIMITED TO, PROCUREMENT  OF SUBSTITUTE GOODS OR SERVICES; LOSS
  // OF USE, DATA, OR  PROFITS; OR BUSINESS  INTERRUPTION)  HOWEVER CAUSED AND ON
  // ANY  THEORY OF LIABILITY,  WHETHER  IN CONTRACT,  STRICT LIABILITY,  OR TORT
  // (INCLUDING  NEGLIGENCE OR  OTHERWISE) ARISING IN  ANY WAY OUT OF THE  USE OF
  // THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  // 
  // This software  consists of voluntary contributions made  by many individuals
  // on  behalf of the Apache Software  Foundation. For more  information on the 
  // Apache Software Foundation, please see <http://www.apache.org/>.
  // ============================================================================
  
  namespace Apache.Avalon.Castle.ManagementExtensions.Test
  {
  	using System;
  
  	using NUnit.Framework;
  
  	using Apache.Avalon.Castle.ManagementExtensions.Default;
  	using Apache.Avalon.Castle.ManagementExtensions.Test.Components;
  
  	/// <summary>
  	/// Summary description for InterfacedComponentTestCase.
  	/// </summary>
  	[TestFixture]
  	public class InterfacedComponentTestCase : Assertion
  	{
  		[Test]
  		public void TestInfoObtation()
  		{
  			MDefaultServer server = new MDefaultServer();
  
  			ManagedObjectName name1 = new ManagedObjectName("domain.org:type=dummyService");
  
  			try
  			{
  				Type serviceType = typeof(DummyService);
  
  				Object service = server.Instantiate( serviceType.Assembly.FullName, serviceType.FullName
);
  				server.RegisterManagedObject( service, name1 );
  
  				ManagementInfo info = server.GetManagementInfo( name1 );
  				AssertNotNull( info );
  				AssertEquals( 1, info.Operations.Count );
  				AssertEquals( 1, info.Attributes.Count );
  			}
  			finally
  			{
  				server.UnregisterManagedObject( name1 );
  			}
  		}
  	}
  }
  
  
  
  1.2       +1 -1      avalon-sandbox/avalon-net/Castle/CastleManagementExtensionsTest/Components/DummySmtpServer.cs
  
  Index: DummySmtpServer.cs
  ===================================================================
  RCS file: /home/cvs/avalon-sandbox/avalon-net/Castle/CastleManagementExtensionsTest/Components/DummySmtpServer.cs,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- DummySmtpServer.cs	27 Dec 2003 03:13:29 -0000	1.1
  +++ DummySmtpServer.cs	28 Dec 2003 18:57:12 -0000	1.2
  @@ -117,7 +117,7 @@
   
   				info.Operations.Add(new ManagementOperation("Start"));
   				info.Operations.Add(new ManagementOperation("Stop"));
  -				info.Attributes.Add(new ManagementAttribute("Port"));
  +				info.Attributes.Add(new ManagementAttribute("Port", typeof(int)));
   
   				return info;
   			}
  
  
  
  1.1                  avalon-sandbox/avalon-net/Castle/CastleManagementExtensionsTest/Components/DummyLifecycledService.cs
  
  Index: DummyLifecycledService.cs
  ===================================================================
  // ============================================================================
  //                   The Apache Software License, Version 1.1
  // ============================================================================
  // 
  // Copyright (C) 2002-2003 The Apache Software Foundation. All rights reserved.
  // 
  // Redistribution and use in source and binary forms, with or without modifica-
  // tion, are permitted provided that the following conditions are met:
  // 
  // 1. Redistributions of  source code must  retain the above copyright  notice,
  //    this list of conditions and the following disclaimer.
  // 
  // 2. Redistributions in binary form must reproduce the above copyright notice,
  //    this list of conditions and the following disclaimer in the documentation
  //    and/or other materials provided with the distribution.
  // 
  // 3. The end-user documentation included with the redistribution, if any, must
  //    include  the following  acknowledgment:  "This product includes  software
  //    developed  by the  Apache Software Foundation  (http://www.apache.org/)."
  //    Alternately, this  acknowledgment may  appear in the software itself,  if
  //    and wherever such third-party acknowledgments normally appear.
  // 
  // 4. The names "Jakarta", "Avalon", "Excalibur" and "Apache Software Foundation"  
  //    must not be used to endorse or promote products derived from this  software 
  //    without  prior written permission. For written permission, please contact 
  //    apache@apache.org.
  // 
  // 5. Products  derived from this software may not  be called "Apache", nor may
  //    "Apache" appear  in their name,  without prior written permission  of the
  //    Apache Software Foundation.
  // 
  // THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  // INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  // FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL  THE
  // APACHE SOFTWARE  FOUNDATION  OR ITS CONTRIBUTORS  BE LIABLE FOR  ANY DIRECT,
  // INDIRECT, INCIDENTAL, SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLU-
  // DING, BUT NOT LIMITED TO, PROCUREMENT  OF SUBSTITUTE GOODS OR SERVICES; LOSS
  // OF USE, DATA, OR  PROFITS; OR BUSINESS  INTERRUPTION)  HOWEVER CAUSED AND ON
  // ANY  THEORY OF LIABILITY,  WHETHER  IN CONTRACT,  STRICT LIABILITY,  OR TORT
  // (INCLUDING  NEGLIGENCE OR  OTHERWISE) ARISING IN  ANY WAY OUT OF THE  USE OF
  // THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  // 
  // This software  consists of voluntary contributions made  by many individuals
  // on  behalf of the Apache Software  Foundation. For more  information on the 
  // Apache Software Foundation, please see <http://www.apache.org/>.
  // ============================================================================
  
  namespace Apache.Avalon.Castle.ManagementExtensions.Test.Components
  {
  	using System;
  
  	using NUnit.Framework;
  
  	using Apache.Avalon.Castle.ManagementExtensions;
  
  	/// <summary>
  	/// Summary description for DummyLifecycledService.
  	/// </summary>
  	[ManagedComponent]
  	public class DummyLifecycledService : MRegistrationListener
  	{
  		private int state = 0;
  		
  		public int beforeRegisterCalled;
  		public int afterRegisterCalled;
  		public int beforeDeregisterCalled;
  		public int afterDeregisterCalled;
  
  		public DummyLifecycledService()
  		{
  		}
  
  		[ManagedOperation]
  		public void Start()
  		{
  		}
  
  		[ManagedOperation]
  		public void Stop()
  		{
  		}
  
  		#region MRegistrationListener Members
  
  		public void BeforeRegister(MServer server, ManagedObjectName name)
  		{
  			Assertion.AssertNotNull(server);
  			Assertion.AssertNotNull(name);
  
  			beforeRegisterCalled = state++;
  		}
  
  		public void AfterDeregister()
  		{
  			afterDeregisterCalled = state++;
  		}
  
  		public void AfterRegister()
  		{
  			afterRegisterCalled = state++;
  		}
  
  		public void BeforeDeregister()
  		{
  			beforeDeregisterCalled = state++;
  		}
  
  		#endregion
  	}
  }
  
  
  
  1.1                  avalon-sandbox/avalon-net/Castle/CastleManagementExtensionsTest/Components/DummyService.cs
  
  Index: DummyService.cs
  ===================================================================
  // ============================================================================
  //                   The Apache Software License, Version 1.1
  // ============================================================================
  // 
  // Copyright (C) 2002-2003 The Apache Software Foundation. All rights reserved.
  // 
  // Redistribution and use in source and binary forms, with or without modifica-
  // tion, are permitted provided that the following conditions are met:
  // 
  // 1. Redistributions of  source code must  retain the above copyright  notice,
  //    this list of conditions and the following disclaimer.
  // 
  // 2. Redistributions in binary form must reproduce the above copyright notice,
  //    this list of conditions and the following disclaimer in the documentation
  //    and/or other materials provided with the distribution.
  // 
  // 3. The end-user documentation included with the redistribution, if any, must
  //    include  the following  acknowledgment:  "This product includes  software
  //    developed  by the  Apache Software Foundation  (http://www.apache.org/)."
  //    Alternately, this  acknowledgment may  appear in the software itself,  if
  //    and wherever such third-party acknowledgments normally appear.
  // 
  // 4. The names "Jakarta", "Avalon", "Excalibur" and "Apache Software Foundation"  
  //    must not be used to endorse or promote products derived from this  software 
  //    without  prior written permission. For written permission, please contact 
  //    apache@apache.org.
  // 
  // 5. Products  derived from this software may not  be called "Apache", nor may
  //    "Apache" appear  in their name,  without prior written permission  of the
  //    Apache Software Foundation.
  // 
  // THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  // INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  // FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL  THE
  // APACHE SOFTWARE  FOUNDATION  OR ITS CONTRIBUTORS  BE LIABLE FOR  ANY DIRECT,
  // INDIRECT, INCIDENTAL, SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLU-
  // DING, BUT NOT LIMITED TO, PROCUREMENT  OF SUBSTITUTE GOODS OR SERVICES; LOSS
  // OF USE, DATA, OR  PROFITS; OR BUSINESS  INTERRUPTION)  HOWEVER CAUSED AND ON
  // ANY  THEORY OF LIABILITY,  WHETHER  IN CONTRACT,  STRICT LIABILITY,  OR TORT
  // (INCLUDING  NEGLIGENCE OR  OTHERWISE) ARISING IN  ANY WAY OUT OF THE  USE OF
  // THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  // 
  // This software  consists of voluntary contributions made  by many individuals
  // on  behalf of the Apache Software  Foundation. For more  information on the 
  // Apache Software Foundation, please see <http://www.apache.org/>.
  // ============================================================================
  
  namespace Apache.Avalon.Castle.ManagementExtensions.Test.Components
  {
  	using System;
  
  	/// <summary>
  	/// Summary description for DummyService.
  	/// </summary>
  	[ManagedComponent]
  	public class DummyService : ISomeService
  	{
  		public DummyService()
  		{
  		}
  
  		#region ISomeService Members
  
  		[ManagedOperation]
  		public void DoWork()
  		{
  		}
  
  		[ManagedAttribute]
  		public int Port
  		{
  			get
  			{
  				return 0;
  			}
  			set
  			{
  			}
  		}
  
  		#endregion
  	}
  }
  
  
  
  1.1                  avalon-sandbox/avalon-net/Castle/CastleManagementExtensionsTest/Components/ISomeService.cs
  
  Index: ISomeService.cs
  ===================================================================
  // ============================================================================
  //                   The Apache Software License, Version 1.1
  // ============================================================================
  // 
  // Copyright (C) 2002-2003 The Apache Software Foundation. All rights reserved.
  // 
  // Redistribution and use in source and binary forms, with or without modifica-
  // tion, are permitted provided that the following conditions are met:
  // 
  // 1. Redistributions of  source code must  retain the above copyright  notice,
  //    this list of conditions and the following disclaimer.
  // 
  // 2. Redistributions in binary form must reproduce the above copyright notice,
  //    this list of conditions and the following disclaimer in the documentation
  //    and/or other materials provided with the distribution.
  // 
  // 3. The end-user documentation included with the redistribution, if any, must
  //    include  the following  acknowledgment:  "This product includes  software
  //    developed  by the  Apache Software Foundation  (http://www.apache.org/)."
  //    Alternately, this  acknowledgment may  appear in the software itself,  if
  //    and wherever such third-party acknowledgments normally appear.
  // 
  // 4. The names "Jakarta", "Avalon", "Excalibur" and "Apache Software Foundation"  
  //    must not be used to endorse or promote products derived from this  software 
  //    without  prior written permission. For written permission, please contact 
  //    apache@apache.org.
  // 
  // 5. Products  derived from this software may not  be called "Apache", nor may
  //    "Apache" appear  in their name,  without prior written permission  of the
  //    Apache Software Foundation.
  // 
  // THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  // INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  // FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL  THE
  // APACHE SOFTWARE  FOUNDATION  OR ITS CONTRIBUTORS  BE LIABLE FOR  ANY DIRECT,
  // INDIRECT, INCIDENTAL, SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLU-
  // DING, BUT NOT LIMITED TO, PROCUREMENT  OF SUBSTITUTE GOODS OR SERVICES; LOSS
  // OF USE, DATA, OR  PROFITS; OR BUSINESS  INTERRUPTION)  HOWEVER CAUSED AND ON
  // ANY  THEORY OF LIABILITY,  WHETHER  IN CONTRACT,  STRICT LIABILITY,  OR TORT
  // (INCLUDING  NEGLIGENCE OR  OTHERWISE) ARISING IN  ANY WAY OUT OF THE  USE OF
  // THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  // 
  // This software  consists of voluntary contributions made  by many individuals
  // on  behalf of the Apache Software  Foundation. For more  information on the 
  // Apache Software Foundation, please see <http://www.apache.org/>.
  // ============================================================================
  
  namespace Apache.Avalon.Castle.ManagementExtensions.Test.Components
  {
  	using System;
  
  	/// <summary>
  	/// Summary description for ISomeService.
  	/// </summary>
  	public interface ISomeService
  	{
  		void DoWork();
  
  		int Port
  		{
  			get;
  			set;
  		}
  	}
  }
  
  
  
  1.2       +47 -2     avalon-sandbox/avalon-net/Castle/CastleManagementExtensions/AssemblyInfo.cs
  
  Index: AssemblyInfo.cs
  ===================================================================
  RCS file: /home/cvs/avalon-sandbox/avalon-net/Castle/CastleManagementExtensions/AssemblyInfo.cs,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- AssemblyInfo.cs	27 Dec 2003 03:13:29 -0000	1.1
  +++ AssemblyInfo.cs	28 Dec 2003 18:57:12 -0000	1.2
  @@ -1,3 +1,50 @@
  +// ============================================================================
  +//                   The Apache Software License, Version 1.1
  +// ============================================================================
  +// 
  +// Copyright (C) 2002-2003 The Apache Software Foundation. All rights reserved.
  +// 
  +// Redistribution and use in source and binary forms, with or without modifica-
  +// tion, are permitted provided that the following conditions are met:
  +// 
  +// 1. Redistributions of  source code must  retain the above copyright  notice,
  +//    this list of conditions and the following disclaimer.
  +// 
  +// 2. Redistributions in binary form must reproduce the above copyright notice,
  +//    this list of conditions and the following disclaimer in the documentation
  +//    and/or other materials provided with the distribution.
  +// 
  +// 3. The end-user documentation included with the redistribution, if any, must
  +//    include  the following  acknowledgment:  "This product includes  software
  +//    developed  by the  Apache Software Foundation  (http://www.apache.org/)."
  +//    Alternately, this  acknowledgment may  appear in the software itself,  if
  +//    and wherever such third-party acknowledgments normally appear.
  +// 
  +// 4. The names "Jakarta", "Avalon", "Excalibur" and "Apache Software Foundation"  
  +//    must not be used to endorse or promote products derived from this  software 
  +//    without  prior written permission. For written permission, please contact 
  +//    apache@apache.org.
  +// 
  +// 5. Products  derived from this software may not  be called "Apache", nor may
  +//    "Apache" appear  in their name,  without prior written permission  of the
  +//    Apache Software Foundation.
  +// 
  +// THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  +// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  +// FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL  THE
  +// APACHE SOFTWARE  FOUNDATION  OR ITS CONTRIBUTORS  BE LIABLE FOR  ANY DIRECT,
  +// INDIRECT, INCIDENTAL, SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLU-
  +// DING, BUT NOT LIMITED TO, PROCUREMENT  OF SUBSTITUTE GOODS OR SERVICES; LOSS
  +// OF USE, DATA, OR  PROFITS; OR BUSINESS  INTERRUPTION)  HOWEVER CAUSED AND ON
  +// ANY  THEORY OF LIABILITY,  WHETHER  IN CONTRACT,  STRICT LIABILITY,  OR TORT
  +// (INCLUDING  NEGLIGENCE OR  OTHERWISE) ARISING IN  ANY WAY OUT OF THE  USE OF
  +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  +// 
  +// This software  consists of voluntary contributions made  by many individuals
  +// on  behalf of the Apache Software  Foundation. For more  information on the 
  +// Apache Software Foundation, please see <http://www.apache.org/>.
  +// ============================================================================
  +
   using System.Reflection;
   using System.Runtime.CompilerServices;
   
  @@ -9,9 +56,7 @@
   [assembly: AssemblyCopyright("")]
   [assembly: AssemblyTrademark("")]
   [assembly: AssemblyCulture("")]		
  -
   [assembly: AssemblyVersion("1.0.0.0")]
  -
   [assembly: AssemblyDelaySign(false)]
   [assembly: AssemblyKeyFile("")]
   [assembly: AssemblyKeyName("")]
  
  
  
  1.2       +56 -1     avalon-sandbox/avalon-net/Castle/CastleManagementExtensions/MServerFactory.cs
  
  Index: MServerFactory.cs
  ===================================================================
  RCS file: /home/cvs/avalon-sandbox/avalon-net/Castle/CastleManagementExtensions/MServerFactory.cs,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- MServerFactory.cs	27 Dec 2003 03:13:29 -0000	1.1
  +++ MServerFactory.cs	28 Dec 2003 18:57:12 -0000	1.2
  @@ -48,6 +48,7 @@
   namespace Apache.Avalon.Castle.ManagementExtensions
   {
   	using System;
  +	using System.Collections;
   	using System.Configuration;
   	using System.Security.Policy;
   
  @@ -60,6 +61,9 @@
   	{
   		public static readonly String CustomServerConfigurationKey = "MServerFactory";
   
  +		private static readonly Hashtable domains = Hashtable.Synchronized(
  +			new Hashtable(CaseInsensitiveHashCodeProvider.Default, CaseInsensitiveComparer.Default));
  +
   		private MServerFactory()
   		{
   		}
  @@ -89,6 +93,11 @@
   				throw new ArgumentNullException("domain");
   			}
   
  +			if (domains.Contains(domain))
  +			{
  +				throw new DomainAlreadyExistsException(domain);
  +			}
  +
   			String typeName = ConfigurationSettings.AppSettings[CustomServerConfigurationKey];
   			Type serverType = null;
   
  @@ -129,6 +138,10 @@
   				object remoteInstance = newDomain.CreateInstanceAndUnwrap(
   					serverType.Assembly.FullName, serverType.FullName);
   
  +				// Register the domain
  +
  +				domains.Add(domain, new DomainInfo( domain, remoteInstance as MServer, newDomain) );
  +
   				// As this already method "unwraps" the target object, its safe
   				// to return it - in an "wrapped" object we should invoke the 
   				// class's constructor
  @@ -139,6 +152,10 @@
   			{
   				object localInstance = Activator.CreateInstance(serverType);
   
  +				// Register the domain
  +
  +				domains.Add(domain, new DomainInfo( domain, localInstance as MServer ) );
  +
   				return (MServer) localInstance;
   			}
   		}
  @@ -152,8 +169,46 @@
   		{
   			if (server != null)
   			{
  -				// TODO: Release (unload) the server's appdomain, if exists
  +				foreach(DomainInfo info in domains.Values)
  +				{
  +					if (info.Server == server)
  +					{
  +						domains.Remove( info.Name );
  +
  +						if (info.DedicatedDomain != null)
  +						{
  +							AppDomain.Unload( info.DedicatedDomain );
  +						}
  +
  +						break;
  +					}
  +				}
   			}
  +		}
  +	}
  +
  +	/// <summary>
  +	/// Holds registered domains information.
  +	/// </summary>
  +	class DomainInfo
  +	{
  +		public String Name;
  +		public AppDomain DedicatedDomain;
  +		public MServer Server;
  +
  +		private DomainInfo(String name)
  +		{
  +			this.Name = name;
  +		}
  +
  +		public DomainInfo(String name, MServer Server) : this(name)
  +		{
  +			this.Server = Server;
  +		}
  +
  +		public DomainInfo(String name, MServer Server, AppDomain domain) : this(name, Server)
  +		{
  +			this.DedicatedDomain = domain;
   		}
   	}
   }
  
  
  
  1.2       +24 -10    avalon-sandbox/avalon-net/Castle/CastleManagementExtensions/ManagementInfo.cs
  
  Index: ManagementInfo.cs
  ===================================================================
  RCS file: /home/cvs/avalon-sandbox/avalon-net/Castle/CastleManagementExtensions/ManagementInfo.cs,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- ManagementInfo.cs	27 Dec 2003 03:13:29 -0000	1.1
  +++ ManagementInfo.cs	28 Dec 2003 18:57:12 -0000	1.2
  @@ -158,19 +158,27 @@
   	[Serializable]
   	public class ManagementAttribute : ManagementObject
   	{
  -		public ManagementAttribute()
  -		{
  -		}
  +		protected Type type;
   
  -		public ManagementAttribute(String name)
  +		public ManagementAttribute(String name, Type attType)
   		{
   			Name = name;
  +			type = attType;
   		}
   
  -		public ManagementAttribute(String name, String description)
  +		public ManagementAttribute(String name, String description, Type attType)
   		{
   			Name = name;
   			Description = description;
  +			type = attType;
  +		}
  +
  +		public Type AttributeType
  +		{
  +			get
  +			{
  +				return type;
  +			}
   		}
   	}
   
  @@ -178,30 +186,36 @@
   	/// 
   	/// </summary>
   	[Serializable]
  -	public class ManagementObjectCollection : DictionaryBase, IEnumerable
  +	public class ManagementObjectCollection : NameObjectCollectionBase, IEnumerable
   	{
  -		public ManagementObjectCollection()
  +		public ManagementObjectCollection() : 
  +			base(CaseInsensitiveHashCodeProvider.Default, CaseInsensitiveComparer.Default)
   		{
   		}
   
   		public void Add(ManagementObject obj)
   		{
  -			base.InnerHashtable.Add(obj.Name, obj);
  +			base.BaseAdd(obj.Name, obj);
   		}
   
   		public ManagementObject this[String name]
   		{
   			get
   			{
  -				return (ManagementObject) base.InnerHashtable[name];
  +				return (ManagementObject) base.BaseGet(name);
   			}
   		}
   
  +		public bool Contains(String name)
  +		{
  +			return BaseGet(name) != null;
  +		}
  +
   		#region IEnumerable Members
   
   		public new IEnumerator GetEnumerator()
   		{
  -			return base.InnerHashtable.Values.GetEnumerator();
  +			return base.BaseGetAllValues().GetEnumerator();
   		}
   
   		#endregion
  
  
  
  1.1                  avalon-sandbox/avalon-net/Castle/CastleManagementExtensions/MRegistrationListener.cs
  
  Index: MRegistrationListener.cs
  ===================================================================
  // ============================================================================
  //                   The Apache Software License, Version 1.1
  // ============================================================================
  // 
  // Copyright (C) 2002-2003 The Apache Software Foundation. All rights reserved.
  // 
  // Redistribution and use in source and binary forms, with or without modifica-
  // tion, are permitted provided that the following conditions are met:
  // 
  // 1. Redistributions of  source code must  retain the above copyright  notice,
  //    this list of conditions and the following disclaimer.
  // 
  // 2. Redistributions in binary form must reproduce the above copyright notice,
  //    this list of conditions and the following disclaimer in the documentation
  //    and/or other materials provided with the distribution.
  // 
  // 3. The end-user documentation included with the redistribution, if any, must
  //    include  the following  acknowledgment:  "This product includes  software
  //    developed  by the  Apache Software Foundation  (http://www.apache.org/)."
  //    Alternately, this  acknowledgment may  appear in the software itself,  if
  //    and wherever such third-party acknowledgments normally appear.
  // 
  // 4. The names "Jakarta", "Avalon", "Excalibur" and "Apache Software Foundation"  
  //    must not be used to endorse or promote products derived from this  software 
  //    without  prior written permission. For written permission, please contact 
  //    apache@apache.org.
  // 
  // 5. Products  derived from this software may not  be called "Apache", nor may
  //    "Apache" appear  in their name,  without prior written permission  of the
  //    Apache Software Foundation.
  // 
  // THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  // INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  // FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL  THE
  // APACHE SOFTWARE  FOUNDATION  OR ITS CONTRIBUTORS  BE LIABLE FOR  ANY DIRECT,
  // INDIRECT, INCIDENTAL, SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLU-
  // DING, BUT NOT LIMITED TO, PROCUREMENT  OF SUBSTITUTE GOODS OR SERVICES; LOSS
  // OF USE, DATA, OR  PROFITS; OR BUSINESS  INTERRUPTION)  HOWEVER CAUSED AND ON
  // ANY  THEORY OF LIABILITY,  WHETHER  IN CONTRACT,  STRICT LIABILITY,  OR TORT
  // (INCLUDING  NEGLIGENCE OR  OTHERWISE) ARISING IN  ANY WAY OUT OF THE  USE OF
  // THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  // 
  // This software  consists of voluntary contributions made  by many individuals
  // on  behalf of the Apache Software  Foundation. For more  information on the 
  // Apache Software Foundation, please see <http://www.apache.org/>.
  // ============================================================================
  
  namespace Apache.Avalon.Castle.ManagementExtensions
  {
  	using System;
  
  	/// <summary>
  	/// Summary description for MRegistrationListener.
  	/// </summary>
  	public interface MRegistrationListener
  	{
  		void BeforeRegister(MServer server, ManagedObjectName name);
  
  		void AfterRegister();
  
  		void BeforeDeregister();
  
  		void AfterDeregister();
  	}
  }
  
  
  
  1.3       +87 -7     avalon-sandbox/avalon-net/Castle/CastleManagementExtensions/Default/MDefaultRegistry.cs
  
  Index: MDefaultRegistry.cs
  ===================================================================
  RCS file: /home/cvs/avalon-sandbox/avalon-net/Castle/CastleManagementExtensions/Default/MDefaultRegistry.cs,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- MDefaultRegistry.cs	27 Dec 2003 15:33:32 -0000	1.2
  +++ MDefaultRegistry.cs	28 Dec 2003 18:57:12 -0000	1.3
  @@ -54,12 +54,20 @@
   	/// TODO: Implement a lyfecycle for registering managed components.
   	/// </summary>
   	[ManagedComponent]
  -	public class MDefaultRegistry : MRegistry
  +	public class MDefaultRegistry : MarshalByRefObject, MRegistry
   	{
   		protected DomainCollection domains = new DomainCollection();
   
  -		public MDefaultRegistry()
  +		protected MServer server;
  +
  +		public MDefaultRegistry(MServer server)
   		{
  +			if (server == null)
  +			{
  +				throw new ArgumentNullException("server");
  +			}
  +
  +			this.server = server;
   		}
   
   		#region MRegistry Members
  @@ -115,14 +123,29 @@
   
   			Entry entry = new Entry(instance, dynamic);
   
  -			lock(domain)
  +			try
   			{
  -				if (domain.Contains(name))
  +				MRegistrationListener registration = instance as MRegistrationListener;
  +
  +				InvokeBeforeRegister(registration, name);
  +
  +				lock(domain)
   				{
  -					throw new InstanceAlreadyRegistredException(name.ToString());
  +					if (domain.Contains(name))
  +					{
  +						throw new InstanceAlreadyRegistredException(name.ToString());
  +					}
  +
  +					domain.Add(name, entry);
   				}
   
  -				domain.Add(name, entry);
  +				InvokeAfterRegister(registration);
  +			}
  +			catch(Exception e)
  +			{
  +				domain.Remove(name);
  +
  +				throw e;
   			}
   
   			return new ManagedInstance(instance.GetType().FullName, name);
  @@ -168,7 +191,18 @@
   			try
   			{
   				Domain domain = FindDomain(domainName);
  -				domain.Remove(name);
  +				Entry entry = domain[name];
  +
  +				if (entry != null)
  +				{
  +					MRegistrationListener listener = entry.Instance as MRegistrationListener;
  +
  +					InvokeBeforeDeregister(listener);
  +
  +					domain.Remove(name);
  +
  +					InvokeAfterDeregister(listener);
  +				}
   			}
   			catch(InvalidDomainException)
   			{
  @@ -314,6 +348,52 @@
   			}
   
   			return entry;
  +		}
  +
  +		private void InvokeBeforeRegister(MRegistrationListener listener, ManagedObjectName name)
  +		{
  +			if (listener != null)
  +			{
  +				listener.BeforeRegister(server, name);
  +			}
  +		}
  +
  +		private void InvokeAfterRegister(MRegistrationListener listener)
  +		{
  +			if (listener != null)
  +			{
  +				listener.AfterRegister();
  +			}
  +		}
  +
  +		private void InvokeBeforeDeregister(MRegistrationListener listener)
  +		{
  +			if (listener != null)
  +			{
  +				try
  +				{
  +					listener.BeforeDeregister();
  +				}
  +				catch(Exception)
  +				{
  +					// An exception here shall not stop us from continue
  +				}
  +			}
  +		}
  +
  +		private void InvokeAfterDeregister(MRegistrationListener listener)
  +		{
  +			if (listener != null)
  +			{
  +				try
  +				{
  +					listener.AfterDeregister();
  +				}
  +				catch(Exception)
  +				{
  +					// An exception here shall not stop us from continue
  +				}
  +			}
   		}
   	}
   }
  
  
  
  1.3       +2 -12     avalon-sandbox/avalon-net/Castle/CastleManagementExtensions/Default/MDefaultServer.cs
  
  Index: MDefaultServer.cs
  ===================================================================
  RCS file: /home/cvs/avalon-sandbox/avalon-net/Castle/CastleManagementExtensions/Default/MDefaultServer.cs,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- MDefaultServer.cs	27 Dec 2003 15:33:32 -0000	1.2
  +++ MDefaultServer.cs	28 Dec 2003 18:57:12 -0000	1.3
  @@ -59,19 +59,9 @@
   
   		public MDefaultServer()
   		{
  -			registry = new Default.MDefaultRegistry();
  +			// TODO: Allow customisation of MRegistry
   
  -			SetupRegistry();
  -		}
  -
  -		public MDefaultServer(MRegistry registry)
  -		{
  -			if (registry == null)
  -			{
  -				throw new ArgumentNullException("registry");
  -			}
  -
  -			this.registry = registry;
  +			registry = new Default.MDefaultRegistry(this);
   
   			SetupRegistry();
   		}
  
  
  
  1.2       +1 -1      avalon-sandbox/avalon-net/Castle/CastleManagementExtensions/Default/MInspector.cs
  
  Index: MInspector.cs
  ===================================================================
  RCS file: /home/cvs/avalon-sandbox/avalon-net/Castle/CastleManagementExtensions/Default/MInspector.cs,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- MInspector.cs	27 Dec 2003 03:13:29 -0000	1.1
  +++ MInspector.cs	28 Dec 2003 18:57:12 -0000	1.2
  @@ -153,7 +153,7 @@
   
   					ManagedAttributeAttribute att = (ManagedAttributeAttribute) atts[0];
   
  -					ManagementAttribute attribute = new ManagementAttribute(minfo.Name, att.Description);
  +					ManagementAttribute attribute = new ManagementAttribute(minfo.Name, att.Description,
minfo.PropertyType);
   
   					info.Attributes.Add(attribute);
   				}
  
  
  
  1.2       +1 -1      avalon-sandbox/avalon-net/Castle/CastleManagementExtensions/Default/Strategy/ReflectionInvokerStrategy.cs
  
  Index: ReflectionInvokerStrategy.cs
  ===================================================================
  RCS file: /home/cvs/avalon-sandbox/avalon-net/Castle/CastleManagementExtensions/Default/Strategy/ReflectionInvokerStrategy.cs,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- ReflectionInvokerStrategy.cs	27 Dec 2003 03:13:29 -0000	1.1
  +++ ReflectionInvokerStrategy.cs	28 Dec 2003 18:57:12 -0000	1.2
  @@ -164,7 +164,7 @@
   
   			ManagementAttribute attribute = (ManagementAttribute) info.Attributes[name];
   
  -			if (attribute != null)
  +			if (attribute == null)
   			{
   				throw new InvalidOperationException(String.Format("Attribute {0} doesn't exists.",
name));
   			}
  
  
  
  1.1                  avalon-sandbox/avalon-net/Castle/CastleManagementExtensions/Exception/DomainAlreadyExistsException.cs
  
  Index: DomainAlreadyExistsException.cs
  ===================================================================
  // ============================================================================
  //                   The Apache Software License, Version 1.1
  // ============================================================================
  // 
  // Copyright (C) 2002-2003 The Apache Software Foundation. All rights reserved.
  // 
  // Redistribution and use in source and binary forms, with or without modifica-
  // tion, are permitted provided that the following conditions are met:
  // 
  // 1. Redistributions of  source code must  retain the above copyright  notice,
  //    this list of conditions and the following disclaimer.
  // 
  // 2. Redistributions in binary form must reproduce the above copyright notice,
  //    this list of conditions and the following disclaimer in the documentation
  //    and/or other materials provided with the distribution.
  // 
  // 3. The end-user documentation included with the redistribution, if any, must
  //    include  the following  acknowledgment:  "This product includes  software
  //    developed  by the  Apache Software Foundation  (http://www.apache.org/)."
  //    Alternately, this  acknowledgment may  appear in the software itself,  if
  //    and wherever such third-party acknowledgments normally appear.
  // 
  // 4. The names "Jakarta", "Avalon", "Excalibur" and "Apache Software Foundation"  
  //    must not be used to endorse or promote products derived from this  software 
  //    without  prior written permission. For written permission, please contact 
  //    apache@apache.org.
  // 
  // 5. Products  derived from this software may not  be called "Apache", nor may
  //    "Apache" appear  in their name,  without prior written permission  of the
  //    Apache Software Foundation.
  // 
  // THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  // INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  // FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL  THE
  // APACHE SOFTWARE  FOUNDATION  OR ITS CONTRIBUTORS  BE LIABLE FOR  ANY DIRECT,
  // INDIRECT, INCIDENTAL, SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLU-
  // DING, BUT NOT LIMITED TO, PROCUREMENT  OF SUBSTITUTE GOODS OR SERVICES; LOSS
  // OF USE, DATA, OR  PROFITS; OR BUSINESS  INTERRUPTION)  HOWEVER CAUSED AND ON
  // ANY  THEORY OF LIABILITY,  WHETHER  IN CONTRACT,  STRICT LIABILITY,  OR TORT
  // (INCLUDING  NEGLIGENCE OR  OTHERWISE) ARISING IN  ANY WAY OUT OF THE  USE OF
  // THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  // 
  // This software  consists of voluntary contributions made  by many individuals
  // on  behalf of the Apache Software  Foundation. For more  information on the 
  // Apache Software Foundation, please see <http://www.apache.org/>.
  // ============================================================================
  
  namespace Apache.Avalon.Castle.ManagementExtensions
  {
  	using System;
  
  	/// <summary>
  	/// Summary description for DomainAlreadyExistsException.
  	/// </summary>
  	[Serializable]
  	public class DomainAlreadyExistsException : System.Exception
  	{
  		public DomainAlreadyExistsException(String domain) : base(domain)
  		{
  		}
  	}
  }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: cvs-unsubscribe@avalon.apache.org
For additional commands, e-mail: cvs-help@avalon.apache.org


Mime
View raw message