You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@mina.apache.org by "Emmanuel Lecharny (JIRA)" <ji...@apache.org> on 2014/10/20 14:00:35 UTC

[jira] [Commented] (DIRMINA-991) Possible faster deserialization in AbstractIoBuffer object deserialization.

    [ https://issues.apache.org/jira/browse/DIRMINA-991?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14176848#comment-14176848 ] 

Emmanuel Lecharny commented on DIRMINA-991:
-------------------------------------------

As for DIRMINA-990, MINA 2.0.9 is already been vote, it's a bit too late to get this fix included in the package. I'll apply the proposed patch in 2.0.10, which should be out soon.

Here is the code after the patch :

{code}
                protected Class<?> resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException {
                    Class<?> clazz = desc.forClass();
                    
                    if (clazz == null) {
                        String name = desc.getName();
                        try {
                            return Class.forName(name, false, classLoader);
                        } catch (ClassNotFoundException ex) {
                            return super.resolveClass(desc);
                        }
                    } else {
                        return clazz;
                    }
                }
{code}

> Possible faster deserialization in AbstractIoBuffer object deserialization.
> ---------------------------------------------------------------------------
>
>                 Key: DIRMINA-991
>                 URL: https://issues.apache.org/jira/browse/DIRMINA-991
>             Project: MINA
>          Issue Type: Improvement
>          Components: Core
>    Affects Versions: 2.0.8
>            Reporter: Jörg Michelberger
>              Labels: patch, performance
>
> In ObjectInputStream.resolveClass() of AbstractIoBuffer.getObject() there is a possibility to avoid duplicate call to Class.forName(). First call is done in readClassDescriptor() and second in resolveClass() in case we deal with Serializables, class descriptors are cached by the java platform, and a call of desc.forClass() in resolveClass() returns a previous resolved class, which allows skipping the ClassLoader call.  I append the original source and a possible fix for this issue. Is it possible to get this in the upcomming 2.0.9 release of MINA?
> Original source :
> {code}
> protected Class<?> resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException {
>                     String name = desc.getName();
>                     try {
>                         return Class.forName(name, false, classLoader);
>                     } catch (ClassNotFoundException ex) {
>                         return super.resolveClass(desc);
>                     }
> {code}
> Possible fix :
> {code}
> protected Class<?> resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException {
>                     if (null == desc.forClass()) {  //this works for serializable desc classes.
>                         String name = desc.getName();
>                         try {
>                             return Class.forName(name, false, classLoader);
>                         } catch (ClassNotFoundException ex) {
>                             return super.resolveClass(desc);
>                         }
>                     } else {
>                         return desc.forClass();
>                     }
>                 }
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)