Это работает «из коробки», если ваш 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");