I am new to using Temporal, so my apologies if I have a fundamental misunderstanding here.
I have a workflow written using the Java SDK which performs some orchestration between APIs A, B & C. I have a need for this workflow to be executed on schedule, which Temporal clearly supports. However I also need to execute this workflow on demand when API D receives a particular HTTP request. Ideally my Temporal workflow / worker would be completely decoupled from these APIs. Assuming API D is also written in Java, could you advise on how would I invoke this workflow remotely (Ideally decoupling API D from Temporal as much as possible)?
I found the following example in the documentation https://github.com/tsurdilo/temporal-polyglot, but this appears to require a parent workflow to be constructed before another workflow can be executed.
In the code example you linked, the process that executes the workflow is able to resolve the object AccountTransferWorkflow. In my above example, API D would not have a copy of this object. I suppose fundamentally my question is: is it possible for workflows to be centrally stored and remotely executed, or does every process that wishes to start the workflow need a copy of the workflow code?
I’m finding it difficult to piece this functionality together from the JavaDocs alone, is there an existing code example that you could point me to? The WorkflowClient’s start method requires a function call as a mandatory parameter, but in my case that function cannot be resolved. Is there another object or method which I should be using to invoke this?
This code uses “newUntypedWorkflowStub” to query an existing workflow execution by its workflowid and optional runtid. Once you have the WorkflowStub you can also call the “start” and “signalWithStart” methods instead of the “query” one shown in the example.
Another example you could look at is here: temporal-polyglot/SimpleWorkflowImpl.java at main · tsurdilo/temporal-polyglot · GitHub
There you can see the use of “newUntypedExternalWorkflowStub” where you need only the workflow type (string) to signal and/or cancel an external workflow, as well as the use of “newUntypedActivityStub” to invoke external activities.