Ошибка службы таймера EJB

#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 тогда, согласно приведенному выше объяснению, вы можете либо ввести, либо выполнить поиск:

  1. Внедрение

    public class MyServlet ...{

    @EJB
    com.mypackage.timer.TimerBeanRemote timerBean;
    }

  2. Поиск в 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