背景: 最近有个开发需求,需要同时在Teamcenter RCP客户端和服务端部署同一套代码,以分别实现客户端菜单手动触发以及服务端值守服务自动触发定制功能的目的。为赶进度,最终交付给客户的是两套代码,客户端RCP插件包和服务端SOA Jar包。
问题:那么可不可以直接重用RCP包,在服务端作为值守服务运行呢?
解决:经实验可以重用三个Teamcenter RCP核心包,制作自己的“小客户端”:
com.teamcenter.rac.aifrcp
com.teamcenter.kernel
com.teamcenter.rac.util
“小客户”本质上是Teamcenter RCP富客户端的缩小版,所以具备客户端的一切特性,通过这个小客户端可以:
1)运行为RCP客户端开发的插件包,无需更改,无需重新打包
2)调用Teamcenter客户端的原生模块,也无需反编译或更改
3)同样支持RCP插件扩展、属性文件配置等等
方法:制作“小客户端”的过程
1、设置target platform为TC
2、新建RCP工程,注意设置Rich Client Application 为 yes
3、添加依赖
4、添加登录TC的代码:打开Application类,为start方法添加登录代码
public Object start(IApplicationContext context) {
// 调用Teamcenter登录窗体
IPortalService var2 = (IPortalService) OSGIUtil.getService(
AifrcpPlugin.getDefault(), IPortalService.class);
if (var2 == null) {
return IApplication.EXIT_OK;
} else {
var2.setCommandLineArgs((String[]) context.getArguments().get(
"application.args"));
if (!var2.login()) {
return IApplication.EXIT_OK;
}
}
// 启动主窗体
Display display = PlatformUI.createDisplay();
try {
int returnCode = PlatformUI.createAndRunWorkbench(display,
new ApplicationWorkbenchAdvisor());
if (returnCode == PlatformUI.RETURN_RESTART) {
return IApplication.EXIT_RESTART;
}
return IApplication.EXIT_OK;
} finally {
display.dispose();
}
}
5、新建Production配置文件
6、设置application 依赖,勾选最下方的Include optional dependencies...,点击右侧Add Required Plug-ins
7、导出Application:Eclipse Product export wizard
8、将tc_root/portal/registry目录拷贝过来
9、enjoy !
Eclipse工程源文件: