You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directmemory.apache.org by ol...@apache.org on 2012/02/20 22:41:43 UTC

svn commit: r1291458 - /incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/serialization/SerializerFactory.java

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
      */



Re: svn commit: r1291458 - /incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/serialization/SerializerFactory.java

Posted by Simone Tripodi <si...@apache.org>.
done, see https://svn.apache.org/viewvc?view=revision&revision=1291626

apologize for the wrong sentence!

-Simo

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



On Tue, Feb 21, 2012 at 8:21 AM, Simone Tripodi
<si...@apache.org> wrote:
> Indeed, I AM WRONG :D
>
> http://people.apache.org/~simonetripodi/
> http://simonetripodi.livejournal.com/
> http://twitter.com/simonetripodi
> http://www.99soft.org/
>
>
>
> On Tue, Feb 21, 2012 at 8:20 AM, Simone Tripodi
> <si...@apache.org> wrote:
>> Hi again,
>>
>> +    public static Serializer createNewSerializer( String serializerClassName )
>> +    {
>> +        Class<?> serializerClass;
>> +        try
>> +        {
>> +            serializerClass = Class.forName( serializerClassName );
>> +        }
>> +        catch ( ClassNotFoundException e )
>> +        {
>> +            return null;
>> +        }
>> +
>> +        if ( serializerClass.isAssignableFrom( Serializer.class ) )
>>
>> this condition block won't ever reached. it the try{} block fails, the
>> method returns null.
>>
>> please don't get me wrong, I am not pedantic :D
>> -Simo
>>
>> http://people.apache.org/~simonetripodi/
>> http://simonetripodi.livejournal.com/
>> http://twitter.com/simonetripodi
>> http://www.99soft.org/
>>
>>
>>
>> On Tue, Feb 21, 2012 at 8:15 AM, Simone Tripodi
>> <si...@apache.org> wrote:
>>> 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,  <ol...@apache.org> 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
>>>>      */
>>>>
>>>>

Re: svn commit: r1291458 - /incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/serialization/SerializerFactory.java

Posted by Simone Tripodi <si...@apache.org>.
Indeed, I AM WRONG :D

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



On Tue, Feb 21, 2012 at 8:20 AM, Simone Tripodi
<si...@apache.org> wrote:
> Hi again,
>
> +    public static Serializer createNewSerializer( String serializerClassName )
> +    {
> +        Class<?> serializerClass;
> +        try
> +        {
> +            serializerClass = Class.forName( serializerClassName );
> +        }
> +        catch ( ClassNotFoundException e )
> +        {
> +            return null;
> +        }
> +
> +        if ( serializerClass.isAssignableFrom( Serializer.class ) )
>
> this condition block won't ever reached. it the try{} block fails, the
> method returns null.
>
> please don't get me wrong, I am not pedantic :D
> -Simo
>
> http://people.apache.org/~simonetripodi/
> http://simonetripodi.livejournal.com/
> http://twitter.com/simonetripodi
> http://www.99soft.org/
>
>
>
> On Tue, Feb 21, 2012 at 8:15 AM, Simone Tripodi
> <si...@apache.org> wrote:
>> 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,  <ol...@apache.org> 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
>>>      */
>>>
>>>

Re: svn commit: r1291458 - /incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/serialization/SerializerFactory.java

Posted by Simone Tripodi <si...@apache.org>.
Hi again,

+    public static Serializer createNewSerializer( String serializerClassName )
+    {
+        Class<?> serializerClass;
+        try
+        {
+            serializerClass = Class.forName( serializerClassName );
+        }
+        catch ( ClassNotFoundException e )
+        {
+            return null;
+        }
+
+        if ( serializerClass.isAssignableFrom( Serializer.class ) )

this condition block won't ever reached. it the try{} block fails, the
method returns null.

please don't get me wrong, I am not pedantic :D
-Simo

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



On Tue, Feb 21, 2012 at 8:15 AM, Simone Tripodi
<si...@apache.org> wrote:
> 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,  <ol...@apache.org> 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
>>      */
>>
>>

Re: svn commit: r1291458 - /incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/serialization/SerializerFactory.java

Posted by Simone Tripodi <si...@apache.org>.
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,  <ol...@apache.org> 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
>      */
>
>