来自ejb-jar.xml的env-entry为null

时间:2017-11-23 14:13:12

标签: java xml java-ee ejb-3.0 jboss-arquillian

我对java EE有第100个问题。我不明白到底是怎么回事

这是我的EJB

for i in $(seq 1 2); do
  echo "Number $i"
done | while read -r line; do
  ./argtest.sh "$line"
done

这是我的ejb-jar.xml

@Stateless
@LocalBean
@Remote(ItemRemote.class)
public class ItemEJB implements ItemLocal, ItemRemote {

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

    @Resource(name = "currencyEntry")
    private String currency;

    @Resource(name = "changeRateEntry")
    private Float changeRate;

    @Override
    public List<Book> findBooks() {
        TypedQuery<Book> query = em.createNamedQuery("findAllBooks", Book.class);
        return query.getResultList();
    }

    @Override
    public List<CD> findCDs() {
        TypedQuery<CD> query = em.createNamedQuery("findAllCDs", CD.class);
        return query.getResultList();
    }


    public Book createBook(Book book) {
        em.persist(book);
        return book;
    }


    public CD createCD(CD cd) {
        em.persist(cd);
        return cd;
    }

    public void deleteCD(CD cd) {
        em.remove(em.merge(cd));
    }

    public Item convertPrice(Item item){
        item.setPrice(item.getPrice()*changeRate);
        item.setCurrency(currency);
        return item;
    }

}

方法转换价格总是抛出NPE,因为来自xml的值都是Null。 ejb-jar.xml位于src / main / resources。好吗?我花了几个小时仍然不明白发生了什么。

这是基于Aruquillian的单元测试

<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar 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/ejb-jar_3_1.xsd"
         version="3.1">

    <enterprise-beans>
        <session>
            <ejb-name>ItemEJB</ejb-name>
            <local-bean/>
            <ejb-class>org.abondar.experimental.javaeedemo.ejbdemo.ejb.ItemEJB</ejb-class>
            <session-type>Stateless</session-type>
            <transaction-type>Container</transaction-type>
            <env-entry>
                <env-entry-name>currencyEntry</env-entry-name>
                <env-entry-type>java.lang.String</env-entry-type>
                <env-entry-value>Dollars</env-entry-value>
            </env-entry>
            <env-entry>
                <env-entry-name>changeRateEntry</env-entry-name>
                <env-entry-type>java.lang.Float</env-entry-type>
                <env-entry-value>0.90</env-entry-value>
            </env-entry>
        </session>
    </enterprise-beans>
</ejb-jar>

最有可能的单元测试配置错误。 IDEA显示,当我打开课程时,如果点击它,bean会看到该值。

0 个答案:

没有答案