Carregamento de Classe do Aplicativo Cliente Java EE
Quando você executa seu aplicativo cliente Java™ Platform, Enterprise Edition (Java EE), uma hierarquia de carregadores de classes é criada para carregar classes usadas por seu aplicativo.
- O tempo de execução do Application Client para WebSphere Application Server (Aplicativo Cliente) define esse valor como a variável de ambiente WAS_LOGGING.
O carregador de classes de extensões é um filho para o carregador de classes de auto-inicialização. Esse carregador de classes contém arquivos JAR no diretório java/jre/lib/ext ou aqueles arquivos JAR definidos pelo parâmetro -Djava.ext.dirs no comando Java. O tempo de execução do Application Client não define os parâmetros -Djava.ext.dirs. Então, ele utiliza os arquivos JAR no diretório java/jre/lib/ext.
O carregador de classes de extensões é um filho para o carregador de classes de autoinicialização. Esse carregador de classes contém arquivos JAR nos diretórios app_server_root /java/ext, java_home/lib/ext ou java_home/jre/lib/ext, e /QIBM/UserData/Java400/ext. O diretório app_server_root é o caminho da instalação do produto. O diretório java_home é o caminho da instalação dos arquivos Java.
Atenção: O parâmetro java_home pode ser qualquer um de três valores, dependendo de qual JVM (Java Virtual Machine) está ativada. Os três valores possíveis são:
- /QOpenSys/QIBM/ProdData/JavaVM/jdk60/32bit (Java SE 6 de 32 bits)
- /QOpenSys/QIBM/ProdData/JavaVM/jdk60/64bit (Java SE 6 de 64 bits)
- O carregador de classes do sistema contém arquivos e classes JAR definidos pelo parâmetro -classpath no comando Java. O tempo de execução do Application Client define esse parâmetro como a variável de ambiente WAS_CLASSPATH.
- O carregador de classes do WebSphere carrega o tempo de execução do Aplicativo Cliente e as classes posicionadas nos diretórios do usuário do Aplicativo Cliente. Os diretórios utilizados por este carregador de classes são definidos pela variável de ambiente WAS_EXT_DIRS. As variáveis de ambiente WAS_BOOTCLASSPATH, WAS_CLASSPATH e WAS_EXT_DIRS são definidas no script app_server_root/bin/setupCmdLine para instalações do WebSphere Application Server, ou no script app_server_root/bin/setupClient para instalações do cliente.
Conforme o tempo de execução do aplicativo cliente Java EE é inicializado, carregadores de classes adicionais são criados como filhos do carregador de classes do WebSphere. Se o aplicativo cliente utilizar recursos como API JDBC (Java DataBase Connectivity), API JMS (Java Message Service), ou URL (Localizador Uniforme de Recursos), um carregador de classes diferente será criado para carregar cada um desses recursos. Por fim, o tempo de execução do Application Client define o carregador de classes do WebSphere para carregar as classes no arquivo EAR ao processar o manifesto JAR do cliente repetidamente. O caminho de classe do sistema definido pela variável de ambiente CLASSPATH nunca é utilizado e não faz parte da hierarquia de carregadores de classes.
Para empacotar corretamente seu aplicativo cliente, você deve compreender qual carregador de classes carrega suas classes. Quando o código Java carrega uma classe, o carregador de classes utilizado para carregar essa classe é designado a ele. Quaisquer classes carregadas subseqüentemente por essa classe utilizaram aquele carregador de classes ou qualquer de seus pais, mas não utilizarão carregadores de classes filhos.
WSCL0205W: O carregador de classes incorreto foi utilizado para carregar [0]Essa mensagem ocorre quando a classe de seu aplicativo cliente for carregada por um dos carregadores de classes pais na hierarquia. Essa situação normalmente é causada quando se tem as mesmas classes no arquivo EAR e na unidade de disco rígido. Se um dos carregadores de classes pais localizar uma classe, esse carregador de classes a carregará antes do carregador de classes do tempo de execução do Application Client. Em alguns casos, o aplicativo cliente ainda funcionará corretamente. NA maioria dos casos, entretanto, exceções de "classe não localizada" são recebidas.
Configurando os Campos de Caminho de Classe
Ao compactar o aplicativo cliente Java EE, você deve configurar vários campos de caminho de classe. Teoricamente, é necessário empacotar tudo o que fosse necessário pelo seu aplicativo no arquivo EAR. Essa é a maneira mais fácil de distribuir o aplicativo cliente Java EE aos clientes. Entretanto, você não deve empacotar recursos tais como APIs JDBC, APIs JMS ou URLs. No caso desses recursos, use referências de caminho da classe para acessar essas classes na unidade de disco rígido. Você pode também ter outras classes instaladas em suas máquinas clientes que não necessita redistribuir. Nesse caso, talvez você também queira usar as referências de caminho de classe para acessar as classes na unidade de disco rígido, conforme descrito posteriormente neste tópico.
Referenciando Classes no Arquivo EAR
- Os valores devem referir-se aos arquivos JAR e de classe que estão contidos no arquivo EAR.
- Os valores devem ser relativos à raiz do arquivo EAR.
- Os valores não podem se referir a caminhos absolutos nos sistemas de arquivos.
- Vários valores devem ser separados por espaços, não por dois pontos ou ponto-e-vírgulas.
Normalmente, inclua módulos (arquivos JAR) na raiz do arquivo EAR. Neste caso, é necessário apenas especificar o nome do módulo (arquivo JAR) no campo Caminho de Classe. Se você optar por adicionar um módulo com um caminho, precisará especificar o caminho relativo para a raiz do arquivo EAR.
Para referenciar os arquivos de classe, é necessário especificar o diretório relativo para raiz do arquivo EAR. Com uma ferramenta de montagem, é possível incluir arquivos de classe individuais no arquivo EAR. Recomenda-se que esses arquivos de classe adicionais sejam compactados em um arquivo JAR. Inclua esse arquivo JAR nos campos de caminho de classe. Se você incluir arquivos de classe na raiz do arquivo EAR, inclua uma ./ nos campos Caminho de classe do módulo.
Considere o seguinte exemplo de estrutura de diretórios no qual o arquivo myapp.ear contém um arquivo JAR de cliente aplicativo denominado myclient.jar e um módulo EJB mybeans.jar. Classes adicionais residem nos arquivos class1.jar e utility/class2.zip. Um arquivo de classe chamado xyz.class não está compactado em um arquivo JAR, mas está na raiz do arquivo EAR. Especifique ./ mybeans.jar utility/class2.zip class1.jar como o valor da propriedade Classpath. A ordem de procura é: myapp.ear/myclient.jar myapp.ear/xyz.class myapp.ear/mybeans.jar myapp.ear/utility/class2.zip myapp.ear/class1.jar
Referenciando Classes que Não Estão no Arquivo EAR
Utilize o parâmetro -CCclasspath de launchClient. Esse parâmetro é especificado em tempo de execução e aceita valores de caminho de classe específicos da plataforma, o que significa que valores múltiplos são separados por ponto e vírgula ou por dois pontos. O cliente e o servidor são semelhantes nesse aspecto.
Caminhos de Classe de Recursos
Ao configurar
recursos usados por seu aplicativo cliente usando o Application Client
Resource Configuration Tool (ACRCT) ou a ferramenta de scriptACRCT do z/OS,
é possível especificar caminhos da classe que são requeridos
pelo recurso. Por exemplo,
se o aplicativo estiver utilizando um JDBC para um banco de dados DB2, inclua
db2java.zip no campo do caminho de classe do provedor de banco de dados. Estes valores de caminho de classe são específicos da plataforma e requerem ponto-e-vírgula ou dois-pontos para separar vários valores.
No WebSphere Application Server para i5/OS, se você utilizar o IBM® Developer Kit como provedor JDBC Java para acessar o DB2/400, não terá de incluir o arquivo db2_classes.jar no caminho de classe. Entretanto, caso utilize o IBM Toolbox como provedor JDBC Java, especifique o local do arquivo jt400.jar.
Utilizando a API launchClient
Se você utilizar o comando launchClient, a hierarquia do carregador de classes do WebSphere será criada para você. Contudo, se utilizar a API launchClient, você mesmo terá que executar esta configuração. Copie o comando shell launchClient definindo as propriedades do sistema Java.