Skip to content

Упростить логику определения jobId #96

@KuznetsovVlad

Description

@KuznetsovVlad

Как реализовано сейчас

Для жобы возможно задать id двумя способами: через переопределение свойства интерфейса jobId: JobId, либо через навешивание аннотации: @DistributedJobId. В случае если определено и то и то, приоритет имеет переопределение через интерфейс. В случае если не определено ни то ни другое, то полное имя класса (см.доку If jobId is not defined, full class name of job will be used as jobId).

Если мы задачи через аннотацию id, то теперь в коде джобы нельзя воспользоваться свойством jobId, нужно вызывать метод resolveJobId(this)

@DistributedJobId("useless.way.to.define.job.id")
class SomeJob: DistributedJob {

    override fun run(context: DistributedJobContext) {

        //нельзя т.к определили через аннотацию
        //val jobId = this.jobId

        // нужно так, т.к определили через аннотаци.
        val jobId = resolveJobId(this)
            ...
    }
    ...
}

Такой подход по работе с простейшей операцией задачи идентификатора для класса кажется через чур усложненным.

Предложение:

  1. Выпилить дефолтное поведения, когда идетнификатор не задается и берется по умолчанию имя класса
  2. Оставить 1 вариант по заданию идентификатора джобы. Предпочтительно просто через свойство интерфейса jobId, т.к намного проще, не нужно при работе вызывать лишний метод resolveJobId. Вариант с аннотацией плох тем, что тебе из интерфейса DistributedJob не понятно, а нужно ли вешать аннотацию? Можно спокойно и забыть, а при учете того что ест дефолтное значение - это всплывет не сразу, в случае же свойства интерфейса мы сразу видим что есть JobId, нам нужно его определить напряму через реализацию свойтва, а не навешивания какой-то аннотации.

Оставлять задавать два варианта определения айди кажется не очень хорошим решением, ибо тогда в коде надо регламентировать каким из способов пользоваться и следить за этим. Лучше оставить один вариант, тем более наличие одновременно двух не несет никакой ценности, только усложняет и так не простой фреймворк джм.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions