Почему я должен искать заглушку EJB для каждого JNDI, если он уже находится в пути класса клиента? - PullRequest
2 голосов
/ 31 августа 2011

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

Например:

InitialContext ctx=new InitialContext();
SomeEJBHome stub=ctx.lookup("someEJB");

Здесь я получаю заглушку, которая уже есть в моем classpath.Это было дано через client.jar или что там у вас.Почему я ищу эту заглушку, если она у меня уже есть?

1 Ответ

2 голосов
/ 31 августа 2011

Это работает «из коробки», если ваш EJB-клиент (вызывающая сторона, т. Е. Веб-приложение) и EJB находятся в одном EAR (кластер JVM и т. Д.). Если у вас есть разные EAR, один из которых связан с вашим веб-клиентом, а другой - с вашими EJB, вы должны сделать клиентские заглушки доступными для клиентского EAR (тип проекта Eclipse EJB Client ), как правило, с помощью файла JAR.

Тогда почему я смотрю на эту заглушку, если она у меня уже есть? Вы должны найти заглушку, потому что EJB - это Объект, управляемый контейнером Java EE, поэтому вы не можете просто создать его экземпляр. Если вы посмотрите его, вы получите объект, созданный контейнером.

Кстати: если вы используете Java EE 6, вы можете избавиться от этого материала, вместо этого используйте Dependency Injection.

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

Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, <NamingContextFactory>);
env.put(Context.PROVIDER_URL, <url:port>);
env.put(... container specific props);

InitialContext ctx = new InitialContext(env);

Следующий вызов пытается найти EJB в удаленном расположении, указанном выше:

SomeEJBHome stub = ctx.lookup("someEJB");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...