Почему мы должны добавить @Stateless к сущности в проекте Maven?

Когда я создал свой первый пустой Entreprise Application с Maven, У меня была эта ошибка, даже когда я создал Entity:

    Invalid ejb jar it contains zero ejb
Note: 
1. A valid ejb jar requires at least one session, entity (1.x/2.x style), or message-driven bean. 
2. EJB3+ entity beans (@Entity) are POJOs and please package them as library jar. 
3. If the jar file contains valid EJBs which are annotated with EJB component level annotations (@Stateless, @Stateful, @MessageDriven, @Singleton), please check server.log to see whether the annotations were processed properly.

Entity.java:

package test;

import java.io.Serializable;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;


@javax.persistence.Entity
public class Entity implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
}

Тогда я обнаружил, что решение этой проблемы заключается в добавлении @Stateless в `Entity Class: пакетный тест;

import java.io.Serializable;
import javax.ejb.Stateless;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Stateless
@javax.persistence.Entity
public class Entity implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
}

Это прекрасно работает, но теперь я хочу знать, почему я должен был добавить эту аннотацию к Entity работать нормально?

Подробности конфигурации:

  • Netbeans 8.1
  • Glassfish 4.1.1
  • pgAdmin III
  • Maven 3.5

Модуль EAR имеет подключаемый модуль maven-ear-plugin следующим образом:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-ear-plugin</artifactId>
    <version>2.6</version>
    <configuration>
        <version>6</version>
        <defaultLibBundleDir>lib</defaultLibBundleDir>
    </configuration>
</plugin>

1 ответ

Вполне возможно, что наличие этой аннотации @Stateless вызовет странные вещи во время выполнения, так что вы должны удалить это.

Так как ваш полученный jar содержит ноль EJB, его тип упаковки должен быть изменен с ejb в jar,

Убедитесь, что ваш maven-ear-plugin выглядит примерно так:

        <plugin>
            <artifactId>maven-ear-plugin</artifactId>
            <version>2.10.1</version>
            <configuration>
                <version>7</version>
                <defaultLibBundleDir>lib</defaultLibBundleDir>
                <modules>
                    <!-- no ejb module -->
                    <webModule>
                       ...
                    </webModule>
                </modules>
            </configuration>
        </plugin>

и ваше приложение должно развернуться правильно.

Более того, поскольку вы используете GlassFish 4.x, вы можете вообще отказаться от "корпоративного приложения" и просто поместить все в файл WAR, который затем можно будет развернуть самостоятельно.

Вы даже можете добавить EJB в WAR позже, если хотите.

В наши дни вы будете использовать EAR только когда работаете над древним монолитом. Сделайте вашу сборку настолько сложной, насколько это необходимо.

Другие вопросы по тегам