Quando um nó definido pelo usuário em Java é empacotado como um arquivo PAR, esse nó é carregado em um carregador de classe separado.
O carregador de classe carrega qualquer classe incluída no pacote do arquivo PAR implementado. As classes que são colocadas no arquivo JAR substituem as classes que estão no diretório de classes compartilhado ou a variável de ambiente CLASSPATH. Se o arquivo PAR implementado contiver mais de um tipo de nó, os nós compartilharão o mesmo carregador de classe. Portanto, um conjunto de nós definidos pelo usuário que compartilham dados estáticos deve ser incluído no pacote de um único arquivo PAR.
Os nós definidos pelos usuários Java empacotados como arquivos JAR simples são carregados no mesmo carregador de classe.As classes e o local de onde elas são carregadas são gravados no rastreio do usuário, portanto, você pode utilizar estas informações para verificar se as classes corretas estão sendo carregadas.
O intermediário utiliza a seguinte árvore do carregador de classe:
O carregador de classe shared também carrega classes de contexto.
Ele utiliza o CLASSPATH e o diretório WorkPath/shared-classes/ para
procurar classes.
O carregador de classe intermediário e o carregador de classe compartilhado são filhos do carregador de classe comum. Portanto, o conteúdo do carregador de classe compartilhado não é visível para o carregador de classe intermediário. Não armazene os seguintes recursos neste diretório:
Pacote de nós definidos pelo usuário em um arquivo PAR
Pacote de nós definidos pelo usuário em um arquivo JAR
O mecanismo de substituição de padrões aprovados permite que os pacotes padrão a seguir sejam substituídos no JRE:
Para substituir estes pacotes no intermediário, coloque os arquivos JAR para os padrões da API no diretório /lib do arquivo PAR.
Quando procurar um contexto JNDI, o carregador de classe de contexto é utilizado. Se a consulta utilizar classes empacotadas com um nó definido pelo usuário, o carregador de classe de contexto deverá ser o mesmo que o carregador de classe sendo utilizado para carregar o nó definido pelo usuário. Para assegurar que cada encadeamento utiliza o mesmo carregador de classe, o código a seguir pode ser incluído na classe de nós definidos pelos usuários:
Thread.currentThread.setContextClassLoader(this.getClass().getClassLoader());