2015-10-29 3 views
0

Я пытаюсь использовать диспетчер введенных сущностей для сохранения вывода пакетного задания с использованием java-ee, однако EntityManager всегда равен нулю. Я использую веб-приложение Maven, работающее на стеклянной планете, и планирую работу следующим образом.Injected EntityManager null в пакетном задании java-ee

@Stateless 
public class Scheduler { 

    @Schedule(minute = "*/1", hour = "*") 
    public void runEveryMinute() { 
     JobOperator jobOperator = BatchRuntime.getJobOperator();   
     jobOperator.start("newOrderProcessJob", null);  
    } 
} 

И на мой писатель шаг

@Named 
public class OrderWriter extends AbstractItemWriter { 

    @PersistenceContext() 
    EntityManager em; 

    @Override 
    public void writeItems(List<Object> list){ 

     for (Object p : list) {     
      em.merge(p); 
     } 
    } 
} 

И мой persistence.xml

<?xml version="1.0" encoding="UTF-8"?> 
    <persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"> 
     <persistence-unit name="com.mycompany_mavenproject1_war_1.0-SNAPSHOTPU" transaction-type="JTA"> 
     <jta-data-source>jdbc/directory</jta-data-source> 
     <exclude-unlisted-classes>false</exclude-unlisted-classes> 
     <properties> 
      <property name="javax.persistence.schema-      generation.database.action" value="create"/> 
     </properties>  
    </persistence-unit> 
</persistence> 

Кто-нибудь есть идея, как это исправить?

ответ

0

Я точно не помню правила, но гарантированно сканируется только определенный набор классов и вставлять их с помощью JPA-аннотации, а артефакты партии не включены в этот список.

Таким образом, вы должны были бы сделать что-то еще, как:

EntityManagerFactory emf = Persistence.createEntityManagerFactory("com.mycompany_mavenproject1_war_1.0-SNAPSHOTPU"); 
em = emf.createEntityManager(); 

Или вы могли бы сделать:

@Named 
@PersistenceContext(unitName = "com.mycompany_mavenproject1_war_1.0-SNAPSHOTPU", name = "persistence/em") 
public class OrderWriter extends AbstractItemWriter { 

    EntityManager em; 

    @Override 
    public void open(Serializable checkpoint) { 
     try { 
      InitialContext ic = new InitialContext(); 
      em = (EntityManager) ic.lookup("java:comp/env/persistence/em"); 
     } catch (NamingException e) { 
      throw new RuntimeException(e); 
     } 
    } 

    @Override 
    public void writeItems(List<Object> list){ 

     for (Object p : list) {     
      em.merge(p); 
     } 
    } 
} 

с web.xml:

<persistence-context-ref> 
      <persistence-context-ref-name>persistence/em</persistence-context-ref-name> 
      <persistence-unit-name>com.mycompany_mavenproject1_war_1.0-SNAPSHOTPU</persistence-unit-name> 
    </persistence-context-ref> 

+0

Спасибо Скотту, что ваш первый бит кода сработал. – Pat0402

+0

Конечно, рад помочь. –

Смежные вопросы