So I am trying to understand the process of building a custom job handler that schedules an async job. Sprint boot examples have been posted on a different thread, but I’m actually trying to rip it apart and understand the line-by-line of how to register a custom job handler with the process engine, because in my primary application I have to operate without sprint boot (so anything using annotations or beans is going to result in me spending a lot of time to rip apart the underlying dependency stack regardless).
I’ve got this basic function in here, called via a Main() method in a console app, that I’m using to tinker around and understand the process of connecting to and configuring a process engine. Right now I’ve implemented the stand-alone configuration for the engine, but if I have to change it I just need to understand how it has to be adjusted. What i really need is to know what the code would be to attach my custom job hander to the process engine so I can use it during runtime.
Here’s my job handler:
public class CustomJobHandler implements JobHandler {
public static final String TYPE = “cutomJobType”;
@Override
public String getType() {
return TYPE;
}
@Override
public void execute(JobEntity job, String configuration, VariableScope variableScope,CommandContext commandContext) {
CommandContextUtil.getProcessEngineConfiguration(commandContext).getTaskService().complete(configuration);
}
}
And this is the class I wrote for actually connecting to the engine:
public class FlowableEngine {
public FlowableEngine() {}
public ProcessEngine buildEngine(String jdbcUrl, String userName, String password) {
System.out.println("Creating flowable engine");
ProcessEngineConfiguration config = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();
System.out.println("Created standalone config for engine construction");
BasicDataSource datasource = new BasicDataSource();
datasource.setDriverClassName("oracle.jdbc.OracleDriver");
datasource.setUrl(jdbcUrl);
datasource.setUsername(userName);
datasource.setPassword(password);
config.setDatabaseSchemaUpdate(AbstractEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
config.setDatabaseType(AbstractEngineConfiguration.DATABASE_TYPE_ORACLE);
config.setDataSource(datasource);
config.setAsyncExecutorActivate(true);
System.out.println("Set the configuration");
ProcessEngine engine = config.buildProcessEngine();
System.out.println("Created the engine");
return engine;
}
}
The whole thing is run as a console app using this runner class (sub in connection strings for the params–I stipped them out with xxxx on purpose for obvious reasons):
public class FlowableRunner {
public static void main(String[] args) {
FlowableEngine engine = new FlowableEngine();
ProcessEngine processEngine = engine.buildEngine("jdbc:oracle:thin:@xxx:xxx:xxx", "xxxx", "xxxxx");
}
}