Как создать удаленный компонент EJB с помощью Glassfish 4?

Я создаю новый проект EJB с компонентами, которые используются в другом простом проекте. Я использую NetBeans 7.4 с Glassfish 4.0. Вот мой интерфейс и реализация для проекта EJB:

DbBeanInt.java

package com.ejb;

import javax.ejb.Remote;

@Remote
public interface DbBeanInt {
    public void test(String asd);
}

DbBean.java

package com.ejb;

import javax.ejb.*;

@Stateless(name = "DbBean", mappedName="B")
@Remote
public class DbBean implements DbBeanInt{

@Override
public void test(String asd) {
    System.out.println(asd);
}
}

И вот код, где я его вызываю. Я включил в библиотеку этого проекта проект EJB.

package bookstoreclient;

import com.ejb.DbBeanInt;
import javax.ejb.EJB;

public class BookStoreClient {

@EJB
private static DbBeanInt db;

public static void main(String[] args) {
    db.test("Test");  
} 
}

Однако, когда я запускаю это приложение, я получаю:

Exception in thread "main" java.lang.NullPointerException
at bookstoreclient.BookStoreClient.main(BookStoreClient.java:12)

Есть ли что-то еще, что должно быть включено?


person Arnold    schedule 10.12.2014    source источник
comment
Приложение EJB развернуто на сервере Glassfish, второе — как простое java-приложение.   -  person Arnold    schedule 11.12.2014


Ответы (1)


Класс DbBean и интерфейсы DbBeanInt выглядят нормально. но класс BookStoreClient неверен.

вы используете @EJB для «внедрения» прокси-сервера EJB для связи с вашим удаленным EJB. Вы можете вводить только «управляемые компоненты» (а EJB — это управляемый компонент, управляемый контейнером EJB) в «управляемые компоненты». И ваш класс BookStoreClient не является управляемым компонентом, потому что вы запускаете его с помощью метода main().

я создал репозиторий на GitHub, чтобы показать вам рабочий пример для вашего вопроса: https://github.com/StefanHeimberg/stackoverflow-27411885

просто клонируйте его и откройте _27411885 с помощью Netbeans.

внутри этого репозитория вы найдете проект db-ejb с компонентом DBService Bean и интерфейсом DBServiceRemote. существует также DBServiceIT, использующий встроенную стеклянную рыбу для тестирования DBService через локальное представление без интерфейса (@LocalBean).

проект db-client просто удаленно вызывает компонент DBService. не забудьте сначала развернуть ("Выполнить") проект db-ejb с помощью Glassfish.

person StefanHeimberg    schedule 05.02.2015