Можно ли "самостоятельно вводить" EJB, чтобы вызвать локальные методы как методы bean? В некоторых случаях это может быть благоприятным, например, если используются транзакции, управляемые контейнерами, и что-то должно быть выполнено в новой транзакции.
Пример того, как это могло бы работать:
Foo.java:
@Local
public interface FoO {
public void doSomething();
public void processWithNewTransaction(); // this should actually be private
}
FooBean.java:
@Stateless
public class FooBean implements Foo {
@EJB
private Foo foo;
public void doSomething() {
...
foo.processWithNewTransaction();
...
}
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public void processWithNewTransaction() {
...
}
}
Если я извлечу processWithNewTransaction()
в другой bean, он должен быть выставлен как открытый метод в интерфейсе, хотя он должен быть вызван только FooBean
. (Эта же проблема связана с моим кодом выше, почему в определении интерфейса есть комментарий.)
Одним из решений было бы перейти на управляемые транзакции bean. Однако это потребовало бы изменения всего bean для управления своими собственными транзакциями и добавило бы много плиты котла ко всем методам.