Как создать Remote EJB Bean с помощью Glassfish 4?
Я создаю новый EJB-проект с bean-компонентами, которые используются в другом простом проекте. Я использую 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)
Есть ли что-то еще, что должно быть включено?
1 ответ
Класс DbBean и интерфейсы DbBeanInt выглядят нормально. но класс BookStoreClient не является правильным.
вы используете @EJB для "внедрения" прокси-сервера EJB для связи с вашим удаленным EJB. В "Управляемые бины" можно вводить только "Управляемые компоненты" (а EJB - это управляемый компонент, управляемый контейнером EJB). И ваш класс BookStoreClient не является управляемым компонентом, потому что вы запускаете его с помощью метода main().
я создал репозиторий на GitHub, чтобы показать вам рабочий пример для вашего вопроса: https://github.com/StefanHeimberg/stackru-27411885
просто клонируйте его и откройте _27411885 с Netbeans.
внутри этого репозитория вы найдете проект db-ejb с компонентом DBService и интерфейсом DBServiceRemote. также существует DBServiceIT, в котором используется встроенная стеклянная рыба для тестирования DBService в локальном представлении без интерфейса (@LocalBean).
проект db-client просто вызывает компонент DBService удаленно. Обязательно сначала разверните ("Run") проект db-ejb с помощью glassfish.