2017-06-07 5 views
0

Ich versuche, CDI in meiner Anwendung zu arbeiten, aber ich bekomme nur NullPointerExceptions, wenn ich es tue.TomEE CDI @Inject NullPointerException

Wenn der PlaylistService normalerweise instanziiert wird, funktioniert es einwandfrei, aber wenn ich versuche, CDI zu verwenden, ist es nicht mehr.

Der Server kann starten, aber wenn ich beans.xml zu META-INF/und WEB-INF hinzufüge, kann es auch nicht mehr starten.

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 ist optional in Java EE 7. Ändern Sie den Umfang von javaee-api in zur Verfügung gestellt. – fg78nc

Antwort

1

Sie müssen nur eine beans.xml in WEB-INF hinzufügen/

Auch JavaEE-api hat den Umfang zur Verfügung gestellt gewährleisten, sicherzustellen, JPA und jta api von Hibernate-EntityManager transitive Abhängigkeiten ausschließen Ihren Krieg, um sicherzustellen, hat die richtigen Abhängigkeiten und keine in Konflikt stehende API mit dem EE-Server.

Randbemerkung: mit org.apache.tomee: JavaEE-api: 7,0-1: statt javax vorgesehen: JavaEE-api können auch eingebettete Tests machen die Arbeit (openejb oder tomee-embedded)

+0

Das Problem war, dass die von IntelliJ generierte beans.xml wie diese ' CreasolDev