1) Yes, using the workflow start task would be the default way of adding these properties to the process instances. At runtime (inside an Activiti task / execution listener) you can also use the execution object to set variables - be aware though that there is a multi-level, inheritance-based isolation model for variables and as soon as a variable is set i.e. within the context of a process branch, it will be hard(er) to update the same-name variable on the global process instance scope.
2) What kind of example do you need? It is a simple setter which takes a map of properties, so any example should be as simple as:
Maybe I misunderstood something, but I can't find any way to read properties from a workflow instance in JAVA.
When adding custom properties at workflow startup using workflow start task, how to read these properties afterwards ? I can of course get the start task from workflow instance and read its properties like below, but I'm not sure it's the proper way to proceed....