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 <[email protected]> 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 > <[email protected]> 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 >> <[email protected]> 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, <[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 >>>> */ >>>> >>>>
