Author: olamy
Date: Mon Feb 20 21:41:42 2012
New Revision: 1291458

URL: http://svn.apache.org/viewvc?rev=1291458&view=rev
Log:
[DIRECTMEMORY-67] Serializer Factory should be able to load specific serializers
Submitted by Daniel Manzke.

Modified:
    
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/serialization/SerializerFactory.java

Modified: 
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/serialization/SerializerFactory.java
URL: 
http://svn.apache.org/viewvc/incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/serialization/SerializerFactory.java?rev=1291458&r1=1291457&r2=1291458&view=diff
==============================================================================
--- 
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/serialization/SerializerFactory.java
 (original)
+++ 
incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/serialization/SerializerFactory.java
 Mon Feb 20 21:41:42 2012
@@ -19,10 +19,10 @@ package org.apache.directmemory.serializ
  * under the License.
  */
 
-import static java.util.ServiceLoader.load;
-
 import java.util.Iterator;
 
+import static java.util.ServiceLoader.load;
+
 public final class SerializerFactory
 {
 
@@ -47,6 +47,69 @@ public final class SerializerFactory
         return new StandardSerializer();
     }
 
+    public static <S extends Serializer> S createNewSerializer( Class<S> 
serializer )
+    {
+        Iterator<Serializer> serializers = load( Serializer.class ).iterator();
+
+        // iterate over all found services
+        while ( serializers.hasNext() )
+        {
+            // try getting the current service and return
+            try
+            {
+                Serializer next = serializers.next();
+                if ( next.getClass().getName().equals( serializer.getName() ) )
+                {
+                    return serializer.cast( next );
+                }
+            }
+            catch ( Throwable t )
+            {
+                // just ignore, skip and try getting the next
+            }
+        }
+
+        return null;
+    }
+
+    public static Serializer createNewSerializer( String serializerClassName )
+    {
+        Class<?> serializerClass;
+        try
+        {
+            serializerClass = Class.forName( serializerClassName );
+        }
+        catch ( ClassNotFoundException e )
+        {
+            return null;
+        }
+
+        if ( serializerClass.isAssignableFrom( Serializer.class ) )
+        {
+            Iterator<Serializer> serializers = load( Serializer.class 
).iterator();
+
+            // iterate over all found services
+            while ( serializers.hasNext() )
+            {
+                // try getting the current service and return
+                try
+                {
+                    Serializer next = serializers.next();
+                    if ( next.getClass().getName().equals( serializerClassName 
) )
+                    {
+                        return next;
+                    }
+                }
+                catch ( Throwable t )
+                {
+                    // just ignore, skip and try getting the next
+                }
+            }
+        }
+
+        return null;
+    }
+
     /**
      * Hidden constructor, this class cannot be instantiated
      */


Reply via email to