2017-06-16 1 views
0

J'essaie d'imprimer le nombre de lignes d'une requête incluse dans un référentiel. Voici le référentiel:Impossible de trouver EntityManager Apache Deltaspike

@Repository 
public interface TagRepository extends EntityRepository<Tag, Long> { 

    /** 
    * @param // 
    * @return all Tag matched 
    */ 
    @Query("SELECT * FROM Tag") //TESTED 
    List<Tag> findByDefault(); 
} 

Voici mon contrôleur:

@Named 
@ViewScoped 
public class ControllerTest implements Serializable { 

/** 
* 
*/ 
    private static final long serialVersionUID = 1L; 
    @Inject 
    private TagRepository tagRepository; 

    public ControllerTest() 
    { 
     super(); 
    } 

    public Integer compte() 
    { 
     return tagRepository.findByDefault().size(); 
    } 

    public String essai() 
    { 
     String message = "Hello World !"; 
     return message; 
    } 
} 

Voici mon fichier * .xhtml:

<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<ui:composition xmlns="http://www.w3.org/1999/xhtml" 
xmlns:ui="http://java.sun.com/jsf/facelets" 
xmlns:f="http://java.sun.com/jsf/core" 
xmlns:ds="http://deltaspike.apache.org/jsf" 
xmlns:h="http://java.sun.com/jsf/html" 
xmlns:rich="http://richfaces.org/rich" template="/layout/template.xhtml" 
xmlns:a4j="http://richfaces.org/a4j"> 

<ui:define name="body"> 
    <rich:collapsiblePanel switchType="client" opened="false" label="Updates version 2.2.7"> 
      <h:outputText 
       value="#{controllerTest.compte()}">   
      </h:outputText> 
      <h:outputText 
       value="#{controllerTest.essai()}">   
      </h:outputText> 
      <h:outputText 
       value="Hello world !">   
      </h:outputText> 
    </rich:collapsiblePanel> 
</ui:define> 

La mise en page fonctionne parfaitement avec le méthode essai() mais quand j'utilise la méthode compte():

javax.servlet.ServletException: Exception calling Repository: [Repository=class repositories.TagRepository$$DSPartialBeanProxy,method=findByDefault],exception=class java.lang.IllegalStateException,message=Could not find EntityManager with default qualifier. 

Je pensais qu'Apache Deltaspike était capable de gérer les beans par son propre avec des annotations. La question est: D'où provient ce numéro? Est-ce mon référentiel? Ai-je manqué quelque chose ? J'ai encore googlé celui-ci mais rien pour Apache Deltaspike. J'utilise Wildfly 10.0.0, Hibernate 5.4.1, Eclipse Neon, RichFaces 4.X, JSF 2.X et Apache Deltaspike 1.7.2.

Merci d'avance pour vos réponses.

Répondre

2

DeltaSpike nécessite un EntityManager exposé via un producteur CDI. Par exemple:

public class EntityManagerProducer { 

    @PersistenceUnit 
    private EntityManagerFactory emf; 

    @Produces 
    public EntityManager create() { 
     return emf.createEntityManager(); 
    } 

    public void close(@Disposes EntityManager em) { 
     if (em.isOpen()) { 
      em.close(); 
     } 
    } 
} 

Vous pouvez trouver plus de documentation ici: https://deltaspike.apache.org/documentation/data.html

+0

Enfin je n'ai pas besoin d'un EntityManager. C'était un conflit entre mes dépendances. Les portées fournissent des beans automatiquement. Merci beaucoup ! – rbcvlr