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 dewebservices.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.
Propriedade | Tipo | Descriçã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 |
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 pacoteorg.apache.wss4j.common.ext
. -
A maioria dos objetos de bean SAML do
org.apache.ws.security.saml.ext
pacote foram movidos para oorg.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 validaActAs
fichas. Como conseqüência, um nome de usuário e senha válidos devem ser especificados noUsernameToken
que é fornecido para oActAs
símbolo. -
Agora, os tokens SAML Bearer precisam ter uma assinatura interna. o
org.apache.wss4j.dom.validate.SamlAssertionValidator
classe agora tem umsetRequireBearerSignature()
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 comoTHREAD_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.
As interfaces de interceptores seguintes são preteridas no RESTEasy 3.x.
-
o
org.jboss.resteasy.spi.interception.PreProcessInterceptor
interface é substituída pelajavax.ws.rs.container.ContainerRequestFilter
interface no RESTEasy 3.x. As seguintes interfaces e classes também foram preteridas no RESTEasy 3.x.
-
org.jboss.resteasy.spi.interception.MessageBodyReaderInterceptor
-
org.jboss.resteasy.spi.interception.MessageBodyWriterInterceptor
-
org.jboss.resteasy.spi.interception.MessageBodyWriterContext
-
org.jboss.resteasy.spi.interception.MessageBodyReaderContext
-
org.jboss.resteasy.core.interception.InterceptorRegistry
-
org.jboss.resteasy.core.interception.InterceptorRegistryListener
-
org.jboss.resteasy.core.interception.ClientExecutionContextImpl
-
-
o
org.jboss.resteasy.spi.interception.MessageBodyWriterInterceptor
interface é substituída pelajavax.ws.rs.ext.WriterInterceptor
interface. Além disso, algumas mudanças no
javax.ws.rs.ext.MessageBodyWriter
interface pode não ser compatível com o JAX-RS 1.x. Se seu aplicativo usou o JAX-RS 1.x, revise o código do aplicativo para certificar-se de definir@Produces
ou@Consumes
para seus endpoints. Não fazer isso pode resultar em um erro semelhante ao seguinte.org.jboss.resteasy.core.NoMessageBodyWriterFoundFailure: Could not find MessageBodyWriter for response object of type: <OBJECT> of media type:
Segue um exemplo de um ponto de extremidade REST que pode causar este erro.
@Path("dates") public class DateService { @GET @Path("daysuntil/{targetdate}") public long showDaysUntil(@PathParam("targetdate") String targetDate) { DateLogger.LOGGER.logDaysUntilRequest(targetDate); final long days; try { final LocalDate date = LocalDate.parse(targetDate, DateTimeFormatter.ISO_DATE); days = ChronoUnit.DAYS.between(LocalDate.now(), date); } catch (DateTimeParseException ex) { // ** DISCLAIMER **. This example is contrived. throw new WebApplicationException(Response.status(400).entity(ex.getLocalizedMessage()).type(MediaType.TEXT_PLAIN) .build()); } return days; } }
Para corrigir o problema, adicione a importação para
javax.ws.rs.Produces
e a@Produces
anotação da seguinte forma.... import javax.ws.rs.Produces; ... @Path("dates") public class DateService { @GET @Path("daysuntil/{targetdate}") @Produces(MediaType.TEXT_PLAIN) public long showDaysUntil(@PathParam("targetdate") String targetDate) { DateLogger.LOGGER.logDaysUntilRequest(targetDate); final long days; try { final LocalDate date = LocalDate.parse(targetDate, DateTimeFormatter.ISO_DATE); days = ChronoUnit.DAYS.between(LocalDate.now(), date); } catch (DateTimeParseException ex) { // ** DISCLAIMER **. This example is contrived. throw new WebApplicationException(Response.status(400).entity(ex.getLocalizedMessage()).type(MediaType.TEXT_PLAIN) .build()); } return days; } }
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.
As seguintes classes são preteridas.
-
o
org.jboss.resteasy.client.ClientResponseFailure
exceção e oorg.jboss.resteasy.client.ClientExecutor
eorg.jboss.resteasy.client.EntityTypeFactory
interfaces também são descontinuadas. Você deve substituir o
org.jboss.resteasy.client.ClientRequest
eorg.jboss.resteasy.client.ClientResponse
aulas comorg.jboss.resteasy.client.jaxrs.ResteasyClient
ejavax.ws.rs.core.Response
respectivamente.Segue um exemplo de como enviar um link header com o cliente RESTEasy em RESTEasy 2.3.x.
ClientRequest request = new ClientRequest(generateURL("/linkheader/str")); request.addLink("previous chapter", "previous", "http://example.com/TheBook/chapter2", null); ClientResponse response = request.post(); LinkHeader header = response.getLinkHeader();
O seguinte é um exemplo de como executar a mesma tarefa com cliente RESTEasy em RESTEasy 3.
ResteasyClient client = new ResteasyClientBuilder().build(); Response response = client.target(generateURL("/linkheader/str")).request() .header("Link", "<http://example.com/TheBook/chapter2>; rel=\"previous\"; title=\"previous chapter\"").post(Entity.text(new String())); javax.ws.rs.core.Link link = response.getLink("previous");
Veja o
resteasy-jaxrs-client
início rápido para um exemplo de um cliente externo JAX-RS RESTEasy que interage com um serviço da Web JAX-RS.-
As classes e interfaces no
org.jboss.resteasy.client.cache
pacote também são descontinuados. Eles são substituídos por classes e interfaces equivalentes noorg.jboss.resteasy.client.jaxrs.cache
pacote.
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
eSignedOutput
pararesteasy-crypto
deve ter oContent-Type
definido comomultipart/signed
tanto noRequest
ouResponse
objeto, ou usando o@Consumes
ou@Produces
anotação. -
SignedOutput
eSignedInput
pode ser usado para retornarapplication/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 preterida | Exceçã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 umbean-discovery-mode
donone
. -
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 umbean-discovery-mode
doall
. -
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 umbean-discovery-mode
doannotated
.
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
-
o
org.hibernate.integrator.spi.Integrator
Interface alterada para dar conta de redesenho bootstrap. -
Um novo pacote
org.hibernate.engine.jdbc.env.spi
foi criado. Ele contém oorg.hibernate.engine.jdbc.env.spi.JdbcEnvironment
interface, que foi extraída doorg.hibernate.engine.jdbc.spi.JdbcServices
interface. -
Um novo
org.hibernate.boot.model.relational.ExportableProducer
interface foi introduzida que afetaráorg.hibernate.id.PersistentIdentifierGenerator
implementações. -
A assinatura de
org.hibernate.id.Configurable
foi alterado para aceitarorg.hibernate.service.ServiceRegistry
em vez de apenasorg.hibernate.dialect.Dialect
. -
o
org.hibernate.metamodel.spi.TypeContributor
interface migrou paraorg.hibernate.boot.model.TypeContributor
. -
o
org.hibernate.metamodel.spi.TypeContributions
interface migrou paraorg.hibernate.boot.model.TypeContributions
.
Type Handling
-
Construídas em
org.hibernate.type.descriptor.sql.SqlTypeDescriptor
implementações não mais se registram automaticamenteorg.hibernate.type.descriptor.sql.SqlTypeDescriptorRegistry
. Aplicativos usando personalizadoSqlTypeDescriptor
implementações que estendem as implementações internas e dependem desse comportamento devem ser atualizadas para chamarSqlTypeDescriptorRegistry.addDescriptor()
si mesmos. -
Para IDs definidos como UUIDs gerados, alguns bancos de dados exigem que você defina explicitamente
@Column(length=16)
para gerarBINARY(16)
para que as comparações funcionem corretamente. -
Para
EnumType
mapeamentos definidos nohbm.xml
, onde você querjavax.persistence.EnumType.STRING
name-mapping
, esta configuração deve ser declarada explicitamente usando ouseNamed(true)
configuração ou especificando um VARCHAR valor de12
.
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, oorg.hibernate.Transaction
implementação agora fala com umorg.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 especificariamhibernate.transaction.factory_class
propriedade, que agora está obsoleta, e se refere a umorg.hibernate.engine.transaction.spi.TransactionFactory
FQN (nome totalmente qualificado). Com o Hibernate ORM 5, você especifica ohibernate.transaction.coordinator_class
configuração e consulte umorg.hibernate.resource.transaction.TransactionCoordinatorBuilder
. Vejoorg.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.
ImportanteSe 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ãojdbc
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 explicitamentehibernate.transaction.coordinator_class
valor da propriedade parajta
ou fornecer um costumeorg.hibernate.resource.transaction.TransactionCoordinatorBuilder
que constrói umorg.hibernate.resource.transaction.TransactionCoordinator
que coordena corretamente com transações baseadas em JTA.
-
jdbc: Gerenciar transações usando o JDBC
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 oEntityManagerFactory
não prefixou anteriormente nomes comhibernate
. 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 deorg.hibernate.envers.boot.internal.EnversService
. -
o
AuditStrategy
parâmetros do método foram alterados para remover o obsoletoAuditConfiguration
e usar o novoEnversService
. -
Várias classes e interfaces no
org.hibernate.hql.spi
pacote e subpacotes foram movidos para o novoorg.hibernate.hql.spi.id
pacote. Isso inclui oMultiTableBulkIdStrategy
classe e oAbstractTableBasedBulkIdHandler
,TableBasedDeleteHandlerImpl
, eTableBasedUpdateHandlerImpl
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 oorg.hibernate.cache.spi.access.AccessType.getExternalName()
método em vez doorg.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 Hibernateschema-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.SchemaManagementTool
ou 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 dohibernate-search-engine
módulo para ohibernate-search-orm
módulo. Outros integradores devem depender exclusivamenteSearchIntegrator
, que substitui o obsoletoSearchFactoryIntegrator
. -
O valor enum
SpatialMode.GRID
foi renomeado paraSpatialMode.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 exemploorg.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 doServiceManager
,Service
,Startable
eStoppable
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 LuceneIndexUpgrader
. 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 onull
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 classe | Novo 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]
Interface | Descrição |
---|---|
org.hibernate.search.store.IndexShardingStrategy |
Depreciado a partir do Hibernate Search 4.4. Pode ser removido na pesquisa 5. Use |
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]
Classe | Descriçã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]
Enum | Descrição |
---|---|
org.hibernate.search.annotations.FieldCacheType |
Remova o |
Alterações no Hibernate Search [Esta é uma tradução automática]
Anotação | Descriçã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étodo | Descriçã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 |
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 |
Alterações no Hibernate Search [Esta é uma tradução automática]
Construtor | Descrição |
---|---|
org.hibernate.search.cfg.NumericFieldMapping(PropertyDescriptor, EntityDescriptor, SearchMapping) |
Usar |
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.
-
o
IndexWriterSetting.MAX_THREAD_STATES
eIndexWriterSetting.TERM_INDEX_INTERVAL
As constantes de enum são obsoletas. Eles afetam quais propriedades são lidas da configuração, portanto, o fato de estarem ausentes significa que as propriedades de configuração, comohibernate.search.Animals.2.indexwriter.term_index_interval = default
agora são ignorados. O único efeito colateral é que a propriedade não é aplicada. -
o
SearchFactoryIntegrator
A interface agora está obsoleta. Você deve migrar imediatamente todo o código para usarSearchIntegrator
. -
o
SearchFactoryBuilder
A classe agora está obsoleta. UsarSearchIntegrationBuilder
em vez de. -
o
HSQuery.getExtendedSearchIntegrator()
o método foi descontinuado. Pode ser possível usarSearchIntegrator
, mas é preferível removê-lo completamente. -
o
DocumentBuilderIndexedEntity.getFieldCacheOption()
o método foi descontinuado. Não há substituto. -
o
BuildContext.getIndexingStrategy()
método é obsoleto. UsarBuildContext.getIndexingMode()
em vez de. -
o
DirectoryHelper.getVerifiedIndexDir(String, Properties, boolean)
método é obsoleto. UsarDirectoryHelper.getVerifiedIndexPath(java.lang.String, java.util.Properties, boolean)
em vez de. A lista que segue é uma lista de classes de Hibernate Search que foram reempacotadas ou renomeadas.
Pacote e anterior e classe Novo pacote e classe org.hibernate.search.engine.impl.SearchMappingBuilder
org.hibernate.search.engine.spi.SearchMappingHelper
org.hibernate.search.indexes.impl.DirectoryBasedIndexManager
org.hibernate.search.indexes.spi.DirectoryBasedIndexManager
org.hibernate.search.spi.MassIndexerFactory
org.hibernate.search.batchindexing.spi.MassIndexerFactory
org.hibernate.search.spi.SearchFactoryBuilder
org.hibernate.search.spi.SearchIntegratorBuilder
org.hibernate.search.spi.SearchFactoryIntegrator
org.hibernate.search.spi.SearchIntegrator
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.
Propriedade | Descrição |
---|---|
|
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. |
|
Esta propriedade é uma alternativa para |
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 diferente8080
. 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 umremote
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étodo Tipo Descriçã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étodo Tipo Descriçã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 dejava.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étodo Tipo Descriçã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étodo Tipo Descriçã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étodo Tipo Descriçã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étodo Tipo Descriçã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 deorg.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étodo Tipo Descriçã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.
-
É criado usando
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.
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.2. Alterações de PicketLink [Esta é uma tradução automática]
Para obter informações sobre as alterações necessárias para o SSO com configuração do SAML v2, consulte Mudanças das versões anteriores do JBoss EAP dentro Como configurar o SSO com o SAML v2 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.
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.
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
eexclude
sub-elementos doimports
eexports
elementos para controlar o carregamento da classe nomodule.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
Na nova implementaçã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 |
<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 |
<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
Na nova implementação, o |
<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-interval/> |
Isso só foi relevante para |
<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 ojboss-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.
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.