2017-04-17 10 views
1

EJB를 사용하여 목록을 채우려는 배치도에 문제가 있습니다. JSR-352 Batchlet ejb nullPointerException

나는이 프로젝트를 시작

, 글래스 피쉬 플래그 오류 :

@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

글래스 피시 버전은 내 batchlet의 코드는 4.1.1

입니다 디버그에서 응용 프로그램을 검사하고 nodeEJB를 검사하면 항상 null 값을 유지합니다.

내 배치 표에 EJB를 어떻게 사용할 수 있습니까?

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 당신의 도움이

Ersch

편집에 대한

감사합니다 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

당신은 빈 이름 (클래스 명)으로 JSL에서 이슈를 참조 할 필요가있다.

그래서 당신은한다 : 당신의 batchlet에 @Named (기본값) 값과 일치

<batchlet ref="getPingStatusBatchlet"/>

합니다.

Glassfish에서 일괄 처리 아티팩트를 관리되는 bean으로로드하고 CDI 엔진에서 다른 bean을 주입하게하려면이 항목이 필요합니다.

더 많은 정보 : 완전성을 위해, 나는 당신이 이미 돌 보았던 것을 언급 할 것이지만, 나중에 보게 될 다른 누군가에게는 없을 것입니다.

또한 일} 처리 아티팩트가 관리 Bean으로 발견되었는지 확인해야합니다. 관리 Bean은 1.0 레벨 Bean.xml을 사용하여 관리합니다. 최신 레벨의 CDI에서는 빈 발견 모드 = all을 사용할 수 있습니다.이 모드는 사용자가 보유하고있는 beans.xml과 동일한 것으로, @Dependent과 같이 일괄 처리 아티팩트에 "bean-annotation"을 추가 할 수 있습니다.

+0

작동 중! 도와 줘서 고마워. @ 스캇 커츠 – Ersch