Almacenamiento en memoria caché de servicios Web

El motor de servicios web de WebSphere Application Server proporciona soporte de almacenamiento en memoria caché, de manera que una solicitud de servicio web puede almacenarse en memoria caché y la respuesta almacenada en memoria caché puede devolverse en lugar del proceso subsiguiente.

En HCL Commerce, con operaciones representadas por mandatos y el servicio de composición JSP utilizado para componer el resultado, las características Dynacache de mandatos almacenables en memoria caché y el almacenamiento en memoria caché de fragmentos JSP también se pueden utilizar como un modo de almacenar en memoria caché partes de la solicitud y de la respuesta.

El almacenamiento en memoria caché de un mandato invocado por un servicio web no difiere del almacenamiento en memoria caché de un mandato invocado como una solicitud de URL. De hecho, si el mandato ya se ha configurado para almacenarse en memoria caché, la infraestructura de servicios web aprovechará esta situación. Igualmente, los pasos necesarios para almacenar en memoria caché páginas o fragmentos JSP para servicios web son los mismos que para solicitudes de URL.

Para respuestas JSP, considere el ejemplo siguiente:


<ShowCatalog xmlns="http://www.openapplications.org/oagis/9" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xsi:schemaLocation="http://www.openapplications.org/oagis/9 ../../BODs/Developer/ShowCatalog.xsd" 
  languageCode="en-US" 
  versionID="normalizedString" 
  releaseID="normalizedString" 
  systemEnvironmentCode="Production">
  <jsp:include flush="true" page="ApplicationArea.jsp"/>
  <DataArea>
    <Show recordSetTotal="2" 
      recordSetStartNumber="2" 
      recordSetCompleteIndicator="false" 
      recordSetReferenceId="normalizedString" 
      recordSetCount="2">
      <UserArea/>
      </OriginalApplicationArea>
    </Show>
  <jsp:include flush="true" page="Show/Catalog.jsp"/>
  </DataArea>
</ShowCatalog>

En este ejemplo, se incluyen dos páginas JSP diferentes en la respuesta: ApplicationArea.jsp, que se puede reutilizar en otras repuestas de servicio web, y Show/Catalog.jsp.

Dentro de Show/Catalog.jsp, hay tres bloques XML, representado cada uno de ellos como un fragmento JSP:


<Catalog>
  <jsp:include flush="true" page="CatalogHeader.jsp"/>
  <jsp:include flush="true" page="ClassificationScheme.jsp"/>
  <jsp:include flush="true" page="CatalogLine.jsp"/>
</Catalog>

De estos fragmentos JSP, puede que todos, alguno o ninguno sean almacenables en memoria caché. Sin embargo, para aquellos fragmentos que lo sean, se puede crear la política de almacenamiento en memoria caché para almacenar en memoria caché el contenido, de manera que la próxima vez que se represente el fragmento JSP, pueda utilizarse la versión almacenada en memoria caché. Un ejemplo de este tipo de política es el siguiente:


<cache-entry>
  <class>servlet</class>
  <name>/webservices/OAGIS/9.0/Resources/Catalog/CatalogHeader.jsp</name>
  <name>/webservices/OAGIS/9.0/Resources/Catalog/CatalogLine.jsp</name>
  <name>/webservices/OAGIS/9.0/Resources/Catalog/ClassificationScheme.jsp</name>
  <property name="save-attributes">false</property>

  <cache-id>
    <component id="catalogId" type="parameter">
      <required>true</required>
    </component>
  </cache-id>
        
  <dependency-id>catalogId
    <component id="catalogId" type="parameter">
      <required>true</required>
    </component>
   </dependency-id>
</cache-entry>

Dentro de esta definición de política, los tres fragmentos son almacenables en memoria caché en función del parámetro catalogId que se encuentra en la solicitud. Este catalogId estará contenido en la solicitud de servicio original o lo devolverá el mandato que se ejecuta como resultado de la solicitud de servicio.

En el ejemplo anterior, la primera vez que se ejecute la respuesta del servicio con el catalogId 123, también se ejecutará cada JSP. No obstante, los tres fragmentos también se almacenarán en memoria caché al mismo tiempo, de modo que la próxima vez que se realice otra solicitud que incluya los mismos fragmentos JSP para el catalogId 123, se devolverán las versiones almacenadas en memoria caché de los fragmentos JSP.