При вызове
Component.getInstance(UserHome.class, ScopeType.METHOD);
Внутреннее поведение шва заключается в вызове
Object result = Contexts.lookupInStatefulContexts(name);
API lookupInStatefulContexts говорит:
Поиск именованного атрибута во всех контекстах, в следующем порядке: метод, событие, страница, разговор, сеанс, бизнес-процесс, приложение.
Так как ваш ScopeType.METHOD не содержит ваш компонент UserHome.class, поиск продолжается до полученияего область (StypeType.CONVERSATION, верно?)
ОБНОВЛЕНИЕ
У меня сложилось впечатление, что если вы укажете ScopeType для , то получите метод getInstance.сможет создать объект в этой области
Если с целевым компонентом не связана требуемая область, метод getInstance не создает компонент в этой области ,Вместо этого он выполняет иерархический поиск с использованием Contexts.lookupInStatefulContexts, пока не получит некоторую назначенную область действия
Если вы хотите, чтобы компоненту можно было назначить более одной области действия, вы должны сделать его с помощью @Role.(@Roles) аннотация
@Name("user")
@Scope(ScopeType.EVENT)
@Role(name="loggedUser", scope=ScopeType.SESSION)
public class User { ... }
Таким образом, вы указываете желаемую область действия
Component.getInstance(User.class, ScopeType.EVENT);
или
Component.getInstance(User.class, ScopeType.SESSION);
Помните, что Seam выполняет поиск по полю / свойствуимя
private @In User user; // Take ScopeType.EVENT as scope
private @In User loggedUser; // Take ScopeType.SESSION as scope