Carregadores de Classes
Carregadores de classes localizam e carregam arquivos de classes. Os carregadores de classes ativam aplicativos que são implementados em servidores para acessar repositórios de classes e recursos disponíveis. Os desenvolvedores de aplicativos e os implementadores devem considerar o local dos arquivos de classe e de recursos e os carregadores de classes utilizados para acessar esses arquivos, para disponibilizar os arquivos para os aplicativos implementados.
Consulte as seguintes informações sobre os carregadores de classes no WebSphere Application Server:
- Carregadores de Classes Utilizados e a Ordem de Utilização
- Políticas de Isolamento de Carregadores de Classes
- Modos de Carregadores de Classes
- Modelo do Carregador de Classes OSGi
Carregadores de Classes Utilizados e a Ordem de Utilização
O ambiente de tempo de execução do produto utiliza os seguintes carregadores de classes para localizar e carregar novas classes de um aplicativo na seguinte ordem:
- A auto-inicialização, as extensões e os carregadores de classes CLASSPATH criados pela máquina virtual Java™
O carregador de classes de auto-inicialização utiliza o caminho de classe de inicialização (geralmente classes em jre/lib) para localizar e carregar classes. O carregador de classe de extensões usa a propriedade do sistema java.ext.dirs (geralmente jre/lib/ext) para localizar e carregar as classes. O carregador de classes de CLASSPATH utiliza a variável de ambiente CLASSPATH para localizar e carregar classes.
- Um carregador de classes de extensões do WebSphere
O carregador de classes de extensões do WebSphere carrega as classes do WebSphere Application Server requeridas no tempo de execução. As classes WebSphere Application Server são fornecidas como um conjunto de pacotes configuráveis OSGi. Cada pacote configurável é carregado por um carregador de classe separado em uma rede de carregadores de classe OSGi. O carregador de classes de extensões é delegado para um carregador de classe de gateway para carregar as classes desta rede de carregador de classe OSGi. Os pacotes exportados da rede de carregador de classe OSGi são visíveis para os aplicativos através do gateway. Para obter detalhes, consulte Modelo do Carregador de Classes OSGi.
Evitar Problemas: As APIs (interfaces de programação de aplicativos) Java Platform, Enterprise Edition (Java EE) são fornecidas nos pacotes configuráveis javax.j2ee.*.jar, que são carregados na rede do carregador de classes OSGi e visíveis para os aplicativos através do gateway. Porque as classes implementadas nos pacotes configuráveis OSGi não estão visíveis para carregadores de classe da máquina virtual Java, não use a variável de ambiente CLASSPATH ou as propriedades do sistema java.ext.dirs e java.lang.classpath para especificar caminhos para bibliotecas que dependem das APIs Java EE. Além disso, não use CLASSPATH, java.ext.dirs e java.lang.classpath para especificar caminhos para bibliotecas de aplicativos porque essas bibliotecas podem causar erros de ligação ou comportamentos inesperados de servidor.gotcha
O carregador de classes de extensões WebSphere usa uma propriedade do sistema ws.ext.dirs para determinar o caminho que é usado para carregar classes e recursos além daqueles fornecidos nos pacotes configuráveis OSGi. Cada diretório no caminho da classe ws.ext.dirs e cada arquivo Java archive (JAR) ou arquivo compactado nestes diretórios são incluídos no caminho da classe usado por este carregador de classes.
O carregador de classes de extensões do WebSphere também carregará classes de provedores de recursos em um servidor se um módulo de aplicativo instalado no servidor referir-se a um recurso que estiver associado ao provedor e se o provedor especificar o nome do diretório dos drivers do recurso.
- Um ou mais carregadores de classes do módulo aplicativo que carregam elementos dos aplicativos corporativos em execução no servidor
Os elementos do aplicativo podem ser módulos da Web, módulos de enterprise bean (EJB), Resource Adapter Archives (arquivos RAR) e arquivos JAR de dependência. Os carregadores de classes do aplicativo seguem as regras de carregamento de classes do Java EE para carregar classes e arquivos JAR a partir de um aplicativo corporativo. O produto permite associar bibliotecas compartilhadas a um aplicativo.
- Zero ou mias carregadores de classes do módulo da Web
Por padrão, os carregadores de classe do módulo da Web carregam os conteúdos dos diretórios WEB-INF/classes e WEB-INF/lib. Os carregadores de classes do módulo da Web são filhos de carregadores de classes de aplicativos. Você pode especificar se um carregador de classes de aplicativo carrega os conteúdos de um módulo da Web em vez do carregador de classes do módulo da Web.

Cada carregador de classes é um filho do carregador de classes anterior. Ou seja, os carregadores de classes do módulo aplicativo são filhos do carregador de classes de extensões do WebSphere, que é filho do carregador de classes Java CLASSPATH. Sempre que uma classe precisa ser carregada, o carregador de classes, em geral, delega o pedido a seu carregador de classes pai. Se nenhum dos carregadores de classes pai conseguirem localizar a classe, o carregador de classes original tentará carregar a classe. Os pedidos podem ir apenas para um carregador de classes pai; eles não podem ir para um carregador de classes filho. Se o carregador de classes de extensões do WebSphere for solicitado a encontrar uma classe em um módulo Java EE, ele não poderá ir para o carregador de classes do módulo aplicativo para encontrar essa classe e ocorrerá um erro ClassNotFoundException. Após carregar uma classe por um carregador de classes, qualquer classe nova que ele tentar carregar reutiliza o mesmo carregador de classes ou sobe na lista de precedência até a classe ser localizada.
Políticas de Isolamento de Carregadores de Classes
O número e a função dos carregadores de classes do módulo aplicativo dependem das políticas do carregador de classes, especificadas na configuração do servidor. Os carregadores de classes fornecem várias opções para isolar aplicativos e módulos para permitir que diferentes esquemas de empacotamento de aplicativos sejam executados em um servidor de aplicativos.
Duas políticas do carregador de classes controlam o isolamento de aplicativos e módulos:
Política do carregador de classes | Descrição |
---|---|
Aplicativo | Os carregadores de classes de aplicativos carregam módulos EJB, arquivos JAR de dependência, adaptadores de recursos incorporados e bibliotecas compartilhadas com escopo baseado em aplicativos. Dependendo da política do carregador de classes do aplicativo, um carregador de classes do aplicativo pode ser compartilhado por vários aplicativos (Single) ou ser exclusivo de cada aplicativo (Multiple). A política do carregador de classes do aplicativo controla o isolamento de aplicativos em execução no sistema. Quando definido para Single, os aplicativos não são isolados. Quando definido como Múltiplo, os aplicativos estão isolados entre si. |
WAR | Por padrão, os carregadores de classe do módulo da Web carregam os conteúdos dos diretórios WEB-INF/classes e WEB-INF/lib. O carregador de classes do aplicativo é o pai do carregador de classes do módulo da Web. Você pode mudar o comportamento padrão alterando a política do carregador de classes WAR (archive de aplicativo da Web) do aplicativo.
A política do carregador de classes WAR controla o isolamento de módulos da Web. Se essa política for definida como Application, o conteúdo do módulo Web também será carregado pelo carregador de classes de aplicativo (além dos arquivos EJB, arquivos RAR, arquivos JAR de dependência e bibliotecas compartilhadas). Se a política for configurada como Module, então cada módulo da Web recebe seu próprio carregador de classes cujo pai é o carregador de classes do aplicativo. Dica: O console e o arquivo deployment.xml subjacente utiliza nomes diferentes para os valores da política do carregador de classes WAR. No console, os valores da política do carregador de classes WAR são
Application ou Module. No entanto, no arquivo
deployment.xml subjacente onde a política é configurada, os valores da política do carregador de classes WAR são Single em vez de Application, ou Multiple em vez de Module. Application é o mesmo que
Single, e Module é o mesmo que Multiple.
|
Para cada servidor de aplicativos no sistema, é possível definir a política do carregador de classes de aplicativo como Single ou Multiple. Quando a política do carregador de classes do aplicativo é definida como Single, um único carregador de classes do aplicativo carrega todos os módulos EJB, arquivos JAR de dependência e bibliotecas compartilhadas no sistema. Quando a política do carregador de classes do aplicativo é definida como Multiple, cada aplicativo recebe seu próprio carregador de classes, utilizado para carregar os módulos EJB, arquivos JAR de dependência e bibliotecas compartilhadas para esse aplicativo.
Um carregador de classes do aplicativo carrega classes a partir de módulos da Web se a política do carregador de classes WAR do aplicativo estiver configurada como Application. Se a política do carregador de classes WAR do aplicativo estiver definida como Module, cada módulo WAR receberá seu próprio carregador de classes.
O exemplo a seguir mostra que, quando a política do carregador de classes do aplicativo é definida como Single, um único carregador de classes do aplicativo carrega todos os módulos EJB, arquivos JAR de dependência e bibliotecas compartilhadas de todos os aplicativos no servidor. O carregador de classes do aplicativo único também pode carregar módulos da Web se um aplicativo tiver sua política do carregador de classes WAR definida como Application. Os aplicativos que possuem política do carregador de classes WAR definida como Module utilizam um carregador de classes separado para módulos da Web.
Política do carregador de classes de aplicativos do servidor: Única
Política do carregador de classes WAR do aplicativo: Módulo
Application 1
Module: EJB1.jar
Module: WAR1.war
MANIFEST Class-Path: Dependency1.jar
WAR Classloader Policy = Module
Application 2
Module: EJB2.jar
MANIFEST Class-Path: Dependency2.jar
Module: WAR2.war
WAR Classloader Policy = Application

O exemplo a seguir mostra que, quando a política do carregador de classes de aplicativo de um servidor de aplicativos é definida como Múltiplo, cada aplicativo no servidor tem seu próprio carregador de classes. Um carregador de classes de aplicativo também carrega seus módulos da Web se a política do carregador de classes WAR estiver definida como Application. Se a política estiver configurada como Module, então um módulo da Web utiliza seu próprio carregador de classes.
Política do carregador de classes de aplicativos do servidor: Múltipla
Política do carregador de classes WAR do aplicativo: Módulo
Application 1
Module: EJB1.jar
Module: WAR1.war
MANIFEST Class-Path: Dependency1.jar
WAR Classloader Policy = Module
Application 2
Module: EJB2.jar
MANIFEST Class-Path: Dependency2.jar
Module: WAR2.war
WAR Classloader Policy = Application

Modos de Carregadores de Classes
O modo de delegação do carregador de classes, também conhecido como a ordem do carregador de classes, determina se um carregador de classes delega o carregamento de classes para o carregador de classes pai. Os valores a seguir são suportados para o modo do carregador de classes:
Modo do carregador de classes | Descrição |
---|---|
Pai Primeiro Também conhecido como Classes carregadas com carregador de classes pai primeiro. |
O modo do carregador de classes Parente first faz com que o carregador de classes delegue o carregamento de classes a seu carregador de classes-pai antes de tentar carregar a classe do seu caminho de classe local. Esse valor é o padrão para a política do carregador de classes e para os carregadores de classes padrão da JVM. |
Pai por Último Também conhecido como Classes Carregadas com Carregador de Classes Local Primeiro ou Aplicativo Primeiro. |
O modo do carregador de classes Parant last faz com que o carregador de classes tente carregar classes do seu caminho de classe local antes de delegar o carregamento de classes a seu pai. Utilizando essa política, um carregador de classes de aplicativo pode substituir e fornecer sua própria versão de uma classe que existe no carregador de classes pai. |
As configurações a seguir determinam o modo de um carregador de classes:
- Se a política do carregador de classes do aplicativo de um servidor de aplicativos for Single, o valor do modo no nível do servidor define o modo para um carregador de classes do aplicativo.
- Se a política do carregador de classes de aplicativos de um servidor de aplicativos for Multiple, o valor do modo do nível do aplicativo definirá o modo para um carregador de classes de aplicativos.
- Se a política do carregador de classes WAR de um aplicativo for Módulo, o valor do modo no nível do módulo define o modo para um carregador de classes WAR.
Modelo do Carregador de Classes OSGi
- Cada pacote configurável fornece visibilidade somente a pacotes Java que exporta explicitamente.
- Cada pacote configurável declara suas dependências de pacote explicitamente.
- Os pacotes podem ser exportados em versões específicas e importados em versões específicas ou de um intervalo de versões específico.
- Múltiplas versões de um pacote podem estar disponíveis simultaneamente para diferentes clientes.
Para obter informações adicionais sobre OSGi, consulte o tópico A Estrutura OSGi.