You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@avalon.apache.org by "Schaible, Jörg" <Jo...@gft.com> on 2003/03/06 17:22:39 UTC

[Patch] AbstractContainer of Fortress

Hi Berin,

an Update for the patch. The reverse map (m_mapper) has to be chosen
freely also. This can be achieved by changing the Type of the field
to the Map interface. Now you can initialize m_mapper in your 
initialization() method as you like. So again the updated patch below.

Regards,
Jörg

> -----Original Message-----
> From: Schaible, Jörg 
> Sent: Wednesday, March 05, 2003 6:50 PM
> 
> > From: Berin Loritsch [mailto:bloritsch@apache.org]
> > Sent: Wednesday, March 05, 2003 6:46 PM
> [...]
> > I can apply the diff, but be advised that the Map *MUST* manage
> > synchronization itself.  If you do not use a StaticBucketMap,
> > you need to use a Collections.synchronizedMap() for your system.
> 
> I was not sure about that, because the code modifying the map runs
> synchronized *UNLESS* you have lazy components. Then you *MUST*
> use a synchronized container. At least, that was my impression looking
> at the code. Naturally the current implementation must be prepared.


Index: src/java/org/apache/avalon/fortress/impl/AbstractContainer.java
===================================================================
RCS file: /home/cvspublic/avalon-excalibur/fortress/src/java/org/apache/avalon/fortress/impl/AbstractContainer.java,v
retrieving revision 1.10
diff -u -r1.10 AbstractContainer.java
--- src/java/org/apache/avalon/fortress/impl/AbstractContainer.java	25 Feb 2003 16:28:33 -0000	1.10
+++ src/java/org/apache/avalon/fortress/impl/AbstractContainer.java	6 Mar 2003 16:17:18 -0000
@@ -127,7 +127,7 @@
      * Contains entries mapping roles to hint maps, where the hint map contains
      * mappings from hints to ComponentHandlers.
      */
-    protected StaticBucketMap m_mapper = new StaticBucketMap();
+    protected Map m_mapper = new StaticBucketMap();
     /** Contains an entry for each ComponentHandler */
     protected List m_components = new ArrayList( 10 );
 
@@ -285,12 +285,12 @@
         // ServiceSelector and put that in as SELECTOR_ENTRY.
         if( null != role && null != classname && null != handler )
         {
-            Map hintMap = (StaticBucketMap)m_mapper.get( role );
+            Map hintMap = (Map)m_mapper.get( role );
 
             // Initialize the hintMap if it doesn't exist yet.
             if( null == hintMap )
             {
-                hintMap = new StaticBucketMap();
+                hintMap = createHintMap();
                 hintMap.put( DEFAULT_ENTRY, handler );
                 m_mapper.put( role, hintMap );
             }
@@ -310,6 +310,16 @@
         }
     }
 
+    /**
+     * Create the hint map for a role.  The map may have to take care for thread-safety.
+     * By default a StaticBucketMap is created, but you may change the implementation
+     * or increment the number of buckets according your needs.
+     */
+    protected Map createHintMap()
+    {
+        return new StaticBucketMap();
+    }
+
 
     /**
      * Get a ComponentHandler with the default constructor for the component class passed in.
@@ -429,7 +439,7 @@
     public Object get( final String role, final Object hint )
         throws ServiceException
     {
-        final Map hintMap = (StaticBucketMap)m_mapper.get( role );
+        final Map hintMap = (Map)m_mapper.get( role );
         Object value;
 
         if( null == hintMap )
@@ -494,7 +504,7 @@
      */
     public boolean has( final String role, final Object hint )
     {
-        final Map hintMap = (StaticBucketMap)m_mapper.get( role );
+        final Map hintMap = (Map)m_mapper.get( role );
         boolean hasComponent = false;
 
         if( null != hintMap )
@@ -627,4 +637,4 @@
     {
         return m_serviceManager;
     }
-}
\ No newline at end of file
+}

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