2010-04-04 5 views
0

Вопрос о продолжении вопроса (struts 2 bean is not created) Я использую struts2 + toplink в моем очень простом веб-приложении под Tomcat. На странице я хотел бы использовать тег итерации. Вот почему я объявил какой-то завод (SomeFactory), который разрешает сбор сущностей (Entity). за статью: http://download-uk.oracle.com/docs/cd/B32110_01/web.1013/b28221/usclient005.htm#CIHCEHHG единственное, что мне нужно, это заявление:Почему инъекция JPA не работает на @PersistentUnit

@PersistenceContext(unitName="name_in_persistence_xml") 
public class SomeFactory 
{ 
    @PersistenceUnit(unitName="name_in_persistence_xml") 
    EntityManagerFactory emf; 

    public EntityManager getEntityManager() { 
     assert(emf != null); //HERE every time it is null 
     return emf.createEntityManager(); 
    } 
    public Collection<Entity> getAll() 
    { 
     return getEntityManager().createNamedQuery("Entity.findAll").getResultList(); 
} 
} 

Что не так? Может быть, я пропустил что-то в web.xml? Как выполнить предварительную инициализацию для веб-приложения, чтобы разрешить инъекцию?

ответ

0

Вы не получите ничего, которое вводит Tomcat, который не является контейнером Java EE (и даже с контейнером Java EE 5, инъекция работает только для управляемых компонентов, таких как сервлеты, фильтры, слушатели, EJB, конечные точки веб-сервиса. .). Так что вам придется создать EntityManagerFactory вручную (обычно в сервлет или вспомогательный класс) и получить EntityManager от него:

EntityManagerFactory emf = Persistence.createEntityManagerFactory(PU_NAME); 
EntityManager entityManager = emf.createEntityManager(); 

Обратите внимание, что создание EntityManagerFactory является дорогостоящей операцией и не должно быть сделано для каждого запроса , Однако создать EntityManager нет, и вы должны получить по одному для каждого потока. Но в вашем случае я бы предложил использовать struts2-persistenceplugin, чтобы справиться с этим.

Спасибо, но кажется [...] что Java EE не является обязательным для использования инъекций [...], Spring приносит для этого необходимый движок.

Действительно. Но вы написали «NO spring at all» в вашем другом вопросе, и вы не указали ни одну деталь, которая могла бы обеспечить инъекцию из коробки. В любом случае, проверьте struts2-persistenceplugin, этого может быть достаточно для ваших нужд.

+0

Спасибо, но кажется (я имею ввиду «кажется», так как я не знаю об этом), что Java EE не является обязательным для использования инъекций. Глядя на образец http://struts.apache.org/2.x/docs/struts-2-spring-2-jpa-ajax.html - Spring приносит для этого необходимый движок. Так вы могли бы объяснить: могу ли я использовать xwork (уже часть struts2) для внедрения инъекции так же, как весна? – Dewfy

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