Capítulo 5. Alterações na migração dos aplicativos [Esta é uma tradução automática]


5.1. Alterações nos aplicativos de serviços Web [Esta é uma tradução automática]

O JBossWS 5 traz novos recursos e melhorias de desempenho aos serviços Web do JBoss EAP 7, principalmente através de atualizações Apache CXF, Apache WSS4J, e Apache Santuario componentes.

5.1.1. Alterações de suporte JAX-RPC [Esta é uma tradução automática]

A API Java para RPC (JAX-RPC) baseada em XML foi preterida no Java EE 6 e é opcional no Java EE 7. Ela não está mais disponível ou é suportada no JBoss EAP 7. Os aplicativos que usam JAX-RPC devem ser migrados para uso JAX-WS, que é a atual estrutura de serviços da Web padrão do Java EE.

A utilização dos serviços web JAX-RPC pode ser identificada em qualquer uma das seguintes maneiras:

  • A presença de um arquivo de mapeamento JAX-RPC, que é um arquivo XML com o elemento raiz <java-wsdl-mapping>.
  • A presença de um webservices.xml Arquivo descritor XML que contém um <webservice-description> elemento, que inclui um <jaxrpc-mapping-file> elemento filho. O seguinte é um exemplo de webservices.xml arquivo descritor que define um serviço da Web JAX-RPC.

    <webservices xmlns="http://java.sun.com/xml/ns/j2ee"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://www.ibm.com/webservices/xsd/j2ee_web_services_1_1.xsd" version="1.1">
      <webservice-description>
        <webservice-description-name>HelloService</webservice-description-name>
        <wsdl-file>WEB-INF/wsdl/HelloService.wsdl</wsdl-file>
        <jaxrpc-mapping-file>WEB-INF/mapping.xml</jaxrpc-mapping-file>
        <port-component>
          <port-component-name>Hello</port-component-name>
          <wsdl-port>HelloPort</wsdl-port>
          <service-endpoint-interface>org.jboss.chap12.hello.Hello</service-endpoint-interface>
          <service-impl-bean>
            <servlet-link>HelloWorldServlet</servlet-link>
          </service-impl-bean>
        </port-component>
      </webservice-description>
    </webservices>
  • A presença de um ejb-jar.xml arquivo, que contém um <service-ref> que faz referência a um arquivo de mapeamento JAX-RPC.

5.1.2. Alterações dos serviços web Apache CXF Spring [Esta é uma tradução automática]

Nas versões anteriores do JBoss EAP, você poderia personalizar a integração do JBossWS e do Apache CXF incluindo uma jbossws-cxf.xml arquivo de configuração com o arquivo de implantação do nó de extremidade. Um caso de uso para isso era configurar cadeias de interceptor para terminais de cliente e servidor de serviço da Web no barramento Apache CXF. Essa integração exigiu que o Spring fosse implantado no servidor do JBoss EAP.

A integração Spring não é mais suportada no JBoss EAP 7. Qualquer aplicativo que contenha jbossws-cxf.xml O arquivo de configuração do descritor deve ser modificado para substituir a configuração personalizada definida nesse arquivo. Embora ainda seja possível acessar diretamente a API do Apache CXF, esteja ciente de que o aplicativo não será portátil.

A abordagem sugerida é para substituir configurações personalizadas de Spring com as novas opções de configuração de descritor JBossWS quando possível. A abordagem baseada em descritor JBossWS fornece funcionalidade similar sem exigir modificação do código de ponto de extremidade do cliente. Em alguns casos, você pode substituir Spring por Context Dependency Injection (CDI).

Migrar interceptores de mensagem [Esta é uma tradução automática]

O descritor JBossWS fornece novas opções de configuração que permitem declarar os interceptores sem modificar o código do terminal do cliente. Em vez disso, você declara interceptores dentro de configurações predefinidas de cliente e nó de extremidade especificando uma lista de nomes de classe de interceptor para o cxf.interceptors.in e cxf.interceptors.out propriedades.

O seguinte é um exemplo de um jaxws-endpoint-config.xml arquivo que declara interceptores usando essas propriedades.

<?xml version="1.0" encoding="UTF-8"?>
<jaxws-config xmlns="urn:jboss:jbossws-jaxws-config:4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:javaee="http://java.sun.com/xml/ns/javaee"
  xsi:schemaLocation="urn:jboss:jbossws-jaxws-config:4.0 schema/jbossws-jaxws-config_4_0.xsd">
  <endpoint-config>
    <config-name>org.jboss.test.ws.jaxws.cxf.interceptors.EndpointImpl</config-name>
    <property>
      <property-name>cxf.interceptors.in</property-name>
      <property-value>org.jboss.test.ws.jaxws.cxf.interceptors.EndpointInterceptor,org.jboss.test.ws.jaxws.cxf.interceptors.FooInterceptor</property-value>
    </property>
    <property>
      <property-name>cxf.interceptors.out</property-name>
      <property-value>org.jboss.test.ws.jaxws.cxf.interceptors.EndpointCounterInterceptor</property-value>
    </property>
  </endpoint-config>
</jaxws-config>
Recursos Apache CXF

O descritor JBossWS permite que você declare recursos dentro de configurações predefinidas de cliente e terminal, especificando uma lista de nomes de classes de cxf.features propriedade.

O seguinte é um exemplo de um jaxws-endpoint-config.xml arquivo que declara um recurso usando essa propriedade.

<?xml version="1.0" encoding="UTF-8"?>
<jaxws-config xmlns="urn:jboss:jbossws-jaxws-config:4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:javaee="http://java.sun.com/xml/ns/javaee"
  xsi:schemaLocation="urn:jboss:jbossws-jaxws-config:4.0 schema/jbossws-jaxws-config_4_0.xsd">
  <endpoint-config>
    <config-name>Custom FI Config</config-name>
    <property>
      <property-name>cxf.features</property-name>
      <property-value>org.apache.cxf.feature.FastInfosetFeature</property-value>
    </property>
  </endpoint-config>
</jaxws-config>
Apache CXF HTTP Transport

No Apache CXF, a configuração de transporte HTTP é obtida especificando org.apache.cxf.transport.http.HTTPConduit opções. A integração do JBossWS permite que as condutas sejam modificadas programaticamente usando a API Apache CXF da seguinte forma.

import org.apache.cxf.frontend.ClientProxy;
import org.apache.cxf.transport.http.HTTPConduit;
import org.apache.cxf.transports.http.configuration.HTTPClientPolicy;

// Set chunking threshold before using a JAX-WS port client
...
HTTPConduit conduit = (HTTPConduit)ClientProxy.getClient(port).getConduit();
HTTPClientPolicy client = conduit.getClient();

client.setChunkingThreshold(8192);
...

Você também pode controlar e substituir o Apache CXF HTTPConduit valores padrão, definindo as propriedades do sistema.

PropriedadeTipoDescrição

cxf.client.allowChunking

Boolean

Especifica se envia uma solicitações usando agrupamento

cxf.client.chunkingThreshold

Integer

Define o limite no qual é feita a alteração do modo sem agrupamento para o modo de agrupamento.

cxf.client.connectionTimeout

Long

Define o número de milissegundos de tempo limite da conexão.

cxf.client.receiveTimeout

Long

Define o número de milissegundos para expirar a recepção.

cxf.client.connection

String

Especifica se deve usar o Keep-Alive ou close Tipo de conexão.

cxf.tls-client.disableCNCheck

Boolean

Especifica a desativação da verificação de nome de host CN.

5.1.3. Alterações WS-Security

  • Se o seu aplicativo contiver um manipulador de retorno de chamada personalizado que acessa o org.apache.ws.security.WSPasswordCallback classe, esteja ciente de que esta classe foi movida para o pacote org.apache.wss4j.common.ext.
  • A maioria dos objetos de bean SAML do org.apache.ws.security.saml.ext pacote foram movidos para o org.apache.wss4j.common.saml package.
  • O uso de transporte de chave RSA v1.5 e todos dos algoritmos relacionados não são permitidos por padrão.
  • O Security Token Service (STS) anteriormente validado apenas onBehalfOf fichas. Agora também valida ActAs fichas. Como conseqüência, um nome de usuário e senha válidos devem ser especificados no UsernameToken que é fornecido para o ActAs símbolo.
  • Agora, os tokens SAML Bearer precisam ter uma assinatura interna. o org.apache.wss4j.dom.validate.SamlAssertionValidator classe agora tem um setRequireBearerSignature() método para ativar ou desativar a verificação de assinatura.

5.1.4. Alterações de estruturas de módulos JBoss [Esta é uma tradução automática]

o cxf-api e cxf-rt-core JARs foram fundidos em um cxf-core JAR. Como conseqüência, org.apache.cxf módulo no JBoss EAP agora contém o cxf-core JAR e expõe mais classes do que na versão anterior.

5.1.5. Alterações e requisitos de Bouncy Castle [Esta é uma tradução automática]

Se você quiser usar criptografia AES com Galois/Counter Mode (GCM) para criptografia simétrica em XML/WS-Security, você precisa do provedor de segurança BouncyCastle.

O JBoss EAP 7 vem com o org.bouncycastle módulo e JBossWS agora é capaz de confiar em seu carregador de classe para obter e usar o provedor de segurança BouncyCastle. Portanto, não é mais necessário instalar estaticamente o BouncyCastle na JVM atual. Para aplicativos em execução fora do contêiner, o provedor de segurança pode ser disponibilizado para o JBossWS adicionando uma biblioteca BouncyCastle ao caminho da classe.

Você pode desativar esse comportamento definindo org.jboss.ws.cxf.noLocalBC valor da propriedade para true no jaxws-endpoint-config.xml arquivo descritor de implementação para o servidor ou o jaxws-client-config.xml arquivo descritor para clientes.

Se você quiser uma versão diferente daquela que é enviada com o JBoss EAP, você ainda pode instalar estaticamente o BouncyCastle para a JVM. Neste caso, o provedor de segurança BouncyCastle é escolhido entre o provedor presente no caminho da classe. Para evitar quaisquer problemas, você deve usar BouncyCastle 1.49, 1.51 ou versão superior.

5.1.6. Estratégia de seleção de barramento Apache CXF [Esta é uma tradução automática]

A estratégia de seleção de barramento padrão para clientes em execução no container foi alterada de THREAD_BUS para TCCL_BUS. Para clientes que estão ficando sem contêiner, a estratégia padrão ainda é THREAD_BUS. Você pode restaurar o comportamento para o release anterior usando um dos seguintes métodos.

  • Inicialize o servidor do JBoss EAP com a propriedade do sistema org.jboss.ws.cxf.jaxws-client.bus.strategy valor definido como THREAD_BUS.
  • Defina explicitamente a estratégia de seleção no código do cliente.

5.1.7. Requisitos JAX-WS 2.2 para WebServiceRef [Esta é uma tradução automática]

Os contêineres devem usar os construtores de estilo JAX-WS 2.2, que incluem o WebServiceFeature class como um argumento no construtor, para construir clientes que são injetados em referências de serviço da web. O JBoss EAP 6.4, que acompanha o JBossWS 4, oculta esse requisito. O JBoss EAP 7 é fornecido com o JBossWS 5, que não oculta mais esse requisito. Isso significa que as classes de serviço fornecidas pelo usuário devem implementar o JAX-WS 2.2 ou posterior, atualizando o código existente para usar o javax.xml.ws.Service construtor que inclui um ou mais WebServiceFeature argumentos.

protected Service(URL wsdlDocumentLocation,
       QName serviceName,
       WebServiceFeature... features)

5.1.8. Alterações de verificação CN IgnoreHttpsHost [Esta é uma tradução automática]

Em versões anteriores, você poderia desabilitar a verificação de nome de host de URL HTTPS em relação ao Nome Comum (CN) de um serviço fornecido em seu certificado, definindo a propriedade do sistema org.jboss.security.ignoreHttpsHost para true. Este nome de propriedade do sistema foi substituído por cxf.tls-client.disableCNCheck.

5.1.9. Configuração lado cliente e carregamento de classe [Esta é uma tradução automática]

Como consequência da ativação de injeções em manipuladores de clientes de serviço e de terminal, não é mais possível carregar automaticamente classes do manipulador org.jboss.as.webservices.server.integration Módulo JBoss. Se seu aplicativo depender de uma determinada configuração predefinida, talvez seja necessário definir explicitamente novas dependências do módulo para sua implementação. Para mais informações, veja Migrar Dependências de Módulo Explícito

5.1.10. O mecanismo de substituição de standards endossados Java está descontinuado. [Esta é uma tradução automática]

o Mecanismo de substituição de padrões endossados ​​por Java foi preterido no JDK 1.8_40 com a intenção de removê-lo no JDK 9. Esse mecanismo permitiu que os desenvolvedores disponibilizassem as bibliotecas para todos os aplicativos implementados, colocando JARs em um diretório endossado dentro do JRE.

Se seu aplicativo utiliza implementações JBossWS de Apache CXF, o JBoss EAP 7 assegura que as dependências necessárias sejam adicionadas na ordem correta e esta alteração não deve causar impacto para você. Se seu aplicativo acessa Apache CXF diretamente, você deve fornecer agora as dependências Apache CXF depois das dependências JBossWS como parte da implantação de seu aplicativo.

5.1.11. Especificação de descritor no arquivo EAR [Esta é uma tradução automática]

Nas versões anteriores do JBoss EAP, você poderia configurar o jboss-webservices.xml arquivo descritor de implementação para implantações de serviços da Web EJB no META-INF/ diretório de arquivos JAR ou no WEB-INF/ diretório para implementações de serviço da web POJO e terminais de serviço da Web EJB agrupados em arquivos WAR.

No JBoss EAP 7, agora você pode configurar o jboss-webservices.xml arquivo descritor de implementação no META-INF/ diretório de um arquivo EAR. Se um jboss-webservices.xml arquivo é encontrado no arquivo EAR e no arquivo JAR ou WAR, os dados de configuração no arquivo jboss-webservices.xml O arquivo para o JAR ou WAR substitui os dados correspondentes no arquivo do descritor EAR.

5.2. Atualize a porta e conector URL remoto [Esta é uma tradução automática]

No JBoss EAP 7, o conector padrão foi alterado de remote para http-remoting e a porta de conexão remota padrão foi alterada de 4447 para 8080. A URL do provedor JNDI para a configuração padrão foi alterada de remote://localhost:4447 para http-remoting://localhost:8080.

Se você usa o JBoss EAP 7 migrate operação para atualizar sua configuração, você não precisa modificar o conector remoto, a porta remota ou as URLs do provedor JNDI porque a operação de migração preserva o conector de comunicação remota do JBoss EAP 6 e 4447 configurações de porta na configuração do subsistema. Para mais informações sobre o migrate operação, consulte Operação de Migração do CLI de Gerenciamento.

Se você não usar o migrate operação e, em vez disso, executar com a nova configuração padrão do JBoss EAP 7, você deve alterar o conector remoto, porta remota e URL do provedor de JNDI para usar as novas configurações conforme descrito acima.

5.3. Alterações de aplicativos de mensagens [Esta é uma tradução automática]

5.3.1. Substituir ou atualizar descritores de implantação JMS [Esta é uma tradução automática]

Os arquivos proprietários do descritor de implementação de recursos do HornetQ JMS identificados pelo padrão de nomenclatura -jms.xml não funciona mais no JBoss EAP 7. A seguir, um exemplo de um arquivo descritor de implantação de recurso JMS no JBoss EAP 6.

<?xml version="1.0" encoding="UTF-8"?>
<messaging-deployment xmlns="urn:jboss:messaging-deployment:1.0">
  <hornetq-server>
    <jms-destinations>
      <jms-queue name="testQueue">
        <entry name="queue/test"/>
        <entry name="java:jboss/exported/jms/queue/test"/>
      </jms-queue>
      <jms-topic name="testTopic">
        <entry name="topic/test"/>
        <entry name="java:jboss/exported/jms/topic/test"/>
      </jms-topic>
    </jms-destinations>
  </hornetq-server>
</messaging-deployment>

Se você usou -jms.xml Descritores de implementação JMS em seu aplicativo no release anterior, você pode converter seu aplicativo para usar o descritor de implementação padrão do Java EE 7, conforme especificado na seção EE.5.18 do Especificação Java EE 7 ou você pode atualizar o descritor de implantação para usar o messaging-activemq-deployment esquema em vez disso.

Se você escolher atualizar o descritor, você precisa fazer as seguintes modificações.

  • Altere o espaço de nomes de "urn:jboss:messaging-deployment:1.0" para "urn:jboss:messaging-activemq-deployment:1.0".
  • Mudar o <hornetq-server> nome do elemento para <server>.

O arquivo modificado deve parecer com o exemplo que segue.

<?xml version="1.0" encoding="UTF-8"?>
<messaging-deployment xmlns="urn:jboss:messaging-activemq-deployment:1.0">
  <server>
    <jms-destinations>
      <jms-queue name="testQueue">
        <entry name="queue/test"/>
        <entry name="java:jboss/exported/jms/queue/test"/>
      </jms-queue>
      <jms-topic name="testTopic">
        <entry name="topic/test"/>
        <entry name="java:jboss/exported/jms/topic/test"/>
      </jms-topic>
    </jms-destinations>
  </server>
</messaging-deployment>

Para obter informações sobre alterações de configuração do servidor relacionadas a mensagens, consulte Alterações na configuração do servidor de mensagens.

5.3.2. Atualizar clientes externo JMS [Esta é uma tradução automática]

JBoss EAP 7 ainda suporta API JMS 1.1, assim você não precisa modificar seu código.

O conector e a porta remotos padrão foram alterados no JBoss EAP 7. Para obter detalhes sobre essa alteração, consulte Atualizar o conector e porta de URL remoto.

Se você migrar a configuração do servidor usando o migrate operação, as configurações antigas são preservadas e você não precisa atualizar PROVIDER_URL. No entanto, se você executar com a nova configuração padrão do JBoss EAP 7, você deve alterar PROVIDER_URL no código do cliente para usar o novo http-remoting://localhost:8080 configuração. Para mais informações, veja Migrar o código do cliente de nomeação remota.

Se você planeja migrar seu código para usar a API do JMS 2.0, consulte helloworld-jms início rápido para um exemplo de trabalho.

5.3.3. Substitua a API HornetQ [Esta é uma tradução automática]

O JBoss EAP 6 incluiu o org.hornetq módulo, o que lhe permitiu usar o API do HornetQ no código-fonte da sua aplicação.

Apache ActiveMQ Artemis substitui o HornetQ no JBoss EAP 7, então você deve migrar qualquer código que use a API do HornetQ para usar o Apache ActiveMQ Artemis API. As bibliotecas para esta API estão incluídas no org.apache.activemq.artemis módulo.

ActiveMQ Artemis é uma evolução do HornetQ, por isso muitos conceitos ainda são válidos.

5.4. Alterações de aplicativos JAX-RS e RESTEasy [Esta é uma tradução automática]

O JBoss EAP 6 incluiu o RESTEasy 2, que foi uma implementação do JAX-RS 1.x.

O JBoss EAP 7.0 inclui o RESTEasy 3, que é uma implementação do JAX-RS 2.0, conforme definido pelo JSR 339: JAX-RS 2.0: A API Java para serviços da Web RESTful especificação. Para obter mais informações sobre a API Java para serviços Web RESTful, consulte o Especificação da API JAX-RS 2.0.

A versão do Jackson incluída no JBoss EAP mudou. O JBoss EAP 6 incluiu o Jackson 1.9.9. O JBoss EAP 7 e posterior agora inclui o Jackson 2.6.3 ou superior.

Esta seção descreve como essas alterações podem afetar aplicativos que usam RESTEasy ou JAX-RS.

5.4.1. Classes preteridas de RESTEasy [Esta é uma tradução automática]

Classes de corpo de mensagem e interceptores

JSR 311: JAX-RS: A API Java ™ para serviços da Web RESTful não incluiu um framework interceptador, então o RESTEasy 2 forneceu um. JSR 339: JAX-RS 2.0: A API Java para serviços da Web RESTful introduziu uma estrutura oficial de interceptador e filtro, de modo que a estrutura do interceptador incluída no RESTEasy 2 está obsoleta e é substituída pela instalação do interceptor compatível com JAX-RS 2.0 no RESTEasy 3.x. As interfaces relevantes são definidas no javax.ws.rs.ext pacote do jaxrs-api módulo.

Nota

Todos interceptores de lançamentos prévios do RESTEasy podem executar em paralelo com o novo filtro JAX-RS 2.0 e interfaces de interceptor.

Para obter mais informações sobre interceptores, consulte Interceptores RESTEasy dentro Desenvolvendo Aplicativos de Serviços da Web para o JBoss EAP.

Para mais informações sobre a nova API de substituição, consulte o RESTAasy JAX-RS 3.0.13.Final API ou mais tarde.

API Cliente

A estrutura do cliente RESTEasy em resteasy-jaxrs foi substituído pelo padrão JAX-RS 2.0 resteasy-client módulo. Como resultado, algumas classes e métodos da API do cliente RESTEasy foram descontinuados.

Nota

Para mais informações sobre o org.jboss.resteasy.client.jaxrs Classes de API, consulte o RESTAasy JAX-RS JavaDoc.

StringConverter

o org.jboss.resteasy.spi.StringConverter A classe está obsoleta em RESTEasy 3.x. Esta funcionalidade pode ser substituída usando o JAX-RS 2.0 jax.ws.rs.ext.ParamConverterProvider classe.

5.4.2. Classes de RESTEasy removidas ou protegidas [Esta é uma tradução automática]

Métodos de adição de ResteasyProviderFactory

A maioria dos org.jboss.resteasy.spi.ResteasyProviderFactory add() métodos foram removidos ou protegidos no RESTEasy 3.0. Por exemplo, o addBuiltInMessageBodyReader() e addBuiltInMessageBodyWriter() métodos foram removidos e os addMessageBodyReader() e addMessageBodyWriter() métodos foram protegidos.

Você deve agora usar o registerProvider() e registerProviderInstance() métodos.

Classes suplementares removidas do RESTEasy 3

o @org.jboss.resteasy.annotations.cache.ServerCached anotação, que especificou a resposta para o método JAX-RS deve ser armazenada em cache no servidor, foi removida do RESTEasy 3 e deve ser removida do código do aplicativo.

5.4.3. Outras alterações de RESTEasy [Esta é uma tradução automática]

SignedInput e SignedOuput
  • SignedInput e SignedOutput para resteasy-crypto deve ter o Content-Type definido como multipart/signed tanto no Request ou Response objeto, ou usando o @Consumes ou @Produces anotação.
  • SignedOutput e SignedInput pode ser usado para retornar application/pkcs7-signature Formato do tipo MIME na forma binária, definindo esse tipo na @Produces ou @Consumes anotações.
  • Se o @Produces ou @Consumes é text/plain Tipo MIME, SignedOutput será codificado em base64 e enviado como uma String.
Alterações WS-Security

Os filtros de segurança para @RolesAllowed, @PermitAll, e @DenyAll agora retorne "403 Proibido" em vez de "401 Não Autorizado".

Filtros do lado do cliente

Os novos filtros JAX-RS 2.0 lado cliente não serão limitados e executarão quando você estiver usando a API de cliente RESTEasy a partir de um lançamento prévio.

Suporte HTTP assíncrono

Como a especificação JAX-RS 2.0 adiciona suporte HTTP assíncrono usando o @Suspended anotação e o AsynResponse interface, a API proprietária do RESTEasy para HTTP assíncrono foi preterida e pode ser removida em uma versão futura do RESTEasy. Os módulos assíncronos Tomcat e JBoss Web assíncronos também foram removidos da instalação do servidor. Se você não estiver usando o contêiner Servlet 3.0 ou superior, o processamento do lado do servidor HTTP assíncrono será simulado e executado de forma síncrona no mesmo encadeamento de solicitação.

Cache do lado do servidor

A configuração do cache do lado do servidor foi alterada. por favor veja o Documentação RESTEasy Para maiores informações.

Alterações do provedor Jackson [Esta é uma tradução automática]

Nas versões anteriores do JBoss EAP, a configuração do provedor RESTEasy YAML era ativada por padrão. Isso mudou no JBoss EAP 7. O provedor YAML agora está desabilitado por padrão. Seu uso não é suportado devido a um problema de segurança no SnakeYAML biblioteca usada pelo RESTEasy para unmarshalling e deve ser ativada explicitamente no aplicativo. Para obter informações sobre como habilitar o provedor YAML em seu aplicativo e adicionar as dependências do Maven, consulte Provedor YAML dentro Desenvolvendo Aplicativos de Serviços da Web para o JBoss EAP.

Charset padrão UTF-8 no cabeçalho Content-Type

No JBoss EAP 7.1, o resteasy.add.charset parâmetro está definido como true por padrão. Você pode definir o resteasy.add.charset parâmetro para false se você não quiser que o RESTEasy adicione charset=UTF-8 para o cabeçalho de tipo de conteúdo retornado quando o método de recurso retorna um text/* ou application/xml* tipo de mídia sem um conjunto de caracteres explícito.

Para obter mais informações sobre tipos de mídia de texto e conjuntos de caracteres, consulte Tipos de mídia de texto e conjuntos de caracteres dentro Desenvolvendo Aplicativos de Serviços da Web para o JBoss EAP.

SerializableProvider

A desserialização de objetos Java de fontes não confiáveis ​​não é segura. Por esta razão, no JBoss EAP 7, o org.jboss.resteasy.plugins.providers.SerializableProvider A classe está desabilitada por padrão e não é recomendável usar esse provedor.

Solicitações correspondentes aos métodos de recursos

No RESTEasy 3, melhorias e correções foram feitas na implementação de regras de correspondência, conforme definido na especificação JAX-RS 2.0. Em particular, foi feita uma alteração na forma como um URI ambíguo em um método de sub-recurso e um localizador de sub-recurso é tratado.

No RESTEasy 2, era possível que um localizador de sub-recursos fosse executado com sucesso mesmo quando havia outro sub-recurso com o mesmo URI. Esse comportamento estava incorreto de acordo com a especificação.

No RESTEasy 3, quando houver um URI ambíguo para um sub-recurso e um localizador de sub-recurso, chamar o sub-recurso será bem-sucedido; no entanto, chamar o localizador de sub-recurso resultará em um status HTTP 405 Method Not Allowed erro.

O exemplo a seguir contém um erro ambíguo @Path anotação em um método de sub-recurso e um localizador de sub-recurso. Observe que o URI para ambos os endpoints, anotherResource e anotherResourceLocator, é o mesmo. A diferença entre os dois pontos finais é que o anotherResource método está associado com o verbo REST, POST. o anotherResourceLocator O método não está associado a nenhum verbo REST. De acordo com a especificação, o terminal com o verbo REST, neste caso, o anotherResource método, sempre será selecionado.

@Path("myResource")
public class ExampleSubResources {
    @POST
    @Path("items")
    @Produces("text/plain")
    public Response anotherResource(String text) {
        return Response.ok("ok").build();
    }

    @Path("items")
    @Produces("text/plain")
    public SubResource anotherResourceLocator() {
        return new SubResource();
    }
}

5.4.4. Alterações SPI RESTEasy [Esta é uma tradução automática]

Exceções SPI

Todas exceções de falhas SPI foram preteridas e não são mais utilizadas internamente. Elas foram substituídas com a exceção JAX-RS 2.0 correspondente.

Exceção preteridaExceção de substituição em jaxrs-api módulo

org.jboss.resteasy.spi.ForbiddenException

javax.ws.rs.ForbiddenException

org.jboss.resteasy.spi.MethodNotAllowedException

javax.ws.rs.NotAllowedException

org.jboss.resteasy.spi.NotAcceptableException

javax.ws.rs.NotAcceptableException

org.jboss.resteasy.spi.NotFoundException

javax.ws.rs.NotFoundException

org.jboss.resteasy.spi.UnauthorizedException

javax.ws.rs.NotAuthorizedException

org.jboss.resteasy.spi.UnsupportedMediaTypeException

javax.ws.rs.NotSupportedException

InjectorFactory e Registro

o InjectorFactory e Registry SPIs mudaram. Isso não deve ser um problema se você usar o RESTEasy conforme documentado e suportado.

5.4.5. Alterações do provedor Jackson [Esta é uma tradução automática]

A versão do Jackson incluída no JBoss EAP mudou. A versão anterior do JBoss EAP incluía o Jackson 1.9.9. O JBoss EAP 7 agora inclui o Jackson 2.6.3 ou superior. Como resultado, o provedor de Jackson mudou de resteasy-jackson-provider para resteasy-jackson2-provider.

A atualização para o resteasy-jackson2-provider requer algumas alterações no pacote. Por exemplo, o pacote de anotações de Jackson mudou de org.codehaus.jackson.annotate para com.fasterxml.jackson.annotation.

Para mudar seu aplicativo para usar o provedor padrão que foi incluído na versão anterior do JBoss EAP, veja Mudando o provedor Jackson padrão dentro Desenvolvendo Aplicativos de Serviços da Web para o JBoss EAP.

5.4.6. Alterações à integração de Spring RESTEasy [Esta é uma tradução automática]

A framework de Spring 4.0 introduziu suporte para Java 8. Se você planeja usar integração RESTEasy 3.x com Spring, certifique-se que especificou 4.2.x como a versão mínima para Spring em sua implantação pois esta é a versão estável mais recente suportada pelo JBoss EAP 7.

5.4.7. Alterações ao fornecedor RESTEasy Jettison JSON [Esta é uma tradução automática]

O provedor JSON do RESTEasy Jettison está obsoleto no JBoss EAP 7 e não é mais adicionado às implementações por padrão. Você é encorajado a mudar para o fornecedor recomendado do RESTEasy Jackson. Se preferir continuar a usar o provedor Jettison, você deve definir uma dependência explícita para ele no jboss-deployment-descriptor.xml arquivo conforme demonstrado no exemplo a seguir.

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
  <deployment>
    <exclusions>
      <module name="org.jboss.resteasy.resteasy-jackson2-provider"/>
      <module name="org.jboss.resteasy.resteasy-jackson-provider"/>
    </exclusions>
    <dependencies>
      <module name="org.jboss.resteasy.resteasy-jettison-provider" services="import"/>
    </dependencies>
  </deployment>
</jboss-deployment-structure>

Para obter mais informações sobre como definir dependências explícitas, consulte Adicionar uma dependência de módulo explícita a uma implantação no JBoss EAP Guia de desenvolvimento.

5.5. Alterações aos aplicativos CDI 1.2 [Esta é uma tradução automática]

O JBoss EAP 7 inclui suporte para o CDI 1.2. Como resultado, os aplicativos escritos usando o CDI 1.0 podem ver algumas mudanças no comportamento quando migrados para o JBoss EAP 7. Esta seção resume apenas algumas dessas mudanças.

Você pode encontrar mais informações sobre Weld e CDI 1.2 nas seguintes referências:

Arquivos Bean

As classes Bean de beans ativos devem ser implantadas nos arquivos bean para certificarmos de que estão escaneados pelo CDI para achar e processar as classes bean.

No CDI 1.0, um arquivo foi definido como um explícito arquivo de feijão se continha um beans.xml arquivo no META-INF/ diretório para um aplicativo cliente, EJB ou biblioteca JAR, ou se continha beans.xml arquivo no WEB-INF/ diretório para um WAR.

CDI 1.1 introduzido implícito arquivos de bean, que são arquivos que contêm uma ou mais classes de bean com uma anotação de definição de bean ou um ou mais beans de sessão. Os arquivos de beans implícitos são verificados pelo CDI e, durante a descoberta de tipos, somente classes com anotações de definição de bean são descobertas. Para mais informações, veja Tipo e Descoberta de Feijão dentro Contextos e Injeção de Dependência para a plataforma Java EE.

Um arquivo de beans possui um modo de descoberta de all, annotated ou none. Um arquivo de bean que contém um beans.xml arquivo sem versão tem um modo de descoberta de bean padrão all. Um arquivo de bean que contém um beans.xml arquivo com versão 1.1 ou mais tarde deve especificar o bean-discovery-mode atributo. O valor padrão para o atributo é annotated.

Um arquivo não é um arquivo bean nos seguintes casos:

  • Ele contém um beans.xml arquivo com um bean-discovery-mode do none.
  • Ele contém uma extensão CDI sem beans.xml Arquivo.

Um arquivo é um explícito arquivo de feijão nos seguintes casos:

  • O arquivo contém um beans.xml arquivo com um número de versão de 1.1 ou posterior e um bean-discovery-mode do all.
  • O arquivo contém um beans.xml arquivo sem número de versão.
  • Exemplo: Bandeira de Anotação no jboss-deployment-structure.xml Arquivo [Esta é uma tradução automática]

Um arquivo é um implícito arquivo de feijão nos seguintes casos:

  • O arquivo contém uma ou mais classes de bean com uma anotação de definição de bean ou um ou mais beans de sessão, mesmo que ele não contenha beans.xml Arquivo.
  • O arquivo contém um beans.xml arquivo com um bean-discovery-mode do annotated.

CDI 1.2 limitado Anotações de definição de bean para o seguinte:

  • @ApplicationScoped, @SessionScoped, @ConversationScoped, e @RequestScoped anotações
  • Todos os outros tipos de escopos normais.
  • Exemplo: @DateBridge e @CalendarBridge Anotação [Esta é uma tradução automática]
  • Todas as anotações de estereótipo, que são anotações anotadas com @Stereotype
  • Exemplo: @IndexedEmbedded Anotação [Esta é uma tradução automática]

Para obter mais informações sobre arquivos de bean, consulte Arquivos de Feijão dentro Contextos e Injeção de Dependência para a plataforma Java EE.

Esclarecimento de resolução de conversação

O ciclo de vida do contexto de conversação foi alterado para evitar conflitos com a especificação Servlet, conforme descrito em Edição de Especificação CDI CDI-411. O escopo de conversação está ativo durante todas as solicitações de servlet e não deve impedir que outros servlets ou filtros de servlet definam o corpo do pedido ou a codificação de caracteres.

Resolução por observação

A resolução de evento foi parcialmente reescrita em CDI 1.2. Em CDI 1.0, um evento é entregue a um método de observação se o método de observação possui todos os qualificadores de evento. Em CDI 1.2, um evento é entregue a um método de observação se o método de observação não possui qualificadores de evento ou possui um subconjunto dos qualificadores de evento.

5.6. Migrar as dependências de módulo explicito [Esta é uma tradução automática]

A introdução do sistema modular de carregamento de classes e dos JBoss Modules na versão anterior do JBoss EAP permitiu um controle refinado das classes disponíveis para os aplicativos. Esse recurso permitia que você configurasse dependências explícitas do módulo usando o aplicativo MANIFEST.MF arquivo ou o jboss-deployment-structure.xml arquivo descritor de implantação.

Se você definiu dependências de módulo explícito em seu aplicativo, você deve estar ciente das seguintes alterações no JBoss EAP 7.

Verifique dependências para disponibilidade

Os módulos que estão incluídos no JBoss EAP foram alterados. Quando você migrar seu aplicativo para o JBoss EAP 7, revise seu MANIFEST.MF e jboss-deployment-structure.xml entradas de arquivo para certificar-se de que eles não se referem a nenhum módulo que foi removido deste release do produto.

Dependências que requerem scan de anotação

No release anterior do JBoss EAP, se sua dependência continha anotações que precisavam ser processadas durante a verificação de anotação, como ao declarar EJB Interceptors, era necessário gerar e incluir um índice Jandex em um novo arquivo JAR e, em seguida, definir um sinalizador a MANIFEST.MF ou jboss-deployment-structure.xml arquivo descritor de implantação.

O JBoss EAP 7 agora fornece geração automática de índices de anotação em tempo de execução para módulos estáticos, assim você não precisa mais gerá-los manualmente. No entanto, você ainda precisa adicionar annotations bandeira para o aplicativo MANIFEST.MF arquivo ou o jboss-deployment-structure.xml arquivo descritor de implantação, conforme demonstrado abaixo.

Exemplo: Bandeira de Anotação no MANIFEST.MF Arquivo [Esta é uma tradução automática]

Dependências: com.company.my-ejb annotations, com.company.other

Exemplo: Bandeira de Anotação no jboss-deployment-structure.xml Arquivo [Esta é uma tradução automática]

<jboss-deployment-structure>
  <deployment>
    <dependencies>
      <module name="com.company.my-ejb" annotations="true"/>
      <module name="com.company.other"/>
    </dependencies>
  </deployment>
</jboss-deployment-structure>

5.7. Alterações de migração JPA e Hibernate [Esta é uma tradução automática]

5.7.1. Hibernate ORM 3.0 [Esta é uma tradução automática]

As classes de integração que facilitaram a utilização do Hibernate ORM 3 em lançamentos prévios foram removidas do JBoss EAP 7. Se seu aplicativo ainda utiliza bibliotecas do Hibernate ORM 3, é altamente recomendável que você migre seu aplicativo para utilizar Hibernate ORM 5 pois Hibernate ORM 3 não funcionará mais em JBoss EAP facilmente. Se você não pode migrar para Hibernate ORM 5, você deve definir um módulo JBoss personalizado para os JARs de Hibernate ORM 3 e excluir as classes de Hibernate ORM 5 de seu aplicativo.

5.7.2. Hibernate ORM 4.0 - 4.3 [Esta é uma tradução automática]

Caso seu aplicativo necessite que o cache de segundo nível seja ativado, você deve migrar para Hibernate ORM 5.0, que é integrado com Infinispan 8.x.

As aplicações escritas com o Hibernate ORM 4.x ainda podem usar o Hibernate ORM 4.x. Você deve definir um módulo JBoss personalizado para os JARs ORM 4.x do Hibernate e excluir as classes Hibernate ORM 5 do seu aplicativo. No entanto, é altamente recomendável que você reescreva o código do aplicativo para usar o Hibernate ORM 5. Para obter informações sobre como migrar para o Hibernate ORM 5, consulte Migrando para o Hibernate ORM 5.

5.7.3. Migrando para Hibernate ORM 5 [Esta é uma tradução automática]

Esta seção destaca as alterações que você precisa fazer ao migrar do Hibernate ORM versão 4.3 para a versão 5. Para obter mais informações sobre as mudanças implementadas entre o Hibernate ORM 4 e o Hibernate ORM 5, consulte Guia de migração do Hibernate ORM 5.0.

Classes preteridas de RESTEasy [Esta é uma tradução automática]

As seguintes classes reprovadas foram removidas do Hibernate ORM 5:

Outras alterações às classes e pacotes
Type Handling
  • Construídas em org.hibernate.type.descriptor.sql.SqlTypeDescriptor implementações não mais se registram automaticamente org.hibernate.type.descriptor.sql.SqlTypeDescriptorRegistry. Aplicativos usando personalizado SqlTypeDescriptor implementações que estendem as implementações internas e dependem desse comportamento devem ser atualizadas para chamar SqlTypeDescriptorRegistry.addDescriptor() si mesmos.
  • Para IDs definidos como UUIDs gerados, alguns bancos de dados exigem que você defina explicitamente @Column(length=16) para gerar BINARY(16) para que as comparações funcionem corretamente.
  • Para EnumType mapeamentos definidos no hbm.xml, onde você quer javax.persistence.EnumType.STRING name-mapping, esta configuração deve ser declarada explicitamente usando o useNamed(true) configuração ou especificando um VARCHAR valor de 12.
Alterações do subsistema de transações [Esta é uma tradução automática]
  • A transação SPI passou por uma grande reformulação no Hibernate ORM 5. No Hibernate ORM 4.3, você usou o org.hibernate.Transaction API para acessar diretamente diferentes estratégias de transação de back-end. O Hibernate ORM 5 introduziu um nível de indireção. No back-end, o org.hibernate.Transaction implementação agora fala com um org.hibernate.resource.transaction.TransactionCoordinator, que representa o contexto transacional para uma determinada sessão de acordo com a estratégia de backend. Embora isso não tenha um impacto direto nos desenvolvedores, isso pode afetar a configuração do bootstrap. Anteriormente, os aplicativos especificariam hibernate.transaction.factory_class propriedade, que agora está obsoleta, e se refere a um org.hibernate.engine.transaction.spi.TransactionFactory FQN (nome totalmente qualificado). Com o Hibernate ORM 5, você especifica o hibernate.transaction.coordinator_class configuração e consulte um org.hibernate.resource.transaction.TransactionCoordinatorBuilder. Vejo org.hibernate.cfg.AvailableSettings.TRANSACTION_COORDINATOR_STRATEGY para detalhes adicionais.
  • Os nomes abreviados a seguir agora são reconhecidos:

    • jdbc: Gerenciar transações usando o JDBC java.sql.Connection. Este é o padrão para transações não-JPA.
    • jta: Gerenciar transações usando o JTA.

      Importante

      Se um aplicativo JPA não fornecer uma configuração para o hibernate.transaction.coordinator_class propriedade, o Hibernate irá construir automaticamente o coordenador de transação apropriado com base no tipo de transação para a unidade de persistência.

      Se um aplicativo não-JPA não fornecer uma configuração para o hibernate.transaction.coordinator_class propriedade, o Hibernate será o padrão jdbc para gerenciar as transações. Esse padrão causará problemas se o aplicativo realmente usar transações baseadas em JTA. Um aplicativo não-JPA que usa transações baseadas em JTA deve definir explicitamente hibernate.transaction.coordinator_class valor da propriedade para jta ou fornecer um costume org.hibernate.resource.transaction.TransactionCoordinatorBuilder que constrói um org.hibernate.resource.transaction.TransactionCoordinator que coordena corretamente com transações baseadas em JTA.

Alterações no Hibernate Search [Esta é uma tradução automática]
  • o cfg.xml os arquivos são novamente totalmente analisados ​​e integrados a eventos, segurança e outras funções.
  • As propriedades carregadas do cfg.xml usando o EntityManagerFactory não prefixou anteriormente nomes com hibernate. Isso agora se tornou consistente.
  • A configuração não é serializável.
  • o org.hibernate.dialect.Dialect.getQuerySequencesString() O método agora recupera valores de catálogo, esquema e incremento.
  • o AuditConfiguration modificador foi removido de org.hibernate.envers.boot.internal.EnversService.
  • o AuditStrategy parâmetros do método foram alterados para remover o obsoleto AuditConfiguration e usar o novo EnversService.
  • Várias classes e interfaces no org.hibernate.hql.spi pacote e subpacotes foram movidos para o novo org.hibernate.hql.spi.id pacote. Isso inclui o MultiTableBulkIdStrategy classe e o AbstractTableBasedBulkIdHandler, TableBasedDeleteHandlerImpl, e TableBasedUpdateHandlerImpl interfaces e suas subclasses.
  • Houve um redesenho completo de contratos de acesso a propriedade.
  • Válido hibernate.cache.default_cache_concurrency_strategy valores de configuração são agora definidos usando o org.hibernate.cache.spi.access.AccessType.getExternalName() método em vez do org.hibernate.cache.spi.access.AccessType constantes de enum. Isso é mais consistente com outras configurações do Hibernate.

5.7.4. Migrando do Hibernate ORM 5.0 para o Hibernate ORM 5.1 [Esta é uma tradução automática]

Enquanto o JBoss EAP 7.0 incluía o Hibernate ORM 5.0, o JBoss EAP 7.1 agora inclui o Hibernate ORM 5.1. Esta seção destaca as diferenças e as mudanças necessárias ao migrar do Hibernate ORM versão 5.0 para a versão 5.1.

Hibernate ORM 3.0 [Esta é uma tradução automática]

Esta versão inclui muitas melhorias de desempenho e correções de bugs, que são detalhadas em Recursos do Hibernate ORM 5.1 no JBoss EAP Notas de versão 7.1.0. Para informações adicionais sobre as mudanças implementadas entre o Hibernate ORM 5.0 eo Hibernate ORM 5.1, veja o Hibernate ORM 5.1 Guia de Migração.

Mudanças no gerenciamento de JMX [Esta é uma tradução automática]
Mudanças no Cliente EJB no JBoss EAP 7 [Esta é uma tradução automática]

As mudanças de ferramentas de gerenciamento de esquema no Hibernate ORM 5.1 são principalmente focadas nas seguintes áreas:

  • Unificando o manuseio de hbm2ddl.auto e o JPA do Hibernate schema-generation Apoio, suporte.
  • Removendo as preocupações do JDBC do SPI para facilitar a substituição real do Hibernate OGM, um mecanismo de persistência que fornece suporte ao Java Persistence (JPA) para armazenamentos de dados NoSQL.

As alterações de ferramentas de gerenciamento de esquema devem ser apenas uma preocupação de migração para aplicativos que usam diretamente qualquer uma das seguintes classes:

  • org.hibernate.tool.hbm2ddl.SchemaExport
  • org.hibernate.tool.hbm2ddl.SchemaUpdate
  • org.hibernate.tool.hbm2ddl.SchemaValidator
  • org.hibernate.tool.schema.spi.SchemaManagementToolou qualquer um dos seus delegados
Mudanças de Configuração de Mensagens no JBoss EAP 7.1 [Esta é uma tradução automática]

O Hibernate ORM 5.1.10, incluído no JBoss EAP 7.1, introduziu uma nova estratégia para recuperar tabelas de banco de dados que melhoram SchemaMigrator e SchemaValidator desempenho. Esta estratégia executa uma única java.sql.DatabaseMetaData#getTables(String, String, String, String[]) ligue para determinar se cada javax.persistence.Entity tem uma tabela de banco de dados mapeada. Esta é a estratégia padrão, e usa o hibernate.hbm2ddl.jdbc_metadata_extraction_strategy=grouped configuração de propriedade. Essa estratégia pode exigir hibernate.default_schema e / ou hibernate.default_catalog ser provido.

Para usar a estratégia antiga, que executa uma java.sql.DatabaseMetaData#getTables(String, String, String, String[]) chamar para each javax.persistence.Entity, use o hibernate.hbm2ddl.jdbc_metadata_extraction_strategy=individually configuração de propriedade.

5.8. Alterações no Hibernate Search [Esta é uma tradução automática]

A versão do Hibernate Search fornecida com JBoss EAP 7 foi alterada. O lançamento prévio do JBoss EAP fornecia Hibernate Search 4.6.x. O JBoss EAP 7 fornece Hibernate Search 5.5.x.

O Hibernate Search 5.5 é construído sobre o Apache Lucene 5.3.1. Se você usa APIs nativas do Lucene, lembre-se de alinhar com essa versão. o Hibernate Search 5.5 API envolve e oculta a complexidade de muitas das alterações da API do Lucene feitas entre a versão 3 e a versão 5; No entanto, algumas classes agora são reprovadas, renomeadas ou reempacotadas. Esta seção descreve como essas alterações podem afetar o código do seu aplicativo.

Alterações no Hibernate Search [Esta é uma tradução automática]

Indexing of id Fields of Embedded Relations

Ao usar um @IndexedEmbedded anotação para incluir campos de uma entidade relacionada, o id da entidade relacionada não está mais incluída. Você pode ativar a inclusão do id usando o includeEmbeddedObjectId atributo do @IndexedEmbedded anotação.

Exemplo: @IndexedEmbedded Anotação [Esta é uma tradução automática]

@IndexedEmbedded(includeEmbeddedObjectId=true)

Alterações de migração JPA e Hibernate [Esta é uma tradução automática]

Números e datas agora são indexados como campos numéricos por padrão. Propriedades do tipo int, long, float, double, e suas classes de wrapper correspondentes não são mais indexadas como strings. Em vez disso, eles agora são indexados usando a codificação numérica apropriada do Lucene. o id campos são uma exceção a essa regra. Mesmo quando eles são representados por um tipo numérico, eles ainda são indexados como uma palavra-chave de string por padrão. O uso de @NumericField agora está obsoleto, a menos que você queira especificar uma precisão personalizada para a codificação numérica. Você pode manter o antigo formato de índice baseado em sequência especificando explicitamente uma ponte de campo de codificação de cadeia de caracteres. No caso de inteiros, esta é a org.hibernate.search.bridge.builtin.IntegerBridge. Verifica a org.hibernate.search.bridge.builtin pacote para outras pontes de campo disponíveis publicamente.

Date e Calendar não são mais indexados como strings. Em vez disso, as instâncias são codificadas como valores longos representando o número de milissegundos desde 1º de janeiro de 1970, 00:00:00 GMT. Você pode alternar o formato de indexação usando o novo EncodingType enum. Por exemplo:

Exemplo: @DateBridge e @CalendarBridge Anotação [Esta é uma tradução automática]

@DateBridge(encoding=EncodingType.STRING)
@CalendarBridge(encoding=EncodingType.STRING)

A alteração de codificação de números e datas é importante e pode ter um grande impacto no comportamento do aplicativo. Se você tiver uma consulta que segmente um campo que foi anteriormente codificado por string, mas agora está codificado numericamente, será necessário atualizar a consulta. Os campos numéricos devem ser pesquisados ​​com um NumericRangeQuery. Você também deve se certificar de que todos os campos segmentados por facetação sejam codificados por string. Se você usar a consulta de pesquisa DSL, a consulta correta deverá ser criada automaticamente para você.

Alterações no Hibernate Search [Esta é uma tradução automática]

  • As opções de classificação foram aprimoradas e a codificação de campo especificada incorretamente para opções de classificação agora resulta em exceções de tempo de execução. O Lucene também oferece uma classificação mais eficiente se os campos usados ​​no tipo forem conhecidos de antemão. O Hibernate Search 5.5 fornece o novo @SortableField anotação e seu companheiro multi-valorizado @SortableFields. Veja o Guia de Migração do Hibernate Search 5.4 to 5.5 Para maiores informações.
  • O Lucene SortField API requer a seguinte alteração no código do aplicativo.

    No lançamento prévio do JBoss EAP, você definia o tipo do campo de classificação na consulta conforme segue.

    fulltextQuery.setSort(new Sort(new SortField("title", SortField.STRING)));

    O seguinte é um exemplo de como definir no JBoss EAP 7.

    fulltextQuery.setSort(new Sort(new SortField("title", SortField.Type.STRING)));
  • Desde a SearchFactory só deve ser usado pela integração ORM, foi movido do hibernate-search-engine módulo para o hibernate-search-orm módulo. Outros integradores devem depender exclusivamente SearchIntegrator, que substitui o obsoleto SearchFactoryIntegrator.
  • O valor enum SpatialMode.GRID foi renomeado para SpatialMode.HASH.
  • FullTextIndexEventListener agora é uma aula final. Se você atualmente estende essa classe, você deve encontrar uma solução alternativa para obter a mesma funcionalidade.
  • o hibernate-search-analyzers módulo foi removido. A abordagem recomendada é usar diretamente o artefato apropriado do Lucene, por exemplo org.apache.lucene:lucene-analyzers-common.
  • A API do controlador JMS foi alterada. A dependência de backend do JMS no Hibernate ORM foi removida para que pudesse ser usada em outros ambientes não-ORM. Uma consequência é que os implementadores de org.hibernate.search.backend.impl.jms.AbstractJMSHibernateSearchController deve ajustar-se à nova assinatura. Essa classe é uma classe interna e é recomendável usá-la como exemplo, em vez de estendê-la.
  • o org.hibernate.search.spi.ServiceProvider O SPI foi refatorado. Se você estava integrando com o contrato de serviço antigo, consulte o Hibernate Search 5.5 Javadoc do ServiceManager, Service, Startable e Stoppable para detalhes sobre o novo contrato.
  • Se você manteve os índices gerados pelo Lucene 3.xe não os reconstruiu com o Hibernate Search 5.0 ou posterior, você terá um IndexFormatTooOldException. Recomenda-se reconstruir os índices com o indexador de massa. Se você não for capaz de fazer isso, tente usar o Lucene IndexUpgrader. Você deve atualizar cuidadosamente os mapeamentos do Hibernate Search, caso o comportamento padrão tenha mudado. Para mais informações, consulte o Guia de migração do Apache Lucene.
  • O Apache Lucene foi atualizado de 3.6 para 5.3 no JBoss EAP 7. Se o seu código importar o código do Lucene diretamente, veja o Guia de migração do Apache Lucene para detalhes das alterações. Informações adicionais também podem ser encontradas no Lucene Change Log.
  • Ao usar @Field(indexNullAs=) Para codificar um valor de marcador nulo no índice, o tipo do marcador deve ser compatível com todos os outros valores indexados nesse mesmo campo. Por exemplo, anteriormente era possível codificar um valor nulo para campos numéricos usando uma string "null". Isso não é mais permitido. Em vez disso, você deve escolher um número para representar o null valor, como -1.
  • Melhorias significativas foram feitas no motor de lapidação. A maioria das alterações não afeta a API. A única exceção notável é que você deve agora anotar todos os campos que você pretende usar para lapidação com o @Facet ou @Facets anotação.

Alterações no Hibernate Search [Esta é uma tradução automática]

A lista que segue é uma lista de classes de Hibernate Search que foram reempacotadas ou renomeadas.

Pacote e anterior e classeNovo pacote e classe

org.hibernate.search.Environment

org.hibernate.search.cfg.Environment

org.hibernate.search.FullTextFilter

org.hibernate.search.filter.FullTextFilter

org.hibernate.search.ProjectionConstants

org.hibernate.search.engine.ProjectionConstants

org.hibernate.search.SearchException

org.hibernate.search.exception.SearchException

org.hibernate.search.Version

org.hibernate.search.engine.Version

Lucene - Classes renomeadase reempacotadas

Os analisadores de consulta foram movidos para um novo módulo, resultando em uma alteração de org.apache.lucene.queryParser.QueryParser para org.apache.lucene.queryparser.classic.QueryParser.

Muitos dos analisadores Lucene foram refatorados, resultando em mudanças de embalagem. Veja o Documentação do Apache Lucene para encontrar os pacotes de substituição.

Algumas classes de utilitário do Apache Solr, por exemplo TokenizerFactory ou TokenFilterFactory, foram movidos para o Apache Lucene. Se o seu aplicativo usar esses utilitários ou analisadores personalizados, você deverá localizar o novo nome do pacote no Apache Lucene.

Veja o Guia de migração do Apache Lucene Para maiores informações.

Alterações no Hibernate Search [Esta é uma tradução automática]

Para obter a lista completa de interfaces, classes, enumerações, tipos de anotações, métodos, construtores e constantes enum do Hibernate Search, consulte Hibernate Search Deprecated API documento.

Alterações no Hibernate Search [Esta é uma tradução automática]
InterfaceDescrição

org.hibernate.search.store.IndexShardingStrategy

Depreciado a partir do Hibernate Search 4.4. Pode ser removido na pesquisa 5. Use ShardIdentifierProvider em vez de.

org.hibernate.search.store.Workspace

Essa interface será movida e deve ser considerada uma API não pública. Para mais informações, veja HSEARCH-1915.

Alterações no Hibernate Search [Esta é uma tradução automática]
ClasseDescrição

org.hibernate.search.filter.FilterKey

As chaves de filtragem personalizadas são preteridas e estão programadas para serem removidas em Hibernate Search 6. A partir de Hibernate Search 5.1, as chaves para caching os filtros Lucene são calculadas automaticamente baseando-se nos parâmetros de filtros fornecidos.

org.hibernate.search.filter.StandardFilterKey

As chaves de filtragem personalizadas são preteridas e estão programadas para serem removidas em Hibernate Search 6. A partir de Hibernate Search 5.1, as chaves para caching os filtros Lucene são calculadas automaticamente baseando-se nos parâmetros de filtros fornecidos.

Alterações no Hibernate Search [Esta é uma tradução automática]
EnumDescrição

org.hibernate.search.annotations.FieldCacheType

Remova o CacheFromIndex anotação como é obsoleto. Vejo Hibernate Search Annotations Deprecated.

Alterações no Hibernate Search [Esta é uma tradução automática]
AnotaçãoDescrição

org.hibernate.search.annotations.CacheFromIndex

Remover anotação. Não é necessário um substituto alternativo.

org.hibernate.search.annotations.Key

As chaves de cache de filtro personalizado são uma funcionalidade preterida e estão programadas para serem removidas em Hibernate Search 6. A partir de Hibernate Search 5.1, as chaves de cache de filtro são definidas automaticamente baseadas nos parâmetros de filtros, portanto não é mais necessário fornecer um objeto chave.

Alterações no Hibernate Search [Esta é uma tradução automática]
MétodoDescrição

org.hibernate.search.FullTextSharedSessionBuilder.autoClose()

Sem substitução

org.hibernate.search.FullTextSharedSessionBuilder.autoClose(boolean)

Sem substitução

org.hibernate.search.cfg.IndexedMapping.cacheFromIndex(FieldCacheType…​)

Isto será removido sem substituição.

org.hibernate.search.cfg.EntityDescriptor.getCacheInMemory()

Isto será removido sem substituição.

org.hibernate.search.cfg.ContainedInMapping.numericField()

Invocar field().numericField() em vez de.

org.hibernate.search.cfg.EntityDescriptor.setCacheInMemory(Map<String, Object>)

Isto será removido sem substituição.

org.hibernate.search.MassIndexer.threadsForSubsequentFetching(int)

Este método será removido.

org.hibernate.search.query.dsl.FuzzyContext.withThreshold(float)

Use FuzzyContext.withEditDistanceUpTo(int).

Alterações no Hibernate Search [Esta é uma tradução automática]
ConstrutorDescrição

org.hibernate.search.cfg.NumericFieldMapping(PropertyDescriptor, EntityDescriptor, SearchMapping)

Usar NumericFieldMapping.NumericFieldMapping(String, PropertyDescriptor, EntityDescriptor, SearchMapping) em vez de.

Alterações que impactam integradores avançados

Esta seção descreve alterações que não fazem parte da API pública. Isto não deve impactar o desenvolvedor comum pois estes artefatos devem ser acessados somente por integradores que estendem a framework Hibernate Search.

5.9. Migrar de beans de entidade para JPA [Esta é uma tradução automática]

Suporte para beans de entidade EJB é facultativo em Java EE 7 e não são suportados em JBoss EAP 7. Isto significa que beans de entidade de persistência gerenciada por contêiner (CMP) e persistência gerenciada pelo bean (BMP) devem ser reescritos para usar entidades Java Persistence API (JPA) quando você migrar para JBoss EAP 7.

Nas versões anteriores do JBoss EAP, os beans de entidade eram criados no código-fonte do aplicativo, estendendo javax.ejb.EntityBean classe e implementar os métodos necessários. Eles foram então configurados no ejb-jar.xml Arquivo. Um bean de entidade CMP foi especificado usando um <entity> elemento que continha um <persistence-type> elemento filho com um valor de Recipiente. Um bean de entidade BMP foi especificado usando um <entity> elemento que continha um <persistence-type> elemento filho com um valor de Feijão.

No JBoss EAP 7, você deve substituir quaisquer beans de entidade CMP e BMP em seu código por entidades JPA (Java Persistence API). Entidades JPA são criadas usando o javax.persistence. * classes e são definidos no persistence.xml Arquivo.

O que segue é um exemplo de uma classe de entidade JPA.

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
// User is a keyword in some SQL dialects!
@Table(name = "MyUsers")
public class MyUser {
    @Id
    @GeneratedValue
    private Long id;

    @Column(unique = true)
    private String username;
    private String firstName;
    private String lastName;

    public Long getId() {
        return id;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getFirstName() {
        return firstName;
    }
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }
    public String getLastName() {
        return lastName;
    }
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

O seguinte é um exemplo de um persistence.xml Arquivo.

<persistence version="2.1"
      xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="
        http://xmlns.jcp.org/xml/ns/persistence
        http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
  <persistence-unit name="my-unique-persistence-unit-name">
    <properties>
      // properties...
    </properties>
  </persistence-unit>
</persistence>

Para exemplos de trabalho de entidades JPA, consulte o bmt, cmt, e hibernate5 quickstarts que acompanham o JBoss EAP 7.

5.10. Alterações de propriedades de persistência JPA [Esta é uma tradução automática]

Uma nova propriedade de persistência jboss.as.jpa.deferdetach, foi adicionado para fornecer compatibilidade com o comportamento de persistência em releases anteriores do JBoss EAP.

o jboss.as.jpa.deferdetach property controla se o contexto de persistência com escopo de transação usado em um encadeamento de transação não JTA desanexa as entidades carregadas após cada EntityManager invocação ou se aguarda até que o contexto de persistência seja fechado, por exemplo, quando a invocação do bean de sessão terminar. O valor da propriedade é padronizado para false, ou seja, as entidades são desanexadas ou limpas após cada EntityManager invocação. Esse é o comportamento padrão correto, conforme definido no Especificação JPA. Se o valor da propriedade estiver definido como true, as entidades não são desanexadas até que o contexto de persistência seja fechado.

No JBoss EAP 5, a persistência se comportou como se jboss.as.jpa.deferdetach propriedade foi definida para true. Para obter esse mesmo comportamento ao migrar seu aplicativo do JBoss EAP 5 para o JBoss EAP 7, você deve definir jboss.as.jpa.deferdetach valor da propriedade para true na tua persistence.xml conforme mostrado no exemplo a seguir.

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
    <persistence-unit name="EAP5_COMPAT_PU">
    <jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source>
    <properties>
         <property name="jboss.as.jpa.deferdetach" value="true" />
    </properties>
  </persistence-unit>
</persistence>

No JBoss EAP 6, a persistência se comportou como se jboss.as.jpa.deferdetach propriedade foi definida para false. Este é o mesmo comportamento visto no JBoss EAP 7, portanto, nenhuma mudança é necessária quando você migra seu aplicativo.

5.10.1. Mudanças de propriedade de persistência do JPA no JBoss EAP 7.1 [Esta é uma tradução automática]

No JBoss EAP 7.0, a verificação de erro de contexto de persistência não sincronizada não era tão rigorosa quanto deveria nas áreas a seguir.

  • Um contexto de persistência gerenciado por contêiner sincronizado tinha permissão para usar um contexto de persistência estendida não sincronizada que estava associado a uma transação JTA. Em vez disso, deveria ter lançado um IllegalStateException para impedir que o contexto de persistência não sincronizado seja usado.
  • Um contexto de persistência não sincronizado especificado em um descritor de implantação foi tratado como sincronizado.

Além do que, além do mais, PersistenceProperty sugestões no @PersistenceContext foram erroneamente ignorados no JBoss EAP 7.0.

Esses problemas foram abordados e corrigidos no JBoss EAP 7.1. Como essas atualizações podem resultar em uma mudança indesejada no comportamento do aplicativo, duas novas propriedades de unidade de persistência foram introduzidas no JBoss EAP 7.1 para fornecer compatibilidade com versões anteriores e preservar o comportamento anterior.

PropriedadeDescrição

wildfly.jpa.skipmixedsynctypechecking

Esta propriedade desativa a verificação de erros. Ele deve ser usado apenas como uma medida temporária para compatibilidade com versões anteriores em situações onde os aplicativos funcionavam no JBoss EAP 7.0 e falhavam no JBoss EAP 7.1. Como essa propriedade pode ser reprovada em uma versão futura, recomenda-se que você corrija o código do aplicativo assim que puder.

wildfly.jpa.allowjoinedunsync

Esta propriedade é uma alternativa para wildfly.jpa.skipmixedsynctypechecking. Ele permite que o aplicativo trate contextos de persistência não sincronizados associados a uma transação JTA como se fossem contextos de persistência sincronizados.

5.11. Migrar o código de cliente EJB [Esta é uma tradução automática]

5.11.1. Mudanças no Cliente EJB no JBoss EAP 7 [Esta é uma tradução automática]

O conector e a porta remotos padrão foram alterados no JBoss EAP 7. Para obter detalhes sobre essa alteração, consulte Atualizar o conector e porta de URL remoto.

Se você usou o migrate operação para migrar a configuração do servidor, as configurações antigas são preservadas e você não precisa fazer as alterações detalhadas abaixo. No entanto, se você executar com a nova configuração padrão do JBoss EAP 7, deverá fazer as seguintes alterações.

5.11.1.1. Atualize a porta de conexão remota padrão [Esta é uma tradução automática]

Altere o valor da porta de conexão remota de 4447 para 8080 no jboss-ejb-client.properties Arquivo.

Exemplo: jboss-ejb-client.properties Arquivo de propriedades [Esta é uma tradução automática]

Exemplo: JBoss EAP 6 jboss-ejb-client.properties Arquivo [Esta é uma tradução automática]

remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false
remote.connections=default
remote.connection.default.host=localhost
remote.connection.default.port=4447
remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false

Exemplo: JBoss EAP 7 jboss-ejb-client.properties Arquivo [Esta é uma tradução automática]

remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false
remote.connections=default
remote.connection.default.host=localhost
remote.connection.default.port=8080
remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false

5.11.1.2. Atualizar o conector padrão [Esta é uma tradução automática]

Se você estiver executando com a nova configuração do JBoss EAP 7, o conector padrão foi alterado de remote para http-remoting. Essa mudança impacta os clientes que usam bibliotecas de uma versão do JBoss EAP e se conectam ao servidor em uma versão diferente.

  • Se um aplicativo cliente usa a biblioteca de cliente EJB do JBoss EAP 6 e deseja se conectar ao servidor do JBoss EAP 7, o servidor deve ser configurado para expor um remote conector em uma porta diferente 8080. O cliente deve então se conectar usando esse conector recém-configurado.
  • Um aplicativo cliente que usa a biblioteca de cliente EJB do JBoss EAP 7 e deseja se conectar ao servidor do JBoss EAP 6 deve estar ciente de que a instância do servidor não usa o http-remoting conector e, em vez disso, usa um remote conector. Isso é obtido definindo uma nova propriedade de conexão do lado do cliente.

    Exemplo: remote Propriedade de Conexão [Esta é uma tradução automática]

    remote.connection.default.protocol=remote

5.11.2. Migrar código de cliente de nomeação remota [Esta é uma tradução automática]

Se você está executando com a nova configuração padrão JBoss EAP 7, você deve modificar seu código cliente para usar a nova porta remota padrão e conector.

O exemplo seguinte é de como propriedades de nomeação remota foram especificadas no código cliente no JBoss EAP 6.

java.naming.factory.initial=org.jboss.naming.remote.client.InitialContextFactory
java.naming.provider.url=remote://localhost:4447

O exemplo seguinte é de como especificar as propriedades de nomeação remota no código cliente no JBoss EAP 7.

java.naming.factory.initial=org.wildfly.naming.client.WildFlyInitialContextFactory
java.naming.provider.url=http-remoting://localhost:8080

5.11.3. Alterações Adicionais do Cliente EJB Introduzidas no JBoss EAP 7.1 [Esta é uma tradução automática]

Enquanto o JBoss EAP 7.0 é fornecido com o JBoss EJB Client 2.1.4, o JBoss EAP 7.1 é fornecido com o JBoss EJB Client 4.0.x, que inclui várias mudanças na API.

  • o org.ejb.client.EJBClientInvocationContext class adicionou os seguintes novos métodos.

    MétodoTipoDescrição

    isBlockingCaller()

    boleano

    Determine se esta invocação está atualmente bloqueando o encadeamento de chamada.

    isClientAsync()

    boleano

    Determine se o método está marcado como assíncrono do cliente, o que significa que a chamada deve ser assíncrona, independentemente de o método do lado do servidor ser assíncrono.

    isIdempotent()

    boleano

    Determine se o método está marcado como idempotente, o que significa que o método pode ser chamado mais de uma vez sem efeito adicional.

    setBlockingCaller(boolean)

    vazio

    Estabeleça se esta invocação está atualmente bloqueando o encadeamento de chamada.

    setLocator(EJBLocator<T>)

    <T> void

    Definir o localizador para o destino de invocação.

  • o org.ejb.client.EJBLocator class adicionou os seguintes novos métodos.

    MétodoTipoDescrição

    asStateful()

    StatefulEJBLocator<T>

    Devolva este localizador como um localizador com estado, se for um.

    asStateless()

    StatelessEJBLocator<T>

    Devolva este localizador como um localizador sem estado, se for um.

    isEntity()

    boleano

    Determine se este é um localizador de entidades.

    isHome()

    boleano

    Determine se esse é um localizador de casas.

    isStateful()

    boleano

    Determine se este é um localizador com estado.

    isStateless()

    boleano

    Determine se esse é um localizador sem estado.

    withNewAffinity(Affinity)

    abstract EJBLocator<T>

    Crie uma cópia deste localizador, mas com a nova afinidade fornecida.

  • Um novo org.ejb.client.EJBClientPermission classe, que é uma subclasse de java.security.Permission, foi introduzido para controlar o acesso a operações EJB privilegiadas.

    • Ele fornece os seguintes construtores.

      • EJBClientPermission(String name)
      • EJBClientPermission(String name, String actions)
    • Ele fornece os seguintes métodos.

      MétodoTipoDescrição

      equals(EJBClientPermission obj)

      boleano

      Verifica dois EJBClientPermission objetos para igualdade.

      equals(Object obj)

      boleano

      Verifica dois Permission objetos para igualdade.

      equals(Permission obj)

      boleano

      Verifica dois Permission objetos para igualdade.

      getActions()

      String

      Retorna as ações como uma string.

      hashcode()

      int

      Retorna o valor do código hash para este Permission objeto.

      implies(EJBClientPermission permission)

      boleano

      Verifica se as ações da permissão especificada são implicado por esta EJBClientPermission ações do objeto.

      implies(Permission permission)

      boleano

      Verifica se as ações da permissão especificada são implicado por esta Permission ações do objeto.

  • Um novo org.ejb.client.EJBMethodLocator Uma classe foi introduzida para localizar um método EJB específico.

    • Ele fornece o construtor a seguir.

      • EJBMethodLocator(String methodName, String…​ parameterTypeNames)
    • Ele fornece os seguintes métodos.

      MétodoTipoDescrição

      equals(EJBMethodLocator other)

      boleano

      Determine se esse objeto é igual a outro.

      equals(Object other)

      boleano

      Determine se esse objeto é igual a outro.

      forMethod(Method method)

      static EJBMethodLocator

      Obtenha um localizador de método para o método de reflexão fornecido.

      getMethodName()

      String

      Obtenha o nome do método.

      getParameterCount()

      int

      Obtenha a contagem de parâmetros.

      getParameterTypeName(int index)

      String

      Obtenha o nome do parâmetro no índice fornecido.

      hashCode()

      int

      Obtenha o código hash.

  • Um novo org.jboss.ejb.client.EJBReceiverInvocationContext.ResultProducer.Failed A classe foi introduzida para casos de falha.

    • Ele fornece o construtor a seguir.

      • Failed(Exception cause)
    • Ele fornece os seguintes métodos.

      MétodoTipoDescrição

      discardResult()

      vazio

      Descarte o resultado, indicando que ele não será usado.

      getResult()

      Object

      Obter o resultado

  • Um novo org.jboss.ejb.client.EJBReceiverInvocationContext.ResultProducer.Immediate classe foi introduzida para resultados imediatos.

    • Ele fornece o construtor a seguir.

      • Failed(Exception cause)
    • Ele fornece os seguintes métodos.

      MétodoTipoDescrição

      discardResult()

      vazio

      Descarte o resultado, indicando que ele não será usado.

      getResult()

      Object

      Obter o resultado

  • Um novo org.jboss.ejb.client.URIAffinity classe, que é uma subclasse de org.jboss.ejb.client.Affinity foi introduzido para especificação de afinidade de URI.

    • É criado usando Affinity.forUri(URI).
    • Ele fornece os seguintes métodos.

      MétodoTipoDescrição

      equals(Affinity other)

      boleano

      Indica se outro objeto é igual a este.

      equals(Object other)

      boleano

      Indica se outro objeto é igual a este.

      equals(URIAffinity other)

      boleano

      Indica se outro objeto é igual a este.

      getURI()

      URI

      Obtenha o URI associado.

      hashCode()

      int

      Obtenha o código hash.

      toString()

      String

      Retorna uma representação de string do objeto.

  • o org.jboss.ejb.client.EJBMetaDataImpl classe depreciou os seguintes métodos.

    • toAbstractEJBMetaData()
    • EJBMetaDataImpl(AbstractEJBMetaData<?,?>)

5.12. Migrar clientes para usar o arquivo de configuração do WildFly [Esta é uma tradução automática]

Antes do release 7.1, as bibliotecas do cliente do JBoss EAP, como EJB e nomeação, usavam diferentes estratégias de configuração. O JBoss EAP 7.1 introduz o wildfly-config.xml arquivo com o objetivo de unificar todas as configurações do cliente em um único arquivo de configuração, de maneira semelhante à maneira como a configuração do servidor é tratada.

Por exemplo, antes do JBoss EAP 7.1, você pode criar um novo InitialContext para um cliente Java EJB usando um jboss-ejb-client.properties arquivo ou definindo programaticamente as propriedades usando um Properties classe.

Exemplo: jboss-ejb-client.properties Arquivo de propriedades [Esta é uma tradução automática]

remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false
remote.connections=one
remote.connection.one.port=8080
remote.connection.one.host=127.0.0.1
remote.connection.one.username=quickuser
remote.connection.one.password=quick-123

No JBoss EAP 7.1, você cria um wildfly-config.xml arquivo no META-INF/ diretório do arquivo do cliente. Esta é a configuração equivalente usando um wildfly-config.xml Arquivo.

Exemplo: Configuração Equivalente Usando o wildfly-config.xml Arquivo [Esta é uma tradução automática]

<configuration>
    <authentication-client xmlns="urn:elytron:1.0.1">
        <authentication-rules>
            <rule use-configuration="ejb"/>
        </authentication-rules>
        <authentication-configurations>
            <configuration name="ejb">
                <set-user-name name="quickuser"/>
                <credentials>
                    <clear-password password="quick-123"/>
                </credentials>
            </configuration>
        </authentication-configurations>
    </authentication-client>
    <jboss-ejb-client xmlns="urn:jboss:wildfly-client-ejb:3.0">
        <connections>
            <connection uri="remote+http://127.0.0.1:8080" />
        </connections>
    </jboss-ejb-client>
</configuration>

Para obter informações sobre como configurar a autenticação de cliente para o Elytron Client usando o wildfly-config.xml arquivo, consulte Configurar autenticação de cliente com o cliente Elytron dentro Como configurar o gerenciamento de identidades para o JBoss EAP.

Para obter mais informações sobre os tipos de configurações do cliente que podem ser feitas usando o wildfly-config.xml arquivo, consulte Configuração do cliente usando o wildfly-config.xml Arquivo no JBoss EAP Guia de desenvolvimento.

5.13. Migrar configurações de planos de implementação [Esta é uma tradução automática]

o Especificação de implementação de aplicativo Java EE (JSR-88) O objetivo era definir um contrato padrão para permitir que ferramentas de vários provedores configurassem e implantassem aplicativos em qualquer produto da plataforma Java EE. O contrato exigiu que os provedores de produtos Java EE implementassem o DeploymentManager e outro javax.enterprise.deploy.spi interfaces a serem acessadas pelos provedores de ferramentas. No caso do JBoss EAP 6, um plano de implementação é identificado por um descritor XML chamado deployment-plan.xml que é empacotado em um arquivo ZIP ou JAR.

Essa especificação teve pouca adoção porque a maioria dos produtos de servidor de aplicativos fornece suas próprias soluções de implantação mais "sofisticadas". Por esse motivo, o suporte a JSR-88 foi retirado do Java EE 7 e, por sua vez, do JBoss EAP 7.

Se você usou o JSR-88 para implantar seu aplicativo, deverá usar outro método para implantar o aplicativo. A CLI de gerenciamento do JBoss EAP deploy O comando fornece uma maneira padrão de implantar arquivos em servidores independentes ou em grupos de servidores em um domínio gerenciado. Para obter mais informações sobre a CLI de gerenciamento, consulte o Guia do CLI de gerenciamento.

5.14. Migrar válvulas de aplicativos personalizadas [Esta é uma tradução automática]

Você deve migrar manualmente as válvulas personalizadas ou quaisquer válvulas definidas no jboss-web.xml Arquivo XML. Isto inclui válvulas criadas pela extensão do org.apache.catalina.valves.ValveBase classe e configurado no <valve> elemento do jboss-web.xml arquivo descritor.

Importante

Válvulas e válvulas personalizadas definidas no jboss-web.xml arquivo deve ser reescrito ou substituído pelo manipulador interno Undertow correspondente. Para obter informações sobre como mapear válvulas para manipuladores Undertow, consulte Migrar Válvulas Web JBoss.

Válvulas de autenticação devem ser substituídas manualmente usando mecanismos de autenticação internos Undertow.

Migrar configurações SSL [Esta é uma tradução automática]

No JBoss EAP 6, você pode definir válvulas personalizadas no nível do aplicativo, configurando-as no jboss-web.xml arquivo descritor de aplicativo da web. No JBoss EAP 7, é possível fazer isso com manipuladores Undertow também.

Segue-se um exemplo de uma válvula configurada no jboss-web.xml arquivo no JBoss EAP 6.

<jboss-web>
    <valve>
        <class-name>org.jboss.examples.MyValve</class-name>
​        <param>
    ​        <param-name>myParam</param-name>
​            <param-value>foobar</param-value>
    ​    </param>
    </valve>
</jboss-web>

Para obter mais informações sobre como criar e configurar manipuladores personalizados no JBoss EAP, consulte Criando manipuladores personalizados no JBoss EAP Guia de desenvolvimento.

Migrar válvulas do autenticador [Esta é uma tradução automática]

Para obter informações sobre como migrar as válvulas do autenticador, consulte Migrar válvulas do autenticador neste guia.

5.15. Alterações de aplicativos de segurança [Esta é uma tradução automática]

A substituição de JBoss Web com Undertow requer alterações nas configurações de segurança no JBoss EAP 7.

5.15.1. Migrar válvulas do autenticador [Esta é uma tradução automática]

Se você criou uma válvula autenticadora personalizada que AuthenticatorBase no JBoss EAP 6.4, você deve substituí-lo manualmente por uma implementação de autenticação HTTP personalizada no JBoss EAP 7.1. O mecanismo de autenticação HTTP é criado no elytron subsistema e, em seguida, registrado com o undertow subsistema. Para obter informações sobre como implementar um mecanismo de autenticação HTTP personalizado, consulte Implementando um Mecanismo HTTP Customizado no Guia de desenvolvimento para o JBoss EAP.

5.15.3. Outras alterações de aplicativos de segurança [Esta é uma tradução automática]

Para obter informações sobre as diferenças na configuração de SSO com o Kerberos, consulte Diferenças de Configurando Versões Anteriores do JBoss EAP dentro Como configurar o SSO com o Kerberos para o JBoss EAP.

5.16. Alterações de JBoss Logging [Esta é uma tradução automática]

Se o seu aplicativo usa o JBoss Logging, esteja ciente de que as anotações no org.jboss.logging pacote agora estão obsoletos no JBoss EAP 7. Eles foram movidos para o org.jboss.logging.annotations pacote, portanto, você deve atualizar seu código-fonte para importar o novo pacote.

As anotações também foram movidas para um Maven separado groupId:artifactId:version (GAV) ID, então você precisa adicionar uma nova dependência de projeto para org.jboss.logging:jboss-logging-annotations no seu projecto pom.xml Arquivo.

Nota

Apenas as anotações de registro foram movidas. o org.jboss.logging.BasicLogger e org.jboss.logging.Logger ainda existem no org.jboss.logging pacote.

A tabela seguinte lista as classes de anotações preteridas e substituições correspondentes.

Tabela 5.1. Substituições de anotações de registro em log preteridas [Esta é uma tradução automática]
Classes preteridas de RESTEasy [Esta é uma tradução automática]Classes de substituição

org.jboss.logging.Cause

org.jboss.logging.annotations.Cause

org.jboss.logging.Field

org.jboss.logging.annotations.Field

org.jboss.logging.FormatWith

org.jboss.logging.annotations.FormatWith

org.jboss.logging.LoggingClass

org.jboss.logging.annotations.LoggingClass

org.jboss.logging.LogMessage

org.jboss.logging.annotations.LogMessage

org.jboss.logging.Message

org.jboss.logging.annotations.Message

org.jboss.logging.MessageBundle

org.jboss.logging.annotations.MessageBundle

org.jboss.logging.MessageLogger

org.jboss.logging.annotations.MessageLogger

org.jboss.logging.Param

org.jboss.logging.annotations.Param

org.jboss.logging.Property

org.jboss.logging.annotations.Property

5.17. Alterações ao código JavaServer Faces (JSF) [Esta é uma tradução automática]

Suporte para JSF 1.2 descontinuado

Exemplo: Bandeira de Anotação no jboss-deployment-structure.xml Arquivo [Esta é uma tradução automática]

JBoss EAP 7 inclui JSF 2.2 e não suporta mais a API JSF 1.2. Se seu aplicativo usa JSF 1.2, você deve regravá-lo para usar JSF 2.2.

Problema de compatibilidade entre JSF 2.1 e JSF 2.2

As APIs JSF 2.1 e JSF 2.2 não são totalmente compatíveis. o FACELET_CONTEXT_KEY valor constante alterado de com.sun.faces.facelets.FACELET_CONTEXT para javax.faces.FACELET_CONTEXT entre os lançamentos. Esse valor é embutido pelo compilador e o código compilado em um release não funcionará em relação ao outro.

Aplicativos que contêm código semelhante ao exemplo a seguir, e são compilados com a API do JSF 2.1, mas são executados no JBoss EAP 7, que usa a API JSF 2.2, resultando em um NullPointerException. Para corrigir o problema, você deve recompilar o aplicativo na API do JSF 2.2.

Exemplo: código Java que usa a API do JSF 2.1 [Esta é uma tradução automática]

Object obj = FacesContext.getCurrentInstance().getAttributes().get(FaceletContext.FACELET_CONTEXT_KEY);

Vejo Impedir que a constante FaceletContext.FACELET_CONTEXT_KEY seja embutida pelo compilador Para maiores informações.

5.18. Alterações ao carregamento de classes de módulos [Esta é uma tradução automática]

No JBoss EAP 7, o comportamento do carregamento de classe foi alterado em casos onde múltiplos módulos contêm as mesmas classes ou pacotes.

Suponha que existem dois módulos, MODULE_A e MODULE_B, que dependem uns dos outros e contêm alguns dos mesmos pacotes. No JBoss EAP 6, as classes ou pacotes que foram carregados das dependências tiveram precedência sobre aqueles especificados no resource-root do module.xml Arquivo. Isso significava MODULE_A viu os pacotes para MODULE_B e MODULE_B viu os pacotes para MODULE_A. Esse comportamento foi confuso e poderia causar conflitos. Este comportamento mudou no JBoss EAP 7. Agora as classes ou pacotes especificados pelo resource-root no module.xml arquivo tem precedência sobre aqueles especificados pela dependência. Isso significa MODULE_A vê os pacotes para MODULE_A e MODULE_B vê os pacotes para MODULE_B. Isso evita conflitos e fornece um comportamento mais apropriado.

Se você tiver definido módulos personalizados que incluem resource-root bibliotecas ou pacotes que contêm classes duplicadas em suas dependências de módulo, você pode ver ClassCastException, LinkageError, erros de carregamento de classes ou outras mudanças de comportamento quando você migra para o JBoss EAP 7. Para resolver esses problemas, você deve module.xml arquivo para garantir que apenas uma versão de uma classe seja usada. Isso pode ser feito usando uma das seguintes abordagens.

  • Você pode evitar especificar um resource-root que duplica as classes na dependência do módulo.
  • Você pode usar o include e exclude sub-elementos do imports e exports elementos para controlar o carregamento da classe no module.xml Arquivo. A seguir, um elemento de exportação que exclui classes está no pacote especificado.

    <exports>
      <exclude path="com/mycompany/duplicateclassespath/"/>
    </exports>

Se preferir preservar seu comportamento existente, você deve filtrar os pacotes de dependência do dependente resource-root no module.xml arquivo usando o filter elemento. Isso permite que você retenha o comportamento existente sem o loop impar que você veria no JBoss EAP 6. O seguinte é um exemplo de root-resource que filtra classes em um pacote especificado.

<resource-root path="mycompany.jar">
  <filter>
    <exclude path="com/mycompany/duplicateclassespath"/>
  </filter>
</resource-root>

Para obter mais informações sobre módulos e carregamento de classes, consulte Carregamento de Classe e Módulos no JBoss EAP Guia de desenvolvimento.

5.19. Alterações à clusterização de aplicativos [Esta é uma tradução automática]

5.19.1. Visão geral de novas funcionalidades de clusterização [Esta é uma tradução automática]

A lista seguinte descreve algumas das novas funcionalidades de clusterização para considerar quando fizer a migração de seu aplicativo do JBoss EAP 6 para JBoss EAP 7.

  • O JBoss EAP 7 introduz uma nova API pública para construir serviços singleton que simplifica significativamente o processo. Para obter informações sobre serviços singleton, consulte Serviço HA Singleton no JBoss EAP Guia de desenvolvimento
  • Uma implementação de singleton pode ser configurada para implantar e iniciar somente um único nó no cluster de cada vez. Para mais informações, veja Implantações de HA Singleton no JBoss EAP Guia de desenvolvimento.
  • Agora você pode definir MDBs singleton em cluster. Para mais informações, veja MDBs de Singleton agrupados dentro Desenvolvendo Aplicativos EJB para o JBoss EAP.
  • O JBoss EAP 7 inclui a implementação Undertow mod_cluster. Isso oferece uma solução de balanceamento de carga Java pura que não requer um servidor da Web httpd. Para mais informações, veja Configurando o JBoss EAP como um balanceador de carga front-end no JBoss EAP Guia de configuração.

O restante desta seção descreve como as mudanças de cluster podem impactar a migração de seus aplicativos para o JBoss EAP 7.

5.19.2. Alterações nas Web Session Clustering [Esta é uma tradução automática]

O JBoss EAP 7 introduz uma nova implementação em web session clustering. Ela substitui a implementação anterior, que era acoplada rigidamente ao código-fonte do subsistema JBoss Web herdado.

A nova implementação de clustering de sessões da Web afeta o modo como o aplicativo é configurado no jboss-web.xml Arquivo de descritor XML do aplicativo da web proprietário do JBoss EAP. A seguir estão os únicos elementos de configuração de cluster que permanecem nesse arquivo.

<jboss-web>
  ...
  <max-active-sessions>...</max-active-sessions>
  ...
  <replication-config>
    <replication-granularity>...</replication-granularity>
    <cache-name>...</cache-name>
  </replication-config>
  ...
</jboss-web>

A tabela a seguir descreve como obter um comportamento semelhante para elementos no jboss-web.xml arquivo que agora está obsoleto.

Mudanças de configuração de servidor [Esta é uma tradução automática]Alterações de aplicativos de segurança [Esta é uma tradução automática]

<max-active-sessions/>

Anteriormente, a criação da sessão falharia se fizesse com que o número de sessões ativas excedesse o valor especificado por <max-active-sessions/>.

Na nova implementação, <max-active-sessions/> é usado para ativar a passivação de sessão. Se a criação da sessão fizer com que o número de sessões ativas exceda o <max-active-sessions/>, então a sessão mais antiga conhecida pelo gerente de sessão passará para dar lugar à nova sessão.

<passivation-config/>

Este elemento de configuração e seus subelementos não são mais utilizados em JBoss EAP 7.

<use-session-passivation/>

Anteriormente, a passivação era ativada utilizando este atributo.

Na nova implementação, a passivação é ativada especificando um valor não negativo para <max-active-sessions/>.

<passivation-min-idle-time/>

Anteriormente, as sessões precisavam estar ativas por um período mínimo de tempo antes de tornarem-se candidatas à passivação. Isto poderia causar uma falha na criação de sessão, mesmo que a passivação estivesse habilitada.

A nova implementação não suporta esta lógica e assim evita esta vulnerabilidade de recusa de serviço (Denial of Service - DoS) .

<passivation-max-idle-time/>

Anteriormente, uma sessão tornaria-se passiva após estar inativa por um período especifico de tempo.

A nova implementação só suporta passivação preguiçosa. Não suporta passivação ávida. As sessões só são passivadas quando necessário para cumprir <max-active-sessions/>.

<replication-config/>

A nova implementação torna preterido um certo número de subelementos.

<replication-trigger/>

Anteriormente, esse elemento era usado para determinar quando a replicação da sessão era acionada. A nova implementação substitui essa opção de configuração por uma estratégia única e robusta. Para mais informações, veja Atributos de Sessão Imutáveis no JBoss EAP Guia de desenvolvimento.

<use-jk/>

Anteriormente, o instance-id do nó que manipula uma determinada solicitação foi anexado ao jsessionid, para uso por balanceadores de carga como mod_jk, mod_proxy_balancer, mod_cluster, dependendo do valor especificado para <use-jk/>.

Na nova implementação, o instance-id, se definido, é sempre anexado ao jsessionid.

<max-unreplicated-interval/>

Anteriormente, esta opção de configuração era destinada a ser uma otimização para evitar a replicação de um carimbo de data/hora de sessão se não houvesse alteração de atributo de sessão. Isto parece bom, mas na prática não evita quaisquer RPCs, já que acesso à sessão necessita transação de cache RPCs independente de qualquer alteração de atributo de sessão.

Na nova implementação, o carimbo de data/hora de uma sessão é replicado a cada solicitação. Isto previne metadados de sessões obsoletas após um failover.

<snapshot-mode/>

Anteriormente, podia-se configurar <snapshot-mode/> Como INSTANT ou INTERVAL. A replicação assíncrona do Infinispan torna essa opção de configuração obsoleta.

<snapshot-interval/>

Isso só foi relevante para <snapshot-mode>INTERVAL</snapshot-mode>. Desde a <snapshot-mode/> é obsoleto, esta opção também está obsoleta.

<session-notification-policy/>

Anteriormente, o valor especificado por este atributo definia uma política de acionamento de eventos de sessões.

Na nova implementação este comportamento é acionado na especificação e não configurável.

Esta nova implementação também suporta armazenamentos de cache de gravação, bem como armazenamentos de cache somente de passivação. Normalmente, armazenamentos de cache de gravação é usado em conjunto com um cache de invalidação. A implementação de cluster de sessões web no JBoss EAP 6 não funcionou corretamente quando usada com um cache de invalidação.

5.19.3. Alterações em Stateful Session EJB Clustering [Esta é uma tradução automática]

No JBoss EAP 6, era exigido que você habilitasse o comportamento do clustering para stateful session beans (SFSBs) em uma das seguintes maneiras.

  • Você pode adicionar o org.jboss.ejb3.annotation.Clustered anotação no bean de sessão.

    @Stateful
    @Clustered
    public class MyBean implements MySessionInt {
    
       public void myMethod() {
          //
       }
    }
  • Você pode adicionar o <clustered> elemento para o jboss-ejb3.xml Arquivo.

    <c:clustering>
      <ejb-name>DDBasedClusteredSFSB</ejb-name>
      <c:clustered>true</c:clustered>
    </c:clustering>

O JBoss EAP 7 não exige mais que você habilite o comportamento do clustering. Por padrão, se o servidor for iniciado utilizando um perfil HA, o estado de SFSBs será replicado automaticamente.

Você pode desabilitar este comportamento padrão com uma das seguintes maneiras.

  • Você pode desabilitar o comportamento padrão de um único bean de sessão com @Stateful(passivationCapable=false), que é novo na especificação EJB 3.2.
  • Você pode desabilitar esse comportamento globalmente na configuração do ejb3 subsistema na configuração do servidor.
Nota

Se o @Clustered anotação não é removida do aplicativo, ela é simplesmente ignorada e não afeta a implementação do aplicativo.

5.19.4. Alterações nos serviços de clustering [Esta é uma tradução automática]

No JBoss EAP 6, as APIs para serviços de clustering estavam em módulos privados e não eram suportadas.

O JBoss EAP 7 introduz uma API de serviço de clustering público para ser utilizada pelos aplicativos. Os novos serviços são projetados para serem leves, facilmente injetáveis e não necessitar de dependências externas.

  • O novo org.wildfly.clustering.group.Group A interface fornece acesso ao status atual do cluster e permite escutar alterações de associação de cluster.
  • O novo org.wildfly.clustering.dispatcher.CommandDispatcher A interface permite executar código no cluster, em todos ou em um subconjunto selecionado de nós.

Esses serviços substituem APIs similares que estavam disponíveis em releases anteriores, HAPartition do JBoss EAP 5 e GroupCommunicationService, GroupMembershipNotifier, e GroupRpcDispatcher no JBoss EAP 6.

Para mais informações, veja API pública para serviços de cluster no JBoss EAP Guia de desenvolvimento.

5.19.5. Migrar Clustering HA Singleton [Esta é uma tradução automática]

No JBoss EAP 6, não havia nenhuma API pública disponível para o serviço de singleton de HA em todo o cluster. Se você usou o privado org.jboss.as.clustering.singleton.* classes, você deve alterar seu código para usar o novo org.wildfly.clustering.singleton.* pacotes quando você migra seu aplicativo para o JBoss EAP 7.

Para obter mais informações sobre serviços singleton de HA, consulte Serviço HA Singleton no Guia de desenvolvimento para o JBoss EAP. Para obter informações sobre implantações de singleton de alta disponibilidade, consulte Implantações de HA Singleton no Guia de desenvolvimento para o JBoss EAP.

Red Hat logoGithubRedditYoutubeTwitter

Aprender

Experimente, compre e venda

Comunidades

Sobre a documentação da Red Hat

Ajudamos os usuários da Red Hat a inovar e atingir seus objetivos com nossos produtos e serviços com conteúdo em que podem confiar. Explore nossas atualizações recentes.

Tornando o open source mais inclusivo

A Red Hat está comprometida em substituir a linguagem problemática em nosso código, documentação e propriedades da web. Para mais detalhes veja o Blog da Red Hat.

Sobre a Red Hat

Fornecemos soluções robustas que facilitam o trabalho das empresas em plataformas e ambientes, desde o data center principal até a borda da rede.

© 2024 Red Hat, Inc.