2015-03-26 4 views

ответ

5

Вы не можете вводить его программно. Однако вы можете получить его программным путем. EJBs are also available via JNDI. Обычно вы находите эти имена/псевдонимы JNDI, напечатанные в журнале запуска сервера. По крайней мере JBoss/WildFly делает это.

Есть разные названия JNDI псевдонимы:

java:global/APP_NAME[/MODULE_NAME]/EJB_NAME
java:app/MODULE_NAME/EJB_NAME
java:module/EJB_NAME

Где /APP_NAME это имя WAR или EAR приложения и /MODULE_NAME этого имя модуля EJB в случае EAR приложение или модуль WAR в случае приложения с одной WAR (и это будет отсутствовать в java:global, поскольку оно в противном случае повторяет /APP_NAME), а /EJB_NAME по умолчанию соответствует имени класса класса EJB.

java:global доступен через весь сервер. java:app доступен только изнутри того же приложения (WAR или EAR). java:module доступен только изнутри того же модуля (EJB в случае EAR или WAR в случае одной-WAR).

Управляемый bean JSF, очевидно, находится внутри WAR. Если у вас одностраничное приложение, то должно работать java:module/EJB_NAME. Если у вас есть проект EAR, то EJB, очевидно, находится внутри модуля EJB, в этом случае java:module не будет работать, и вам понадобится java:app или java:global.

Таким образом, учитывая EJB-компонент, как показано ниже,

@Stateless 
public class FooService {} 

это в одной WAR проекта под названием «foo_war» через JNDI доступен в JSF управляемый компонент следующим образом (как правило, вы делаете это в @PostConstruct метод):

InitialContext jndi = new InitialContext(); 

FooService fooService = (FooService) jndi.lookup("java:module/FooService"); 
// Or 
FooService fooService = (FooService) jndi.lookup("java:app/foo_war/FooService"); 
// Or 
FooService fooService = (FooService) jndi.lookup("java:global/foo_war/FooService"); 

или в EAR проекта под названием «foo_ear» с модулем EJB под названием «foo_ejb» с нем класса EJB (в то время как JSF управляемый компонент в WAR модуле проекта EAR):

InitialContext jndi = new InitialContext(); 

FooService fooService = (FooService) jndi.lookup("java:app/foo_ejb/FooService"); 
// Or 
FooService fooService = (FooService) jndi.lookup("java:global/foo_ear/foo_ejb/FooService"); 
+0

Спасибо BalusC, это видно больше, чем я ожидал! – phanhongphucit

+0

Добро пожаловать. – BalusC