2017-06-07 2 views
0

私は自分のアプリケーションでCDIを動作させようとしていますが、私はNullPointerExceptionsしか取得しません。TomEE CDI @Inject NullPointerException

正常にplaylistServiceをインスタンス化すると、正常に動作しますが、CDIを使用しようとすると、それはもうありません。

サーバーは起動することができますが、beans.xmlをMETA-INF /およびWEB-INF /に追加すると、サーバーはもはや起動できません。

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:
リソース/ 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のある作業埋め込みテストを行うことができorg.apache.tomeeを使用してJava EE 7ではオプションです。javaee-apiのスコープを指定したものに変更します。 – fg78nc

答えて

1

あなたがちょうどまた、あなたの戦争を保証するために、休止状態、EntityManagerの推移的な依存からJPAとJTA APIを除外することを確認し、JavaEEの-APIが提供するスコープを持って確実にWEB-INF/

にbeans.xmlのを追加する必要があります適切な依存関係を持ち、EEサーバーとの矛盾するAPIはありません。

サイド注:のJavaEE-API:7.0から1:代わりのjavaxの提供:のJavaEE-APIはまた、(のOpenEJBまたはtomee内蔵)は

+0

最終的な問題は、IntelliJによって生成されたbeans.xmlがこの ' CreasolDev