Capítulo 3. Migre seu Aplicativo
3.1. Alterações Requeridas para a maioria dos Aplicativos
3.1.1. Revisão das Alterações Requeridas para a Maioria dos Aplicativos
3.1.2. Alterações do Carregamento de Classe
3.1.2.1. Atualização do Aplicativo devido às Alterações do Carregamento da Classe
- Primeiro, observe o empacotamento de seu aplicativo e suas dependências. Consulte a: Seção 3.1.2.3, “Atualização das Dependências do Aplicativo devido às Alterações do Carregamento da Classe” para maiores informações.
- Caso o seu aplicativo realize o logon, será necessário especificar corretamente as dependências do módulo. Consulte a: Seção 3.1.4.1, “Modificação das Dependências de Registro em Log” para maiores informações.
- A estrutura do empacotamento de seu EAR ou WAR talvez precise ser alterada devido às alterações de carregamento de classe modular. Consulte a: Seção 3.1.5.1, “Modificação do Empacotamento dos EARS e WARs” para maiores informações.
3.1.2.2. Compreendendo as Dependências do Módulo
Um módulo é apenas apto a acessar suas próprias classes e as classes de qualquer módulo que possui uma dependência explícita ou implícita.
Procedimento 3.1. Compreendendo as Dependências do Módulo
Compreendendo as dependências implícitas
Os implantadores com o servidor adicionam automaticamente, e de forma implícita, algumas dependências de módulo comumente usadas como ojavax.api
esun.jdk
. Isto permite que as classes sejam visíveis à implantação no período de execução reduzindo a tarefa do desenvolvedor de adicionar explicitamente dependências. Consulte as Dependências de Módulo Implícitas no capítulo nomeado Carregamento de Carga e Módulo no Guia de Desenvolvimento para o JBoss EAP 6 https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/ para maiores informações.Compreendendo as dependências explícitas
Os módulos devem ser especificados explicitamente para outras classes, do contrário as dependências ausentes resultarão em implantação ou erros do período de execução. Caso falte uma dependência, traçosClassNotFoundExceptions
ouNoClassDefFoundErrors
poderão ser observados no log do servidor. Caso mais de um módulo carregar o mesmo JAR ou um módulo carregar uma classe que estende uma classe carregada por um módulo diferente, traçosClassCastExceptions
poderão ser vistos no servidor do log. Modifique oMANIFEST.MF
ou crie um arquivo do descritor de implantação específico do JBossjboss-deployment-structure.xml
para especificação explícita de dependências. Refira-se à Visão Geral do Carregamento de Classe e Módulos no capítulo nomeado Carregamento de Classe e Módulo no Guia de Desenvolvimento para o JBoss EAP 6 no https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/.
3.1.2.3. Atualização das Dependências do Aplicativo devido às Alterações do Carregamento da Classe
O carregamento de classe no JBoss EAP 6 é consideravelmente diferente do que as versões anteriores do JBoss EAP. O carregamento de classe é agora baseado no projeto de Módulos do JBoss. Ao invés de um único carregador de classe hierárquico que carrega todos os JARS num caminho de classe plano, cada biblioteca torna-se um módulo que apenas conecta os módulos extras dos quais ela depende. As implantações no JBoss EAP 6 são módulos e não precisam ter acesso às classes que são definidas nos JARs de um servidor de aplicativo, a não ser que uma dependência explícita seja definida nessa classe. Algumas das dependências do módulo definidas pelo servidor do aplicativo são configuradas automaticamente. Por exemplo: caso você esteja implantando um aplicativo Java EE, uma dependência no Java EE API é adicionada automaticamente ou implicitamente. Para uma lista de dependências adicionadas automaticamente pelo servidor, refira-se às Dependências de Módulo Implícitas no capítulo Carregamento de Classe e Módulos do Guia de Desenvolvimento para o JBoss Enterprise Application Plataform 6 no https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/.
Quando você migrar seu aplicativo ao JBoss EAP 6, você pode precisar executar uma ou mais das seguintes tarefas devido às alterações do carregamento de classe modular:
3.1.3. Alterações do Arquivo de Configuração
3.1.3.1. Criação ou Modificação dos Arquivos que controlam o Controle de Carregamento da Classe no JBoss EAP 6
Devido à alteração no JBoss EAP 6 para uso do carregamento de carga modular, a modificação e criação de um ou mais arquivos possa ser necessária para adição de dependências ou para evitar que elas sejam carregadas. Refira-se ao capítulo Carregamento de Carga e Módulos do Guia de Desenvolvimento para o JBoss EAP 6 no https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/.
- jboss-web.xml
- Caso tenha definido um elemento
<class-loading>
no arquivojboss-web.xml
, será necessário removê-lo. O comportamento que isto causou no JBoss EAP 5 é agora o comportamento do carregamento da classe default no JBoss EAP 6, portanto ele não é mais necessário. Caso este elemento não seja mais removido, o ParseError e XMLStreamException serão exibidos no seu log do servidor.Segue abaixo uma amostra do elemento<class-loading>
no arquivojboss-web.xml
que encontra-se comentado.<!DOCTYPE jboss-web PUBLIC "-//JBoss//DTD Web Application 4.2//EN" "http://www.jboss.org/j2ee/dtd/jboss-web_4_2.dtd"> <jboss-web> <!-- <class-loading java2ClassLoadingCompliance="false"> <loader-repository> seam.jboss.org:loader=MyApplication <loader-repository-config>java2ParentDelegation=false</loader-repository-config> </loader-repository> </class-loading> --> </jboss-web>
- MANIFEST.MF
- Editado manualmente
- Dependendo de quais componentes ou módulos o seu aplicativo usar, será necessário adicionar uma ou mais dependências a este arquivo. A adição das mesmas pode ser tanto como
Dependencies
ou como entradasClass-Path
.Segue abaixo uma amostraMANIFEST.MF
editada por um desenvolvedor:Manifest-Version: 1.0 Dependencies: org.jboss.logmanager Class-Path: OrderManagerEJB.jar
Caso deseje modificar esse arquivo, certifique-se de incluir um caractere com linha nova no final do arquivo. - Usando o Maven
- Caso use o Maven, será necessário modificar o seu arquivo
pom.xml
para gerar as dependências no arquivoMANIFEST.MF
. Caso seu aplicativo usar o EJB 3.0, uma seção no arquivopom.xml
poderá parecer-se com o seguinte:<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-ejb-plugin</artifactId> <configuration> <ejbVersion>3.0</ejbVersion> </configuration> </plugin>
Caso o código EJB 3.0 usar oorg.apache.commons.log
, será necessária aquela dependência no arquivoMANIFEST.MF
. Com o objetivo de gerar aquela dependência, adicione o elemento<plugin>
ao arquivopom.xml
, conforme abaixo:<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-ejb-plugin</artifactId> <configuration> <ejbVersion>3.0</ejbVersion> <archive> <manifestFile>src/main/resources/META-INF/MANIFEST.MF</manifestFile> </archive> </configuration> </plugin>
Na amostra acima, o arquivosrc/main/resources/META-INF/MANIFEST.MF
precisa apenas conter a entrada da dependência:Dependencies: org.apache.commons.logging
O Maven gerará o arquivoMANIFEST.MF
completo:Manifest-Version: 1.0 Dependencies: org.apache.commons.logging
- jboss-deployment-structure.xml
- Esse arquivo é um descritor de implantação específico do JBoss que pode ser usado para controlar o carregamento da classe de forma granulada. Assim como o
MANIFEST.MF
, esse arquivo pode ser usado para adicionar dependência. Isto pode também prevenir que dependências automáticas sejam adicionadas, definir módulos adicionais, alterar o comportamento de carregamento da classe isolado da implantação EAR e adicionar raízes de recurso adicional ao módulo.Segue abaixo uma amostra do arquivojboss-deployment-structure.xml
que adiciona uma dependência para o módulo JSF 1.2 e previne o carregamento automático do módulo JSF 2.0.<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0"> <deployment> <dependencies> <module name="javax.faces.api" slot="1.2" export="true"/> <module name="com.sun.jsf-impl" slot="1.2" export="true"/> </dependencies> </deployment> <sub-deployment name="jboss-seam-booking.war"> <exclusions> <module name="javax.faces.api" slot="main"/> <module name="com.sun.jsf-impl" slot="main"/> </exclusions> <dependencies> <module name="javax.faces.api" slot="1.2"/> <module name="com.sun.jsf-impl" slot="1.2"/> </dependencies> </sub-deployment> </jboss-deployment-structure>
Consulte a: Seção 3.1.3.2, “jboss-deployment-structure.xml” para maiores informações sobre este arquivo. - application.xml
- Nas versões anteriores do JBoss EAP, a ordem das implantações com um EAR foi controlada usando o arquivo
jboss-app.xml
. Este não é mais o mesmo caso. O Java EE6 spec fornece o elemento<initialize-in-order>
noapplication.xml
que permite o controle da ordem pela qual os módulos do Java EE com um EAR são implantados.Na maioria das vezes, não é necessário especificar a ordem da implantação. Caso o seu aplicativo use injeções de dependência e referências de recurso para referenciar componentes em módulos externos, o elemento<initialize-in-order>
não é requerido na maioria das vezes, uma vez que o servidor do aplicativo está apto a determinar implicitamente a maneira correta e ideal de ordenar os componentes.Vamos assumir um aplicativo que contém ummyBeans.jar
e ummyApp.war
que são empacotado com omyApp.ear
. Um servlet nomyApp.war
usa uma anotação@EJB
para injetar um bean a partir domyBeans.jar
. Neste caso, o servidor do aplicativo possui o conhecimento apropriado para garantir que o componente EJB está disponível antes do servidor servlet ser iniciado, não havendo necessidade de usar o elemento<initialize-in-order>
.No entanto, caso o servlet usar referências remotas de estilo de pesquisa JNDI de legacia, conforme o seguinte, para acesso ao bean, a ordem do módulo talvez precise ser especificada.init() { Context ctx = new InitialContext(); ctx.lookup("TheBeanInMyBeansModule"); }
Neste caso, o servidor não está apto a determinar que o componente EJB está nomyBeans.jar
e será necessário que os componentes nomyBeans.jar
sejam inicializados e ativados antes dos componentes nomyApp.war
. Para isto, é necessário configurar o elemento<initialize-in-order>
paratrue
e especificar a ordem dos módulosmyBeans.jar
emyApp.war
no arquivoapplication.xml
.Segue abaixo uma amostra que usa o elemento<initialize-in-order>
para controlar a ordem de implantação. OmyBeans.jar
é implantado antes do arquivomyApp.war
.<application xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="6" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_6.xsd"> <application-name>myApp</application-name> <initialize-in-order>true</initialize-in-order> <module> <ejb>myBeans.jar</ejb> </module> <module> <web> <web-uri>myApp.war</web-uri> <context-root>myApp</context-root> </web> </module> </application>
O esquema para o arquivoapplication.xml
não pôde ser encontrado no http://java.sun.com/xml/ns/javaee/application_6.xsd.Nota
Lembre-se de que a configuração do elemento<initialize-in-order>
paratrue
reduz a velocidade da implantação. É preferível definir as dependências de maneira apropriada usando injeções de dependência ou referências de recurso, uma vez que isto permite o contêiner maior flexibilidade na implantações ideais. - jboss-ejb3.xml
- O descritor da implantação
jboss-ejb3.xml
substitui o descritor da implantaçãojboss.xml
para substituição e adição à recursos fornecidos pelo Java Enterprise Edition (EE - Edição do Java Enterprise) definidos no descritor da implantaçãoejb-jar.xml
. O novo arquivo é incompatível com ojboss.xml
e ojboss.xml
é agora ignorado nas implantações. - login-config.xml
- O arquivo
login-config.xml
não é mais usado para a configuração de segurança. A segurança é agora configurada no elemento<security-domain>
no arquivo de configuração do servidor. Para um servidor autônomo, este é o arquivostandalone/configuration/standalone.xml
. Caso esteja executando o seu servidor num managed domain, esse é o arquivodomain/configuration/domain.xml
.
3.1.3.2. jboss-deployment-structure.xml
jboss-deployment-structure.xml
é um novo descritor de implantação opcional para o JBoss EAP 6. Este descritor de implantação fornece controle sobre o carregamento da classe na implantação.
EAP_HOME/docs/schema/jboss-deployment-structure-1_2.xsd
3.1.3.3. Recursos de Pacote para o Novo Sistema de Carregamento de Classe Modular
Nas versões anteriores do JBoss EAP, todos os recursos dentro do diretório WEB-INF/
foram adicionados ao caminho de classe WAR. No JBoss EAP 6, os artefatos do aplicativo da web são apenas carregados a partir dos diretórios WEB-INF/classes
e WEB-INF/lib
. A falha dos artefatos do aplicativo do pacote nas localizações especificadas pode resultar no ClassNotFoundException
, NoClassDefError
, ou outros erros do período de execução.
- Modificação do Empacotamento de Recurso
- Para disponibilizar os recursos apenas para o aplicativo, os arquivos de propriedades, JARs e outros artefatos com WAR devem ser empacotados, movendo-os ao diretório
WEB-INF/classes/
ouWEB-INF/lib/
. Essa abordagem está descrita em maiores detalhes na: Seção 3.1.3.4, “Alteração da Localização das Propriedades ResourceBundle” - Criação de um Módulo Personalizado
- Caso deseje disponibilizar recursos personalizados a todos os aplicativos executando no servidor do JBoss EAP 6, crie um modelo personalizado. Esta abordagem está descrita em maiores detalhes na: Seção 3.1.3.5, “Criação de um Módulo Personalizado”
3.1.3.4. Alteração da Localização das Propriedades ResourceBundle
Nas versões anteriores do JBoss EAP, o diretório EAP_HOME/server/SERVER_NAME/conf/
estava no classpath e disponível ao aplicativo. Para disponibilizar as propriedades ao caminho da classe do aplicativo no JBoss EAP 6, elas devem ser empacotadas com o seu aplicativo.
Procedimento 3.2. Altere a Localização das Propriedades ResourceBundle
- Caso esteja implantando um arquivo WAR, essas propriedades devem ser empacotadas na pasta
WEB-INF/classes/
do WAR. - Caso deseje disponibilizar essas propriedades a todos os componentes num EAR, elas devem ser empacotadas à raiz do JAR na pasta
lib/
do EAR.
3.1.3.5. Criação de um Módulo Personalizado
Procedimento 3.3. Criação de um Módulo Personalizado
- Crie e preencha a estrutura do diretório
module/
.- Crie uma estrutura de diretório sob o diretório
EAP_HOME/module
para conter os arquivos e JARs. Por exemplo:$ cd EAP_HOME/modules/
$ mkdir -p myorg-conf/main/properties
- Mova os arquivos de propriedades ao diretório
EAP_HOME/modules/myorg-conf/main/properties/
criado na etapa anterior. - Crie um arquivo
module.xml
no diretórioEAP_HOME/modules/myorg-conf/main/
contendo o seguinte XML:<module xmlns="urn:jboss:module:1.1" name="myorg-conf"> <resources> <resource-root path="properties"/> </resources> </module>
- Modifique o subsistema
ee
no arquivo de configuração do servidor. Você pode usar o JBoss CLI ou pode editar manualmente o arquivo.- Siga as seguintes etapas para modificar o arquivo de configuração do servidor usando o JBoss CLI.
- Inicie o servidor e conecte-se ao Management CLI.
- Insira a seguinte linha de comando para o Linux:
$ EAP_HOME/bin/jboss-cli.sh --connect
- Insira a seguinte linha de comando para o Windows:
C:\>EAP_HOME\bin\jboss-cli.bat --connect
Você deverá observar a seguinte resposta:Conectado ao controlador autônomo no localhost:9999
- Digite o seguinte na linha de comando para criar o elemento
myorg-conf
<global-modules> no subsistemaee
:/subsystem=ee:write-attribute(name=global-modules, value=[{"name"=>"myorg-conf","slot"=>"main"}])
Você deverá ver o seguinte resultado:{"outcome" => "success"}
- Siga essas etapas caso prefira editar manualmente o arquivo da configuração do servidor.
- Interrompa o servidor e abra o arquivo de configuração do servidor num editor de texto. Caso esteja executando um servidor autônomo, o arquivo será o
EAP_HOME/standalone/configuration/standalone.xml
ou caso esteja executando um managed domain, o arquivo será oEAP_HOME/domain/configuration/domain.xml
. - Encontre o subsistema
ee
e adicione o módulo global paramyorg-conf
. Segue abaixo uma amostra do elemento do subsistemaee
modificado para inclusão do elementomyorg-conf
:<subsystem xmlns="urn:jboss:domain:ee:1.0" > <global-modules> <module name="myorg-conf" slot="main" /> </global-modules> </subsystem>
- Assumindo que você copiou um arquivo nomeado
my.properties
à localização de módulo correta, você poderá agora carregar os arquivos de propriedades usando o código similar ao seguinte:Thread.currentThread().getContextClassLoader().getResource("my.properties");
3.1.4. Alterações do Registro em Log
3.1.4.1. Modificação das Dependências de Registro em Log
O JBoss LogManager suporta front ends para todos os frameworks de registro em log, de forma que é possível manter seu código de registro de log atual ou mover à nova infraestrutura de registro de log do JBoss. Independente de sua decisão, devido às alterações de carregamento de classe modular, é provável a necessidade de modificação de seu aplicativo para adição das dependências requeridas.
Procedimento 3.4. Atualização do código de registro de log do aplicativo
3.1.4.2. Atualização do Código do Aplicativo para Frameworks de Registro de Log de Terceiros
No JBoss EAP 6, as dependências de registro em log para frameworks de terceiros comuns como o Apache Commons Logging, Apache log4j, SLF4J e Java Logging são adicionados por default. Normalmente, prefere-se o uso de um framework de logon fornecido pelo contêiner do JBoss EAP. No entanto, caso queira especificar a funcionalidade fornecida por um framework de terceiros, o módulo do JBoss EAP correspondente deve ser excluído de sua implantação. Perceba que embora sua implementação use um framework de logon de terceiros, os logs do servidor continuam a usar a configuração do subsistema de logon do JBoss EAP.
org.apache.log4j
do JBoss EAP 6 de sua implantação. O primeiro procedimento funciona em qualquer lançamento do JBoss EAP 6. O segundo procedimento é válido apenas ao JBoss EAP 6.3 ou versões mais avançadas.
Procedimento 3.5. Configuração do JBoss EAP 6 para uso de um arquivo log4j.properties ou log4j.xml
Nota
- Criação de um
jboss-deployment-structure.xml
com o seguinte conteúdo:<jboss-deployment-structure> <deployment> <!-- Exclusions allow you to prevent the server from automatically adding some dependencies --> <exclusions> <module name="org.apache.log4j" /> </exclusions> </deployment> </jboss-deployment-structure>
- Posicione o arquivo
jboss-deployment-structure.xml
, tanto em seu diretórioMETA-INF/
ou no diretórioWEB-INF/
, caso esteja implantando um WAR. Do contrário, posicione-o no diretórioMETA-INF/
caso esteja implantando um EAR. Caso a sua implantação incluir implantações filho dependente, o módulo deve ser também excluído para cada subimplantação. - Adicione o arquivo
log4j.properties
oulog4j.xml
no diretóriolib/
de seu EAR ou no diretórioWEB-INF/classes/
de sua implantação WAR. Caso deseje posicionar o arquivo no diretóriolib/
de seu WAR, o caminho<resource-root>
deve ser especificado no arquivojboss-deployment-structure.xml
.<jboss-deployment-structure> <deployment> <!-- Exclusions allow you to prevent the server from automatically adding some dependencies --> <exclusions> <module name="org.apache.log4j" /> </exclusions> <resources> <resource-root path="lib" /> </resources> </deployment> </jboss-deployment-structure>
- Inicie o servidor do JBoss EAP 6 com o seguinte argumento para evitar que um
ClassCastException
apareça no console no momento de implantação de seu aplicativo:-Dorg.jboss.as.logging.per-deployment=false
- Implante seu aplicativo.
Procedimento 3.6. Configuração das Dependências de Logon para o JBoss EAP 6.3 ou versões mais recentes
add-logging-api-dependencies
para exclusão das dependências do framework de logon de terceiros pode ser efetuado. As seguintes etapas demonstram como modificar este atributo de logon num servidor autônomo do JBoss EAP.
- Inicie o servidor do JBoss EAP 6 com o seguinte argumento para evitar que um
ClassCastException
apareça no console no momento de implantação de seu aplicativo:-Dorg.jboss.as.logging.per-deployment=false
- Abra um terminal e conecte-se ao Management CLI.
- Insira a seguinte linha de comando para o Linux:
$ EAP_HOME/bin/jboss-cli.sh --connect
- Insira a seguinte linha de comando para o Windows:
C:\>EAP_HOME\bin\jboss-cli.bat --connect
- Modifique o atributo
add-logging-api-dependencies
no subsistema de logon.Este atributo controla se o contêiner adiciona implicitamente as dependências API de logon as suas implantações.- Caso determinado para
true
, que é o default, todas as dependências API de logon implícitas serão adicionadas. - Caso determinado para
false
, as dependências não são adicionadas as suas implantações.
Este atributo deve ser determinado parafalse
usando o seguinte comando, com o objetivo de excluir as dependências do framework de logon de terceiros:/subsystem=logging:write-attribute(name=add-logging-api-dependencies, value=false)
Este comando adiciona o elemento<add-logging-api-dependencies>
ao subsistemalogging
do arquivo de configuraçãostandalone.xml
.<subsystem xmlns="urn:jboss:domain:logging:1.4"> <add-logging-api-dependencies value="false"/> .... </subsystem>
- Implante seu aplicativo.
3.1.4.3. Modificação do Código para Uso do Novo Framework de Registro de Log do JBoss
Para usar o novo framework, altere suas importações e código conforme abaixo:
Procedimento 3.7. Modifique o Código e Dependências para Uso do JBoss logging Framework
Alteração de suas importações e código de registro em log
Segue abaixo uma amostra do código que usa o novo framework do JBoss Logging:import org.jboss.logging.Level; import org.jboss.logging.Logger; private static final Logger logger = Logger.getLogger(MyClass.class.toString()); if(logger.isTraceEnabled()) { logger.tracef("Starting...", subsystem); }
Adição de dependência de registro em log
O JAR contendo as classes do JBoss Logging está localizado no módulo nomeadoorg.jboss.logging
. O seu arquivoMANIFEST-MF
deve parecer com o seguinte:Manifest-Version: 1.0 Dependencies: org.jboss.logging
Por favor consulte a Seção 3.1.2.3, “Atualização das Dependências do Aplicativo devido às Alterações do Carregamento da Classe” e a Seção 4.2.1, “Depuração e Solução dos Problemas de Migração” para maiores informações sobre como encontrar a dependência do módulo.
3.1.5. Alterações do Empacotamento do Aplicativo
3.1.5.1. Modificação do Empacotamento dos EARS e WARs
Quando a migração de seu aplicativo for efetuada, será possível a necessidade de alteração da estrutura de empacotamento de seu EAR ou WAR devido à alteração do carregamento da classe modular. As dependências de módulo contém o carregamento em ordem específica:
- Dependências do sistema
- Dependências do Usuário
- Recursos Locais
- Dependências inter-implantadas
Procedimento 3.8. Modificação do empacotamento do arquivo
Empacotamento do WAR
O WAR é um módulo único e todas as classes no WAR são carregadas com o mesmo carregador de classe. Isto significa que as classes empacotadas no diretórioWEB-INF/lib/
são tratadas da mesma forma que as classes no diretórioWEB-INF/classes
.Empacotamento de um EAR
Um EAR consiste de módulos múltiplos. O diretórioEAR/lib/
é um módulo único e cada WAR ou subimplantação EJB jar no EAR é um módulo separado. As classes não possuem acesso às classes em outros módulos com o EAR, a não ser que as dependências tenham sido definidas. As subimplantações sempre possuem uma dependência automática no módulo pai que as fornecem acesso às classes no diretórioEAR/lib/
. No entanto, as subimplantações nem sempre possuem uma dependência automática para permitir que se acessassem entre si. Este comportamento é controlado pela configuração do elemento<ear-subdeployments-isolated>
na configuração do subsistemaee
, conforme abaixo:<subsystem xmlns="urn:jboss:domain:ee:1.0" > <ear-subdeployments-isolated>false</ear-subdeployments-isolated> </subsystem>
Por default, isto é configurado para falso, permitindo que as subimplantações vejam as classes pertencentes às demais subimplantações com o EAR.Refira-se ao capítulo nomeado no carregamento da classe ao capítulo nomeado Carregamento de Classe e Módulos no Guia de Desenvolvimento para o JBoss EAP 6 no https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/.
3.1.6. Alterações da Configuração do Adaptador de Recurso e Fonte de Dados
3.1.6.1. Atualização do Aplicativo devido às Alterações da Configuração
- Caso seu aplicativo use a fonte de dados, consulte a: Seção 3.1.6.2, “Atualização da Configuração da Fonte de Dados”.
- Caso o seu aplicativo use o JPA e empacote os Hibernate JARs, consulte a: Seção 3.1.6.4, “Configuração da Fonte de Dados para o Hibernate ou JPA” para opções de migração.
- Caso seu aplicativo use um adaptador de recurso, consulte a: Seção 3.1.6.5, “Atualização da Configuração do Adaptador de Recurso”.
- Revise a seguinte informação de como configurar as alterações para a segurança básica na: Seção 3.1.7.1, “Configuração das Alterações de Segurança do Aplicativo”.
3.1.6.2. Atualização da Configuração da Fonte de Dados
Nas versões anteriores do JBoss EAP, a configuração da fonte de dados JCA foi definida num arquivo com sufixo *-ds.xml
. Esse arquivo foi implantado no diretório deploy/
do servidor ou empacotado com o aplicativo. O driver JDBC foi copiado ao diretório server/lib/
ou empacotado no diretório WEB-INF/lib/
do aplicativo. Enquanto esse método de configuração de fonte de dados não é suportado para o desenvolvimento, ele não é recomendado para produção uma vez que ele não é suportado pelas ferramentas de gerenciamento e administrativa do JBoss.
domain/configuration/domain.xml
. Caso a instância do JBoss EAP estiver sendo executada como servidor autônomo, a fonte de dados é configurada no standalone/configuration/standalone.xml file
. As fontes de dados configuradas dessa maneira podem ser gerenciadas e controladas usando as interfaces de gerenciamento do JBoss, incluindo o Web Management Console e a interface da linha de comando (CLI - command line interface). Essas ferramentas facilitam o gerenciamento de implantações e configuram servidores múltiplos sendo executados no managed domain.
Um driver compatível com JDBC 4.0 pode ser instalado como implantação ou como módulo principal. Um driver que é compatível com o JDBC 4.0 contém um arquivo META-INF/services/java.sql.Driver
que especifica o nome da classe do driver. Um driver que não é compatível com o JDBC 4.0 requer etapas adicionais. Para maiores detalhes de como fazer um driver compatível com o JDBC 4.0 e como atualizar sua configuração de fonte de dados atual para uma gerenciável pelo Web Management Console and CLI, consulte a Seção 3.1.6.3, “Instalação e Configuração do JDBC Driver”.
Você pode usar a ferramenta IronJacamar para migrar a fonte de dados e as configurações do adaptador do recurso. Esta ferramenta converte os arquivos de configuração do estilo *-ds.xml
no formato esperado pelo JBoss EAP 6. Consute a Seção 4.1.6, “Uso da Ferramenta IronJacamar para Migração da Fonte de Dados e Configurações do Adaptador de Recurso” para maiores informações.
3.1.6.3. Instalação e Configuração do JDBC Driver
O JDBC driver pode ser instalado no contêiner em uma das duas seguintes maneiras:
- como implantação;
- como módulo core.
domain/configuration/domain.xml
. Caso a instância do JBoss EAP 6 estiver sendo executada como um servidor autônomo, a fonte de dados é configurada no arquivo standalone/configuration/standalone.xml
. A informação da referência do esquema, que é a mesma em ambos os modos, pode ser encontrada no diretório doc/
de instalação do JBoss EAP 6. Para propósitos desta discussão, assuma que o servidor está sendo executado como servidor autônomo e a fonte de dados está configurada no arquivo standalone.xml
.
Procedimento 3.9. Instalação e Configuração do JDBC Driver
Instale o JDBC Driver.
Instale o JDBC Driver como uma implantação.
Esta é a maneira recomendada de instalação do driver. Quando o JDBC driver for instalado como uma implantação, ele é implantado como um JAR regular. Caso a instância do JBoss EAP 6 estiver sendo executada como um servidor autônomo, copie o JDBC 4.0 compatível com o diretórioEAP_HOME/standalone/deployments/
. Para um managed domain, o Management Console ou Management CLI deve ser usado para implantar o JAR aos grupos do servidor.Segue abaixo uma amostra de um MySQL JDBC driver instalado como implantação ao servidor autônomo:$cp mysql-connector-java-5.1.15.jar
EAP_HOME/standalone/deployments/
Qualquer driver compatível com o JDBC 4.0 é automaticamente reconhecido e instalado no sistema pelo nome e versão. Um JAR compatível com o JDBC 4.0 contém um texto com arquivo nomeadoMETA-INF/services/java.sql.Driver
que especifica o(s) nome(s) da classe do driver. Caso o driver não for compatível com o JDBC 4.0, ele pode ser implantável em uma das seguintes maneiras:- Crie e adicione o arquivo
java.sql.Driver
ao JAR sob o caminhoMETA-INF/services/
. Esse arquivo deve conter o nome de classe do driver, por exemplo:com.mysql.jdbc.Driver
- Crie um arquivo
java.sql.Driver
no diretório de implementação. Para uma instância do JBoss EAP 6 executando como um servidor autônomo, o arquivo deve ser posicionado no:EAP_HOME/standalone/deployments/META-INF/services/java.sql.Driver
. Caso o servidor estiver num managed domain, o uso do Management Console ou do Managment CLI deve ser aplicado para implantar o arquivo.
Os aspectos positivos desta abordagem são:Os aspectos negativos desta abordagem são:- Este é o método mais simples uma vez que não há necessidade de definir um módulo.
- Quando o servidor estiver executando num managed domain, as implantações que usam esta abordagem são propagadas automaticamente a todos os servidores no domain. Isto significa que o administrador não precisa distribuir o driver JAR manualmente.
- Caso o JDBC driver consistir de mais de um JAR, por exemplo o driver JAR mais o JAR da licença de dependência JAR ou JAR de localização, o driver não pode ser instalado como implantação. O JDBC deve ser instalado como um módulo core.
- Caso o driver não for compatível com o JDBC 4.0, um arquivo deve ser criado contendo o(s) nome(s) da classe do driver e deve ser importado num JAR ou sobreposto no diretório
deployments/
.
Instale o JDBC Driver como um módulo core.
Para instalar um JDBC driver como um módulo core, uma estrutura do caminho do arquivo sob o diretórioEAP_HOME/modules/
deve ser criada. Esta estrutura contém o JDBC driver JAR, qualquer licença do fornecedor adicional ou JARs de localização e um arquivomodule.xml
para definição do módulo.Instale o MySQL JDBC Driver como módulo core
- Crie uma estrutura de diretório
EAP_HOME/modules/com/mysql/main/
- No subdiretório
main/
, crie um arquivomodule.xml
contendo a seguinte definição do módulo para o MySQL JDBC driver:<?xml version="1.0" encoding="UTF-8"?> <module xmlns="urn:jboss:module:1.0" name="com.mysql"> <resources> <resource-root path="mysql-connector-java-5.1.15.jar"/> </resources> <dependencies> <module name="javax.api"/> </dependencies> </module>
O nome do módulo, "com.mysql", coincide com a estrutura do diretório para esse módulo. O elemento<dependencies>
é usado para especificar as dependências do módulo em outros módulos. Neste caso, como é o caso em todas as fontes de dados JDBC, isto é dependente do Java JDBC APIs que é definido em outro módulo nomeadojavax.api
. Este módulo está localizado sob o diretóriomodules/system/layers/base/javax/api/main/
.Nota
Certifique-se de que NÃO possui espaço no início do arquivomodule.xml
ou um erro "Novas dependências ausentes/não satisfatórias" para este driver será obtido. - Copie o MySQL JDBC driver JAR ao diretório
EAP_HOME/modules/com/mysql/main/
:$ cp mysql-connector-java-5.1.15.jar
EAP_HOME/modules/com/mysql/main/
Instale o IBM DB2 JDBC driver e JAR de licença como um módulo core.
Esta amostra é fornecida para apenas demonstrar como implantar drivers que requerem JARs além do JDBC Driver JAR.- Crie a estrutura do diretório
EAP_HOME/modules/com/ibm/db2/main/
. - No subdiretório
main/
crie um arquivomodule.xml
contendo a seguinte definição do módulo para o IBM DB2 JDBC driver e licença:<?xml version="1.0" encoding="UTF-8"?> <module xmlns="urn:jboss:module:1.1" name="com.ibm.db2"> <resources> <resource-root path="db2jcc.jar"/> <resource-root path="db2jcc_license_cisuz.jar"/> </resources> <dependencies> <module name="javax.api"/> <module name="javax.transaction.api"/> </dependencies> </module>
Nota
Certifique-se de que NÃO possui espaço no início do arquivomodule.xml
ou um erro "Novas dependências ausentes/não satisfatórias" para este driver será obtido. - Copie o JDBC driver e a licença JAR ao diretório
EAP_HOME/modules/com/ibm/db2/main/
.$ cp db2jcc.jar
EAP_HOME/modules/com/ibm/db2/main/
$ cp db2jcc_license_cisuz.jarEAP_HOME/modules/com/ibm/db2/main/
Os aspectos positivos desta abordagem são:Os aspectos negativos desta abordagem são:- Esta é a única abordagem que funciona quando o JDBC driver consiste de mais de um JAR.
- Com esta abordagem, os drivers que não são compatíveis com o JDBC 4.0 podem ser instalados sem modificar o driver JAR ou criando uma sobreposição de arquivo.
- É mais difícil configurar um módulo.
- O módulo deve ser manualmente copiado para cada servidor executando num managed domain.
Configure a fonte de dados.
Adicione o driver do banco de dados.
Adicione o elemento<driver>
ao elemento<drivers>
de mesmo arquivo. Isto contém algumas das informações que foram definidas anteriormente no arquivo*-ds.xml
.Primeiro determine se o driver JAR é compatível com o JDBC 4.0. Um JAR que é compatível com o JDBC 4.0 contém um arquivoMETA-INF/services/java.sql.Driver
que especifica o nome de classe do driver. O servidor usa este arquivo para encontrar o nome da(s) classe(s) de driver no JAR. Um driver que é compatível com o JDBC 4.0 não requer um elemento<driver-class>
, uma vez que ele já está especificado no JAR. Esta é uma amostra do elemento do driver para um JDBC 4.0 compatível com o driver MySQL:<driver name="mysql-connector-java-5.1.15.jar" module="com.mysql"/>
Um driver que não seja compatível com o JDBC 4.0 requer um atributo<driver-class>
para identificar a classe do driver desde que não haja um arquivoMETA-INF/services/java.sql.Driver
que especifique o nome da classe do driver. Segue abaixo uma amostra do elemento driver para o driver não compatível com o JDBC 4.0:<driver name="mysql-connector-java-5.1.15.jar" module="com.mysql"> <driver-class>com.mysql.jdbc.Driver</driver-class></driver>
Crie a fonte de dados.
Crie um elemento<datasource>
na seção<datasources>
do arquivostandalone.xml
. Este arquivo contém bastante informações da fonte de dados anteriormente definida no arquivo*-ds.xml
.Importante
O servidor deve ser interrompido antes de editar o arquivo de configuração do servidor para que sua alteração seja efetivada no reinício do servidor.Segue abaixo uma amostra de um elemento de fonte de dados MySQL no arquivostandalone.xml
:<datasource jndi-name="java:/YourDatasourceName" pool-name="YourDatasourceName"> <connection-url>jdbc:mysql://localhost:3306/YourApplicationURL</connection-url> <driver>mysql-connector-java-5.1.15.jar</driver> <transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation> <pool> <min-pool-size>100</min-pool-size> <max-pool-size>200</max-pool-size> </pool> <security> <user-name>USERID</user-name> <password>PASSWORD</password> </security> <statement> <prepared-statement-cache-size>100</prepared-statement-cache-size> <share-prepared-statements/> </statement> </datasource>
Atualize as referências JNDI no código do aplicativo.
Os nomes de pesquisa JNDI antigos no código fonte do aplicativo devem ser substituídos para uso dos nomes da fonte de dados padronizados do JNDI definidos anteriormente. Consulte a Seção 3.1.8.4, “Modificação do Aplicativo para Seguir as Novas Regras do JNDI Namespace” para maiores informações.Quaisquer anotações@Resource
existentes devem ser também substituídas, das quais acessam a fonte de dados para uso do novo nome JNDI. Por exemplo:@Resource(name = "java:/YourDatasourceName").
3.1.6.4. Configuração da Fonte de Dados para o Hibernate ou JPA
Procedimento 3.10. Remoção do pacote Hibernate
- Remova o Hibernate JARs de suas pastas da biblioteca do aplicativo.
- Remova ou comente o elemento
<hibernate.transaction.manager_lookup_class>
em seu arquivopersistence.xml
, uma vez que este elemento não é necessário.
3.1.6.5. Atualização da Configuração do Adaptador de Recurso
Nas versões anteriores do servidor do aplicativo, a configuração do adaptador do recurso era definida num arquivo com um sufixo *-ds.xml
. No JBoss EAP 6, um adaptador de recurso é configurado num arquivo de configuração do servidor. Caso esteja executando num managed domain, o arquivo de configuração é o arquivo EAP_HOME/domain/configuration/domain.xml
. Caso esteja executando num servidor autônomo, configure o adaptador de recurso no arquivo EAP_HOME/standalone/configuration/standalone.xml
. A informação da referência do esquema, que é a mesma para ambos os módulos, pode ser encontrada sob Esquemas no website do IronJacamar: http://www.ironjacamar.org/documentation.html.
Importante
A informação do descritor do adaptador de recurso está definida no elemento do seguinte subsistema no arquivo de configuração do servidor:
<subsystem xmlns="urn:jboss:domain:resource-adapters:1.1"/>Algumas das informações definidas anteriormente no arquivo
*-ds.xml
do adaptador de recurso poderão ser usadas.
<resource-adapters> <resource-adapter> <archive>multiple-full.rar</archive> <config-property name="Name">ResourceAdapterValue</config-property> <transaction-support>NoTransaction</transaction-support> <connection-definitions> <connection-definition class-name="org.jboss.jca.test.deployers.spec.rars.multiple.MultipleManagedConnectionFactory1" enabled="true" jndi-name="java:/eis/MultipleConnectionFactory1" pool-name="MultipleConnectionFactory1"> <config-property name="Name">MultipleConnectionFactory1Value</config-property> </connection-definition> <connection-definition class-name="org.jboss.jca.test.deployers.spec.rars.multiple.MultipleManagedConnectionFactory2" enabled="true" jndi-name="java:/eis/MultipleConnectionFactory2" pool-name="MultipleConnectionFactory2"> <config-property name="Name">MultipleConnectionFactory2Value</config-property> </connection-definition> </connection-definitions> <admin-objects> <admin-object class-name="org.jboss.jca.test.deployers.spec.rars.multiple.MultipleAdminObject1Impl" jndi-name="java:/eis/MultipleAdminObject1"> <config-property name="Name">MultipleAdminObject1Value</config-property> </admin-object> <admin-object class-name="org.jboss.jca.test.deployers.spec.rars.multiple.MultipleAdminObject2Impl" jndi-name="java:/eis/MultipleAdminObject2"> <config-property name="Name">MultipleAdminObject2Value</config-property> </admin-object> </admin-objects> </resource-adapter> </resource-adapters>
3.1.7. Alterações de Segurança
3.1.7.1. Configuração das Alterações de Segurança do Aplicativo
Nas versões anteriores do JBoss EAP, os arquivos de propriedades posicionados no diretório EAP_HOME/server/SERVER_NAME/conf/
estavam no classpath e poderiam ser facilmente encontrados pelo UsersRolesLoginModule
. No JBoss EAP 6, a estrutura do diretório foi alterada. Os arquivos da propriedade devem ser empacotados com aplicativo para disponibilizá-los no classpath.
Importante
security-domains
para o standalone/configuration/standalone.xml
ou o arquivo de configuração do servidor domain/configuration/domain.xml
:
<security-domain name="example"> <authentication> <login-module code="UsersRoles" flag="required"> <module-option name="usersProperties" value="${jboss.server.config.dir}/example-users.properties"/> <module-option name="rolesProperties" value="${jboss.server.config.dir}/example-roles.properties"/> </login-module> </authentication> </security-domain>
${jboss.server.config.dir}
refere-se ao diretório EAP_HOME/standalone/configuration/
. Caso a instância estiver executando num managed domain, o ${jboss.server.config.dir}
refere-se ao diretório EAP_HOME/domain/configuration/
.
Os security domains não usam mais o prefixo java:/jaas/
em seus nomes no JBoss EAP 6.
- Esse prefixo das configurações do security domain para os aplicativos da Web no
jboss-web.xml
deve ser removido. - Esse prefixo das configurações do security domain para os aplicativos Enterprise no
jboss-web.xml
deve ser removido. Esse arquivo foi substituído pelojboss.xml
no JBoss EAP 6.
3.1.7.2. Atualização dos Aplicativos que usam o PicketLink STS e Web Services
Caso seu aplicativo do JBoss EAP 6.1 use o PicketLink STS e serviços da Web, pode ser necessária a realização de alterações quando ocorrer a migração para o JBoss EAP 6.2 ou versões mais avançadas. Uma correção realizada no JBoss EAP, para o endereço CVE-2013-2133, reforça as checagens da autorização pelo contêiner antes da execução de quaisquer manuseadores JAXWS anexados aos pontos de extremidade WS baseado no EJB3. Consequentemente, algumas das funcionalidades do PicketLink podem ser afetadas uma vez que o PicketLink SAML2Handler
estabiliza uma segurança principal que será necessária mais tarde para uso. O NullPointerException
talvez seja visualizado no log do servidor uma vez que o principal é NULL
quando o HandlerAuthInterceptor
acessa o SAML2Handler
. Esta verificação de segurança pode ser desabilitada para correção deste problema.
Procedimento 3.11. Desabilitação das Verificações de Autorização Adicional
- As verificações de autorização adicional podem ser desabilitadas e continuarem usando as implantações PicktLink existentes, pelo uso de um dos seguintes métodos.
Determinação da Propriedade em todo o Sistema
As verificações de autorização adicional podem ser desabilitadas ao nível do servidor pela determinação do valor do sistema de propriedadeorg.jboss.ws.cxf.disableHandlerAuthChecks
paratrue
. Este método afeta qualquer implantação realizada ao servidor do aplicativo.Consulte o tópico nomeado Configuração das Propriedades de Sistema usando o Management CLI no Guia de Configuração e Administração do JBoss EAP para maiores informações sobre como determinar uma propriedade de sistema.Criação de uma Propriedade no Arquivo do Descritor do Web Services de Implantação
As verificações de autorização no nível de implantação podem ser desabilitadas pela configuração do valor da propriedadeorg.jboss.ws.cxf.disableHandlerAuthChecks
paratrue
no arquivojboss-webservices.xml
.- Crie um arquivo
jboss-webservices.xml
no diretórioMETA-INF/
da implantação pela qual deseja desabilitar as verificações da autorização. - Adicione o seguinte conteúdo:
<?xml version="1.1" encoding="UTF-8"?> <webservices xmlns="http://www.jboss.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee"> <property> <name>org.jboss.ws.cxf.disableHandlerAuthChecks</name> <value>true</value> </property> </webservices>
Nota
org.jboss.ws.cxf.disableHandlerAuthChecks
renderiza um sistema vulnerável ao CVE-2013-2133. Caso o aplicativo esperar por restrições de segurança declaradas nos métodos EJB a serem aplicados e não aplicá-los independentemente ao manuseador JAX-WS, a propriedade não deve ser habilitada. A propriedade deve ser apenas usada para propósitos de compatibilidade inversa, quando necessário, para evitar a interrupção do aplicativo.
3.1.8. Alterações JNDI
3.1.8.1. Atualização dos Nomes JNDI Namespace do Aplicativo
O EJB 3.1 introduziu um JNDI namespace global padronizado e uma série de namespaces relacionados que mapeiam vários escopos do aplicativo Java EE. Os nomes do EJB Portátil é apenas limitado a três deles: java:global
, java:module
e java:app
. Os aplicativos com os EJBs que usam o JNDI devem ser alterados para seguirem a nova convenção padronizada do JNDI namespace.
Procedimento 3.12. Modificação das pesquisas JNDI
- Leia mais a respeito deste assunto na Seção 3.1.8.2, “Nomes do EJB JNDI Portátil ”
As amostras de espaços de nome JNDI dos lançamentos anteriores e como eles são especificados no JBoss EAP podem ser encontradas na: Seção 3.1.8.5, “Amostra do JNDI Namespaces nos Lançamentos Anteriores e como são especificados no JBoss EAP 6”
3.1.8.2. Nomes do EJB JNDI Portátil
A especificação do Java EE 6 define quatro namespaces lógicos, cada um com o seu próprio escopo. No entanto, os nomes do EJB portátil apenas obtém o limite de três deles. A seguinte tabela detalha quando e como usar cada namespace.
Tabela 3.1. Namespaces JNDI Portáveis
JNDI Namespace | Descrição |
---|---|
java:global |
Os nomes neste namespace são compartilhados em todos os aplicativos implantados numa instância do servidor do aplicativo. Use nomes neste namespace para encontrar os arquivos EJBs externos no mesmo servidor.
Segue abaixo uma amostra do java:global namespace:
java:global/jboss-seam-booking/jboss-seam-booking-jar/HotelBookingAction
|
java:module |
Os nomes neste namespace são compartilhados por todos os componentes num módulo, por exemplo: todos os enterprise beans num módulo EJB único ou todos os componentes num módulo da web.
Segue abaixo uma amostra do java:module namespace:
java:module/HotelBookingAction!org.jboss.seam.example.booking.HotelBooking
|
java:app |
Os nomes neste namespace são compartilhados por todos os componentes num aplicativo único. Por exemplo, um WAR e um arquivo EJB jar no mesmo arquivo EAR teriam acesso aos recursos no java:app namespace.
Segue abaixo uma amostra do java:app namespace:
java:app/jboss-seam-booking-jar/HotelBookingAction
|
3.1.8.3. Revisão das Regras JNDI Namespace
O JBoss EAP 6 aprimorou os nomes do JNDI namespace, não apenas para fornecer regras consistentes e premeditadas para cada nome limitado no servidor do aplicativo, mas também para prevenir problemas futuros de compatibilidade. Isto significa que você poderá ter problemas com os namespaces atuais no seu aplicativo, caso eles não seguirem as novas regras.
- Os nomes relativos não qualificados como o
DefaultDS
oujdbc/DefaultDS
devem ser relativamente qualificados para ojava:comp/env
,java:module/env
oujava:jboss/env
, dependendo do contexto. - Os nomes
absolute
não qualificados como/jdbc/DefaultDS
devem ser relativamente qualificados a um nomejava:jboss/root
. - Os nomes
absolute
qualificados como ojava:/jdbc/DefaultDS
devem ser qualificados da mesma forma que os nomesabsolute
não qualificados acima. - O espaço do nome
java:jboss
especial é compartilhado por toda a instância do servidor AS. - Qualquer nome
relative
com o prefixojava:
deve estar em um dos cinco espaços do nome:comp
,module
,app
,global
oujboss
proprietário. Qualquer nome começando comjava:xxx
onde xxx não coincida com nenhum dos cinco acima, resultaria num erro de nome inválido.
3.1.8.4. Modificação do Aplicativo para Seguir as Novas Regras do JNDI Namespace
- Segue abaixo uma amostra da pesquisa JNDI no JBoss EAP 5.1. Este código é normalmente encontrado num método de inicialização.
private ProductManager productManager; try { context = new InitialContext(); productManager = (ProductManager) context.lookup("OrderManagerApp/ProductManagerBean/local"); } catch(Exception lookupError) { throw new ServletException("Unable to find the ProductManager bean", lookupError); }
Note que o nome de pesquisa éOrderManagerApp/ProductManagerBean/local
. - A seguinte amostra relata como a mesma busca poderia ser codificada no JBoss EAP 6 usando a injeção de dependência.
@EJB(lookup="java:app/OrderManagerEJB/ProductManagerBean!services.ejb.ProductManager") private ProductManager productManager;
Os valores de pesquisa são definidos como variáveis do associado e usam o novo nomejava:app
JNDI namespacejava:app/OrderManagerEJB/ProductManagerBean!services.ejb.ProductManager
. - Caso sua preferência não seja o uso da injeção de dependência, a criação do novo InitialContect pode continuar conforme acima e a modificação da busca para uso do novo nome JNDI namespace pode ser realizada.
private ProductManager productManager; try { context = new InitialContext(); productManager = (ProductManager) context.lookup("java:app/OrderManagerEJB/ProductManagerBean!services.ejb.ProductManager"); } catch(Exception lookupError) { throw new ServletException("Unable to find the ProductManager bean", lookupError); }
3.1.8.5. Amostra do JNDI Namespaces nos Lançamentos Anteriores e como são especificados no JBoss EAP 6
Tabela 3.2. Tabela de Mapeamento do JNDI Namespace
Namespace no JBoss EAP 5.x | Namespace no JBoss EAP 6 | Comentários adicionais |
---|---|---|
OrderManagerApp/ProductManagerBean/local | java:module/ProductManagerBean!services.ejb.ProductManager | O Java EE 6 binding default. Possui escopo para o módulo atual e apenas acessível com o mesmo módulo. |
OrderManagerApp/ProductManagerBean/local | java:app/OrderManagerEJB/ProductManagerBean!services.ejb.ProductManager | O Java EE 6 binding default. Possui escopo para o aplicativo atual e apenas acessível com o mesmo aplicativo. |
OrderManagerApp/ProductManagerBean/local | java:global/OrderManagerApp/OrderManagerEJB/ProductManagerBean!services.ejb.ProductManager | O binding default do Java EE 6. Possui escopo para o servidor do aplicativo e acessível globalmente. |
java:comp/UserTransaction | java:comp/UserTransaction | O namespace possui escopo ao componente atual. Não é acessível para threads que não estão no Java EE 6, por exemplo: os threads criados diretamente pelo seu aplicativo. |
java:comp/UserTransaction | java:jboss/UserTransaction | Acessível globalmente. Use isto caso o java:comp/UserTransaction não esteja disponível. |
java:/TransactionManager | java:jboss/TransactionManager | |
java:/TransactionSynchronizationRegistry | java:jboss/TransactionSynchronizationRegistry |