Hello,

> +                Serializer next = serializers.next();
> +                if ( next.getClass().getName().equals( serializer.getName() 
> ) )
> +                {
> +                    return serializer.cast( next );
> +                }

"trivial", but I am going to fix:

 * expected values in assertions should be put at the beginning;
 * string comparison for classes is not really canonical. I'm going to
change it to 
Class.isInstance(Serializer)<http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Class.html#isInstance(java.lang.Object)>

> +    public static Serializer createNewSerializer( String serializerClassName 
> )
> +    {
> +        Class<?> serializerClass;
> +        try
> +        {
> +            serializerClass = Class.forName( serializerClassName );

Class.forName is evil for OSGi mates and would complain about it, I'm
going to add a new method

+--------+
public static Serializer createNewSerializer( String
serializerClassName, ClassLoader loader )
+--------+

and the default one will use the SerializerFactory.class.getClassLoader().

> +        }
> +        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;
> +    }

this is exactly the <S extends Serializer> S createNewSerializer(
Class<S> serializer ) method invocation, no needs to repeat the same
code.

best,
-Simo

http://people.apache.org/~simonetripodi/
http://simonetripodi.livejournal.com/
http://twitter.com/simonetripodi
http://www.99soft.org/



On Mon, Feb 20, 2012 at 10:41 PM,  <[email protected]> wrote:
> 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;
> +    }
> +

> +
>     /**
>      * Hidden constructor, this class cannot be instantiated
>      */
>
>

Reply via email to