Architecture
Dispatcher: Architecture and Components
Topology
┌─────────────────────────────────────┐
│ Teamcenter host │
│ Teamcenter ⇄ DispatcherClient │
│ ⇅ RMI │
│ Scheduler │──── RMI ───┐
└─────────────────────────────────────┘ │
▼
┌────────────────────────────────────┐
│ Worker host(s) │
│ Module ──▶ Translators/<service>/ │
└────────────────────────────────────┘
Scheduler and Module can be co-located with Teamcenter (all-local) or spread across many hosts of different platforms. The 2506 guide's own diagram shows one Scheduler fanning out to Modules on Windows, Itanium, AIX and Linux simultaneously, each hosting a different translator set. That heterogeneity is the point: the Module is where the translator's native tooling has to be installed.
Directory layout
Every component follows the same shape:
Dispatcher/
Scheduler/ bin/ conf/ lib/
Module/ bin/ conf/ lib/ Translators/ samples/
DispatcherClient/ bin/ conf/ lib/ install/ sample/ xml/ docs/
AdminClient/ bin/ conf/ lib/ samples/ testxml/ ui/
Documentation/ javadocs/
Ports and RMI wiring
These four values must agree across three files or nothing connects:
| Setting | File | Default |
|---|---|---|
Port |
Scheduler/conf/transscheduler.properties |
2001 |
Scheduler.URL |
Module/conf/transmodule.properties |
rmi://localhost:2001 |
DispatcherServer.URL |
DispatcherClient/conf/DispatcherClient.config |
rmi://localhost:2001 |
Port (Module's own RMI export) |
Module/conf/transmodule.properties |
1999 |
Port (DispatcherClient RMI registry) |
DispatcherClient/conf/DispatcherClient.config |
2099 |
BindingName / Scheduler.BindingName |
all three | DispatcherScheduler |
BindingName must be identical in transscheduler.properties,
transmodule.properties and DispatcherClient.config. If you run more than one
Scheduler it must be unique per Scheduler, which then means updating it in every
Module and Client that points at it.
Config file map
This is the whole surface. There is nothing else.
Scheduler
| File | What it controls |
|---|---|
conf/transscheduler.properties |
Port, binding name, mail host/admin email, SlackTime (priority-inversion window, default 60 min), NumTasksToSubmitToModule (default 3), NumOfEventLogs (default 3 days) |
conf/database.xml |
Where translation data is stored |
conf/TaskConfiguration.xml |
Site-wide cap on concurrent tasks per provider+service. Ships empty with one commented example |
TaskConfiguration.xml in full, as shipped:
<Tasks>
<!-- Task Provider="SIEMENS" Service="tozipfile" MaxLimit="3"/-->
</Tasks>
That is the global throttle. MaxLimit here caps a service across all Modules,
as opposed to MaximumTasks which caps one Module across all services.
Module
| File | What it controls |
|---|---|
module.config |
Which Module configurations exist and where their conf/Translators dirs are |
conf/transmodule.properties |
Scheduler URL, MaximumTasks (default 3), staging dir, progress watchdog |
conf/translator.xml |
The translator registry. 78 OOTB service definitions |
Translators/<service>/ |
The launch scripts |
Two watchdog settings worth knowing before you debug a "hung" translation:
MaximumProgress=100
MonitorInterval=0.5
The Module samples progress every MonitorInterval minutes and kills the process
after MaximumProgress non-progressing samples. Default is therefore a 50-minute
ceiling on any single translation. A large job that "fails for no reason" at
around 50 minutes is this, not your script.
There is also an opt-in CPU-based admission filter, commented out by default:
#SubmitFilters=com.teamcenter.tstk.server.translation.module.filters.CpuUsageSubmitFilter
#SubmitFilters.CpuUsageThreshold=0.7
Dispatcher Client
| File | What it controls |
|---|---|
conf/DispatcherClient.config |
Scheduler URL, staging dir, poll interval, BadChars, preview mapping |
conf/Service.properties |
Per-translator Prepare / Load / Duplicate / Log class bindings. ~600 lines |
conf/PostProcessor.xml |
File-extension to Teamcenter-object-type mapping for direct translators |
install/*_env.xml |
Preference bundles to import with preferences_manager |
sample/integration/ |
The worked custom-translator examples |
xml/Task.xsd |
The TranslationTask wire-format schema |
DispatcherServer.PingInterval=0.25 is the poll cadence in minutes, so the
client checks for new requests every 15 seconds by default.
BadChars deserves a mention because it silently rewrites your filenames. The
default list replaces @ % & * # ! - . ( ) \ / , space newline tab ~ $ ^ + = "
' : ; < > ? | [ ] { }with underscores, because many translators choke on them. You can override per service with
AdminClient
| File | What it controls |
|---|---|
conf/transclient.properties |
Where to find the Scheduler |
testxml/BatchInput.xml |
Batch submission format |
bin/runUI.bat, runBatch.bat, runSampleClient.bat |
Entry points |
samples/*.java |
Programmatic submission examples |
The CHANGE_ME problem
Nearly every shipped launch script and several config files contain literal
CHANGE_ME placeholders. plmxmltojt.bat is representative:
set TC_ROOT=CHANGE_ME
set PERL_DIR=CHANGE_ME
set TCVIS_ROOT=CHANGE_ME
DispatcherClient.config has DB_Host, DB_Port and User set to CHANGE_ME
as well, though the comments note these are unused for Teamcenter Engineering
(they are Teamcenter Enterprise MUX settings). See the
deployment checklist for the full
inventory.
What is a Java RMI application, practically
Both Scheduler and Module are plain Java processes started by a .bat/.sh, or
installable as Windows services via schedulerWinService.bat /
moduleWinService.bat. They use .policy files (scheduler.policy,
module.policy, client.policy) for the Java security manager. Logging is
log4j2 throughout, configured per component in conf/log4j2.xml, writing under
LogVolumeLocation (default ../logs).
Source: Shipped Dispatcher SDK config files; Dispatcher Deployment and Administration (2506) · retrieved 2026-08-03