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

Udo Kohlmeyer commented on GEODE-8705:
--------------------------------------

The new ClassLoader isolation will be accomplished by using JBoss Modules. In 
order to make sure that the modular environment is correctly bootstrapped, it 
needs to be the first thing that is bootstrapped. To achieve this, the current 
approach to start the system, with all library dependencies declared on the 
root Classloader, will be replaced with the newer approach, which only has the 
jboss-modules library and a library which provides a custom ModuleLoader (a 
JBoss Modules construct) as the Boot Module loader for JBoss Modules.

The new bootstrapping mechanism will also require a module.xml file to 
bootstrap the modules. In the current implementation there is one module.xml 
file that describes all the libraries, main class (entry class) and 
import/export restrictions of classes/packages.

In order to avoid significant changes, the current approach (even if 
bootstrapped through org.jboss.modules.Main) takes the same command line 
parameters that one would pass to the Locator/Server Launcher. The Main class 
from JBoss modules just acts as a pass through and passes through all 
parameters to the main classes defined in the module.xml file. (in this case 
ServerLauncher).

There is a current project structure for deployment:
 * geode-deployment-acceptence (Acceptence tests to ensure that no 
functionality is broken between the two classloader mechanisms)
 * geode-deployment-jboss-modules - JBoss modules classloader implementation
 * geode-deployment-chained-classloader - Previous classloader implementation
 * geode-deployment-test - Test project to create a Spring project that uses 
conflicting libraries to main project
 * geode-jboss-extensions - Project to provide extensions to the JBoss Modules 
framework, that needs to be on the root Classloader.

In order to minimize the module.xml maintenance, a Gradle Plugin has been 
written to generate the module.xml file from the gradle dependencies.

> Using JBoss Modules to implement classloader isolated jar deployment
> --------------------------------------------------------------------
>
>                 Key: GEODE-8705
>                 URL: https://issues.apache.org/jira/browse/GEODE-8705
>             Project: Geode
>          Issue Type: New Feature
>            Reporter: Udo Kohlmeyer
>            Assignee: Udo Kohlmeyer
>            Priority: Major
>              Labels: pull-request-available
>
> Introduce Classloader isolation into Geode, to avoid the potential conflict 
> of custom code dependencies, from deploy jar, and the dependencies of the 
> Geode system.
> This problem because evident when Geode was still dependent on Spring 
> framework 4.3 and users wanted to deploy custom jars that used Spring 
> framework 5. This caused many library version conflicts.
> This problem is not limited to the usage of Spring in the system but to ANY 
> dependent library that Geode and any potential custom jar would use.
> The end goal is to have a system that is Classloader isolated and allows for 
> the usage of libraries of different versions within the Geode without any 
> conflicts.



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

Reply via email to