Red Hat Training
A Red Hat training course is available for Red Hat JBoss Enterprise Application Platform
Capítulo 5. Cambios en la migración de aplicaciones [Esto es una traducción automática]
5.1. Cambios en la aplicación de servicios web [Esto es una traducción automática]
JBossWS 5 trae nuevas características y mejoras de rendimiento a los servicios web de JBoss EAP 7, principalmente a través de actualizaciones del Apache CXF, Apache WSS4J, y Apache Santuario componentes.
5.1.1. Cambios de soporte de JAX-RPC [Esto es una traducción automática]
La API de Java para RPC basado en XML (JAX-RPC) fue desaprobada en Java EE 6 y es opcional en Java EE 7. Ya no está disponible o no es compatible con JBoss EAP 7. Las aplicaciones que usan JAX-RPC deben migrarse para usar JAX-WS, que es el marco actual de servicios web estándar de Java EE.
El uso de los servicios web JAX-RPC se puede identificar de cualquiera de las siguientes maneras:
-
La presencia de un archivo de mapeo JAX-RPC, que es un archivo XML con el elemento raíz
<java-wsdl-mapping>
. La presencia de un
webservices.xml
Archivo de descriptor XML que contiene un<webservice-description>
elemento, que incluye un<jaxrpc-mapping-file>
elemento niño. El siguiente es un ejemplo dewebservices.xml
archivo de descriptor que define un servicio 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>
-
La presencia de un
ejb-jar.xml
archivo, que contiene un<service-ref>
que hace referencia a un archivo de mapeo JAX-RPC.
5.1.2. Cambios en los servicios web de Apache CXF Spring [Esto es una traducción automática]
En lanzamientos anteriores de JBoss EAP, podía personalizar la integración de JBossWS y Apache CXF incluyendo un jbossws-cxf.xml
archivo de configuración con el archivo de implementación de punto final. Un caso de uso para esto fue configurar cadenas de interceptor para clientes del servicio web y puntos finales del servidor en el bus Apache CXF. Esta integración requirió que Spring se implementara en el servidor JBoss EAP.
La integración de Spring ya no es compatible con JBoss EAP 7. Cualquier aplicación que contenga un jbossws-cxf.xml
El archivo de configuración del descriptor debe modificarse para reemplazar la configuración personalizada definida en ese archivo. Si bien aún es posible acceder directamente a la API de Apache CXF, tenga en cuenta que la aplicación no será portátil.
El enfoque sugerido es reemplazar las configuraciones personalizadas de Spring con las nuevas opciones de configuración del descriptor JBossWS siempre que sea posible. El enfoque basado en el descriptor JBossWS proporciona una funcionalidad similar sin requerir la modificación del código del punto final del cliente. En algunos casos, puede reemplazar Spring con Context Dependency Injection (CDI).
Migrar interceptores de mensajería [Esto es una traducción automática]
El descriptor JBossWS proporciona nuevas opciones de configuración que le permiten declarar los interceptores sin modificar el código de punto final del cliente. En su lugar, declara los interceptores dentro de las configuraciones predefinidas de cliente y punto final al especificar una lista de nombres de clase de interceptor para el cxf.interceptors.in
y cxf.interceptors.out
propiedades.
El siguiente es un ejemplo de jaxws-endpoint-config.xml
archivo que declara interceptores usando estas propiedades.
<?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>
Características de Apache CXF
El descriptor JBossWS le permite declarar características dentro de las configuraciones predefinidas de cliente y punto final al especificar una lista de nombres de clase de entidad para el cxf.features
propiedad.
El siguiente es un ejemplo de jaxws-endpoint-config.xml
archivo que declara una característica que usa esta propiedad.
<?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>
Transporte HTTP Apache CXF
En Apache CXF, la configuración de transporte HTTP se logra especificando org.apache.cxf.transport.http.HTTPConduit
opciones. La integración de JBossWS permite que los conductos se modifiquen mediante programación utilizando la API de Apache CXF de la siguiente manera.
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); ...
También puede controlar y anular el Apache CXF HTTPConduit
valores predeterminados al establecer las propiedades del sistema.
Propiedad | Tipo | Descripción |
---|---|---|
cxf.client.allowChunking |
Booleano |
Especifica si enviar solicitudes usando fragmentación. |
cxf.client.chunkingThreshold |
Entero |
Establece el umbral en el que se cambia del modo sin fragmentación al modo de fragmentación. |
cxf.client.connectionTimeout |
Long |
Establece la cantidad de milisegundos para el tiempo de espera de la conexión. |
cxf.client.receiveTimeout |
Long |
Establece el número de milisegundos para el tiempo de espera de recepción. |
cxf.client.connection |
Cadena |
Especifica si usar el |
cxf.tls-client.disableCNCheck |
Booleano |
Especifica si se deshabilita la verificación del nombre de host CN. |
5.1.3. Cambios en WS-Security
-
Si su aplicación contiene un controlador de devolución de llamada personalizado que accede al
org.apache.ws.security.WSPasswordCallback
clase, tenga en cuenta que esta clase se ha movido al paqueteorg.apache.wss4j.common.ext
. -
La mayoría de los objetos de frijol SAML de la
org.apache.ws.security.saml.ext
paquete se ha movido a laorg.apache.wss4j.common.saml package
. - Utilice el transporte de la clave RSA v1.5 y todos los algoritmos relacionados están deshabilitados por defecto.
-
El servicio de token de seguridad (STS) anteriormente solo se validó
onBehalfOf
tokens. Ahora también validaActAs
tokens. Como consecuencia, se debe especificar un nombre de usuario y una contraseña válidos en elUsernameToken
que se proporciona para elActAs
simbólico. -
Los tokens de portador SAML ahora requieren una firma interna. los
org.apache.wss4j.dom.validate.SamlAssertionValidator
clase ahora tiene unasetRequireBearerSignature()
método para habilitar o deshabilitar la verificación de la firma.
5.1.4. Cambio de estructura de JBoss Modules [Esto es una traducción automática]
los cxf-api
y cxf-rt-core
Los JAR se han fusionado en uno cxf-core
TARRO. Como consecuencia, el org.apache.cxf
módulo en JBoss EAP ahora contiene el cxf-core
JAR y expone más clases que en la versión anterior.
5.1.5. Requisitos y cambios del castillo hinchable [Esto es una traducción automática]
Si desea utilizar el cifrado AES con el modo Galois / Counter (GCM) para el cifrado simétrico en XML / WS-Security, necesita el proveedor de seguridad BouncyCastle.
JBoss EAP 7 se envía con el org.bouncycastle
módulo y JBossWS ahora puede confiar en su cargador de clases para obtener y usar el proveedor de seguridad BouncyCastle. Por lo tanto, ya no es necesario instalar estáticamente BouncyCastle en la JVM actual. Para aplicaciones que se ejecutan fuera del contenedor, el proveedor de seguridad puede estar disponible para JBossWS agregando una biblioteca BouncyCastle a la ruta de clase.
Puede deshabilitar este comportamiento configurando org.jboss.ws.cxf.noLocalBC
valor de propiedad para true
en el jaxws-endpoint-config.xml
archivo descriptor de despliegue para el servidor o el jaxws-client-config.xml
archivo descriptor para clientes.
Si desea utilizar una versión diferente a la que se envía con JBoss EAP, aún puede instalar BouncyCastle estáticamente en la JVM. En ese caso, el proveedor de seguridad BouncyCastle instalado de forma estática se elige sobre el proveedor presente en la ruta de clase. Para evitar cualquier problema, debe usar BouncyCastle 1.49, 1.51 o superior.
5.1.6. Estrategia de selección de bus Apache CXF [Esto es una traducción automática]
La estrategia de selección de bus predeterminada para los clientes que se ejecutan en el contenedor ha cambiado desde THREAD_BUS
a TCCL_BUS
. Para los clientes que se quedan sin contenedor, la estrategia predeterminada sigue siendo THREAD_BUS
. Puede restablecer el comportamiento al de la versión anterior mediante uno de los siguientes métodos.
-
Arranque el servidor JBoss EAP con la propiedad del sistema
org.jboss.ws.cxf.jaxws-client.bus.strategy
valor establecido enTHREAD_BUS
. - Establezca explícitamente la estrategia de selección en el código del cliente.
5.1.7. Requisitos de JAX-WS 2.2 para WebServiceRef [Esto es una traducción automática]
Los contenedores deben usar los constructores de estilo JAX-WS 2.2, que incluyen WebServiceFeature clase como argumento en el constructor, para construir clientes que se inyectan en las referencias del servicio web. JBoss EAP 6.4, que se envía con JBossWS 4, oculta ese requisito. JBoss EAP 7 se envía con JBossWS 5, que ya no oculta este requisito. Esto significa que las clases de servicio proporcionadas por el usuario deben implementar JAX-WS 2.2 o posterior al actualizar el código existente para usar el javax.xml.ws.Service
constructor que incluye uno o más WebServiceFeature
argumentos.
protected Service(URL wsdlDocumentLocation, QName serviceName, WebServiceFeature... features)
5.1.8. IgnoreHttpsHost CN Check Change [Esto es una traducción automática]
En versiones anteriores, podía deshabilitar la comprobación del nombre de host de HTTPS URL con el nombre común (CN) de un servicio que figura en su certificado estableciendo la propiedad del sistema. org.jboss.security.ignoreHttpsHost
a true
. Este nombre de propiedad del sistema ha sido reemplazado por cxf.tls-client.disableCNCheck
.
5.1.9. Configuración del lado del servidor y carga de clases [Esto es una traducción automática]
Como consecuencia de habilitar las inyecciones en los puntos finales del servicio y los controladores del cliente del servicio, ya no es posible cargar automáticamente clases de controladores desde el org.jboss.as.webservices.server.integration
Módulo JBoss. Si su aplicación depende de una configuración predefinida determinada, es posible que deba definir de forma explícita nuevas dependencias de módulos para su implementación. Para más información, ver Migrar dependencias de módulos explícitos
5.1.10. La depreciación de las normas endosadas de Java anula el mecanismo [Esto es una traducción automática]
los Mecanismo de invalidación de estándares endosados por Java se desaprobó en JDK 1.8_40 con la intención de eliminarlo en JDK 9. Este mecanismo permitió a los desarrolladores hacer que las bibliotecas estuvieran disponibles para todas las aplicaciones desplegadas colocando los JAR en un directorio endosado dentro del JRE.
Si su aplicación utiliza la implementación JBossWS de Apache CXF, JBoss EAP 7 garantiza que las dependencias requeridas se agreguen en el orden correcto y usted no debería verse afectado por este cambio. Si su aplicación accede a Apache CXF directamente, ahora debe proporcionar las dependencias de Apache CXF después de las dependencias de JBossWS como parte de la implementación de su aplicación.
5.1.11. Especificación del descriptor en EAR Archive [Esto es una traducción automática]
En versiones anteriores de JBoss EAP, puede configurar el jboss-webservices.xml
archivo descriptor de despliegue para implementaciones de servicios web EJB en el META-INF/
directorio de archivos JAR o en el WEB-INF/
directorio para las implementaciones del servicio web POJO y los puntos finales del servicio web EJB incluidos en los archivos WAR.
En JBoss EAP 7, ahora puede configurar el jboss-webservices.xml
archivo de descriptor de despliegue en META-INF/
directorio de un archivo EAR. Si un jboss-webservices.xml
archivo se encuentra tanto en el archivo EAR y el archivo JAR o WAR, los datos de configuración en el jboss-webservices.xml
archivo para el JAR o WAR anula los datos correspondientes en el archivo de descriptor EAR.
5.2. Actualice el puerto y el conector remoto de URL [Esto es una traducción automática]
En JBoss EAP 7, el conector predeterminado ha cambiado de remote
a http-remoting
y el puerto de conexión remota predeterminado ha cambiado desde 4447
a 8080
. El URL del proveedor JNDI para la configuración predeterminada ha cambiado desde remote://localhost:4447
a http-remoting://localhost:8080
.
Si usa el JBoss EAP 7 migrate
operación para actualizar su configuración, no necesita modificar el conector remoto, el puerto remoto o las URL de los proveedores JNDI porque la operación de migración preserva el conector remoto JBoss EAP 6 y 4447
configuraciones de puerto en la configuración del subsistema. Para más información sobre el migrate
operación, ver Gestión de la migración de la CLI Operación.
Si no usas el migrate
operación y en su lugar se ejecuta con la nueva configuración predeterminada de JBoss EAP 7, debe cambiar el conector remoto, el puerto remoto y la URL del proveedor JNDI para usar la nueva configuración como se describe arriba.
5.3. Cambios en la aplicación de mensajería [Esto es una traducción automática]
5.3.1. Reemplace o actualice los descriptores de implementación de JMS [Esto es una traducción automática]
Los archivos de descriptores de distribución de recursos HornetQ JMS patentados identificados por el patrón de nomenclatura -jms.xml
ya no funciona en JBoss EAP 7. El siguiente es un ejemplo de un archivo de descriptor de implementación de recursos JMS en 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>
Si usaste -jms.xml
Los descriptores de implementación JMS en su aplicación en la versión anterior, puede convertir su aplicación para usar el descriptor de implementación estándar de Java EE 7 como se especifica en la sección EE.5.18 del Especificación Java EE 7 o puede actualizar el descriptor de implementación para usar messaging-activemq-deployment
esquema en su lugar.
Si elige actualizar el descriptor, debe hacer las siguientes modificaciones.
- Cambia el espacio de nombres de "urn: jboss: messaging-deployment: 1.0" a "urn: jboss: messaging-activemq-deployment: 1.0".
-
Cambiar el
<hornetq-server>
nombre del elemento a<server>
.
El archivo modificado debería verse como el siguiente ejemplo.
<?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 obtener información sobre los cambios de configuración del servidor relacionados con la mensajería, consulte Cambios en la configuración del servidor de mensajería.
5.3.2. Actualizar clientes externos JMS [Esto es una traducción automática]
JBoss EAP 7 sigue siendo compatible con la API JMS 1.1, por lo que no necesita modificar su código.
El conector remoto y el puerto predeterminados han cambiado en JBoss EAP 7. Para detalles sobre este cambio, vea Actualice el puerto y el conector remoto de URL.
Si migra la configuración de su servidor usando el migrate
operación, la configuración anterior se conserva y no necesita actualizar su PROVIDER_URL
. Sin embargo, si ejecuta con la nueva configuración predeterminada de JBoss EAP 7, debe cambiar el PROVIDER_URL
en el código del cliente para usar el nuevo http-remoting://localhost:8080
ajuste. Para más información, ver Migrar código de nombre de cliente remoto.
Si planea migrar su código para usar la API JMS 2.0, consulte la helloworld-jms
inicio rápido para un ejemplo de trabajo.
5.3.3. Reemplazar la API HornetQ [Esto es una traducción automática]
JBoss EAP 6 incluyó el org.hornetq
módulo, que le permitió usar el API HornetQ en el código fuente de tu aplicación.
Apache ActiveMQ Artemis reemplaza HornetQ en JBoss EAP 7, por lo que debe migrar cualquier código que use la API HornetQ para usar el API Apache ActiveMQ Artemis. Las bibliotecas para esta API están incluidas en org.apache.activemq.artemis
módulo.
ActiveMQ Artemis es una evolución de HornetQ, por lo que muchos de los conceptos se siguen aplicando.
5.4. Cambios de aplicación JAX-RS y RESTEasy [Esto es una traducción automática]
JBoss EAP 6 incluyó RESTEasy 2, que era una implementación de JAX-RS 1.x.
JBoss EAP 7.0 incluye RESTEasy 3, que es una implementación de JAX-RS 2.0 según lo definido por el JSR 339: JAX-RS 2.0: la API de Java para los servicios web RESTful especificación. Para obtener más información sobre la API de Java para los servicios web RESTful, consulte la Especificación JAX-RS 2.0 API.
La versión de Jackson incluida en JBoss EAP ha cambiado. JBoss EAP 6 incluye Jackson 1.9.9. JBoss EAP 7 y versiones posteriores ahora incluyen Jackson 2.6.3 o superior.
Esta sección describe cómo estos cambios pueden afectar las aplicaciones que usan RESTEasy o JAX-RS.
5.4.1. RESETClases obsoletas [Esto es una traducción automática]
Clases de Interceptor y Cuerpo de Mensaje
JSR 311: JAX-RS: la API de Java ™ para servicios web RESTful no incluyó un marco interceptor, por lo que RESTEasy 2 proporcionó uno. JSR 339: JAX-RS 2.0: la API de Java para los servicios web RESTful introdujo un interceptor oficial y un marco de filtro, por lo que el marco de interceptor incluido en RESTEasy 2 ahora está en desuso, y se reemplazó por el recurso interceptor compatible con JAX-RS 2.0 en RESTEasy 3.x. Las interfaces relevantes se definen en javax.ws.rs.ext
paquete de la jaxrs-api
módulo.
Las siguientes interfaces de interceptor están en desuso en RESTEasy 3.x.
-
los
org.jboss.resteasy.spi.interception.PreProcessInterceptor
la interfaz es reemplazada porjavax.ws.rs.container.ContainerRequestFilter
interfaz en RESTEasy 3.x. Las siguientes interfaces y clases también están en desuso en 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
-
-
los
org.jboss.resteasy.spi.interception.MessageBodyWriterInterceptor
la interfaz es reemplazada porjavax.ws.rs.ext.WriterInterceptor
interfaz. Además, algunos cambios en el
javax.ws.rs.ext.MessageBodyWriter
la interfaz puede no ser compatible con respecto a JAX-RS 1.x. Si su aplicación utilizó JAX-RS 1.x, revise el código de su aplicación para asegurarse de definir@Produces
o@Consumes
para tus puntos finales De lo contrario, podría producirse un error similar al siguiente.org.jboss.resteasy.core.NoMessageBodyWriterFoundFailure: Could not find MessageBodyWriter for response object of type: <OBJECT> of media type:
El siguiente es un ejemplo de un punto final REST que puede causar este error.
@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 solucionar el problema, agregue la importación para
javax.ws.rs.Produces
y el@Produces
anotación de la siguiente manera.... 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 los interceptores de la versión anterior de RESTEasy pueden ejecutarse en paralelo con el nuevo filtro JAX-RS 2.0 e interfaces de interceptor.
Para obtener más información acerca de los interceptores, consulte Interceptores RESTEasy en Desarrollo de aplicaciones de servicios web para JBoss EAP.
Para obtener más información sobre la nueva API de reemplazo, consulte la RESTEasy JAX-RS 3.0.13.Final API o después.
API cliente
El marco de trabajo RESTEasy en resteasy-jaxrs
ha sido reemplazado por el cumplimiento de JAX-RS 2.0 resteasy-client
módulo. Como resultado, algunas clases y métodos de API de cliente RESTEasy están en desuso.
Las siguientes clases están en desuso.
-
los
org.jboss.resteasy.client.ClientResponseFailure
excepción y laorg.jboss.resteasy.client.ClientExecutor
yorg.jboss.resteasy.client.EntityTypeFactory
las interfaces también están en desuso. Debes reemplazar el
org.jboss.resteasy.client.ClientRequest
yorg.jboss.resteasy.client.ClientResponse
clases conorg.jboss.resteasy.client.jaxrs.ResteasyClient
yjavax.ws.rs.core.Response
respectivamente.El siguiente es un ejemplo de cómo enviar un encabezado de enlace con el cliente RESTEasy en 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();
El siguiente es un ejemplo de cómo lograr la misma tarea con el cliente RESTEasy en 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");
Ver el
resteasy-jaxrs-client
quickstart para obtener un ejemplo de un cliente externo JAX-RS RESTEasy que interactúa con un servicio web JAX-RS.-
Las clases y las interfaces en el
org.jboss.resteasy.client.cache
paquete también están en desuso. Se reemplazan por clases e interfaces equivalentes en elorg.jboss.resteasy.client.jaxrs.cache
paquete.
Para más información sobre el org.jboss.resteasy.client.jaxrs
Clases de API, vea el RESTEasy JAX-RS JavaDoc.
StringConverter
los org.jboss.resteasy.spi.StringConverter
la clase está obsoleta en RESTEasy 3.x. Esta funcionalidad puede ser reemplazada usando el JAX-RS 2.0 jax.ws.rs.ext.ParamConverterProvider clase.
5.4.2. Clases RESTEasy eliminadas o protegidas [Esto es una traducción automática]
ResteasyProviderFactory Agregar métodos
La mayoría de org.jboss.resteasy.spi.ResteasyProviderFactory
add()
los métodos se han eliminado o protegido en RESTEasy 3.0. Por ejemplo, el addBuiltInMessageBodyReader()
y addBuiltInMessageBodyWriter()
métodos se han eliminado y el addMessageBodyReader()
y addMessageBodyWriter()
los métodos han sido protegidos.
Ahora debería usar el registerProvider()
y registerProviderInstance()
métodos.
Clases adicionales eliminadas de RESTEasy 3
los @org.jboss.resteasy.annotations.cache.ServerCached
la anotación, que especificaba que la respuesta al método JAX-RS debe almacenarse en caché en el servidor, se eliminó de RESTEasy 3 y debe eliminarse del código de la aplicación.
5.4.3. Cambios RESTEasy adicionales [Esto es una traducción automática]
SignedInput y SignedOuput
-
SignedInput
ySignedOutput
pararesteasy-crypto
debe tener elContent-Type
ajustado amultipart/signed
ya sea en elRequest
oResponse
objeto, o mediante el uso de@Consumes
o@Produces
anotación. -
SignedOutput
ySignedInput
se puede usar para devolver elapplication/pkcs7-signature
Formato de tipo MIME en forma binaria configurando ese tipo en@Produces
o@Consumes
anotaciones -
Si el
@Produces
o@Consumes
estext/plain
Tipo MIME,SignedOutput
se codificará en base64 y se enviará como una cadena.
Cambios en WS-Security
Los filtros de seguridad para @RolesAllowed
, @PermitAll
, y @DenyAll
ahora devuelve "403 Prohibido" en lugar de "401 no autorizado".
Filtros del lado del cliente
Los nuevos filtros JAX-RS 2.0 del lado del cliente no se vincularán y ejecutarán cuando utilice la API del cliente RESTEasy de la versión anterior.
Soporte HTTP asíncrono
Porque la especificación JAX-RS 2.0 agrega soporte HTTP asíncrono usando el @Suspended
anotación y el AsynResponse
interfaz, la API patentada RESTEasy para HTTP asíncrono ha quedado obsoleta y podría eliminarse en una futura versión RESTEasy. Los módulos asíncronos Tomcat y Asincrónicos de JBoss Web también se han eliminado de la instalación del servidor. Si no está utilizando el contenedor Servlet 3.0 o superior, se simulará el procesamiento asincrónico del lado del servidor HTTP y se ejecutará de forma síncrona en el mismo hilo de solicitud.
Caché del lado del servidor
La configuración de la memoria caché del lado del servidor ha cambiado. Por favor mira el Documentación RESTEasy para más información.
Cambios de Jackson Provider [Esto es una traducción automática]
En versiones anteriores de JBoss EAP, la configuración del proveedor RESTEasy YAML estaba habilitada de manera predeterminada. Esto ha cambiado en JBoss EAP 7. El proveedor YAML ahora está deshabilitado por defecto. Su uso no es compatible debido a un problema de seguridad en el SnakeYAML
biblioteca utilizada por RESTEasy para desasignación y debe estar explícitamente habilitada en la aplicación. Para obtener información sobre cómo habilitar el proveedor YAML en su aplicación y agregar las dependencias Maven, consulte Proveedor de YAML en Desarrollo de aplicaciones de servicios web para JBoss EAP.
Charset predeterminado UTF-8 en el encabezado de tipo de contenido
En JBoss EAP 7.1, el resteasy.add.charset
parámetro está configurado para true
por defecto. Puedes configurar el resteasy.add.charset
parámetro a false
si no quieres que RESTEasy agregue charset=UTF-8
al encabezado de tipo de contenido devuelto cuando el método de recurso devuelve un text/*
o application/xml*
tipo de medio sin un conjunto de caracteres explícito.
Para obtener más información acerca de los tipos de medios de texto y conjuntos de caracteres, consulte Tipos de medios de texto y juegos de caracteres en Desarrollo de aplicaciones de servicios web para JBoss EAP.
SerializableProvider
Deserializar objetos Java de fuentes no confiables no es seguro. Por esta razón, en JBoss EAP 7, el org.jboss.resteasy.plugins.providers.SerializableProvider
la clase está deshabilitada de forma predeterminada, y no se recomienda utilizar este proveedor.
Coincidencia de solicitudes a métodos de recursos
En RESTEasy 3, se han realizado mejoras y correcciones en la implementación de las reglas de coincidencia, tal como se define en la especificación JAX-RS 2.0. En particular, se realizó un cambio en cómo se maneja un URI ambiguo en un método de sub-recursos y un localizador de sub-recursos.
En RESTEasy 2, era posible que un localizador de sub-recursos se ejecutara con éxito incluso cuando había otro sub-recurso con el mismo URI. Este comportamiento fue incorrecto según la especificación.
En RESTEasy 3, cuando hay un URI ambiguo para un sub-recurso y un localizador de sub-recursos, la invocación del sub-recurso será exitosa; sin embargo, llamar al localizador de sub-recursos dará como resultado un estado HTTP 405 Method Not Allowed
error.
El siguiente ejemplo contiene un ambiguo @Path
anotación en un método de sub-recurso y un localizador de sub-recursos. Observe que el URI para ambos extremos, anotherResource
y anotherResourceLocator
, es el mismo. La diferencia entre los dos puntos finales es que anotherResource
método está asociado con el verbo REST, POST
. los anotherResourceLocator
método no está asociado con ningún verbo REST. De acuerdo con la especificación, el punto final con el verbo REST, en este caso el anotherResource
método, siempre será seleccionado.
@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. RESTEasy SPI Cambios [Esto es una traducción automática]
Excepciones de SPI
Todas las excepciones de falla de SPI han quedado obsoletas y ya no se usan internamente. Han sido reemplazados con la excepción JAX-RS 2.0 correspondiente.
Excepción obsoleta | Excepción de reemplazo en 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 y registro
los InjectorFactory
y Registry
SPI han cambiado. Esto no debería ser un problema si usa RESTEasy como está documentado y es compatible.
5.4.5. Cambios de Jackson Provider [Esto es una traducción automática]
La versión de Jackson incluida en JBoss EAP ha cambiado. La versión anterior de JBoss EAP incluía Jackson 1.9.9. JBoss EAP 7 ahora incluye Jackson 2.6.3 o superior. Como resultado, el proveedor de Jackson ha cambiado de resteasy-jackson-provider
a resteasy-jackson2-provider
.
La actualización a la resteasy-jackson2-provider
requiere algunos cambios en el paquete. Por ejemplo, el paquete de anotación de Jackson ha cambiado de org.codehaus.jackson.annotate
a com.fasterxml.jackson.annotation
.
Para cambiar su aplicación y usar el proveedor predeterminado que se incluyó en la versión anterior de JBoss EAP, consulte Cambiar el proveedor predeterminado de Jackson en Desarrollo de aplicaciones de servicios web para JBoss EAP.
5.4.6. Cambios en la integración RESTEasy de primavera [Esto es una traducción automática]
El marco de Spring 4.0 presentó soporte para Java 8. Si planea usar la integración de RESTEasy 3.x con Spring, asegúrese de especificar 4.2.x como la versión mínima de Spring en su implementación, ya que esta es la primera versión estable compatible con JBoss EAP. 7.
5.4.7. Cambios RESTEasy Jettison JSON Provider [Esto es una traducción automática]
El proveedor RESTEasy Jettison JSON está en desuso en JBoss EAP 7 y ya no se agrega a las implementaciones de forma predeterminada. Se le recomienda cambiar al proveedor recomendado de RESTEasy Jackson. Si prefiere continuar usando el proveedor de Jettison, debe definir una dependencia explícita para él en el jboss-deployment-descriptor.xml
archivo como se demuestra en el siguiente ejemplo.
<?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 obtener más información acerca de cómo definir dependencias explícitas, consulte Agregar una dependencia de módulo explícito a una implementación en el JBoss EAP Guía de desarrollo.
5.5. Cambios de la aplicación CDI 1.2 [Esto es una traducción automática]
JBoss EAP 7 incluye soporte para CDI 1.2. Como resultado, las aplicaciones escritas usando CDI 1.0 podrían ver algunos cambios en el comportamiento cuando se migren a JBoss EAP 7. Esta sección resume solo algunos de esos cambios.
Puede encontrar más información sobre Weld y CDI 1.2 en las siguientes referencias:
Archivos de Frijol
Las clases de frijoles habilitados Bean deben implementarse en archivos de frijoles para garantizar que sean escaneados por CDI para encontrar y procesar las clases de frijoles.
En CDI 1.0, un archivo se definió como explícito archivo de frijol si contenía un beans.xml
archivo en el META-INF/
directorio para un cliente de aplicación, EJB o JAR de biblioteca, o si contenía un beans.xml
archivo en el WEB-INF/
directorio para una GUERRA.
CDI 1.1 introducido implícito archivos de beans, que son archivos que contienen una o más clases de beans con una anotación que define bean, o uno o más beans de sesión. Los archivos de frijoles implícitos son escaneados por CDI y, durante el descubrimiento de tipos, solo se descubren las clases con anotaciones que definen los beans. Para más información, ver Tipo y Bean Discovery en Inyección de contextos y dependencia para la plataforma Java EE.
Un archivo bean tiene un modo de descubrimiento de frijoles all
, annotated
o none
. Un archivo de frijoles que contiene un beans.xml
archivo sin versión tiene un modo de descubrimiento de frijol predeterminado de all
. Un archivo de frijoles que contiene un beans.xml
archivo con versión 1.1
o más tarde debe especificar el bean-discovery-mode
atributo. El valor predeterminado para el atributo es annotated
.
Un archivo no es un archivo de beans en los siguientes casos:
-
Contiene un
beans.xml
archivo con unbean-discovery-mode
denone
. -
Contiene una extensión CDI sin
beans.xml
archivo.
Un archivo es un explícito archivo de frijol en los siguientes casos:
-
El archivo contiene un
beans.xml
archivo con un número de versión de 1.1 o posterior y unabean-discovery-mode
deall
. -
El archivo contiene un
beans.xml
archivo sin número de versión. -
Ejemplo: bandera de anotación en el
jboss-deployment-structure.xml
Archivo [Esto es una traducción automática]
Un archivo es un implícito archivo de frijol en los siguientes casos:
-
El archivo contiene una o más clases de beans con una anotación que define bean, o uno o más beans de sesión, incluso si no contiene un
beans.xml
archivo. -
El archivo contiene un
beans.xml
archivo con unbean-discovery-mode
deannotated
.
CDI 1.2 limitado bean definiendo anotaciones a lo siguiente:
-
@ApplicationScoped
,@SessionScoped
,@ConversationScoped
, y@RequestScoped
anotaciones - Todos los demás tipos de alcance normal
-
Ejemplo:
@DateBridge
y@CalendarBridge
Anotación [Esto es una traducción automática] -
Todas las anotaciones de estereotipos, que son anotaciones anotadas con
@Stereotype
-
Ejemplo:
@IndexedEmbedded
Anotación [Esto es una traducción automática]
Para obtener más información acerca de los archivos de frijol, consulte Archivos de Frijol en Inyección de contextos y dependencia para la plataforma Java EE.
Aclaración de la resolución de conversación
El ciclo de vida del contexto de la conversación se modificó para evitar conflictos con la especificación del servlet como se describe en CDI-411, número de especificación CDI-411. El ámbito de conversación está activo durante todas las solicitudes de servlet y no debe impedir que otros servlets o filtros de servlet configuren el cuerpo de solicitud o la codificación de caracteres.
Resolución del observador
La resolución del evento se ha reescrito en parte en CDI 1.2. En CDI 1.0, un evento se entrega a un método de observador si el método del observador tiene todos los calificadores de eventos. En CDI 1.2, un evento se entrega a un método de observador si el método del observador no tiene calificadores de eventos o tiene un subconjunto de los calificadores de eventos.
5.6. Migrar dependencias de módulos explícitos [Esto es una traducción automática]
La introducción del sistema de carga de clases modular y JBoss Modules en la versión anterior de JBoss EAP permitió un control detallado de las clases disponibles para las aplicaciones. Esta característica le permitió configurar dependencias explícitas de módulos utilizando la aplicación MANIFEST.MF
archivo o el jboss-deployment-structure.xml
archivo descriptor de despliegue
Si definió dependencias explícitas de módulos en su aplicación, debe tener en cuenta los siguientes cambios en JBoss EAP 7.
Revise las dependencias para la disponibilidad
Los módulos que están incluidos en JBoss EAP han cambiado. Cuando migre su aplicación a JBoss EAP 7, revise su MANIFEST.MF
y jboss-deployment-structure.xml
archivo de entradas para asegurarse de que no se refieran a ningún módulo que se haya eliminado de esta versión del producto.
Dependencias que requieren exploración de anotación
En el lanzamiento anterior de JBoss EAP, si su dependencia contenía anotaciones que debían procesarse durante el análisis de anotación, como al declarar Interceptor EJB, se le requería generar e incluir un índice Jandex en un nuevo archivo JAR y luego establecer un indicador en el MANIFEST.MF
o jboss-deployment-structure.xml
archivo descriptor de despliegue
JBoss EAP 7 ahora ofrece generación automática en tiempo de ejecución de índices de anotación para módulos estáticos, por lo que ya no es necesario generarlos manualmente. Sin embargo, aún necesita agregar el annotations
bandera a la aplicación MANIFEST.MF
archivo o el jboss-deployment-structure.xml
archivo descriptor de despliegue como se muestra a continuación.
Ejemplo: bandera de anotación en el MANIFEST.MF
Archivo [Esto es una traducción automática]
Dependencias: com.company.my-ejb annotations, com.company.other
Ejemplo: bandera de anotación en el jboss-deployment-structure.xml
Archivo [Esto es una traducción 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. Cambios de migración de Hibernate y JPA [Esto es una traducción automática]
5.7.1. Hibernate ORM 3.0 [Esto es una traducción automática]
Las clases de integración que facilitaron el uso de Hibernate ORM 3 en la versión anterior fueron eliminadas de JBoss EAP 7. Si su aplicación todavía usa las bibliotecas Hibernate ORM 3, se recomienda encarecidamente que migre su aplicación para usar Hibernate ORM 5 como Hibernate ORM 3 ya no funcionará en JBoss EAP sin mucho esfuerzo. Si no puede migrar a Hibernate ORM 5, debe definir un módulo JBoss personalizado para Hibernate ORM 3 JAR y excluir las clases Hibernate ORM 5 de su aplicación.
5.7.2. Hibernate ORM 4.0 - 4.3 [Esto es una traducción automática]
Si su aplicación necesita caché de segundo nivel habilitada, debe migrar a Hibernate ORM 5, que está integrado con Infinispan 8.x.
Las aplicaciones escritas con Hibernate ORM 4.x aún pueden usar Hibernate ORM 4.x. Debe definir un módulo JBoss personalizado para los JAR de Hibernate ORM 4.x y excluir las clases de Hibernate ORM 5 de su aplicación. Sin embargo, se recomienda encarecidamente que reescriba el código de la aplicación para usar Hibernate ORM 5. Para obtener información sobre la migración a Hibernate ORM 5, consulte Migración a Hibernate ORM 5.
5.7.3. Migración a Hibernate ORM 5 [Esto es una traducción automática]
Esta sección destaca los cambios que debe realizar al migrar desde la versión 4.3 de Hibernate ORM a la versión 5. Para obtener más información acerca de los cambios implementados entre Hibernate ORM 4 e Hibernate ORM 5, consulte el Guía de migración de Hibernate ORM 5.0.
RESETClases obsoletas [Esto es una traducción automática]
Las siguientes clases en desuso se eliminaron de Hibernate ORM 5:
Otros cambios a clases y paquetes
-
los
org.hibernate.integrator.spi.Integrator
la interfaz cambió para dar cuenta del rediseño del bootstrap. -
Un nuevo paquete
org.hibernate.engine.jdbc.env.spi
fue creado. Contiene elorg.hibernate.engine.jdbc.env.spi.JdbcEnvironment
interfaz, que se extrajo de laorg.hibernate.engine.jdbc.spi.JdbcServices
interfaz. -
Un nuevo
org.hibernate.boot.model.relational.ExportableProducer
interfaz fue introducida que afectaráorg.hibernate.id.PersistentIdentifierGenerator
implementaciones. -
La firma de
org.hibernate.id.Configurable
fue cambiado para aceptarorg.hibernate.service.ServiceRegistry
en lugar de soloorg.hibernate.dialect.Dialect
. -
los
org.hibernate.metamodel.spi.TypeContributor
la interfaz ha migrado aorg.hibernate.boot.model.TypeContributor
. -
los
org.hibernate.metamodel.spi.TypeContributions
la interfaz ha migrado aorg.hibernate.boot.model.TypeContributions
.
Tipo de manejo
-
Incorporado
org.hibernate.type.descriptor.sql.SqlTypeDescriptor
las implementaciones ya no se auto-registran conorg.hibernate.type.descriptor.sql.SqlTypeDescriptorRegistry
. Aplicaciones que usan personalizadasSqlTypeDescriptor
las implementaciones que amplían las implementaciones incorporadas y dependen de ese comportamiento deben actualizarse para llamarSqlTypeDescriptorRegistry.addDescriptor()
sí mismos. -
Para los ID definidos como UUID generados, algunas bases de datos requieren que establezca explícitamente el
@Column(length=16)
para generarBINARY(16)
para que las comparaciones funcionen correctamente -
por
EnumType
mapeos definidos enhbm.xml
, Donde quierasjavax.persistence.EnumType.STRING
name-mapping
, esta configuración debe establecerse explícitamente mediante el usouseNamed(true)
configuración o especificando un VARCHAR valor de12
.
Cambios en el subsistema de transacciones [Esto es una traducción automática]
-
La transacción SPI experimentó un importante rediseño en Hibernate ORM 5. En Hibernate ORM 4.3, utilizó el
org.hibernate.Transaction
API para acceder directamente a diferentes estrategias de transacciones de back-end. Hibernate ORM 5 introdujo un nivel de indirección. En el back-end, elorg.hibernate.Transaction
la implementación ahora habla a unorg.hibernate.resource.transaction.TransactionCoordinator
, que representa el contexto transaccional de una sesión determinada según la estrategia de back-end. Si bien esto no tiene un impacto directo en los desarrolladores, podría afectar la configuración de arranque. Anteriormente, las aplicaciones especificaríanhibernate.transaction.factory_class
propiedad, que ahora está en desuso, y se refieren a unorg.hibernate.engine.transaction.spi.TransactionFactory
FQN (nombre completo). Con Hibernate ORM 5, especifica elhibernate.transaction.coordinator_class
configurar y consultar unorg.hibernate.resource.transaction.TransactionCoordinatorBuilder
. Verorg.hibernate.cfg.AvailableSettings.TRANSACTION_COORDINATOR_STRATEGY
para detalles adicionales. Los siguientes nombres cortos ahora son reconocidos:
-
jdbc: Gestione transacciones utilizando el JDBC
java.sql.Connection
. Este es el valor predeterminado para las transacciones que no son de JPA. jta: Gestione transacciones usando JTA.
ImportanteSi una aplicación JPA no proporciona una configuración para el
hibernate.transaction.coordinator_class
propiedad, Hibernate construirá automáticamente el coordinador de transacción adecuado en función del tipo de transacción para la unidad de persistencia.Si una aplicación que no es JPA no proporciona una configuración para el
hibernate.transaction.coordinator_class
propiedad, Hibernate se convertirá enjdbc
para administrar las transacciones. Este valor predeterminado causará problemas si la aplicación realmente utiliza transacciones basadas en JTA. Una aplicación no JPA que utiliza transacciones basadas en JTA debe establecer explícitamente elhibernate.transaction.coordinator_class
valor de propiedad parajta
o proporcionar una costumbreorg.hibernate.resource.transaction.TransactionCoordinatorBuilder
que construye unorg.hibernate.resource.transaction.TransactionCoordinator
que coordina adecuadamente con las transacciones basadas en JTA.
-
jdbc: Gestione transacciones utilizando el JDBC
Cambios en la búsqueda de Hibernate [Esto es una traducción automática]
-
los
cfg.xml
los archivos se vuelven a analizar completamente y se integran con eventos, seguridad y otras funciones. -
Las propiedades cargadas desde
cfg.xml
utilizando elEntityManagerFactory
previamente no prefijaba nombres conhibernate
. Esto ahora se ha hecho consistente. - La configuración ya no es serializable.
-
los
org.hibernate.dialect.Dialect.getQuerySequencesString()
método ahora recupera los valores de catálogo, esquema e incremento. -
los
AuditConfiguration
el modificador fue eliminado deorg.hibernate.envers.boot.internal.EnversService
. -
los
AuditStrategy
los parámetros del método se cambiaron para eliminar el obsoletoAuditConfiguration
y usa el nuevoEnversService
. -
Varias clases e interfaces en el
org.hibernate.hql.spi
paquete y subpaquetes se han movido a la nuevaorg.hibernate.hql.spi.id
paquete. Esto incluye elMultiTableBulkIdStrategy
clase y elAbstractTableBasedBulkIdHandler
,TableBasedDeleteHandlerImpl
, yTableBasedUpdateHandlerImpl
interfaces y sus subclases. - Hubo un rediseño completo de los contratos de acceso a la propiedad.
-
Válido
hibernate.cache.default_cache_concurrency_strategy
los valores de configuración ahora se definen usando elorg.hibernate.cache.spi.access.AccessType.getExternalName()
método en lugar de laorg.hibernate.cache.spi.access.AccessType
constantes enum Esto es más consistente con otras configuraciones de Hibernate.
5.7.4. Migración de Hibernate ORM 5.0 a Hibernate ORM 5.1 [Esto es una traducción automática]
Mientras que JBoss EAP 7.0 incluyó Hibernate ORM 5.0, JBoss EAP 7.1 ahora incluye Hibernate ORM 5.1. Esta sección resalta las diferencias y los cambios necesarios al migrar desde la versión 5.0 de Hibernate ORM a la versión 5.1.
Hibernate ORM 3.0 [Esto es una traducción automática]
Esta versión incluye muchas mejoras de rendimiento y correcciones de errores, que se detallan en Funciones de Hibernate ORM 5.1 en el JBoss EAP 7.1.0 Notas de la versión. Para obtener información adicional sobre los cambios implementados entre Hibernate ORM 5.0 e Hibernate ORM 5.1, consulte el Hibernate ORM 5.1 Guía de migración.
Cambios en la administración de JMX [Esto es una traducción automática]
Cambios del cliente EJB en JBoss EAP 7 [Esto es una traducción automática]
Los cambios de herramientas de gestión de esquemas en Hibernate ORM 5.1 se centran principalmente en las siguientes áreas:
-
Unificando el manejo de
hbm2ddl.auto
y JPA de Hibernateschema-generation
apoyo. - Elimina las preocupaciones de JDBC del SPI para facilitar el reemplazo verdadero de Hibernate OGM, un motor de persistencia que proporciona compatibilidad con Java Persistence (JPA) para almacenes de datos NoSQL.
Los cambios de herramientas de administración de esquemas solo deberían ser un problema de migración para las aplicaciones que usan directamente cualquiera de las siguientes clases:
-
org.hibernate.tool.hbm2ddl.SchemaExport
-
org.hibernate.tool.hbm2ddl.SchemaUpdate
-
org.hibernate.tool.hbm2ddl.SchemaValidator
-
org.hibernate.tool.schema.spi.SchemaManagementTool
, o cualquiera de sus delegados
Cambios en la configuración de mensajería en JBoss EAP 7.1 [Esto es una traducción automática]
Hibernate ORM 5.1.10 que se incluye en JBoss EAP 7.1, introdujo una nueva estrategia para recuperar tablas de bases de datos que mejora SchemaMigrator
y SchemaValidator
actuación. Esta estrategia ejecuta un solo java.sql.DatabaseMetaData#getTables(String, String, String, String[])
llamar para determinar si cada javax.persistence.Entity
tiene una tabla de base de datos mapeada. Esta es la estrategia predeterminada, y usa el hibernate.hbm2ddl.jdbc_metadata_extraction_strategy=grouped
ajuste de propiedad. Esta estrategia puede requerir hibernate.default_schema
y / o hibernate.default_catalog
ser provisto.
Para usar la vieja estrategia, que ejecuta un java.sql.DatabaseMetaData#getTables(String, String, String, String[])
pedir each javax.persistence.Entity
, utilizar el hibernate.hbm2ddl.jdbc_metadata_extraction_strategy=individually
ajuste de propiedad.
5.8. Cambios en la búsqueda de Hibernate [Esto es una traducción automática]
La versión de Hibernate Search que se envía con JBoss EAP 7 ha cambiado. El lanzamiento anterior de JBoss EAP se envió con Hibernate Search 4.6.x. JBoss EAP 7 se envía con Hibernate Search 5.5.x.
Hibernate Search 5.5 está basado en Apache Lucene 5.3.1. Si usa cualquier API nativa de Lucene, asegúrese de alinearse con esta versión. los Hibernate Search 5.5 API envuelve y oculta la complejidad de muchos de los cambios de la API de Lucene realizados entre la versión 3 y la versión 5; sin embargo, algunas clases ahora están en desuso, renombradas o reempaquetadas. Esta sección describe cómo estos cambios pueden afectar el código de su aplicación.
Cambios en la búsqueda de Hibernate [Esto es una traducción automática]
Indexación de id. Campos de relaciones incrustadas
Cuando se usa un @IndexedEmbedded
anotación para incluir campos de una entidad relacionada, el id
de la entidad relacionada ya no está incluido. Puede habilitar la inclusión de id
usando el includeEmbeddedObjectId
atributo de la @IndexedEmbedded
anotación.
Ejemplo: @IndexedEmbedded
Anotación [Esto es una traducción automática]
@IndexedEmbedded(includeEmbeddedObjectId=true)
Cambios de migración de Hibernate y JPA [Esto es una traducción automática]
Los números y fechas ahora están indexados como campos numéricos de forma predeterminada. Propiedades del tipo int
, long
, float
, double
, y sus clases contenedoras correspondientes ya no se indexan como cadenas. En cambio, ahora están indexados usando la codificación numérica apropiada de Lucene. los id
los campos son una excepción a esta regla. Incluso cuando están representados por un tipo numérico, todavía están indexados como una palabra clave de cadena de forma predeterminada. El uso de @NumericField
ahora está obsoleto a menos que desee especificar una precisión personalizada para la codificación numérica. Puede mantener el antiguo formato de índice basado en cadenas especificando explícitamente un puente de campo de codificación de cadenas. En el caso de los enteros, este es el org.hibernate.search.bridge.builtin.IntegerBridge. Comprobar el org.hibernate.search.bridge.builtin paquete para otros puentes de campo disponibles públicamente.
Date
y Calendar
ya no están indexados como cadenas. En cambio, las instancias se codifican como valores largos que representan el número de milisegundos desde el 1 de enero de 1970, 00:00:00 GMT. Puede cambiar el formato de indexación utilizando el nuevo EncodingType enum. Por ejemplo:
Ejemplo: @DateBridge
y @CalendarBridge
Anotación [Esto es una traducción automática]
@DateBridge(encoding=EncodingType.STRING) @CalendarBridge(encoding=EncodingType.STRING)
El cambio de codificación para números y fechas es importante y puede tener un gran impacto en el comportamiento de la aplicación. Si tiene una consulta que se dirige a un campo que anteriormente estaba codificado en cadena, pero ahora está codificado numéricamente, debe actualizar la consulta. Los campos numéricos se deben buscar con un NumericRangeQuery
. También debe asegurarse de que todos los campos segmentados por faceting estén codificados en cadena. Si usa DSL de consulta de búsqueda, la consulta correcta se debe crear automáticamente.
Cambios en la búsqueda de Hibernate [Esto es una traducción automática]
-
Las opciones de ordenación han mejorado y la codificación de campo especificada incorrectamente para las opciones de clasificación ahora da como resultado excepciones de tiempo de ejecución. Lucene también ofrece una clasificación más eficiente si los campos utilizados en el género se conocen desde el principio. Hibernate Search 5.5 proporciona el nuevo
@SortableField
anotación y su compañero de múltiples valores@SortableFields
. Ver el Guía de migración de Hibernate Search 5.4 a 5.5 para más información. El Lucene
SortField
API requiere el siguiente cambio de código de la aplicación.En el lanzamiento anterior de JBoss EAP, estableces el tipo del campo de ordenación en la consulta de la siguiente manera.
fulltextQuery.setSort(new Sort(new SortField("title", SortField.STRING)));
El siguiente es un ejemplo de cómo lo configuraste en JBoss EAP 7.
fulltextQuery.setSort(new Sort(new SortField("title", SortField.Type.STRING)));
-
Ya que
SearchFactory
solo debe ser utilizado por la integración de ORM, se movió de lahibernate-search-engine
módulo a lahibernate-search-orm
módulo. Otros integradores deberían depender exclusivamente deSearchIntegrator
, que reemplaza al obsoletoSearchFactoryIntegrator
. -
El valor enum
SpatialMode.GRID
fue renombrado aSpatialMode.HASH
. -
FullTextIndexEventListener
ahora es una clase final. Si actualmente extiende esta clase, debe encontrar una solución alternativa para lograr la misma funcionalidad. -
los
hibernate-search-analyzers
módulo fue eliminado. El enfoque recomendado es usar directamente el artefacto Lucene apropiado, por ejemploorg.apache.lucene:lucene-analyzers-common
. -
La API del controlador JMS ha cambiado. La dependencia del back-end de JMS en Hibernate ORM se eliminó para que pueda ser utilizada en otros entornos que no sean ORM. Una consecuencia es que los implementadores de
org.hibernate.search.backend.impl.jms.AbstractJMSHibernateSearchController
debe ajustarse a la nueva firma. Esta clase es una clase interna y se recomienda usarla como ejemplo en lugar de extenderla. -
los
org.hibernate.search.spi.ServiceProvider
SPI fue refactorizado. Si estuviera integrando con el antiguo contrato de servicio, consulte el Hibernate Search 5.5 Javadoc deServiceManager
,Service
,Startable
yStoppable
para detalles sobre el nuevo contrato. -
Si ha conservado los índices generados por Lucene 3.x y no los ha reconstruido con Hibernate Search 5.0 o posterior, obtendrá una
IndexFormatTooOldException
. Se recomienda que reconstruya los índices con el indexador masivo. Si no puede hacer eso, intente usar LuceneIndexUpgrader
. Debe actualizar cuidadosamente las asignaciones de Hibernate Search en caso de que el comportamiento predeterminado haya cambiado. Para más información, vea el Guía de migración de Apache Lucene. - Apache Lucene se actualizó de 3.6 a 5.3 en JBoss EAP 7. Si su código importa el código Lucene directamente, consulte el Guía de migración de Apache Lucene para detalles de los cambios. También se puede encontrar información adicional en Registro de cambios de Lucene.
-
Cuando usas
@Field(indexNullAs=)
para codificar un valor de marcador nulo en el índice, el tipo de marcador debe ser compatible con todos los demás valores que están indexados en ese mismo campo. Por ejemplo, antes era posible codificar un valor nulo para campos numéricos usando una cadena "nula". Esto ya no está permitido. En su lugar, debe elegir un número para representar elnull
valor, como-1
. -
Se realizaron mejoras significativas en el motor de facetas. La mayoría de los cambios no afectan la API. La única excepción notable es que ahora debe anotar cualquier campo que pretenda usar para facetar con el
@Facet
o@Facets
anotación.
Cambios en la búsqueda de Hibernate [Esto es una traducción automática]
La siguiente es una lista de clases de búsqueda de Hibernate que fueron reempaquetadas o renombradas.
Paquete anterior y clase | Nuevo paquete y clase |
---|---|
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 - Clases renombradas y reempaquetadas
Los analizadores de consultas se movieron a un nuevo módulo, lo que dio como resultado un cambio de empaquetado de org.apache.lucene.queryParser.QueryParser
a org.apache.lucene.queryparser.classic.QueryParser
.
Muchos de los analizadores Lucene fueron refactorizados, lo que generó cambios en el empaquetado. Ver el Documentación de Apache Lucene para encontrar los paquetes de reemplazo.
Algunas clases de utilidad de Apache Solr, por ejemplo TokenizerFactory
o TokenFilterFactory
, fueron trasladados a Apache Lucene. Si su aplicación usa esas utilidades o analizadores personalizados, debe encontrar el nuevo nombre del paquete en Apache Lucene.
Ver el Guía de migración de Apache Lucene para más información.
Cambios en la búsqueda de Hibernate [Esto es una traducción automática]
Para obtener la lista completa de las interfaces, clases, enumeraciones, tipos de anotación, métodos, constructores y constantes de enumeración en desuso de Hibernate Search, consulte el Hibernate Search API desaprobada documento.
Cambios en la búsqueda de Hibernate [Esto es una traducción automática]
Interfaz | Descripción |
---|---|
org.hibernate.search.store.IndexShardingStrategy |
Obsoleto a partir de Hibernate Search 4.4. Puede ser eliminado en la Búsqueda 5. Uso |
org.hibernate.search.store.Workspace |
Esta interfaz se moverá y se debe considerar API no pública. Para más información, ver HSEARCH-1915. |
Cambios en la búsqueda de Hibernate [Esto es una traducción automática]
Clase | Descripción |
---|---|
org.hibernate.search.filter.FilterKey |
Las claves de filtro personalizadas están en desuso y están programadas para su eliminación en Hibernate Search 6. A partir de Hibernate Search 5.1, las claves para almacenar en caché los filtros Lucene se calculan automáticamente en función de los parámetros de filtro dados. |
org.hibernate.search.filter.StandardFilterKey |
Las claves de filtro personalizadas están en desuso y están programadas para su eliminación en Hibernate Search 6. A partir de Hibernate Search 5.1, las claves para almacenar en caché los filtros Lucene se calculan automáticamente en función de los parámetros de filtro dados. |
Cambios en la búsqueda de Hibernate [Esto es una traducción automática]
Enum | Descripción |
---|---|
org.hibernate.search.annotations.FieldCacheType |
Eliminar el |
Cambios en la búsqueda de Hibernate [Esto es una traducción automática]
Anotación | Descripción |
---|---|
org.hibernate.search.annotations.CacheFromIndex |
Eliminar la anotación No es necesario un reemplazo alternativo. |
org.hibernate.search.annotations.Key |
Las claves de caché de filtro personalizadas son una función obsoleta y están programadas para eliminarse en Hibernate Search 6. A partir de Hibernate Search 5.1, las claves de caché de filtro se determinan automáticamente en función de los parámetros de filtro, por lo que ya no es necesario proporcionar un objeto clave. |
Cambios en la búsqueda de Hibernate [Esto es una traducción automática]
Método | Descripción |
---|---|
org.hibernate.search.FullTextSharedSessionBuilder.autoClose() |
Sin reemplazo |
org.hibernate.search.FullTextSharedSessionBuilder.autoClose(boolean) |
Sin reemplazo |
org.hibernate.search.cfg.IndexedMapping.cacheFromIndex(FieldCacheType…) |
Esto se eliminará sin reemplazo. |
org.hibernate.search.cfg.EntityDescriptor.getCacheInMemory() |
Esto se eliminará sin reemplazo. |
org.hibernate.search.cfg.ContainedInMapping.numericField() |
Invocar |
org.hibernate.search.cfg.EntityDescriptor.setCacheInMemory(Map<String, Object>) |
Esto se eliminará sin reemplazo. |
org.hibernate.search.MassIndexer.threadsForSubsequentFetching(int) |
Este método será eliminado. |
org.hibernate.search.query.dsl.FuzzyContext.withThreshold(float) |
Utilizar |
Cambios en la búsqueda de Hibernate [Esto es una traducción automática]
Constructor | Descripción |
---|---|
org.hibernate.search.cfg.NumericFieldMapping (PropertyDescriptor, EntityDescriptor, SearchMapping) |
Utilizar |
Cambios que afectan a los integradores avanzados
Esta sección describe los cambios que no son parte de la API pública. No deberían afectar al desarrollador promedio, ya que los integradores que acceden al marco Hibernate Search solo deben acceder a estos artefactos.
-
los
IndexWriterSetting.MAX_THREAD_STATES
yIndexWriterSetting.TERM_INDEX_INTERVAL
las constantes enum están en desuso. Afectan qué propiedades se leen de la configuración, por lo que el hecho de que falten significa que las propiedades de configuración comohibernate.search.Animals.2.indexwriter.term_index_interval = default
ahora son ignorados El único efecto secundario es que la propiedad no se aplica. -
los
SearchFactoryIntegrator
la interfaz ahora está en desuso. Debería migrar inmediatamente todo el código para usarSearchIntegrator
. -
los
SearchFactoryBuilder
clase ahora está en desuso. UtilizarSearchIntegrationBuilder
en lugar. -
los
HSQuery.getExtendedSearchIntegrator()
método ha sido desaprobado. Podría ser posible usarSearchIntegrator
, pero es preferible eliminarlo por completo. -
los
DocumentBuilderIndexedEntity.getFieldCacheOption()
método ha sido desaprobado. No hay reemplazo. -
los
BuildContext.getIndexingStrategy()
método está en desuso. UtilizarBuildContext.getIndexingMode()
en lugar. -
los
DirectoryHelper.getVerifiedIndexDir(String, Properties, boolean)
método está en desuso. UtilizarDirectoryHelper.getVerifiedIndexPath(java.lang.String, java.util.Properties, boolean)
en lugar. La siguiente es una lista de clases de búsqueda de Hibernate que fueron reempaquetadas o renombradas.
Paquete anterior y clase Nuevo paquete y clase 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 beans de entidad a JPA [Esto es una traducción automática]
El soporte para beans de entidad EJB es opcional en Java EE 7 y no son compatibles con JBoss EAP 7. Esto significa que la persistencia manejada por contenedor (CMP) y los beans de entidad de persistencia gestionada por bean (BMP) deben reescribirse para usar Java Persistence API (JPA ) entidades cuando migra a JBoss EAP 7.
En lanzamientos anteriores de JBoss EAP, se crearon beans de entidad en el código fuente de la aplicación extendiendo el javax.ejb.EntityBean
clase e implementando los métodos requeridos. Luego se configuraron en el ejb-jar.xml
archivo. Se especificó un bean de entidad CMP utilizando un <entity>
elemento que contenía un <persistence-type>
elemento hijo con un valor de Envase. Se especificó un bean de entidad BMP usando un <entity>
elemento que contenía un <persistence-type>
elemento hijo con un valor de Frijol.
En JBoss EAP 7, debe reemplazar cualquier entidad CMP y BMP beans en su código con entidades Java Persistence API (JPA). Las entidades JPA se crean utilizando el javax.persistence. * clases y se definen en el persistence.xml
archivo.
El siguiente es un ejemplo de una clase de entidad 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; }
El siguiente es un ejemplo de persistence.xml
archivo.
<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 ejemplos de funcionamiento de entidades JPA, vea el bmt
, cmt
, y hibernate5
inicios rápidos que se envían con JBoss EAP 7.
5.10. Cambios en la propiedad de persistencia JPA [Esto es una traducción automática]
Una nueva propiedad de persistencia, jboss.as.jpa.deferdetach
, se agregó para proporcionar compatibilidad con el comportamiento de persistencia en versiones anteriores de JBoss EAP.
los jboss.as.jpa.deferdetach
La propiedad controla si el contexto de persistencia con ámbito de transacción utilizado en un subproceso de transacción no JTA separa las entidades cargadas después de cada EntityManager
invocación o si espera hasta que se cierra el contexto de persistencia, por ejemplo, cuando finaliza la invocación del bean de sesión. El valor de la propiedad está por defecto en false
, lo que significa que las entidades se separan o borran después de cada EntityManager
invocación. Este es el comportamiento predeterminado correcto como se define en el Especificación JPA. Si el valor de la propiedad está configurado para true
, las entidades no se separan hasta que se cierra el contexto de persistencia.
En JBoss EAP 5, la persistencia se comportó como si jboss.as.jpa.deferdetach
la propiedad estaba configurada para true
. Para obtener este mismo comportamiento al migrar su aplicación de JBoss EAP 5 a JBoss EAP 7, debe configurar el jboss.as.jpa.deferdetach
valor de propiedad para true
en tus persistence.xml
como se muestra en el siguiente ejemplo.
<?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>
En JBoss EAP 6, la persistencia se comportó como si jboss.as.jpa.deferdetach
la propiedad estaba configurada para false
. Este es el mismo comportamiento que el visto en JBoss EAP 7, por lo que no es necesario realizar cambios cuando migre su aplicación.
5.10.1. Cambios en la propiedad de persistencia de JPA en JBoss EAP 7.1 [Esto es una traducción automática]
En JBoss EAP 7.0, la comprobación de errores del contexto de persistencia no sincronizada no fue tan estricta como debería haber sido en las siguientes áreas.
-
Se permitió que un contexto de persistencia administrado por contenedor sincronizado utilizara un contexto de persistencia extendida no sincronizada que se asoció con una transacción JTA. En cambio, debería haber arrojado un
IllegalStateException
para evitar que se use el contexto de persistencia no sincronizada. - Un contexto de persistencia no sincronizado especificado en un descriptor de despliegue se trató como sincronizado.
En adición, PersistenceProperty
consejos en el @PersistenceContext
fueron ignorados por error en JBoss EAP 7.0.
Estos problemas fueron abordados y corregidos en JBoss EAP 7.1. Debido a que estas actualizaciones pueden dar como resultado un cambio no deseado en el comportamiento de la aplicación, se introdujeron dos nuevas propiedades de unidad de persistencia en JBoss EAP 7.1 para proporcionar compatibilidad con versiones anteriores y preservar el comportamiento anterior.
Propiedad | Descripción |
---|---|
|
Esta propiedad desactiva la comprobación de errores. Solo se debe usar como una medida temporal para la compatibilidad con versiones anteriores en situaciones donde las aplicaciones funcionaron en JBoss EAP 7.0 y fallaron en JBoss EAP 7.1. Debido a que esta propiedad podría estar obsoleta en una versión futura, se recomienda que corrija el código de la aplicación tan pronto como sea posible. |
|
Esta propiedad es una alternativa a |
5.11. Migrar código de cliente EJB [Esto es una traducción automática]
5.11.1. Cambios del cliente EJB en JBoss EAP 7 [Esto es una traducción automática]
El conector remoto y el puerto predeterminados han cambiado en JBoss EAP 7. Para detalles sobre este cambio, vea Actualice el puerto y el conector remoto de URL.
Si usaste el migrate
operación para migrar la configuración de su servidor, se conservan las configuraciones anteriores y no es necesario realizar los cambios detallados a continuación. Sin embargo, si ejecuta con la nueva configuración predeterminada de JBoss EAP 7, debe realizar los siguientes cambios.
5.11.1.1. Actualice el puerto de conexión remota predeterminado [Esto es una traducción automática]
Cambiar el valor del puerto de conexión remota de 4447
a 8080
en el jboss-ejb-client.properties
archivo.
Ejemplo: jboss-ejb-client.properties
Archivo de propiedades [Esto es una traducción automática]
Ejemplo: JBoss EAP 6 jboss-ejb-client.properties
Archivo [Esto es una traducción 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
Ejemplo: JBoss EAP 7 jboss-ejb-client.properties
Archivo [Esto es una traducción 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. Actualice el conector predeterminado [Esto es una traducción automática]
Si está ejecutando la nueva configuración de JBoss EAP 7, el conector predeterminado ha cambiado de remote
a http-remoting
. Este cambio afecta a los clientes que utilizan bibliotecas de una versión de JBoss EAP y para conectarse al servidor en una versión diferente.
-
Si una aplicación cliente utiliza la biblioteca del cliente EJB de JBoss EAP 6 y desea conectarse al servidor JBoss EAP 7, el servidor debe estar configurado para exponer un
remote
conector en un puerto que no sea8080
. El cliente debe conectarse usando ese conector recién configurado. Una aplicación cliente que utiliza la biblioteca de cliente EJB de JBoss EAP 7 y desea conectarse al servidor JBoss EAP 6 debe saber que la instancia del servidor no utiliza el
http-remoting
conector y en su lugar utiliza unaremote
conector. Esto se logra definiendo una nueva propiedad de conexión del lado del cliente.Ejemplo:
remote
Propiedad de conexión [Esto es una traducción automática]remote.connection.default.protocol=remote
5.11.2. Migrar código de nombre de cliente remoto [Esto es una traducción automática]
Si está ejecutando la nueva configuración predeterminada de JBoss EAP 7, debe modificar su código de cliente para usar el nuevo puerto y conector remoto predeterminado.
El siguiente es un ejemplo de cómo se especificaron las propiedades de denominación remota en el código de cliente en JBoss EAP 6.
java.naming.factory.initial=org.jboss.naming.remote.client.InitialContextFactory java.naming.provider.url=remote://localhost:4447
El siguiente es un ejemplo de cómo especificar las propiedades de nombres remotos en el código de cliente en JBoss EAP 7.
java.naming.factory.initial=org.wildfly.naming.client.WildFlyInitialContextFactory java.naming.provider.url=http-remoting://localhost:8080
5.11.3. Cambios adicionales del cliente EJB introducidos en JBoss EAP 7.1 [Esto es una traducción automática]
Mientras que JBoss EAP 7.0 se envía con JBoss EJB Client 2.1.4, JBoss EAP 7.1 se envía con JBoss EJB Client 4.0.x, que incluye una serie de cambios en la API.
los
org.ejb.client.EJBClientInvocationContext
clase ha agregado los siguientes nuevos métodos.Método Tipo Descripción isBlockingCaller()
boolean
Determine si esta invocación actualmente está bloqueando el hilo de llamada.
isClientAsync()
boolean
Determine si el método está marcado como cliente asíncrono, lo que significa que la invocación debe ser asíncrona independientemente de si el método del lado del servidor es asincrónico.
isIdempotent()
boolean
Determine si el método está marcado idempotent, lo que significa que el método se puede invocar más de una vez sin ningún efecto adicional.
setBlockingCaller(boolean)
void
Establezca si esta invocación actualmente está bloqueando el hilo de llamada.
setLocator(EJBLocator<T>)
<T> void
Establezca el localizador para el destino de invocación.
los
org.ejb.client.EJBLocator
clase ha agregado los siguientes nuevos métodos.Método Tipo Descripción asStateful()
StatefulEJBLocator<T>
Devuelve este localizador como un localizador con estado, si es uno.
asStateless()
StatelessEJBLocator<T>
Devuelve este localizador como un localizador sin estado, si es uno.
isEntity()
boolean
Determine si este es un localizador de entidades.
isHome()
boolean
Determine si este es un localizador de casa.
isStateful()
boolean
Determine si este es un localizador con estado.
isStateless()
boolean
Determine si este es un localizador sin estado.
withNewAffinity(Affinity)
abstract EJBLocator<T>
Crea una copia de este localizador, pero con la nueva afinidad dada.
Un nuevo
org.ejb.client.EJBClientPermission
clase, que es una subclase dejava.security.Permission
, se ha introducido para controlar el acceso a operaciones de EJB privilegiadas.Proporciona los siguientes constructores.
-
EJBClientPermission(String name)
-
EJBClientPermission(String name, String actions)
-
Proporciona los siguientes métodos.
Método Tipo Descripción equals(EJBClientPermission obj)
boolean
Controles dos
EJBClientPermission
objetos para la igualdad.equals(Object obj)
boolean
Controles dos
Permission
objetos para la igualdad.equals(Permission obj)
boolean
Controles dos
Permission
objetos para la igualdad.getActions()
Cadena
Devuelve las acciones como una cadena.
hashcode()
En t
Devuelve el valor del código hash para esto
Permission
objeto.implies(EJBClientPermission permission)
boolean
Comprueba si las acciones del permiso especificado son implicado por esta
EJBClientPermission
las acciones del objeto.implies(Permission permission)
boolean
Comprueba si las acciones del permiso especificado son implicado por esta
Permission
las acciones del objeto.
Un nuevo
org.ejb.client.EJBMethodLocator
clase ha sido introducida para localizar un método EJB específico.Proporciona el siguiente constructor.
-
EJBMethodLocator(String methodName, String… parameterTypeNames)
-
Proporciona los siguientes métodos.
Método Tipo Descripción equals(EJBMethodLocator other)
boolean
Determine si este objeto es igual a otro.
equals(Object other)
boolean
Determine si este objeto es igual a otro.
forMethod(Method method)
static EJBMethodLocator
Obtenga un localizador de métodos para el método de reflexión dado.
getMethodName()
Cadena
Obtener el nombre del método.
getParameterCount()
En t
Obtenga el conteo de parámetros.
getParameterTypeName(int index)
Cadena
Obtenga el nombre del parámetro en el índice dado.
hashCode()
En t
Obtenga el código hash.
Un nuevo
org.jboss.ejb.client.EJBReceiverInvocationContext.ResultProducer.Failed
clase ha sido introducida para casos de falla.Proporciona el siguiente constructor.
-
Failed(Exception cause)
-
Proporciona los siguientes métodos.
Método Tipo Descripción discardResult()
void
Deseche el resultado, lo que indica que no se utilizará.
getResult()
Object
Obtenga el resultado
Un nuevo
org.jboss.ejb.client.EJBReceiverInvocationContext.ResultProducer.Immediate
clase ha sido introducida para resultados inmediatos.Proporciona el siguiente constructor.
-
Failed(Exception cause)
-
Proporciona los siguientes métodos.
Método Tipo Descripción discardResult()
void
Deseche el resultado, lo que indica que no se utilizará.
getResult()
Object
Obtenga el resultado
Un nuevo
org.jboss.ejb.client.URIAffinity
clase, que es una subclase deorg.jboss.ejb.client.Affinity
ha sido introducido para la especificación de afinidad de URI.-
Se crea usando
Affinity.forUri(URI)
. Proporciona los siguientes métodos.
Método Tipo Descripción equals(Affinity other)
boolean
Indica si otro objeto es igual a este.
equals(Object other)
boolean
Indica si otro objeto es igual a este.
equals(URIAffinity other)
boolean
Indica si otro objeto es igual a este.
getURI()
URI
Obtenga el URI asociado.
hashCode()
En t
Obtenga el código hash.
toString()
Cadena
Devuelve una representación de cadena del objeto.
-
Se crea usando
los
org.jboss.ejb.client.EJBMetaDataImpl
clase ha desaprobado los siguientes métodos.-
toAbstractEJBMetaData()
-
EJBMetaDataImpl(AbstractEJBMetaData<?,?>)
-
5.12. Migre los clientes para usar el archivo de configuración de WildFly [Esto es una traducción automática]
Antes de la versión 7.1, las bibliotecas de cliente JBoss EAP, como EJB y naming, usaban diferentes estrategias de configuración. JBoss EAP 7.1 presenta el wildfly-config.xml
archivo con el propósito de unificar todas las configuraciones de cliente en un único archivo de configuración, de forma similar a la forma en que se maneja la configuración del servidor.
Por ejemplo, antes de JBoss EAP 7.1, podría crear un nuevo InitialContext
para un cliente Java EJB usando un jboss-ejb-client.properties
archivo, o al establecer programáticamente las propiedades usando un Properties
clase.
Ejemplo: jboss-ejb-client.properties
Archivo de propiedades [Esto es una traducción 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
En JBoss EAP 7.1, usted crea un wildfly-config.xml
archivo en el META-INF/
directorio del archivo del cliente. Esta es la configuración equivalente usando un wildfly-config.xml
archivo.
Ejemplo: configuración equivalente usando el wildfly-config.xml
Archivo [Esto es una traducción 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 obtener información acerca de cómo configurar la autenticación de cliente para Elytron Client utilizando el wildfly-config.xml
archivo, ver Configurar la autenticación del cliente con Elytron Client en Cómo configurar la gestión de identidad para JBoss EAP.
Para obtener más información acerca de los tipos de configuraciones de clientes que se pueden hacer utilizando el wildfly-config.xml
archivo, ver Configuración del cliente usando el wildfly-config.xml
Archivo en el JBoss EAP Guía de desarrollo.
5.13. Migrar configuraciones de planes de implementación [Esto es una traducción automática]
los Especificación de implementación de aplicaciones Java EE (JSR-88) fue diseñado para definir un contrato estándar que permita a las herramientas de múltiples proveedores configurar e implementar aplicaciones en cualquier producto de la plataforma Java EE. El contrato requería que los proveedores de productos Java EE implementaran el DeploymentManager
y otra javax.enterprise.deploy.spi
interfaces a las que deben acceder los proveedores de herramientas. En el caso de JBoss EAP 6, un plan de despliegue es identificado por un descriptor XML llamado deployment-plan.xml
que se incluye en un archivo ZIP o JAR.
Esta especificación tuvo muy poca aceptación porque la mayoría de los productos de servidores de aplicaciones ofrecen sus propias soluciones de implementación más "ricas en funciones". Por este motivo, la compatibilidad con JSR-88 se eliminó de Java EE 7 y, a su vez, de JBoss EAP 7.
Si usó JSR-88 para implementar su aplicación, ahora debe usar otro método para implementar la aplicación. La CLI de administración de JBoss EAP deploy
comando proporciona una forma estándar para implementar archivos en servidores independientes o grupos de servidores en un dominio administrado. Para obtener más información sobre la CLI de administración, consulte la Guía CLI de gestión.
5.14. Migrar válvulas de aplicaciones personalizadas [Esto es una traducción automática]
Debe migrar manualmente las válvulas personalizadas o cualquier válvula que esté definida en el jboss-web.xml
Archivo XML. Esto incluye las válvulas creadas al extender el org.apache.catalina.valves.ValveBase
clase y configurado en el <valve>
elemento de la jboss-web.xml
archivo descriptor.
Válvulas y válvulas personalizadas que están definidas en jboss-web.xml
el archivo debe ser reescrito o reemplazado por el manejador incorporado de Undertow correspondiente. Para obtener información sobre la asignación de válvulas a los manipuladores de Undertow, consulte Migrar las válvulas web JBoss.
Las válvulas de autenticación deben reemplazarse manualmente utilizando los mecanismos de autenticación integrados de Undertow.
Migrar configuraciones de SSL [Esto es una traducción automática]
En JBoss EAP 6, puede definir válvulas personalizadas en el nivel de aplicación configurándolas en jboss-web.xml
archivo descriptor de la aplicación web. En JBoss EAP 7, también es posible hacer esto con los controladores de Undertow.
El siguiente es un ejemplo de una válvula configurada en jboss-web.xml
archivo en 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 obtener más información acerca de cómo crear y configurar manejadores personalizados en JBoss EAP, consulte Crear manejadores personalizados en el JBoss EAP Guía de desarrollo.
Migrar válvulas de autenticador [Esto es una traducción automática]
Para obtener información acerca de cómo migrar las válvulas de autenticación, consulte Migrar válvulas de autenticador en esta guía.
5.15. Cambios de aplicaciones de seguridad [Esto es una traducción automática]
El reemplazo de JBoss Web con Undertow requiere cambios en la configuración de seguridad en JBoss EAP 7.
5.15.1. Migrar válvulas de autenticador [Esto es una traducción automática]
Si creó una válvula autenticadora personalizada que se extendió AuthenticatorBase
en JBoss EAP 6.4, debe reemplazarlo manualmente con una implementación de autenticación HTTP personalizada en JBoss EAP 7.1. El mecanismo de autenticación HTTP se crea en elytron
subsistema y luego registrado con el undertow
subsistema. Para obtener información sobre cómo implementar un mecanismo de autenticación HTTP personalizado, consulte Implementación de un mecanismo HTTP personalizado en el Guía de desarrollo para JBoss EAP.
5.15.2. Cambios de PicketLink [Esto es una traducción automática]
Para obtener información sobre los cambios necesarios para SSO con la configuración de SAML v2, consulte Cambios de las versiones anteriores de JBoss EAP en Cómo configurar SSO con SAML v2 para JBoss EAP.
5.15.3. Otros cambios en la aplicación de seguridad [Esto es una traducción automática]
Para obtener información sobre las diferencias en la configuración de SSO con Kerberos, consulte Diferencias con la configuración de versiones anteriores JBoss EAP en Cómo configurar SSO con Kerberos para JBoss EAP.
5.16. Cambios en el registro de JBoss [Esto es una traducción automática]
Si su aplicación usa JBoss Logging, tenga en cuenta que las anotaciones en el org.jboss.logging
el paquete ahora está en desuso en JBoss EAP 7. Se han movido a la org.jboss.logging.annotations
paquete, por lo que debe actualizar su código fuente para importar el nuevo paquete.
Las anotaciones también se han movido a un Maven por separado groupId:artifactId:version
(GAV) ID por lo que necesita agregar una nueva dependencia de proyecto para org.jboss.logging:jboss-logging-annotations
en tu proyecto pom.xml
archivo.
Solo las anotaciones de registro se han movido. los org.jboss.logging.BasicLogger
y org.jboss.logging.Logger
todavía existen en el org.jboss.logging
paquete.
La siguiente tabla enumera las clases de anotación desaprobadas y las sustituciones correspondientes.
Tabla 5.1. Reemplazos de anotación de registro obsoletos [Esto es una traducción automática]
RESETClases obsoletas [Esto es una traducción automática] | Clase de reemplazo |
---|---|
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. Cambios de código de JavaServer Faces (JSF) [Esto es una traducción automática]
Soporte descartado para JSF 1.2
Ejemplo: bandera de anotación en el jboss-deployment-structure.xml
Archivo [Esto es una traducción automática]
JBoss EAP 7 incluye JSF 2.2 y ya no admite la API JSF 1.2. Si su aplicación usa JSF 1.2, debe volver a escribirla para usar JSF 2.2.
Problema de compatibilidad entre JSF 2.1 y JSF 2.2
Las API JSF 2.1 y JSF 2.2 no son totalmente compatibles. los FACELET_CONTEXT_KEY
valor constante cambiado de com.sun.faces.facelets.FACELET_CONTEXT
a javax.faces.FACELET_CONTEXT
entre los lanzamientos. Este valor está subrayado por el compilador y el código compilado contra una versión no funcionará en contra de la otra.
Las aplicaciones que contienen código similar al ejemplo siguiente y se compilan con la API JSF 2.1 pero se ejecutan en JBoss EAP 7, que utiliza la API JSF 2.2, dan como resultado un NullPointerException
. Para solucionar el problema, debe volver a compilar la aplicación con la API de JSF 2.2.
Ejemplo: código Java que utiliza la API JSF 2.1 [Esto es una traducción automática]
Object obj = FacesContext.getCurrentInstance().getAttributes().get(FaceletContext.FACELET_CONTEXT_KEY);
Ver Evite que la constante FaceletContext.FACELET_CONTEXT_KEY esté en línea con el compilador para más información.
5.18. Cambios de carga de clase de módulo [Esto es una traducción automática]
En JBoss EAP 7, el comportamiento de carga de clase ha cambiado en los casos en que varios módulos contienen las mismas clases o paquetes.
Supongamos que hay dos módulos, MODULE_A
y MODULE_B
, que dependen el uno del otro y contienen algunos de los mismos paquetes. En JBoss EAP 6, las clases o paquetes que se cargaron desde las dependencias tuvieron prioridad sobre los especificados en el resource-root
del module.xml
archivo. Esto significaba MODULE_A
vi los paquetes para MODULE_B
y MODULE_B
vi los paquetes para MODULE_A
. Este comportamiento era confuso y podría causar conflictos. Este comportamiento ha cambiado en JBoss EAP 7. Ahora las clases o paquetes especificados por el resource-root
en el module.xml
archivo tiene prioridad sobre los especificados por la dependencia. Esto significa MODULE_A
ve los paquetes para MODULE_A
y MODULE_B
ve los paquetes para MODULE_B
. Esto evita conflictos y proporciona un comportamiento más apropiado.
Si ha definido módulos personalizados que incluyen resource-root
bibliotecas o paquetes que contienen clases que están duplicadas en sus dependencias de módulos, es posible que vea ClassCastException
, LinkageError
, errores de carga de clases u otros cambios en el comportamiento cuando migra a JBoss EAP 7. Para resolver estos problemas, debe configurar su module.xml
archivo para asegurar que solo se use una versión de una clase. Esto se puede lograr mediante el uso de cualquiera de los siguientes enfoques.
-
Puede evitar especificar un
resource-root
que duplica las clases en la dependencia del módulo. Puedes usar el
include
yexclude
subelementos de laimports
yexports
elementos para controlar la carga de clase en elmodule.xml
archivo. El siguiente es un elemento de exportación que excluye clases está en el paquete especificado.<exports> <exclude path="com/mycompany/duplicateclassespath/"/> </exports>
Si prefiere preservar su comportamiento existente, debe filtrar los paquetes de dependencia del dependiente resource-root
en el module.xml
archivo usando el filter
elemento. Esto le permite conservar el comportamiento existente sin el extraño bucle que vería bajo JBoss EAP 6. El siguiente es un ejemplo de un root-resource
que filtra las clases en un paquete específico.
<resource-root path="mycompany.jar"> <filter> <exclude path="com/mycompany/duplicateclassespath"/> </filter> </resource-root>
Para obtener más información acerca de los módulos y la carga de clase, consulte Carga de clase y módulos en el JBoss EAP Guía de desarrollo.
5.19. Cambios en la agrupación de aplicaciones [Esto es una traducción automática]
5.19.1. Descripción general de nuevas características de agrupamiento [Esto es una traducción automática]
La siguiente lista describe algunas de las nuevas características de clúster a tener en cuenta al migrar su aplicación de JBoss EAP 6 a JBoss EAP 7.
- JBoss EAP 7 presenta una nueva API pública para la construcción de servicios únicos que simplifica significativamente el proceso. Para obtener información sobre los servicios únicos, consulte Servicio HA Singleton en el JBoss EAP Guía de desarrollo
- Se puede configurar una implementación única para implementar e iniciar solo un nodo en el clúster a la vez. Para más información, ver Despliegues HA Singleton en el JBoss EAP Guía de desarrollo.
- Ahora puede definir MDB de singleton agrupados. Para más información, ver Clustered Singleton MDBs en Desarrollo de aplicaciones EJB para JBoss EAP.
- JBoss EAP 7 incluye la implementación Undertow mod_cluster. Esto ofrece una solución pura de equilibrio de carga de Java que no requiere un servidor web httpd. Para más información, ver Configurando JBoss EAP como equilibrador de carga de front-end en el JBoss EAP Guía de configuración.
El resto de esta sección describe cómo los cambios en la agrupación pueden afectar la migración de sus aplicaciones a JBoss EAP 7.
5.19.2. Cambios en clústeres de sesiones web [Esto es una traducción automática]
JBoss EAP 7 presenta una nueva implementación de clustering de sesión web. Reemplaza la implementación anterior, que estaba estrechamente relacionada con el código fuente del subsistema web JBoss.
La implementación de la nueva agrupación de sesiones web impacta la forma en que se configura la aplicación en el jboss-web.xml
Archivo de descriptor XML de la aplicación web propiedad de JBoss EAP. Los siguientes son los únicos elementos de configuración de clúster que permanecen en este archivo.
<jboss-web> ... <max-active-sessions>...</max-active-sessions> ... <replication-config> <replication-granularity>...</replication-granularity> <cache-name>...</cache-name> </replication-config> ... </jboss-web>
La siguiente tabla describe cómo lograr un comportamiento similar para los elementos en el jboss-web.xml
archivo que ahora está obsoleto.
Cambios de configuración del servidor [Esto es una traducción automática] | Cambios de aplicaciones de seguridad [Esto es una traducción automática] |
---|---|
<max-active-sessions/> |
Anteriormente, la creación de la sesión fallaba si causaba que el número de sesiones activas superara el valor especificado por
En la nueva implementación, |
<passivation-config/> |
Este elemento de configuración y sus subelementos ya no se usan en JBoss EAP 7. |
<use-session-passivation/> |
Anteriormente, la pasivación se habilitó utilizando este atributo.
En la nueva implementación, la pasivación se habilita especificando un valor no negativo para |
<passivation-min-idle-time/> |
Anteriormente, las sesiones debían estar activas durante un tiempo mínimo antes de convertirse en candidatos para la pasivación. Esto podría provocar la falla en la creación de la sesión, incluso cuando la pasivación estaba habilitada. La nueva implementación no es compatible con esta lógica y, por lo tanto, evita esta vulnerabilidad de denegación de servicio (DoS). |
<passivation-max-idle-time/> |
Anteriormente, una sesión se pasivaba después de estar inactiva durante un período de tiempo específico.
La nueva implementación solo admite la pasivación lenta. No es compatible con la pasivación ansiosa. Las sesiones solo son pasivadas cuando sea necesario para cumplir con |
<replication-config/> |
La nueva implementación desaprueba una serie de subelementos. |
<replication-trigger/> |
Anteriormente, este elemento se usaba para determinar cuándo se activaba la replicación de la sesión. La nueva implementación reemplaza esta opción de configuración con una estrategia única y sólida. Para más información, ver Atributos de sesión inmutables en el JBoss EAP Guía de desarrollo. |
<use-jk/> |
Anteriormente, el
En la nueva implementación, el |
<max-unreplicated-interval/> |
Anteriormente, esta opción de configuración estaba pensada como una optimización para evitar la replicación de la marca de tiempo de una sesión si no se cambiaba ningún atributo de sesión. Aunque esto suena bien, en la práctica no impide ningún RPC, ya que el acceso a la sesión requiere RPC de transacciones de caché, independientemente de si se modificaron los atributos de sesión. En la nueva implementación, la marca de tiempo de una sesión se replica en cada solicitud. Esto evita los metadatos de sesión obsoleta después de una conmutación por error. |
<snapshot-mode/> |
Anteriormente, uno podía configurar |
<snapshot-interval/> |
Esto solo fue relevante para |
<session-notification-policy/> |
Anteriormente, el valor especificado por este atributo definía una política para activar eventos de sesión. En la nueva implementación, este comportamiento depende de las especificaciones y no se puede configurar. |
Esta nueva implementación también es compatible con las tiendas de caché de escritura simultánea, así como las tiendas de caché solo de pasivación. Normalmente, se usa un almacén de caché de escritura simultánea junto con un caché de invalidación. La implementación de clústeres de sesiones web en JBoss EAP 6 no funcionaba correctamente cuando se utilizaba con un caché de invalidación.
5.19.3. Cambios de agrupamiento de EJB de sesión de estado [Esto es una traducción automática]
En JBoss EAP 6, se le solicitó que habilitara el comportamiento de clúster para beans de sesión con estado (SFSB) de una de las siguientes maneras.
Puedes agregar el
org.jboss.ejb3.annotation.Clustered
anotación en el bean de la sesión.@Stateful @Clustered public class MyBean implements MySessionInt { public void myMethod() { // } }
Puedes agregar el
<clustered>
elemento a lajboss-ejb3.xml
archivo.<c:clustering> <ejb-name>DDBasedClusteredSFSB</ejb-name> <c:clustered>true</c:clustered> </c:clustering>
JBoss EAP 7 ya no requiere que habilite el comportamiento de agrupamiento. De forma predeterminada, si el servidor se inicia utilizando un perfil HA, el estado de los SFSB se replicará automáticamente.
Puede deshabilitar este comportamiento predeterminado de una de las siguientes maneras.
-
Puede deshabilitar el comportamiento predeterminado para un único bean de sesión con estado mediante el uso de
@Stateful(passivationCapable=false)
, que es nuevo en la especificación EJB 3.2. -
Puede desactivar este comportamiento globalmente en la configuración de
ejb3
subsistema en la configuración del servidor.
Si el @Clustered
la anotación no se elimina de la aplicación, simplemente se ignora y no afecta la implementación de la aplicación.
5.19.4. Clustering Services Changes [Esto es una traducción automática]
En JBoss EAP 6, las API para servicios de clustering estaban en módulos privados y no eran compatibles.
JBoss EAP 7 presenta una API de servicios públicos de clustering para uso de las aplicaciones. Los nuevos servicios están diseñados para ser livianos, fácilmente inyectables y no requieren dependencias externas.
-
El nuevo
org.wildfly.clustering.group.Group
La interfaz proporciona acceso al estado actual del clúster y permite escuchar los cambios en la membresía del clúster. -
El nuevo
org.wildfly.clustering.dispatcher.CommandDispatcher
La interfaz permite ejecutar código en el clúster, en todos o en un subconjunto seleccionado de nodos.
Estos servicios reemplazan API similares que estaban disponibles en versiones anteriores, es decir, HAPartition
de JBoss EAP 5 y GroupCommunicationService
, GroupMembershipNotifier
, y GroupRpcDispatcher
en JBoss EAP 6.
Para más información, ver API pública para servicios de clúster en el JBoss EAP Guía de desarrollo.
5.19.5. Migrar agrupamiento HA Singleton [Esto es una traducción automática]
En JBoss EAP 6, no había una API pública disponible para el servicio de singleton HA de todo el clúster. Si usaste el privado org.jboss.as.clustering.singleton.*
clases, debe cambiar su código para usar el nuevo público org.wildfly.clustering.singleton.*
paquetes cuando migre su aplicación a JBoss EAP 7.
Para obtener más información acerca de los servicios de HA singleton, consulte Servicio HA Singleton en el Guía de desarrollo para JBoss EAP. Para obtener información acerca de las implementaciones de HA singleton, consulte Despliegues HA Singleton en el Guía de desarrollo para JBoss EAP.