2016-09-23 6 views
0

Glassfish4サーバー上のJavaEEで1秒ごとにDB内のエンティティを作成している実行スレッドに基づいて非常に簡単なアプリケーションを開発しようとしています。EJBを自動タイマーに注入するEJBがヌルを返します

私は永続性を管理するEJBを注入する自動タイマーを使用しています。

タイマーサービスは、次のいずれかです。

@Singleton 
@LocalBean 
@Startup 
public class UpdateEJB { 

    @EJB 
    MeasureEJB measureEjb; 

    @Schedule(second = "*/1", minute = "*", hour = "*", persistent = false) 
    public void doWork() { 

     measureEjb.create(new Measure()); 
    } 
} 

EJBですが:

@Stateless 
public class MeasureEJB { 

    @PersistenceContext(unitName = "smarthomePU") 
    private EntityManager em; 

    public Measure create (Measure _measure) { 
     em.persist(_measure); 
     return _measure; 
    } 

} 

エンティティ

@Entity 
public class Measure implements Serializable { 

    @Id 
    private String time; 

    private int[] temp; 

    private boolean[] water; 

    public int[] getTemp() { 
     return temp; 
    } 

    public void setTemp(int[] temp) { 
     this.temp = temp; 
    } 

    public String getTime() { 
     return time; 
    } 

    public void setTime(String time) { 
     this.time = time; 
    } 

    public boolean[] getWater() { 
     return water; 
    } 

    public void setWater(boolean[] water) { 
     this.water = water; 
    } 

    private static final long serialVersionUID = 1L; 

    public Measure() { 
     super(); 
    } 

    public Measure(int[] _temp, boolean[] _water) { 
     temp = _temp; 
     water = _water; 
     time = ""; 
    } 

} 

しかし、私は中MeasureEJBを使用しようUpdateEJBアプリケーションは、createメソッドでNPEで停止します。私は間違って何をしていますか?

答えて

0

上記のコードの断片から、EntityManagerがどのように注入されているのかわかりませんし、NPEについてのあなたの話はそこにあるかもしれません。

また、豆の状態を保持していない場合は@Singletonを避けてください。デフォルトでは、あなたのの公開void doWork()は自動的に書き込みロックに関連付けられます。

+0

問題はEntityManagerではありません。コードをデバッグすると、変数measureEjbがnullであることがわかります。いずれにしても、エンティティのコードをすぐに追加します – sthor69

関連する問題