首页 > 其他分享 >Handler创建Dispatcher请求调用执行Utility

Handler创建Dispatcher请求调用执行Utility

时间:2024-01-05 14:58:10浏览次数:36  
标签:java bomchange request prop Handler import com Dispatcher Utility

文章目录

  • 应用场景
  • Handler创建Dispatcher请求
  • 创建响应
    1、创建响应工程
    2、书写响应代码
    3、打成jar包
    4、将导出的jar包放入DispatcherClient\lib下。
    5、修改DispatcherClient\conf下Service.properties文件
    6、修改Module\conf下translator.xml文件
    7、书写bomchange.bat,并放在Translators下bomchange文件夹内。

应用场景

在Handler中执行耗时较久的程序时,等待执行过程中,客户端界面无法进行其他操作,只能等待,而通过dispatcher调度可以解决这种问题。

Handler创建Dispatcher请求

char ProviderName[128]="SIEMENS",                    //Provider名称
        ServiceName[128]="bomchange";                    //服务名称
int request_args_num= 4;                                //参数数量
//request_args为参数值 键值对形式 "key=value",例如"prop=xxx"
const char** request_args = (const char**)MEM_alloc(request_args_num * sizeof(char*));
tag_t trans_rqst=NULLTAG;
logical flag;
int isFinalState =0;
ITKCALL(DISPATCHER_create_request(
    ProviderName,//the name of the provider that will process this request
    ServiceName,//the name of the service that will process this request
    3, //the priority to assign to the request(0 LOW to 3 HIGH)
    0, //the time at which to start this request
    0, //the time at which no more repeating requests of this same type will be processed.  
    //If the interval option for repeating is NOT selected, then this paramater is unused
    0, //the number of times to repeat this request
    // 0 - no repeating
    // 1 2 3 ... - number of times to repeat this task
    1,// the length of the primary and secondary object arrays
    &attachments[i],// the array of primary objects  请求对象
    NULL,//the array of related secondary objects
    request_args_num, //the number of request arguments
    request_args,//the array of request arguments in the format of
    NULL, // a string for use by the application creating the request for use in defining a type for the request (i.e. SYSTEM, THINCLIENT, etc.)
    0, //the number of datafiles you would like to upload
    0, 
    0,
    &trans_rqst));

创建响应

1、创建响应工程

1、创建一个普通的java工程,导入依赖包,依赖包存在于DispatcherClient\lib。
2、创建下图所示的java文件
image

2、书写响应代码

1、com.origin.bomchange.response.DatabaseOperation.java 代码

package com.origin.bomchange.response;
import java.util.List;
import com.teamcenter.ets.load.DefaultDatabaseOperation;
import com.teamcenter.translationservice.task.TranslationDBMapInfo;
public class DatabaseOperation extends DefaultDatabaseOperation{
     /**
     * Stores translation result data on the source dataset. If there are
     * existing translation result data files, they may be replaced depending
     * upon the value of the UpdateExistingVisualizationData TaskPrep instance
     * variable.
     *
     * @param zDbMapInfo DB mapper info object.
     * @param zFileList  List of files mapped to the source file.
     *
     * @throws Exception
     */
    public void load( ) throws Exception
    {
        super.load();
        System.out.println("load....");
    } // end load()
}

2、com.origin.bomchange.response.TaskPrep.java

package com.origin.bomchange.response;
//import com.origin.log.WriteLogUtil;
import java.io.File;
import java.io.FileOutputStream;
import java.io.PrintStream;
import java.util.Arrays;
import java.util.List;
import com.teamcenter.ets.extract.DefaultTaskPrep;
import com.teamcenter.ets.request.TranslationRequest;
import com.teamcenter.soa.client.model.ModelObject;
import com.teamcenter.translationservice.task.TranslationTask;
public class TaskPrep extends DefaultTaskPrep {
    public TranslationTask prepareTask() throws Exception {
        System.out.println("=================response=================");
        TranslationTask transTask = new TranslationTask();
        //获取请求对象
        ModelObject primary_objs[] = request.getPropertyObject(
                TranslationRequest.PRIMARY_OBJS).getModelObjectArrayValue();
        //获取输入参数值的键
        String[] argKeys = request.getPropertyObject(
                TranslationRequest.TRANSLATION_ARGS_KEYS).getStringArrayValue();
        //获取输入参数值的值
        String[] argValues = request.getPropertyObject(
                TranslationRequest.TRANSLATION_ARGS_DATA).getStringArrayValue();
        List<String> argKeyList = Arrays.asList(argKeys);
        List<String> argValueList = Arrays.asList(argValues);
        System.out.println(argKeyList);
        System.out.println(argValueList);
        String root_uid = "";
        String prop_BFR = "";
        String prop_AFR = "";
        String prop_form = "";
        if (argKeys != null && argKeys.length > 0) {
            for (int i = 0; i < argKeys.length; i++) {
                if (argKeys[i].equals("task_uid") == true) {
                    root_uid = argValues[i];
                }else if(argKeys[i].equals("prop_BFR") == true){
                    prop_BFR = argValues[i];
                }else if(argKeys[i].equals("prop_AFR") == true){
                    prop_AFR = argValues[i];
                }else if(argKeys[i].equals("prop_form") == true){
                    prop_form = argValues[i];
                }
            }
        }
        if (primary_objs.length > 0) {
            FileOutputStream output_file = new FileOutputStream(this.stagingLoc
                    + File.separator + "EBOMFileList.txt");
            PrintStream uids_print_stream = new PrintStream(output_file);
            System.out.println("path-->" + this.stagingLoc + File.separator+ "EBOMFileList.txt");
            StringBuffer sb = new StringBuffer("");
            sb.append("object_uid="+primary_objs[0].getUid()+";");
            if (!root_uid.equals("")) {
                sb.append("root_uid="+root_uid+";");
            }
            if(!prop_BFR.equals("")){
                sb.append("prop_BFR="+prop_BFR+";");
            }
            if(!prop_AFR.equals("")){
                sb.append("prop_AFR="+prop_AFR+";");
            }
            if(!prop_form.equals("")){
                sb.append("prop_form="+prop_form+";");
            }
            String s = sb.toString();
            System.out.println("s--->" + s);
            uids_print_stream.print(s.substring(0,s.length() - 1));
            uids_print_stream.close();
            output_file.close();
            transTask = prepTransTask(null, null, null, "EBOMFileList.txt",
                    false, false, null, 0, null);
        }
        this.m_zTaskLogger.info("end prepareTask ebomlist ");
        return addRefIdToTask(transTask, 0);
    }
}

响应时,将EBOMFileList.txt生成在Stage相对应的任务文件夹中,将Utility所需要的参数写入txt中。

3、打成jar包

image
image
image

4、将导出的jar包放入DispatcherClient\lib下。

5、修改DispatcherClient\conf下Service.properties文件

1、在import中加入jar包名称”BOMchange”
2、在文件最后加入

Translator.SIEMENS.bomchange.Prepare=com.origin.bomchange.response.TaskPrep
Translator.SIEMENS.bomchange.Duplicate=false

SIEMENS是Handler请求中ProviderName,bomchange是Handler请求中服务名,等号后面是TaskPrep类的全限定名。

6、修改Module\conf下translator.xml文件

1、在标签内加入

<!-- Configuration of the bomchange -->
  <BOMchange provider="SIEMENS" service="bomchange" isactive="true" >
    <TransExecutable dir="&MODULEBASE;/Translators/bomchange" name="bomchange.bat"/>
    <Options>
      <Option name="taskid" string=""
              description="Task ID from Dispatcher Client."/>
    </Options>
  </BOMchange>

BOMchange为jar包名称,SIEMENS为ProviderName,bomchange为ServiceName,dir指定bomchange.bat文件的路径为Translators下bomchange文件夹。

7、书写bomchange.bat,并放在Translators下bomchange文件夹内。

@echo on
set MODULE_PATH=D:\Siemens\DC\Module
set JAVA_HOME=C:\Program Files\Java\jdk1.7.0_45
set DC_PATH=D:\Siemens\DC\Stage\DC
SET TC_ROOT=D:\Siemens\Teamcenter10
SET TC_DATA=D:\Siemens\tcdata
call D:\Siemens\tcdata\tc_profilevars
%MODULE_PATH%\Translators\bomchange\bom_change.exe %1 %DC_PATH% 
@echo off

需根据实际情况修改路径,bat调用exe文件去执行程序。

感谢链接
https://www.dandelioncloud.cn/article/details/1489054828394565633#google_vignette

标签:java,bomchange,request,prop,Handler,import,com,Dispatcher,Utility
From: https://www.cnblogs.com/paylove/p/17947207

相关文章

  • @ExceptionHandler详解
    一、@ExceptionHandler介绍@ExceptionHandler注解我们一般是用来自定义异常的。可以认为它是一个异常拦截器(处理器)。异常间的层次关系二、@ExceptionHandler的使用1:极简测试,一共4个类: 1、一个SpringBoot启动类 2、一个控制层 3、一个异常处理类 4、一个service类启动类:Exc......
  • Handler接口
    typeHandlerinterface{ServeHTTP(ResponseWriter,*Request)}处理http请求的接口---相当于Java的Controller方法配合http包下的方法使用funcListenAndServe(addrstring,handlerHandler)error{server:=&Server{Addr:addr,Handler:handler}retu......
  • Spring Boot学习随笔- 后端实现全局异常处理(HandlerExceptionResolver),前后端解决跨域
    学习视频:【编程不良人】2021年SpringBoot最新最全教程第十七章、异常处理异常处理作用:用来解决整合系统中任意一个控制器抛出异常时的统一处理入口传统方式传统单体架构下的处理方式配置全局异常处理类@ComponentpublicclassGlobalExceptionResolverimplementsHand......
  • 深入理解WPF中的Dispatcher:优化UI操作的关键
     概述:Dispatcher是WPF中用于协调UI线程和非UI线程操作的关键类,通过消息循环机制确保UI元素的安全更新。常见用途包括异步任务中的UI更新和定时器操作。在实践中,需注意避免UI线程阻塞、死锁,并使用CheckAccess方法确保在正确的线程上执行操作。这有助于提升应用程序的性能和用户......
  • RT-Thread 中 HardFault_Handler 分析
    进HardFault_Handler前,CPU自动把r0~r3,r12,lr,pc,psr一个8个寄存器入栈,再把lr值改为EXC_RETURN代码解析:220:把MSP值赋值给r0221:TST指令 :执行按位与操作,直接结果更新到状态寄存标志位Z,这个指令通常与EQ、EN这些条件码来组合使用,必须注意测试后的结果全部位为0时......
  • Spring MVC 源码分析 - HandlerMapping 组件(三)之 AbstractHandlerMethodMapping
    HandlerMapping组件HandlerMapping组件,请求的处理器匹配器,负责为请求找到合适的 HandlerExecutionChain 处理器执行链,包含处理器(handler)和拦截器们(interceptors)handler 处理器是Object类型,可以将其理解成HandlerMethod对象(例如我们使用最多的 @RequestMapping 注解所标......
  • SpringBoot系列---【过滤器Filter和拦截器HandlerInterceptor的区别和用法】
    1.作用时机1.1过滤器过滤器(Filter)主要作用在请求到达Servlet或JSP之前,对请求进行预处理,可以对HTTP请求进行过滤、修改。过滤器是基于回调函数实现的,开发人员通过重写doFilter()方法实现过滤逻辑,其主要功能有:权限验证:检查用户是否已经登录或者是否具有相应的权限。数据压......
  • Spring MVC 源码分析 - HandlerMapping 组件(二)之 HandlerInterceptor 拦截器
    HandlerMapping组件HandlerMapping组件,请求的处理器匹配器,负责为请求找到合适的 HandlerExecutionChain 处理器执行链,包含处理器(handler)和拦截器们(interceptors)handler 处理器是Object类型,可以将其理解成HandlerMethod对象(例如我们使用最多的 @RequestMapping 注解所标......
  • Spring Boot学习随笔- 拦截器实现和配置(HandlerInterceptor、addInterceptors)、jar包
    学习视频:【编程不良人】2021年SpringBoot最新最全教程第十三章、拦截器拦截器:Interceptor拦截中断类似于javaweb中的Filter,不过没有Filter那么强大作用SpringMVC的拦截器是一种用于在请求处理过程中进行预处理和后处理的机制。拦截器可以在请求到达控制器之前和......
  • MyBatis-Plus 自定义 TypeHandler 映射JSON类型为List
    1在mysql5.7支持json类型,那么在表实体是怎么运用的在mybatis-plus中有相关的handler/***Jackson实现JSON字段类型处理器**@authorhubin*@since2019-08-25*/@Slf4j@MappedTypes({Object.class})@MappedJdbcTypes(JdbcType.VARCHAR)publicclassJackso......