Я пытаюсь настроить стек веб-приложений на основе JBoss AS7 для небольших исследовательских прототипов и студенческих проектов, который отвечает следующим требованиям:
Я хочу использовать связанные с AJAX области видимости, такие как ViewScope, или, возможно, (View)AccessScope, как в MyFaces Orchestra, для моих управляемых компонентов в сочетании с компонентами PrimeFaces.
Сохранение на основе JPA должно быть довольно простым, без необходимости иметь дело с шаблоном OpenSessionInView и т. Д. Основная проблема, с которой я сталкиваюсь с JPA2, — это ужасное LazyInitializationException, особенно в вызовах AJAX. Мне не требуется ручное управление разговорами.
Я хочу использовать как можно меньше зависимостей, поэтому в основном полагаюсь на то, что поставляется с JBoss AS7.
Прямо сейчас я создал проект со следующими (в основном предоставленными) зависимостями Maven:
- КДИ
- спящий режим-2.0-API
- jboss-ejb-api_3.1_spec
- jboss-jsf-api_2.1_spec
- jboss-аннотации-api_1.1_spec
- PrimeFaces 3
Это выглядит довольно тонким до сих пор. Чего не хватает, так это поддержки дополнительных областей, специфичных для JSF, и того, что я всегда получаю исключение LazyInitializationException при переборе коллекций на странице JSF. Прямо сейчас мои сервисные классы для постоянства выглядят так:
import javax.ejb.Stateful;
import javax.enterprise.context.RequestScoped;
@Stateful @RequestScoped
public class TestEntityService implements Serializable {
@PersistenceContext(type=PersistenceContextType.EXTENDED)
private EntityManager entityManager;
// ... some methods working with the entityManager ...
}
И мой bean-компонент ResourceFactory:
public class ResourceFactory {
@Produces @PersistenceUnit
private EntityManagerFactory entityManagerFactory;
}
Я безуспешно пробовал комбинации с @Named
вместо @Stateful
или @SessionScoped
вместо @RequestScoped
. Тем не менее, я обнаружил, что добавление модулей Seam 3 Persistence, Solder & Faces, по-видимому, решает большинство моих проблем, но это добавляет массу новых зависимостей в мой проект (например, безопасность швов, красивые лица, слюни, время joda и другие зависимости). ).
Мои вопросы:
Будут ли EJB чем-то полезны по сравнению с другими? LazyInitializationException? Или я на самом деле уже использую здесь EJB из-за аннотации
@Stateful
? Я взял это из примера приложения jboss-as, но меня совершенно смущают различия между всеми этими аннотациями@ManagedBean
,@Named
,@Stateful
,@LocalBean
... все, что я знаю, это то, что мне как-то нужно привязать продолжительность жизни моих менеджеров объектов к область действия bean-компонента службы.Кто-нибудь знает другие простые способы обойти эту проблему? Использование извлечения EAGER не вариант, так как это работает только в том случае, если на объект не более одной коллекции...
Я только что прочитал об Apache CODI, который, похоже, является преемником CDI MyFaces Orchestra. Это лучшая альтернатива Seam Faces? Насколько я вижу, он предлагает ViewScope и ViewAccessScope, но ничего в отношении управления транзакциями.
Было бы здорово, если бы кто-то с большим опытом в этой области мог пролить свет на это - в настоящее время я немного сбит с толку, потому что существует так много библиотек, решающих аналогичные проблемы, хотя, по-видимому, они несовместимы друг с другом (см. например здесь). Спасибо!
Set
вместоList
для коллекции. IIRC это как-то связано с порядком элементов. Но попробовать стоит ;-) - person Dominik Sandjaja   schedule 10.07.2012