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