2017-07-18 3 views
0

Quand je crée mon premier vide Entreprise Application avec Maven, j'ai eu cette erreur, même quand je créé un Entity:Pourquoi devrions-nous ajouter @Stateless à une entité dans un projet Maven?

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; 
} 

Ensuite, je trouve que la solution à ce Le problème consiste à ajouter @Stateless au test `` Entity Class: package '';

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; 
} 

Il fonctionne très bien, mais maintenant je veux savoir pourquoi je devais ajouter cette annotation à l'Entity fonctionner correctement?

Les détails de configuration sont les suivants:

  • Netbeans 8.1
  • Glassfish 4.1.1
  • pgAdmin III
  • Maven 3,5

Le module d'oreille a la maven-ear-plugin configuré comme suit:

<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> 
+0

Votre «application d'entreprise» contient-elle uniquement le fichier WAR? –

+0

@SteveC Oui, il fait –

Répondre

0

Il est possible que la présence de cette annotation @Stateless provoque des choses bizarres au moment de l'exécution, donc vous devriez supprimer cela.

Comme votre jar résultant contient zéro EJB, son type d'empaquetage doit être modifié de ejb à jar.

Assurez-vous que votre maven-plugin-oreille ressemble à quelque chose comme:

 <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> 

et votre application doit déployer correctement. En outre, comme vous utilisez GlassFish 4.x, vous pouvez vous passer entièrement de "l'application d'entreprise" et simplement mettre tout dans votre fichier WAR qui peut ensuite être déployé seul.

Vous pouvez même ajouter des EJB au WAR plus tard si vous le souhaitez.

De nos jours, vous n'utilisez un EAR que lorsque vous travaillez sur un ancien monolithe. Rendez votre construction aussi compliquée que nécessaire.

+0

ceci est mon "oreille fichier pom": ' 4.0.0 BookTest BookTest 1.0 pom BookTest BookTest-oreille BookTest-web BookTest-ejb ' Que dois-je supprimer? –

+0

C'est votre pom parent, pas votre poth BookTest-oreille. –

+0

Excusez-moi, ce qu'il est: ' org.apache.maven.plugins maven-plugin-compilateur 2.3.2 \t org.apache.maven.plugins maven-plugin-oreille 2,6 lib ' –