Mensaje SSAP BULK

Una de las funcionalidades incluidas en la Release 2.12 de Sofia2 es el mensaje SSAP BULK añadido al juego de operaciones SSAP.

Se trata de un mensaje enviado por un KP al SIB en el que se pueden agrupar varios mensajes de tipo INSERT, UPDATE y DELETE. De este modo, es posible agrupar en el código de una App Sofia2 (KP) un conjunto de mensajes que se notificarán posteriormente al SIB en un único envío.

Una vez recibido un mensaje de tipo BULK en el SIB, este será descompuesto y cada mensaje INSERT, UPDATE o DELETE agrupado, se procesará de manera individual del mismo modo que si hubieran sido enviados por separado.

Se trata de un mensaje síncrono en el que la App Sofia2 envia al SIB el atributo body de cada tipo de mensaje INSERT, UPDATE, DELETE agrupado y el SIB responde con un resumen conteniendo

  • Operaciones correctas: El ID de los objetos insertados, modificados, eliminados
  • Operaciones erróneas: El mensaje erróneo junto con la descripción del error

El formato de este mensaje es el siguiente:

Request: Solicitud desde App Sofia2 a SIB:

{

“body”:”[

{\”body\”:\”<INSERT_MESSAGE1_BODY>\”, \”ontology\”:\”TestSensorTemperatura\”, \”type\”:\”INSERT\”},

{\”body\”:\”<INSERT_MESSAGE2_BODY>\”, \”ontology\”:\”TestSensorTemperatura\”, \”type\”:\”INSERT\”},

{\”body\”:\”<UPDATE_MESSAGE1_BODY>\”, \”ontology\”:\”TestSensorTemperatura\”, \”type\”:\”UPDATE\”},

{\”body\”:\”<UPDATE_MESSAGE2_BODY>\”, \”ontology\”:\”TestSensorTemperatura\”, \”type\”:\”UPDATE\”}

]”,

“direction”:”REQUEST”,

“messageId”:null,

“messageType”:”BULK”,

“ontology”:null,

“sessionKey”:”<SESSION_KEY>”

}

Response: Respuesta desde el SIB

{

“body”:”{

\”data\”:\”{

\\\”deleteSummary\\\”:null,

\\\”insertSummary\\\”:{

\\\”errors\\\”:[],

\\\”objectIds\\\”:[···········]

},

\\\”updateSummary\\\”:{

\\\”errors\\\”:[],

\\\”objectIds\\\”:[···········]

}

}\”,

\”error\”:null,

\”errorCode\”:null,

\”ok\”:true

}”,

“direction”:”RESPONSE”,

“messageId”:null,

“messageType”:”BULK”,

“ontology”:null,

“sessionKey”:”<SESSION_KEY>”

}

A la hora de programar Apps Sofia2, el API Java proporciona utilidades para trabajar con el mensaje SSAP BULK:

En este sentido, se ha añadido al API Java la clase SSAPBulkMessage: Es una clase derviada de SSAPMessage, hereda todos sus atributos y añade métodos para facilitar la construcción de un mensaje SSAP de tipo BULK a partir de mensajes SSAP de tipo INSERT, UPDATE y DELETE. Estos métodos son:

· addMessage(ssapMessage: SSAPMessage):SSAPBulkMessage: Añade al atributo “body” del mensaje SSAPBulkMessage el mensaje INSERT, UPDATE o DELETE indicado por parámetros.

Devuelve el propio objeto SSAPBulkMessage para facilitar el encadenamiento de mensajes de la siguiente forma:

msgBulk.addMessage(msgInsert1).addMessage(msgInsert2).addMessage(msgInsert3);

· addMessage(ssapMessages: List<SSAPMessage>):void: Añade al atributo “body” del mensaje SSAPBulkMessage una lista de mensajes INSERT, UPDATE o DELETE indicada por parámetros.

En caso de que alguno de los mensajes añadidos no sea de tipo INSERT, UPDATE o DELETE, el método lanzará una excepción de tipo NotSupportedMessageTypeExepcion.

En caso de que el mensaje añadido no sea de tipo INSERT, UPDATE o DELETE, ambos métodos lanzarán una excepción de tipo NotSupportedMessageTypeExepcion.

Asimismo, se ha añadido a la clase SSAPMessageGenerator el método generateBulkMessage(sessionKey:String, ontology:String) para generar un mensaje SSAPBulkMessage indicando la sessionKey y la ontologia.

La respuesta será un objeto SSAPMessage cuyo atributo body puede ser procesado como objetos Java utilizando las siguientes clases y sus métodos fromJson y toJson

· SSAPBodyBulkReturnMessage: Cuerpo de la respuesta de un mensaje de tipo BULK. Contiene 3 atributos de tipo SSAPBulkOperationSummary indicando el resumen de la ejecución en el SIB de las operaciones INSERT, UPDATE o DELETE contenidas en el mensaje de BULK.

· SSAPBulkOperationSummary: Resumen de un conjunto de operaciones INSERT, UPDATE o DELETE tras ser procesadas en el SIB. Contiene la lista de ObjectsIds afectados en BDTR para cada operación. Asi como en caso de producirse una lista objetos de tipo SSAPBulkOperationErrorSummary conteniendo la informacióncada error provocado por cada mensaje durante su operación.

· SSAPBulkOperationErrorSummary: Contiene para cada mensaje ejecutado con errorores en el SIB el atributo body de la petición y de la respuesta.

En el siguiente fragmento de código podemos ver un ejemplo de utilización:


//Genera un mensaje de INSERT

SSAPMessage msgInsert1=SSAPMessageGenerator.getInstance().generateInsertMessage(sessionKey, ONTOLOGY_NAME, ONTOLOGY_INSTANCE);

//Genera un mensaje de INSERT

SSAPMessage msgInsert2=SSAPMessageGenerator.getInstance().generateInsertMessage(sessionKey, ONTOLOGY_NAME, ONTOLOGY_INSTANCE);

//Genera un mensaje INSERT de SQLLIKE

SSAPMessage msgInsert3=SSAPMessageGenerator.getInstance().generateInsertMessage(sessionKey, ONTOLOGY_NAME, ONTOLOGY_INSERT_SQLLIKE, SSAPQueryType.SQLLIKE);

//Genera un mensaje de UPDATE

SSAPMessage msgUpate1=SSAPMessageGenerator.getInstance().generateUpdateMessage(sessionKey, ONTOLOGY_NAME, ONTOLOGY_UPDATE, ONTOLOGY_UPDATE_WHERE);

//Genera un mensaje UPDATE de SQLLIKE

SSAPMessage msgUpate2=SSAPMessageGenerator.getInstance().generateUpdateMessage(sessionKey, ONTOLOGY_NAME, null, ONTOLOGY_UPDATE_SQLLIKE, SSAPQueryType.SQLLIKE);

SSAPBulkMessage msgBulk=SSAPMessageGenerator.getInstance().generateBulkMessage(sessionKey, "";);

try{

msgBulk.addMessage(msgInsert1).addMessage(msgInsert2).addMessage(msgInsert3).addMessage(msgUpate1).addMessage(msgUpate2);

} catch(NotSupportedMessageTypeException e){

e.printStackTrace();

}

log.info("Envia mensaje BULK al SIB: "+msgBulk.toJson());

SSAPMessage respuesta=kp.send(msgBulk);

log.info("Recibe respuesta BULK desde el SIB: "+respuesta.toJson());

SSAPBodyReturnMessage bodyBulkReturn=SSAPBodyReturnMessage.fromJsonToSSAPBodyReturnMessage(respuesta.getBody());

SSAPBodyBulkReturnMessage summary=SSAPBodyBulkReturnMessage.fromJsonToSSAPBodyBulkReturnMessage(bodyBulkReturn.getData());

assertEquals(3, summary.getInsertSummary().getObjectIds().size());

log.info("ObjectIds insertados");

for(String oid:summary.getInsertSummary().getObjectIds()){

log.info(oid);

}

Mensaje SSAP BULK

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s