Un convertidor de primitiva definido por el usuario es una clase Java que la herramienta de conversión de WebSphere ESB puede utilizar para convertir una primitiva de mediación de WebSphere ESB en un nodo de flujo de mensajes, varios nodos de flujo de mensajes o un subflujo de IBM Integration Bus.
Amplíe la capacidad de conversión de la herramienta de conversión de WebSphere ESB mediante la creación de clases Java de convertidor de primitiva de mediación personalizadas. Para cada tipo de primitiva de mediación de WebSphere ESB, puede crear un convertidor de primitiva de mediación.
Para implementar un convertidor de primitiva para una primitiva de mediación de WebSphere ESB, debe realizar los pasos siguientes cuando cree una clase de convertidor de primitiva:
Para ver una lista de los nodos disponibles, consulte Nodos incorporados.
Nota: Para obtener la lista de clases disponibles para los nodos incorporados de IBM Integration Bus, seleccione Paquetes y pulse com.ibm.broker.config.appdev.nodes.
import com.ibm.broker.config.appdev.Terminal;
import com.ibm.broker.config.appdev.nodes.TraceNode; import com.ibm.broker.config.appdev.nodes.TraceNode.ENUM_TRACE_DESTINATION;
import com.ibm.etools.mft.conversion.esb.extensionpoint.AbstractMediationPrimitiveConverter; import com.ibm.etools.mft.conversion.esb.extensionpoint.Nodes; import com.ibm.etools.mft.conversion.esb.model.mfc.AbstractProperty; import com.ibm.etools.mft.conversion.esb.model.mfc.FailTerminal; import com.ibm.etools.mft.conversion.esb.model.mfc.Property;
Por ejemplo, si la clase de convertidor convierte una primitiva de mediación de rastreo en un nodo de flujo de mensajes de rastreo, la función se implementa de la siguiente manera:
public String getConvertedTo() {return "Nodo Trace";}
El valor devuelto por la función getConvertedTo se utiliza para llenar la columna
Convertir a
de la tabla Primitivas de mediación en la sección Configurar opciones
de conversión global de la herramienta de conversión de WebSphere ESB.
@Override
public String getType() {
return "Rastreo";
}
String getPropertyValue( ConverterContext converterContext, String name, String defaultValue ) {
String result = defaultValue;
AbstractProperty ap = getPropertyOfSourcePrimitive(converterContext, name);
if( ap != null && ap instanceof Property ) {
Property pr = (Property)ap;
String val = pr.getValue();
if( val != null ) result = val;
}
return result;
}
boolean isPromoted( ConverterContext converterContext, String name ) {
AbstractProperty ap = getPropertyOfSourcePrimitive(converterContext, name);
if( ap != null && ap instanceof Property )
return ((Property)ap).getPromotedPropertyName() != null;
return false;
}
}
@Override
public Nodes convert(ConverterContext converterContext) throws Exception {
// Crear el contenedor para los nodos de flujo de mensajes que se crean para recrear la primitiva de mediación en IBM Integration Bus.
Nodes nodes = createNodes(converterContext);
// Obtener el nombre predeterminado.
String nodeName = getProposedIIBNodeNameFromSourcePrimitive(converterContext);
// Obtener la descripción larga para la primitiva de mediación.
String longDescription = converterContext.sourcePrimitive.getDescription();
if( longDescription == null ) longDescription = "Primitiva de Rastreo convertida";
// Obtener la descripción corta para la primitiva de mediación.
String shortDescription = converterContext.sourcePrimitive.getDisplayName();
if( shortDescription == null ) shortDescription = "Converted "+nodeName;
// Identificar las propiedades de primitiva de mediación que tiene que convertir.
//Por ejemplo, la primitiva de mediación de rastreo tiene las siguientes propiedades:
// enabled - si el mensaje se debe rastrear o no.
// destination - el tipo de rastreo necesario.
// file - la vía de acceso de archivo si el rastreo es en un archivo.
// literal - el formato del mensaje que se va a rastrear.
// root - la ubicación en el SMO desde la que rastrear.
//Obtener el valor de cada propiedad e identificar si la propiedad se ha promocionado.
//Por ejemplo, esto es código de ejemplo para una propiedad disponible en una primitiva de mediación de rastreo:
// Obtener el valor de la propiedad "destination".
// Esta propiedad puede tener cualquiera de los siguientes valores:
// 0: registro de servidor local (valor predeterminado)
// 1: rastreo de usuario
// 2: archivo
int destinationType = Integer.parseInt(getPropertyValue(converterContext,"destination","0"));
anyPromoted |= isPromoted(converterContext,"destination");
// Crear el nodo de primitiva de mediación.
// Si necesita varios nodos de flujo de mensajes para recrear una primitiva de mediación, debe asignar un rol
// exclusivo (que es una serie de formato libre) a cada nodo de flujo de mensajes que cree en el objeto Nodes.
// El rol se utiliza para recuperar un nodo de un grupo de nodos que implementan una primitiva de mediación. Este
// valor se utiliza cuando se implementan las funciones getInputTerminal y getOutputTerminal.
// En este código de ejemplo, sólo hay un nodo de flujo de mensajes que deba crearse, y el valor de ID exclusivo se establece en ROLE_MAIN.
TraceNode node = (TraceNode) createNode(converterContext.targetFlow, nodeName, ROLE_MAIN, TraceNode.class, nodes);
// Copiar los campos de descripción.
node.setLongDescription(longDescription);
node.setShortDescription(shortDescription);
//Establecer los valores de propiedad
//Por ejemplo, este código de ejemplo establece la propiedad de destino de rastreo y la propiedad de vía de acceso de archivo.
if( destinationType == DEST_FILE ) {
node.setDestination(ENUM_TRACE_DESTINATION.file);
node.setFilePath(file);
} else if( destinationType == DEST_LOCAL_SERVER_LOG )
node.setDestination(ENUM_TRACE_DESTINATION.localError);
else if( destinationType == DEST_USER_TRACE )
node.setDestination(ENUM_TRACE_DESTINATION.userTrace);
else
throw new IllegalArgumentException("Para la primitiva "+nodeName+": valor de tipo de destino no válido "+destinationType);
// Si se promociona alguna propiedad, crear una tarea a realizar que indique qué acción debe realizarse para completar la conversión a IBM Integration Bus.
// Las propiedades promocionadas requieren trabajo manual adicional para convertirlas a IBM Integration Bus.
// Por ejemplo, esto es código de ejemplo utilizado para crear una tarea a realizar para una propiedad promocionada:
if( anyPromoted )
createToDoTask(getTargetFlowFile(converterContext),"La primitiva de mediación de rastreo incluye propiedades promocionadas que se deben convertir manualmente.");
// Comprobar si hay un terminal conectado para el que no tenga un terminal equivalente en el nodo o nodos de flujo de mensajes que ha creado.
// Por ejemplo, el nodo de rastreo de IBM Integration Bus sólo tiene un terminal de entrada y un terminal de salida. Sin embargo, la primitiva de mediación de rastreo tiene un terminal de error.
for( FailTerminal ft: converterContext.sourcePrimitive.getFailTerminal() ) {
if( ft.getWire().size() > 0 )
createToDoTask(getTargetFlowFile(converterContext),"La primitiva de rastreo ha conectado un terminal de error, pero el nodo de rastreo convertido no tiene ningún terminal de error. "+
"Puede haber nodos adicionales que ya no estén conectados en el flujo convertido.");
}
return nodes;
}
Por ejemplo, esto es código de ejemplo para recuperar el objeto de terminal de
entrada para un nodo con el ID exclusivo ROLE_MAIN
:
@Override
public Terminal getInputTerminal(String sourceTerminalName, Nodes nodes) {
TraceNode trace = (TraceNode) nodes.getNode(ROLE_MAIN);
return trace.INPUT_TERMINAL_IN;
}
Por ejemplo, esto es código de ejemplo para recuperar el objeto de terminal de
salida para un nodo con el ID exclusivo ROLE_MAIN
:
@Override
public Terminal getOutputTerminal(String sourceTerminalName, Nodes nodes) {
TraceNode trace = (TraceNode) nodes.getNode(ROLE_MAIN);
if ("Out".equals(sourceTerminalName))
return trace.OUTPUT_TERMINAL_OUT;
return null;
}
Para obtener más información sobre el ejemplo de convertidor de mediación definido por el usuario, consulte Convertidor de primitiva de Rastreo definido por el usuario.
Para obtener más información sobre la herramienta de conversión de WebSphere ESB, consulte Ejecutar la herramienta de conversión de WebSphere ESB.