Атрибут транзакции EJB 3 для метода только для чтения

Это уже спросили и ответили, здесь

Для дублирования моего ответа:

никогда нет точки к объявлению статического метода в интерфейсе. Они не могут быть выполнены обычным вызовом MyInterface.staticMethod (). При вызове их путем определения класса с реализацией MyImplementor.staticMethod () затем, необходимо знать фактический класс, таким образом, это не важно, содержит ли интерфейс его или нет.

, Что еще более важно, статические методы никогда не переопределяются, и при попытке сделать:

MyInterface var = new MyImplementingClass();
var.staticMethod();

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

причина Вы не можете выполниться "result=MyInterface.staticMethod ()", то, что она должна была бы выполнить версию метода, определенного в MyInterface. Но не может быть версии, определенной в MyInterface, потому что это - интерфейс. Это не имеет кода по определению.

, В то время как можно сказать, что это составляет, "потому что Java делает это тот путь", в действительности решение является логическим следствием других проектных решений, также сделанных на очень серьезном основании.

5
задан Danilo Piazzalunga 31 October 2013 в 14:49
поделиться

1 ответ

Клиент этого метода - он уже находится в транзакции? Когда вы используете NotSupported, транзакция вызывающего абонента будет приостановлена. Если нет, я бы сказал, просто укажите Никогда в качестве типа транзакции. Никогда не лучше, поскольку вызывающие абоненты знают, что они не должны вызывать этот метод изнутри транзакции. Более прямой контракт.

Мы всегда используем Never для методов, которые выполняют больше обработки, чтобы разработчики сразу знали, что нельзя вызывать, если они уже участвуют в транзакции. Надеюсь, это поможет.

3
ответ дан 14 December 2019 в 19:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: