Handler创建Dispatcher请求
应用场景
在Handler中执行耗时较久的程序时,等待执行过程中,客户端界面无法进行其他操作,只能等待,而通过dispatcher调度可以解决这种问题。
Handler创建Dispatcher请求
void create_dispatcher_request() {
char *err_string = NULL,*err_function = NULL;
int err_line = -1;
int rcode = ITK_ok;
char *value = "key=123abc";
tag_t request = NULLTAG;
char *uid = NULL;
SAFECALL(DISPATCHER_create_request("SIEMENS", "test", 2, NULL, NULL, 0, 0, NULLTAG, NULLTAG, 1, &value, "ONDEMAND-PRIORITY", 0, (const char**)NULL, (const char**)NULL, &request));
ECHO("request : %d\n", request);
SAFECALL(POM_tag_to_uid(request, &uid));
ECHO("request uid: %s\n", uid);
CLEANUP:
ECHO("rcode : %d\n", rcode);
}
创建响应
1、创建响应工程
1、创建一个普通的java工程,导入依赖包,依赖包存在于DispatcherClient\lib。

2、创建下图所示的java文件
package translator.test;
import com.teamcenter.ets.extract.DefaultTaskPrep;
import com.teamcenter.ets.request.TranslationRequest;
import com.teamcenter.translationservice.task.Option;
import com.teamcenter.translationservice.task.TranslationTask;
import com.teamcenter.translationservice.task.TranslatorOptions;
import java.io.File;
import java.io.FileOutputStream;
import java.io.PrintStream;
import java.util.Arrays;
import java.util.Map;
/**
* Created by Administrator on 7/2/2019.
*/
public class TestTask extends DefaultTaskPrep {
@Override
public TranslationTask prepareTask() throws Exception {
Map<String, String> map = TranslationRequest.getTranslationArgs(request);
String fileName= "qwert.txt";
try(PrintStream ps = new PrintStream(new FileOutputStream(this.stagingLoc + File.separator + fileName))) {
for (Map.Entry<String, String> entry : map.entrySet()) {
m_zTaskLogger.info("--key : " + entry.getKey() + " --value : " + entry.getValue());
ps.println(entry.getKey() + "=" + entry.getValue());
}
}
this.m_zTaskLogger.info("prepareTask start ...");
TranslationTask task = prepTransTask(null, null, null, null, false, false, null, 0, null);
TranslationTask translationTask = addRefIdToTask(task, 0);
createTranslatorOptions(translationTask, map);
TranslatorOptions translatorOptions = translationTask.getTranslatorOptions();
Option[] options = translatorOptions.getOption();
for(Option option : options) {
this.m_zTaskLogger.info("name : " + option.getName() + " value : " + option.getValue());
}
this.m_zTaskLogger.info("prepareTask end ...");
return translationTask;
}
}
3、打成jar包
4、将导出的jar包放入DispatcherClient\lib下。
5、修改DispatcherClient\conf下Service.properties文件
Translator.SIEMENS.test.Prepare=translator.test.TestTask
SIEMENS是Handler请求中ProviderName,bomchange是Handler请求中服务名,等号后面是TaskPrep类的全限定名。
6、修改Module\conf下translator.xml文件
1、在标签内加入
<test provider="SIEMENS" service="test" maxlimit="3" isactive="true">
<TransExecutable dir="&MODULEBASE;/Translators/test" name="test.bat"/>
<Options>
<Option name="taskid" string="" description="Task ID from Dispatcher Client."/>
<Option name="inputpath" string=""
description="Full path to the input file which will contain user input for complete dispatcher service."/>
<Option name="clientoption" optionkey="key" string=""
description="arguments for utility command"/>
</Options>
</test>
SIEMENS为ProviderName,test为ServiceName,dir指定test.bat文件的路径为Translators下test文件夹。
7、书写test.bat,并放在Translators下test文件夹内。
cd "C:\Apps\PLM\dispatcher\Module\Translators\test"
java Hello %1 %2 %3
需根据实际情况修改路径,bat调用执行程序。
结果:

网友评论