Могу ли я использовать наследование в удаленных / локальных интерфейсах? (EJB3) - PullRequest
4 голосов
/ 29 августа 2009

Пример:

@Remote
public interface SomeComponentRemote{

    public Something processStuff();

}

//--

@Local
public interface SomeComponentLocal extends SomeComponentRemote{

}

Это разрешено? Могу ли я делать это регулярно?

Ответы [ 2 ]

5 голосов
/ 29 августа 2009

Ваш путь не разрешен, так как вы не можете пометить свой интерфейс аннотациями @Local и @Remote в соответствии со спецификацией. И это не очень хорошая идея с точки зрения чтения кода.

Рекомендуемое решение:

public interface SomeComponent {
    public Something processStuff();
}

@Local
public interface SomeComponentLocal extends SomeComponent {
}

@Remote
public interface SomeComponentRemote extends SomeComponent {
}
3 голосов
/ 29 мая 2013

Этот код будет работать, так как @ local / @ remote аннотации не наследуются. Также возможно установить представление без интерфейса для самого компонента с помощью @LocalBean при реализации удаленного интерфейса (вместо локального интерфейса).

Более важным моментом является то, что каждый интерфейс должен предлагать только то, что нужно для пользователей этого класса, потому что, вероятно, будут использоваться все предлагаемые вами методы, и тогда вам придется поддерживать этот метод.

Вопрос в том, что вы собираетесь делать: оба интерфейса будут предлагать одни и те же методы все время? Или один интерфейс является возможным подмножеством другого (если вы расширяете локальный от удаленного, то это предполагает, что, возможно, не каждое дополнение к локальному будет предлагаться как удаленное). То же самое для @LocalBean - существуют ли общедоступные методы, к которым просто обращается ejb-контейнер и которые не предназначены для других пользователей?

Единственная плохая вещь, которую вы можете сделать, - проектировать интерфейс ленью, а не намерением. Не исключает, чтобы писать меньше кода.

...