Проблема с развертыванием запланированного EJB на сервере Glassfish - PullRequest
0 голосов
/ 30 августа 2011

У меня странная (?) Проблема с EJB, который я хочу развернуть на своем сервере приложений Glassfish 3.1.

У меня есть этот компонент, который должен постоянно выполняться в Glassfish с использованием аннотации @Schedule.Это работало хорошо для меня, пока я не добавил некоторый код в EJB, обращающийся к базе данных.

@Stateless
public class MyBean implements MyBeanLocal {

    @Schedule(second = "*", minute = "*", hour = "*")
    public void initiateProcess() {

        MyCoordinator mc = new MyCoordinatorImpl();
        List<Entity> entities = mc.methodAccessingDB();
    }
}

Это мой EJB, который выполняется каждую секунду.Как я сказал выше, я могу развернуть этот EJB, и он успешно выполнится, если я не вызову ac.methodAccessingDB().Это означает, что я даже не могу развернуть его на Glassfish.Glassfish говорит мне

Недопустимый ejb jar [...]: он содержит ноль ejb.Примечание: 1. Для действительного ejb jar требуется как минимум один сеанс, объект (стиль 1.x / 2.x) или управляемый сообщениями компонент.2. EJB3 + объектные бины (@Entity) являются POJO, и, пожалуйста, упакуйте их как библиотечный jar.3. Если файл JAR содержит действительные EJB-компоненты, которые аннотированы аннотациями уровня компонентов EJB (@Stateless, @Stateful, @MessageDriven, @Singleton), пожалуйста, проверьте server.log, чтобы увидеть, были ли аннотации обработаны правильно.для получения более подробной информации.

Если я просто напишу List<Entity> entities = null; вместо List<Entity> entities = ac.methodAccessingDB();, я могу развернуть его, и он будет работать нормально.

1 Ответ

1 голос
/ 31 августа 2011

ОК, теперь я нашел решение этой проблемы. EJB не может найти классы в развернутой версии. Решением было упаковать все в проект ear . Я использую Maven, поэтому я создал в конце 3 проекта.

  • один для EJB <packaging>ejb</packaging>
  • один для EAR <packaging>ear</packaging>
  • и третий родительский проект, который объединяет оба других проекта как <module>.

Затем я развернул упакованное ухо на Glassfish, таймер запустился, и все было там.

...