Почему мы должны добавить @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 только когда работаете над древним монолитом. Сделайте вашу сборку настолько сложной, насколько это необходимо.