El mandato de controlador basado en configuración y la infraestructura de correlación de beans de datos
El mandato de controlador basado en configuración y la infraestructura de correlación de beans de datos permiten la activación de los beans de datos o la ejecución de los mandatos de controlador mediante servicios REST. La infraestructura reduce significativamente la cantidad de código personalizado requerido. Proporciona una forma de describir qué entradas y salidas son necesarias desde un bean de datos o un mandato de controlador a través de un archivo de correlación. Un archivo de correlación representa un bean de datos o un mandato de controlador. Se subdivide en perfiles, lo que permite que varios recursos de REST con propiedades diferentes funcionen en el mismo bean de datos o controlador de mandato. El código personalizado que es necesario para escribir un manejador de recursos para un único recurso de REST puede ser tan simple como una sola línea. La correlación de entrada, tipo conversión, activación, ejecución y respuestas son gestionadas por la infraestructura. Para ayudar a producir un manejador y un archivo de correlación personalizado, se proporciona una herramienta de generador (restClassicSampleGen), lo que reduce aún más el esfuerzo de crear recursos de REST personalizados.
setRequestProperties
) para los mandatos de controlador. Debe definir métodos setter y getter individuales en el mandato controlador. Si necesita utilizar las propiedades de petición, utilice AbstractClassicResourceHandler
directamente.- AbstractConfigBasedClassicHandler
- El punto de entrada principal (superclase) del que se amplían todos los manejadores basados en configuración.
- Bean de datos y modelos de mandato controlador
- Internamente, los beans de datos y los comandos de controlador se analizan bajo demanda en modelos, que después la infraestructura utiliza y almacena en la memoria caché.
- Configuración del Bean de datos y de las correlaciones de mandato de controlador para REST
- Para realizar llamadas REST a los beans y a los mandatos de controlador, se utilizan archivos de configuración de correlación.
Donde:
- Se realiza una llamada REST para acceder a un bean de datos (GET) o a un mandato de controlador (POST).
- El bean de datos o el manejador del mandato de controlador intercepta la llamada. Solicita la infraestructura de REST basada en la configuración para establecer las propiedades para el bean de datos o el mandato de controlador, activar y devolver la respuesta.
- La infraestructura realiza las tareas siguientes:
- Inspecciona el bean de datos o la clase de mandato de controlador para crear su modelo. A continuación, este modelo se almacena en la memoria caché. Se produce un RestException si hay un problema con el modelo.Nota: Se tienen en cuenta los métodos Setter que tienen el mismo nombre pero toman parámetros diferentes, por ejemplo, String frente a Long. Se elige el parámetro ideal según el tipo de datos que se ha pasado para el establecedor.
- Analiza el perfil de correlación para que pueda determinar cómo correlacionar desde la llamada REST al bean de datos o al mandato de controlador. A continuación, correlacione la respuesta con el formato de HTTP solicitado. Por ejemplo, JSON. A continuación, el perfil de correlación se almacena en la memoria caché. Se produce un RestException si hay un problema con el archivo de correlaciones.
- Crea una instancia del bean de datos o del mandato de controlador.
- Rellena los métodos de establecedor basándose en el archivo de correlación y los datos que se proporcionan desde la llamada de REST.
- Activa el bean de datos o ejecuta el mandato de controlador.
- Crea la respuesta mediante el modelo de correlación para determinar qué métodos de respuesta (métodos de tipo getter) se deben llamar en el bean de datos o el mandato de controlador.
- Inspecciona el bean de datos o la clase de mandato de controlador para crear su modelo. A continuación, este modelo se almacena en la memoria caché. Se produce un RestException si hay un problema con el modelo.
- Después de recuperar todos los valores, se devuelve la respuesta al manejador principal y, a continuación, se transmite al cliente.
Puntos de entrada de la infraestructura
public Response executeConfigBasedBeanWithContext
(String beanClassName, String profileName, String responseFormat, Map<String, Object> paramOverrideMap)
Este método configura la solicitud de inicio
{@link BusinessContextService}
, luego delega a{@link #executeConfigBasedBean(String, String, String, Map)}
y finalmente finaliza la solicitud BCS.Los parámetros siguientes están disponibles de forma predeterminada:- nombreClaseBean
- El nombre de clase de bean de datos.
- profileName
- El nombre de perfil para el bean de datos en la configuración.
- responseFormat
- El formato de respuesta que se utiliza para generar el resultado.
- paramOverrideMap
- Define los parámetros que desea añadir o sustituir del objeto de solicitud que está asociado a este manejador.
public JSONObject executeConfigBasedBean
(String beanClassName, String profileName, String responseFormat, Map<String, Object> paramOverrideMap) throws Exception
Este método procesa una solicitud de bean de datos mediante las correlaciones de perfil basadas en configuración. Presupone que el llamante trata con el
{@link BusinessContextService}
.Los parámetros de entrada se completan automáticamente basándose en los parámetros de vía de acceso especificados en el URL, seguidos de los parámetros de consulta.
Se puede proporcionar un mapa de alteración temporal para inyectar más parámetros o sustituir los parámetros preexistentes.
Los parámetros siguientes están disponibles de forma predeterminada:- nombreClaseBean
- El nombre de clase de bean de datos.
- profileName
- El nombre de perfil para el bean de datos en la configuración.
- responseFormat
- El formato de respuesta que se utiliza para generar el resultado.
- paramOverrideMap
- Define los parámetros que desea añadir o sustituir del objeto de solicitud que está asociado a este manejador.
public Response executeConfigBasedCommandWithContext
(String commandInterfaceName, String profileName, String responseFormat, String storeId, Map<String, Object> paramOverrideMap)
Este método configura la solicitud de inicio
{@link BusinessContextService}
, luego delega a* {@link #executeControllerCommand(String, String, TypedProperty, String)}
y finalmente finaliza la solicitud BCS.Los parámetros siguientes están disponibles de forma predeterminada:- commandInterfaceName
- El nombre de la interfaz de mandatos de controlador.
- profileName
- El nombre de perfil para el mandato de controlador en la configuración.
- responseFormat
- El formato de respuesta que se utiliza para generar el resultado.
- paramOverrideMap
- Define los parámetros que desea añadir o sustituir del objeto de solicitud que está asociado a este manejador.
public JSONObject executeConfigBasedCommand
(String pCmdInterfaceName, String profileName, String responseFormat, String storeId, Map<String, Object> paramOverrideMap) throws Exception
Este método procesa una solicitud de mandato de controlador mediante las correlaciones de perfil basadas en configuración. Presupone que el llamante trata con el
{@link BusinessContextService}
.Los parámetros de entrada se completan automáticamente basándose en los parámetros de vía de acceso especificados en el URL, seguidos de los parámetros que se encuentran en el cuerpo de la solicitud.
Se puede proporcionar un mapa de alteración temporal para inyectar más parámetros o sustituir los parámetros preexistentes.
Aunque el ID de tienda se especifica en la llamada de método, no se incluye automáticamente en la lista de parámetros que se proporcionan para rellenar los setters del mandato. Debe añadirlo explícitamente al mapa de alteración temporal o hacer que se incluya con los parámetros de vía de acceso URL o el cuerpo de solicitud.
- pCmdInterfaceName
- El nombre de la interfaz de mandatos de controlador.
- profileName
- El nombre de perfil para el mandato de controlador en la configuración.
- responseFormat
- El formato de respuesta que se utiliza para generar el resultado.
- storeId
- El ID de la tienda.
- paramOverrideMap
- Define los parámetros que desea añadir o sustituir del objeto de solicitud que está asociado a este manejador.
Archivos de correlaciones
- Rest.war/WebContent/WEB-INF/config/beanMapping
- Reservado para uso interno de HCL. Contiene los perfiles de bean de datos predeterminados.
- Rest.war/WebContent/WEB-INF/config/beanMapping-ext
- Se utiliza para publicar beans de datos nuevos y ampliar los beans de datos predeterminados.
- Rest.war/WebContent/WEB-INF/config/commandMapping
- Reservado para uso interno de HCL. Contiene los perfiles de mandatos de controlador predeterminados.
- Rest.war/WebContent/WEB-INF/config/commandMapping-ext
- Se utiliza para publicar mandatos de controlador nuevos y para ampliar los mandatos de controlador existentes.
Crear archivos de correlación
Puede crear los archivos de correlaciones XML, ya sea usando el programa de utilidad restClassicSampleGen, o manualmente.
Para obtener más información sobre el uso, consulte Creación de servicios REST utilizando el mandato de controlador basado en configuración y la infraestructura de correlación de beans de datos.
Archivo de correlación de beans de datos de ejemplo
- com.ibm.commerce.common.beans.StoreDataBean.xml
<?xml version="1.0" encoding="UTF-8"?>
<bean>
<profiles>
<profile name="IBM_Store_Summary">
<inputs>
<input methodName="setStoreId" inputName="storeId"/>
<input methodName="setStoreRelationshipTypeName" inputName="storeRelationshipTypeName"/>
<input methodName="setJspStoreDir" inputName="jspStoreDir"/>
</inputs>
<outputs>
<output methodName="getStoreLevel" outputName="storeLevel"/>
<output methodName="getFilePath" outputName="filePath"/>
<output methodName="getJspPath" outputName="jspPath"/>
<output methodName="getJspStoreDirFilePath" outputName="jspStoreDirFilePath"/>
<output methodName="getJspStoreDir" outputName="jspStoreDir"/>
<output methodName="getStoreLevel" outputName="storeLevel"/>
<output methodName="getStoreType" outputName="storeType"/>
<output methodName="getDirectory" outputName="directory"/>
<output methodName="getRelatedStoresByStoreRelationshipTypeName" outputName="relatedStores"/>
<output methodName="getStoreEntityDescriptionDataBean" outputName="storeEntityDescription">
<output methodName="getDisplayName" outputName="displayName"/>
</output>
</outputs>
</profile>
<profile name="IBM_Store_DisplayName">
<inputs>
<input methodName="setStoreId" inputName="storeId"/>
<input methodName="setStoreRelationshipTypeName" inputName="storeRelationshipTypeName"/>
<input methodName="setJspStoreDir" inputName="jspStoreDir"/>
</inputs>
<outputs listName="resultList" >
<output methodName="getStoreEntityDescriptionDataBean" outputName="storeEntityDescription">
<output methodName="getDisplayName" outputName="displayName"/>
</output>
</outputs>
</profile>
</profiles>
</bean>
Archivo de correlación de mandatos de controlador de ejemplo
- com.ibm.commerce.catalogmanagement.commands.CatalogEntryUpdateCmd.xml
<?xml version="1.0" encoding="UTF-8"?>
<command>
<inputs>
<input inputName="auxdescription1" methodName="setAuxdescription1"/>
<input inputName="auxdescription2" methodName="setAuxdescription2"/>
<input inputName="catentryId" methodName="setCatentryId"/>
</inputs>
<profiles>
<profile name="sample">
<outputs>
<output methodName="getCatentryId" outputName="catentryId"/>
</outputs>
</profile>
</profiles>
</command>
Estructura de archivos de correlación
- Bean o mandato
- El elemento raíz del archivo de configuración.
- inputs
- Lista de entradas para el bean de datos o el mandato de controlador. Las entradas se fusionan entre el valor predeterminado y la versión de extensión del archivo.
- profiles
- Lista de perfiles que se exponen como salida del bean de datos o del mandato de controlador.
- entrada
- Elemento que representa una entrada a un bean de datos o a un mandato de controlador.
- methodName
- El nombre del método al que se debe llamar en el bean de datos o el mandato de controlador para establecer la propiedad de entrada. Por ejemplo:
setCatalogId
. - inputName
- El nombre de la entrada que se lee de la solicitud.
- required
- Especifica si la entrada es obligatoria (true o false). Las entradas obligatorias que faltan causan errores de solicitud.
- perfil
- Un perfil representa un subconjunto de los campos de salida de un bean de datos o de un comando de controlador que están expuestos. Diferentes perfiles tienen nombres diferentes. Todos los perfiles predeterminados tienen un nombre con el prefijo IBM_.
- name
- El nombre del perfil.
- outputs
- Una lista de salidas para el perfil.
- outputs
- Rodea una lista de elementos de salida.
- Nombre de lista
- Atributo opcional que le permite envolver la respuesta REST con una matriz del nombre proporcionado. Normalmente se utiliza en perfiles predeterminados con un nombre de
resultList
para llamadas REST que devuelven un único objeto para crear coherencia con las llamadas REST de tipo lista que devuelven una matrizresultList
.
- salida
- Una salida representa un campo que ha completado la respuesta.
- ampliar
- Identifica un perfil que amplía el perfil actual. Todas las entradas y salidas del perfil se añaden al perfil actual. Normalmente se utiliza para la personalización.
- profileName
- El nombre del perfil.
- profileClass
- El nombre de clase totalmente calificado que contiene el perfil que se va a ampliar. El valor predeterminado es el mismo nombre que la clase que representa el perfil actual. Habilita una extensión para ampliar un perfil predeterminado.