Новое в мире EJB ... Исключение нулевого указателя в клиенте EJB - PullRequest
4 голосов
/ 12 ноября 2010

Я изучаю EJB и пытаюсь выполнить пример Helloworld, приведенный в книге EJB In Action.

Мой сервер приложений - JBoss, я создал файл Jar для класса и интерфейса компонента в нужном каталоге(Я вижу EJB в консоли JMX).

Теперь я создал простой клиент, используя аннотации EJB, но получаю исключение NullPointerException.

Вот мой код клиента.

Код клиента:

package com.client;
import javax.ejb.EJB;
import com.EJB.*;

public class HelloWorldClient {
 @EJB
 private static HelloWorldInterface HelloBean;

 public static void main(String[] args)
 {
  HelloBean.SayHelloWorldInEJB();
 }
}

Класс бобов

package com.EJB;

import javax.ejb.Stateless;

@Stateless
public class HelloWorldBean implements HelloWorldInterface {

 public void SayHelloWorldInEJB() {
  // TODO Auto-generated method stub
  System.out.println("Hello world from the world of EJB");

 }
}

Интерфейс

package com.EJB;
import javax.ejb.Local;;

@Local
public interface HelloWorldInterface {
 public void SayHelloWorldInEJB();
}

Примечание. Я попытался указать интерфейс в качестве удаленного, он все еще не работал.добраться до этой точки.1) Создан файл EJB файлов. 2) Сделан build.xml и развернут EJB.

Не хватает ли у меня файлов конфигурации ???

Ответы [ 2 ]

5 голосов
/ 13 ноября 2010

Теперь я создал простой клиент, используя аннотации EJB, но получаю исключение NullPointerException.

Ваш клиентский код выглядит как Клиент приложения , и предполагается, что такой клиент развернут на сервере приложений и затем выполненв Application Client Container (ACC), чтобы могло произойти внедрение.Для запуска ACC требуется специальная команда сервера приложений.

В следующей вики объясняется использование ACC в JBoss (как упаковать, развернуть и запустить ACC): Как использовать клиент приложения в JBoss-5 .

Если вы не хотите использовать Application Client Container и вместо этого просто запустить класс приложения-клиента с помощью команды java, внедрение не будет возможно, и вам придется выполнить поиск JNDI.

И в обоих случаях вам придется предоставить и использовать удаленный бизнес-интерфейс для вашего компонента.

Ресурсы

Смежные вопросы

4 голосов
/ 13 ноября 2010

Вам нужно будет сделать два изменения:

Заменить внедрение зависимости @EJB поиском JNDI. Внедрение зависимостей не поддерживается для POJO в EJB 3 (хотя и не знаю о EJB 3.1)

Тогда интерфейс должен быть удаленным. Причина в том, что клиент здесь представляет собой отдельную Java-программу - она ​​будет работать в JVM, отличной от JVM веб-приложения.

Как внедрение зависимостей через @EJB, так и наличие интерфейса как @Local должны работать, если клиент был сервлетом на том же сервере.

...