Я пытаюсь получить доступ к EJB3 из клиентского приложения Java EE, но постоянно получаю только ошибки поиска. Клиентское приложение выполняется в контейнере клиента приложения Java EE.
Мое приложение Java EE 'CoreServer' предоставляет несколько компонентов с удаленными интерфейсами. У меня нет проблем с доступом к ним из веб-приложения, развернутого на том же Glassfish v3.0.1.
Теперь я пытаюсь получить к нему доступ из клиентского приложения:
public class Main {
public static void main(String[] args) {
CampaignControllerRemote bean = null;
try {
InitialContext ctx = new InitialContext();
bean = (CampaignControllerRemote) ctx.lookup("java:global/CoreServer/CampaignController");
} catch (Exception e) {
System.out.println(e.getMessage());
}
if (bean != null) {
Campaign campaign = bean.get(361);
if (campaign != null) {
System.out.println("Got "+ campaign);
}
}
}
}
Когда я запускаю развертывание на Glassfish и запускаю его из приложения, я получаю эту ошибку:
Lookup failed for 'java:global/CoreServer/CampaignController' in SerialContext targetHost=localhost,targetPort=3700,orb'sInitialHost=localhost,orb'sInitialPort=3700
Однако это то же самое имя JNDI, которое я использую при поиске компонента из WebApplication (через SessionContext, а не InitialContext - имеет ли это значение?). Кроме того, когда я развертываю 'CoreServer', Glassfish сообщает:
Portable JNDI names for EJB CampaignController : [java:global/CoreServer/CampaignController!mvs.api.CampaignControllerRemote, java:global/CoreServer/CampaignController]
Glassfish-specific (Non-portable) JNDI names for EJB CampaignController : [mvs.api.CampaignControllerRemote, mvs.api.CampaignControllerRemote#mvs.api.CampaignControllerRemote]
Я перепробовал все четыре имени, ни одно не сработало. Не может ли приложение получить доступ к компонентам с (только) удаленными интерфейсами?