Ошибка, которую вы получаете, скорее всего, указывает на то, что ваш код все равно пытается вызвать защищенный метод. Это не разрешено для представлений без интерфейса на EJB. Вам разрешено вызывать только публичные методы.
Здесь есть небольшое несоответствие между нормальными правилами классов Java и правилами EJB. Для представления без интерфейса прокси создается на основе исходного типа класса (обычно его динамического подкласса). Таким образом, это означает, что защищенные и закрытые приватные методы видны для кода в одном и том же пакете, и что касается компилятора Java, ваш код может вызывать их.
Но, как уже упоминалось, это не разрешено правилами EJB, и, следовательно, создается исключение.
Вы можете легко воспроизвести это, введя боб, как показано ниже:
@Stateless
public class FooBean {
public void callMe() {
}
protected void doNotCallMe() {
}
}
Вставьте это куда-нибудь (например, сервлет в том же пакете) и попробуйте позвонить doNotCallMe()
. Вы увидите то же исключение. Звоните callMe()
и все будет хорошо.