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 de webservices.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.

PropiedadTipoDescripció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 Keep-Alive o close tipo de conección.

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 paquete org.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 la org.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 valida ActAs tokens. Como consecuencia, se debe especificar un nombre de usuario y una contraseña válidos en el UsernameToken que se proporciona para el ActAs simbólico.
  • Los tokens de portador SAML ahora requieren una firma interna. los org.apache.wss4j.dom.validate.SamlAssertionValidator clase ahora tiene una setRequireBearerSignature() 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 en THREAD_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.

Nota

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.

Nota

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 y SignedOutput para resteasy-crypto debe tener el Content-Type ajustado a multipart/signed ya sea en el Request o Response objeto, o mediante el uso de @Consumes o @Produces anotación.
  • SignedOutput y SignedInput se puede usar para devolver el application/pkcs7-signature Formato de tipo MIME en forma binaria configurando ese tipo en @Produces o @Consumes anotaciones
  • Si el @Produces o @Consumes es text/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 obsoletaExcepció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 un bean-discovery-mode de none.
  • 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 una bean-discovery-mode de all.
  • 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 un bean-discovery-mode de annotated.

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
Tipo de manejo
  • Incorporado org.hibernate.type.descriptor.sql.SqlTypeDescriptor las implementaciones ya no se auto-registran con org.hibernate.type.descriptor.sql.SqlTypeDescriptorRegistry. Aplicaciones que usan personalizadas SqlTypeDescriptor las implementaciones que amplían las implementaciones incorporadas y dependen de ese comportamiento deben actualizarse para llamar SqlTypeDescriptorRegistry.addDescriptor() sí mismos.
  • Para los ID definidos como UUID generados, algunas bases de datos requieren que establezca explícitamente el @Column(length=16) para generar BINARY(16) para que las comparaciones funcionen correctamente
  • por EnumType mapeos definidos en hbm.xml, Donde quieras javax.persistence.EnumType.STRING name-mapping, esta configuración debe establecerse explícitamente mediante el uso useNamed(true) configuración o especificando un VARCHAR valor de 12.
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, el org.hibernate.Transaction la implementación ahora habla a un org.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ían hibernate.transaction.factory_class propiedad, que ahora está en desuso, y se refieren a un org.hibernate.engine.transaction.spi.TransactionFactory FQN (nombre completo). Con Hibernate ORM 5, especifica el hibernate.transaction.coordinator_class configurar y consultar un org.hibernate.resource.transaction.TransactionCoordinatorBuilder. Ver org.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.

      Importante

      Si 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á en jdbc 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 el hibernate.transaction.coordinator_class valor de propiedad para jta o proporcionar una costumbre org.hibernate.resource.transaction.TransactionCoordinatorBuilder que construye un org.hibernate.resource.transaction.TransactionCoordinator que coordina adecuadamente con las transacciones basadas en JTA.

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 el EntityManagerFactory previamente no prefijaba nombres con hibernate. 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 de org.hibernate.envers.boot.internal.EnversService.
  • los AuditStrategy los parámetros del método se cambiaron para eliminar el obsoleto AuditConfiguration y usa el nuevo EnversService.
  • Varias clases e interfaces en el org.hibernate.hql.spi paquete y subpaquetes se han movido a la nueva org.hibernate.hql.spi.id paquete. Esto incluye el MultiTableBulkIdStrategy clase y el AbstractTableBasedBulkIdHandler, TableBasedDeleteHandlerImpl, y TableBasedUpdateHandlerImpl 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 el org.hibernate.cache.spi.access.AccessType.getExternalName() método en lugar de la org.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 Hibernate schema-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 la hibernate-search-engine módulo a la hibernate-search-orm módulo. Otros integradores deberían depender exclusivamente de SearchIntegrator, que reemplaza al obsoleto SearchFactoryIntegrator.
  • El valor enum SpatialMode.GRID fue renombrado a SpatialMode.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 ejemplo org.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 de ServiceManager, Service, Startable y Stoppable 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 Lucene IndexUpgrader. 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 el null 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 claseNuevo 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]
InterfazDescripción

org.hibernate.search.store.IndexShardingStrategy

Obsoleto a partir de Hibernate Search 4.4. Puede ser eliminado en la Búsqueda 5. Uso ShardIdentifierProvider en lugar.

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]
ClaseDescripció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]
EnumDescripción

org.hibernate.search.annotations.FieldCacheType

Eliminar el CacheFromIndex anotación ya que está en desuso. Ver Hibernate Buscar Anotaciones desaprobadas.

Cambios en la búsqueda de Hibernate [Esto es una traducción automática]
AnotaciónDescripció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étodoDescripció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 field().numericField() en lugar.

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 FuzzyContext.withEditDistanceUpTo(int).

Cambios en la búsqueda de Hibernate [Esto es una traducción automática]
ConstructorDescripción

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

Utilizar NumericFieldMapping.NumericFieldMapping(String, PropertyDescriptor, EntityDescriptor, SearchMapping) en lugar.

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.

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.

PropiedadDescripción

wildfly.jpa.skipmixedsynctypechecking

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.

wildfly.jpa.allowjoinedunsync

Esta propiedad es una alternativa a wildfly.jpa.skipmixedsynctypechecking. Permite que la aplicación trate los contextos de persistencia no sincronizados que están asociados con una transacción JTA como si fueran contextos de persistencia sincronizados.

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 sea 8080. 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 una remote 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étodoTipoDescripció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étodoTipoDescripció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 de java.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étodoTipoDescripció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étodoTipoDescripció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étodoTipoDescripció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étodoTipoDescripció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 de org.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étodoTipoDescripció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.

  • 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.

Importante

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.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.

Nota

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 y exclude subelementos de la imports y exports elementos para controlar la carga de clase en el module.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 <max-active-sessions/>.

En la nueva implementación, <max-active-sessions/> se usa para habilitar la pasivación de la sesión. Si la creación de la sesión hará que el número de sesiones activas exceda el <max-active-sessions/>, entonces la sesión más antigua conocida por el administrador de sesiones se pasivará para dejar espacio para la nueva sesió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 <max-active-sessions/>.

<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 <max-active-sessions/>.

<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 instance-id del nodo que maneja una solicitud dada se adjuntó a la jsessionid, para uso de balanceadores de carga como mod_jk, mod_proxy_balancer, mod_cluster, dependiendo del valor especificado para <use-jk/>.

En la nueva implementación, el instance-id, si está definido, siempre se agrega al jsessionid.

<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-mode/> como INSTANT o INTERVAL. La replicación asincrónica de Infinispan hace que esta opción de configuración sea obsoleta.

<snapshot-interval/>

Esto solo fue relevante para <snapshot-mode>INTERVAL</snapshot-mode>. Ya que <snapshot-mode/> es obsoleto, esta opción ahora también está obsoleta.

<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 la jboss-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.
Nota

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.