@ Асинхронный приватный метод в EJB - PullRequest
2 голосов
/ 28 сентября 2010

В моем синглтоне EJB есть асинхронный метод, который вызывается из другого метода в том же классе. Я уже знаю, что не могу вызвать асинхронный метод напрямую, мне нужно получить EJB-прокси. Проблема в том, что я не хочу, чтобы асинхронный метод был виден вне класса; но когда я делаю его приватным, он не выполняется асинхронно. (Я использую Glassfish v3.)

В javadocs ничего не сказано об требуемом уровне доступа. Так стоит ли считать это ошибкой в ​​Glassfish?

Ответы [ 2 ]

8 голосов
/ 28 сентября 2010

примечание метода не может использоваться в частных методах. Когда Glassfish компилирует ваш EJB, он в основном преобразует вашу аннотацию в кусок кода, который окружит ваш код в прокси. Если ваш метод приватный, он обойдет созданный прокси Glassfish ... Итак, в вашем случае я предлагаю создать новый EJB с вашим асинхронным методом, чтобы вставить его в ваш текущий EJB

1 голос
/ 01 октября 2010

Это очень интересный отзыв.Я вижу ценность в том, что вы пытаетесь сделать.Попробуйте пометить ваш bean-компонент как @LocalBean и аннотировать ваш @Asynchronous метод как protected.

Поскольку поддержка @LocalBean в основном осуществляется через создание подкласса класса bean-компонента (динамически или статически), это не так.действительно возможно, что контейнер переопределит метод private.Но я, конечно, вижу ваш вариант использования.Если метод protected не работает, мы, вероятно, можем добавить это как расширение к EJB.next.

По-прежнему предоставит доступ к другим bean-компонентам в том же пакете, но он по меньшей мере менее общедоступен.Мне часто хотелось, чтобы у Java была область «только подклассов».Я почти никогда не использовал protected и думал: «Отлично, теперь все в моем пакете тоже могут получить к нему доступ».

...