2017-06-07 4 views
0

J'essaie de faire fonctionner CDI dans mon application, mais je ne reçois que des exceptions NullPointer lorsque je le fais.TomEE CDI @Inject NullPointerException

Lorsque normalement instancier le playlistService, il fonctionne parfaitement bien, mais quand j'essaie d'utiliser CDI, ce n'est plus le cas.

Le serveur est capable de démarrer, mais lorsque j'ajoute beans.xml à META-INF/et WEB-INF/il ne peut plus démarrer.

PlaylistRESTController.java

import javax.inject.Inject; 
import javax.servlet.http.HttpServletRequest; 
import javax.ws.rs.*; 
import javax.ws.rs.core.*; 

@Path("/api/playlist") 
public class PlaylistRESTController { 

    @Inject 
    PlaylistService playlistService; //This one 

    @GET 
    @Produces(MediaType.APPLICATION_JSON) 
    public Playlist[] getUsersPlaylists(
      @CookieParam("st-session") Cookie session, 
      @Context HttpServletRequest httpServletRequest 
    ) { 
     User user = (User) httpServletRequest.getAttribute("user"); 

     Playlist[] playlist = playlistService.getAllPlaylists(user); 

     return playlist; 
    } 
} 

PlaylistService.java

public class PlaylistService implements IPlaylistService { 

    PlaylistJPA playlistJPA = new PlaylistJPA(); 

    public Playlist[] getAllPlaylists(User owner) { 
     ArrayList<Playlist> playlist = this.playlistJPA.findByOwner(owner); 

     return playlist.toArray(new Playlist[playlist.size()]); 
    } 
} 

pom.xml

<dependencies> 
    <dependency> 
     <groupId>javax</groupId> 
     <artifactId>javaee-api</artifactId> 
     <version>7.0</version> 
    </dependency> 
    <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> 
    <dependency> 
     <groupId>mysql</groupId> 
     <artifactId>mysql-connector-java</artifactId> 
     <version>6.0.6</version> 
     <scope>compile</scope> 
    </dependency> 

    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-entitymanager</artifactId> 
     <version>4.2.6.Final</version> 
    </dependency> 
</dependencies> 

EDIT:
resources/META-INF/persistence.xml

<?xml version="1.0" encoding="UTF-8"?> 

<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xsi:schemaLocation="http://java.sun.com/xml/ns/persistence 
    http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> 
    <persistence-unit 
      name="mysql"> 
     <provider>org.hibernate.ejb.HibernatePersistence</provider> 

     <class> 
      nl.han.dea.domain.Song 
     </class> 
     <class> 
      nl.han.dea.domain.Playlist 
     </class> 
     <class> 
      nl.han.dea.domain.Video 
     </class> 
     <class> 
      nl.han.dea.domain.User 
     </class> 

     <properties> 
      <property name="hibernate.archive.autodetection" value="class"/> 
      <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect"/> 
      <property name="hibernate.connection.driver_class" value="com.mysql.cj.jdbc.Driver"/> 
      <property name="hibernate.connection.url" 
         value="jdbc:mysql://localhost:3306/Spotitube?autoReconnect=true&amp;useSSL=false&amp;serverTimezone=UTC"/> 
      <property name="hibernate.connection.username" value="spotitube"/> 
      <property name="hibernate.connection.password" value="java"/> 
      <property name="hibernate.show_sql" value="true"/> 
      <property name="javax.persistence.sql-load-script-source" value="insert.sql"/> 
      <property name="hibernate.flushMode" value="FLUSH_AUTO"/> 
      <property name="hibernate.hbm2ddl.auto" value="update"/> 
     </properties> 

    </persistence-unit> 
</persistence> 
+0

beans.xml est facultatif dans Java EE 7. Modifier la portée de javaee-api à fourni. – fg78nc

Répondre

1

vous avez juste besoin d'ajouter un beans.xml dans WEB-INF/

Assurez-vous également JavaEE-api a le champ d'application prévu, assurez-vous d'exclure JPA et JTA api de dépendances transitif mise en veille prolongée-EntityManager pour assurer votre guerre a les bonnes dépendances et aucune API conflictuelle avec le serveur EE.

Note latérale: en utilisant org.apache.tomee: JavaEE-api: 7.0-1: fourni au lieu de javax: JavaEE-api peut également faire des tests embarqués de travail (ou OpenEJB embarqué tomee-)

+0

Le problème éventuel était que le fichier beans.xml généré par IntelliJ commençait comme ceci ' CreasolDev