code: @Override
  	public ActivityData perform(ActivityContext context, ActivityData data) throws ActivityException {
  		
  		TypedVector<ActivityInfo> infos = new TypedVector<ActivityInfo>();
  		int i = 0;
  		for(Activity activity : activities) {
  			logger.trace("adding activity number {} with id '{}'...", i, activity.getId());
  			ActivityInfo info = new ActivityInfo();
  			info
  				.setActivity(activity)
  				.setContext(context)
  				//.setData(i == 0 ? data : null);
  				.setData(data);
  			infos.add(info);
  			logger.trace("... activity {} added!", i);
  			++i;
  		}
  		logger.trace("launching activity execution...");
  		return engine.execute(infos);
  	}
docs: Runs a set of sub-activities in a sequence (one at a time), with no parallelism.
  As soon as one of the activities throws an exception the whole processing
  is aborted and the exception is propagated to its wrapping activities.
  
  @see org.dihedron.tasks.Task#execute(org.dihedron.tasks.ExecutionContext)