Можно ли "самостоятельно внедрить" 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()
в другой бин, его необходимо будет представить в качестве открытого метода в интерфейсе, даже если он должен вызываться только FooBean
. (Та же проблема с моим кодом выше, поэтому в определении интерфейса есть комментарий.)
Одним из решений было бы переключиться на управляемые компонентом транзакции. Однако для этого потребуется изменить весь бин для управления собственными транзакциями и добавить много методов для всех методов.