Ampliar el ejemplo escribiendo su propio convertidor de primitiva

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:

  1. Determine si necesita un nodo de flujo de mensajes, varios nodos de flujo de mensajes o un subflujo para convertir una primitiva de mediación.

    Para ver una lista de los nodos disponibles, consulte Nodos incorporados.

  2. Identifique las clases Java de IBM Integration Bus que necesita para convertir su primitiva de mediación revisando la API Java de IBM Integration Bus. Para obtener más información, consulte API Java de IBM Integration.

    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.

  3. Añada la siguiente importación:
    import com.ibm.broker.config.appdev.Terminal;
    		
  4. Añada importaciones para las clases Java que ha identificado previamente. Por ejemplo, para crear un nodo de flujo de mensajes de rastreo, debe utilizar las siguientes importaciones:
  5. import com.ibm.broker.config.appdev.nodes.TraceNode; 
    import com.ibm.broker.config.appdev.nodes.TraceNode.ENUM_TRACE_DESTINATION;
    			
  6. Añada las siguientes importaciones. La herramienta de conversión de WebSphere ESB necesita estas clases Java para poder utilizar su clase de convertidor y ampliar su funcionalidad.
    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;
    			
  7. Declare cualquier constante que pueda necesitar.

  8. Implemente la función getConvertedTo para que devuelva cualquiera de los siguientes valores:

    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.

  9. Implemente la función getType para que devuelva el tipo de la primitiva de mediación de WebSphere ESB. Por ejemplo, para la primitiva de mediación de rastreo, la función se implementa de la siguiente manera:
    @Override
    public String getType() {
    return "Rastreo";
    }
    			
  10. Implemente la función getPropertyValue para obtener el valor de una propiedad de primitiva de mediación, dado el valor predeterminado.
    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;
    }
    			
  11. Implemente la función isPromoted para comprobar si se ha promocionado una propiedad de primitiva.
    boolean isPromoted( ConverterContext converterContext, String name ) {
    	AbstractProperty ap = getPropertyOfSourcePrimitive(converterContext, name);
    	if( ap != null && ap instanceof Property )
    		return ((Property)ap).getPromotedPropertyName() != null;
    	return false;
    	}
    }
    			
  12. Implemente el método convert para recrear una primitiva de mediación en IBM Integration Bus. Una primitiva de mediación se puede convertir en un nodo de flujo de mensajes, varios nodos de flujo de mensajes o un subflujo. El código de ejemplo siguiente le guía por los pasos necesarios para implementar el método convert:
    @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;
    }
    
    			
  13. Implemente la función getInputTerminal para que devuelva el objeto de terminal de entrada de una primitiva de mediación.

    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;
    }
    			
  14. Implemente la función getOutputTerminal para que devuelva el objeto de terminal de salida.

    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.

Volver a la página inicial del ejemplo