2017-04-17 12 views
1

リストを作成するためにEJBを使用するバッチレットに問題があります。 JSR-352バッチレットejb nullPointerException

私はプロジェクトを開始

、GlassFishのフラグエラー:

@Named 
public class getPingStatusBatchlet extends AbstractBatchlet { 


    private static GetPingStatus gps = new GetPingStatus(); 
    private List<Node> nodes = null; 
    @EJB 
    private NodeFacade nodeEJB; 
    @Override 
    public String process() throws NamingException { 

     nodes = nodeEJB.findAll(); 

     for (Node item : nodes) { 
      gps.getPingStatus(item.getIpv4()); 
     } 
     return "COMPLETED"; 
    } 

    @Override 
    public void stop() throws Exception { 
     throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
    } 

} 

私が実行しようとした:

Caught exception executing step: com.ibm.jbatch.container.exception.BatchContainerRuntimeException: java.lang.NullPointerException

Glassfishのバージョンは、私のbatchletのコードは4.1.1

ですアプリケーションをデバッグしてnodeEJBを検査すると、常にnull値が保持されます。

私のバッチレットに私のEJBをどう使うことができますか?あなたの助けのための

おかげ

Ersch

EDIT:

NodeFacadeコード:

@Stateless 
public class NodeFacade extends AbstractFacade<Node> { 

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

    @Override 
    protected EntityManager getEntityManager() { 
     return em; 
    } 

    public NodeFacade() { 
     super(Node.class); 
    } 

} 

beans.xmlの:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_0.xsd"/> 

getNetworkStatusB atch.xml:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<job version="1.0" id="getNetworkStatusBatch" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://www.oracle.com/webfolder/technetwork/jsc/xml/ns/javaee/jobXML_1_0.xsd" xmlns="http://xmlns.jcp.org/xml/ns/javaee" > 
    <step id="getNetworkStatusBatchlet"> 
     <batchlet ref="com.powwo.app.batchlet.getPingStatusBatchlet"/> 
    </step> 
</job> 

myBackgroundJobManager.java:

@Singleton 
@Startup 
public class BackgroundJobManager { 

    @Schedule(minute = "*", hour = "*", second = "*/10", persistent = false) 
    public void myBackgroundJobManager() { 
     BatchRuntime.getJobOperator().start("getNetworkStatusBatch", null); 
    } 

} 
+1

NodeFacade.javaの内容を投稿してください。 – D00de

+0

こんにちは、私は投稿を追加しました。 – Ersch

+0

注入され、nullに評価されません。あなたのプロジェクトをgithubに投稿できますか?どのGlassfishバージョンを使用していますか? – D00de

答えて

1

あなたは、Bean名(いないクラス名)でJSLからアーティファクトを参照する必要があります。

だからあなたが持っている必要があります:あなたのbatchletに@Named(デフォルト)値と一致する

<batchlet ref="getPingStatusBatchlet"/>

を。

は、管理対象BeanとしてGlassfishの中で、あなたのバッチアーティファクトをロードするためにこれを必要とし、CDIエンジンは他のBeanの注入を行っています。

詳細情報:ちょうど完全性について 、私はすでにの世話をしていたが、他の誰かが後で見ていることは持っていないかもしれない何かを言及します。

また、バッチアーティファクトは、あなたは1.0レベルのbeans.xmlのを使用しての世話をしてきた管理対象Beanとして発見されていることを確認する必要があります。 CDIのそれ以降のレベルでは、Bean発見モード= allを使用することができます。これは、あなたが持っているbeans.xmlと同じものです。@Dependentのようなバッチアーティファクトに「bean-annotation」を追加します。

+0

それは働いている!あなたの助けてくれてありがとう@Scott Kurz – Ersch

関連する問題