[ https://issues.apache.org/jira/browse/IGNITE-2947?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Denis Magda updated IGNITE-2947: -------------------------------- Comment: was deleted (was: In addition to the above we should register classes {{BinaryTypeConfiguration}} for classes from different class loader (not only the one that belong to sys class loader or IgniteConfiguration.classLoader) meaning that the following {{if}} condition should be remove from line 1044 and the rest of the code where {{cacheTypes}} structure is used should be revisited {noformat} if (ldr.equals(sysLdr) || ldr.equals(cfgLdr)) cacheDescriptor(id, desc, ldr); {noformat}) > BinaryContext doesn't honor custom loader set through > IgniteConfiguration.classLoader > ------------------------------------------------------------------------------------- > > Key: IGNITE-2947 > URL: https://issues.apache.org/jira/browse/IGNITE-2947 > Project: Ignite > Issue Type: Bug > Components: binary > Affects Versions: 1.5.0.final > Reporter: Denis Magda > Assignee: Anton Vinogradov > Priority: Critical > Labels: community, important > Fix For: 1.6 > > > If to register a specific object with {{BinaryTypeConfiguration}} setting its > {{typeName}} and load Class of objects of this type using a custom class > loader passed to {{IgniteConfiguration.classLoader}} then at > {{BinaryContext}} initialization time the context will not properly register > this {{BinaryTypeConfiguration}} because it doesn't suppose that the Class of > the type can be loaded by the custom class loader > In the code below {{Class.forName}} has to use > {{IgniteConfiguration.classLoader}} if the latest is set and fall back to > {{dfltLdr}} otherwise. > {noformat} > @SuppressWarnings("ErrorNotRethrown") > public void registerUserType(String clsName, > BinaryInternalMapper mapper, > @Nullable BinarySerializer serializer, > @Nullable String affKeyFieldName, > boolean isEnum) > throws BinaryObjectException { > assert mapper != null; > Class<?> cls = null; > try { > cls = Class.forName(clsName); > } > catch (ClassNotFoundException | NoClassDefFoundError ignored) { > // No-op. > } > {noformat} > Also there are several conditions in {{BinaryContext}} that are done for > {{dfltLdr}}. The same conditions have to be executed for > {{IgniteConfiguration.classLoader}}. -- This message was sent by Atlassian JIRA (v6.3.4#6332)