def METHOD_NAME(cls, username, **kwargs):
    """
    Take an arbitrary set of keyword arguments and return an instance of a BackgroundJob,
    or fail with a suitable exception
    :param kwargs: arbitrary keyword arguments pertaining to this task type
    :return: a BackgroundJob instance representing this task
    """
    super(JournalBulkDeleteBackgroundTask, cls).METHOD_NAME(username, **kwargs)
    # first prepare a job record
    job = models.BackgroundJob()
    job.user = username
    job.action = cls.__action__
    job.reference = {'selection_query': json.dumps(kwargs['selection_query'])}
    params = {}
    cls.set_param(params, 'ids', kwargs['ids'])
    if not cls._job_parameter_check(params):
        raise BackgroundException("{}.prepare run without sufficient parameters".format(cls.__name__))
    job.params = params
    job.queue_id = huey_helper.queue_id
    # now ensure that we have the locks for all the records, if they are lockable
    # will raise an exception if this fails
    lock.batch_lock('journal', kwargs['ids'], username, timeout=app.config.get("BACKGROUND_TASK_LOCK_TIMEOUT", 3600))
    return job