#java #web-services #netbeans #timer #ejb
#java #веб-сервисы #netbeans #таймер #ejb
Вопрос:
Я пытаюсь использовать службу таймера EJB, у меня есть класс с именем TimerBean, который содержит методы для планирования таймера и обработки времени ожидания, это реализует TimerBeanRemote как класс интерфейса.
В другом сеансовом компоненте у меня есть следующее:
TimerBeanRemote service = (TimerBeanRemote) new InitialContext().lookup("TimerBean/remote");
Когда я пытаюсь запустить его на сервере, я получаю сообщение об ошибке:
javax.именование.Исключение NamingException: не удалось выполнить поиск ‘TimerBean / remote’ в SerialContext [Корневым исключением является javax.naming.Исключение NameNotFoundException: TimerBean]
Есть идеи относительно того, почему он не может ее найти? Спасибо!
Комментарии:
1. Какой сервер приложений вы используете? Похоже, проблема с вашим именем JNDI. Вы можете подтвердить правильное имя в консоли администратора или журнале сервера во время запуска.
2. Спасибо за ответ, я использую glassfish. Есть ли ссылка на какой-нибудь учебник, который показывает мне, как настроить этот материал JNDI? Извините, что я новичок в этом!
Ответ №1:
Исходя из ваших комментариев — если вы пытаетесь получить доступ TimerBeanRemote
к одному и тому же контейнеру, вы можете внедрить @Remote
ejb в свой сервлет или вспомогательный компонент JSF, иначе вы можете найти свой EJB с помощью поиска JNDI.
Предположим, что ваш TimerBean равен: com.mypackage.timer.TimerBeanRemote
тогда, согласно приведенному выше объяснению, вы можете либо ввести, либо выполнить поиск:
-
Внедрение
public class MyServlet ...{@EJB
com.mypackage.timer.TimerBeanRemote timerBean;
}
-
Поиск в JNDI:
Properties props = new Properties();
props.setProperty(Context.INITIAL_CONTEXT_FACTORY, "com.sun.enterprise.naming.SerialInitContextFactory");
String[] serverDetails = server.split(":");
props.setProperty("org.omg.CORBA.ORBInitialHost", MyHost);
props.setProperty("org.omg.CORBA.ORBInitialPort", MyPort);
InitialContext ic = new InitialContext(props);<br>
TimerBeanRemote timerBean = (TimerBeanRemote)ic.lookup("com.mypackage.timer.TimerBeanRemote");
Вы можете прочитать следующие статьи для получения дополнительной информации:http://download.oracle.com/javaee/1.4/tutorial/doc/Session5.html
http://www.javabeat.net/articles/3-ejb-30-timer-services-an-overview-1.html