ШВ: Эффективное использование @BypassInterceptors?

Мне было интересно, какой совет может дать мне сообщество по использованию аннотации @BypassInterceptors при программировании с помощью Seam? Я читал о повышении производительности приложения Seam, и в каждой статье обязательно упоминается, что добавление этой аннотации может повысить производительность. У меня вопрос, где его применять? Существуют ли общие правила, которые гласят: «При написании компонента, который выполняет XXX, вы можете безопасно применять @BypassInterceptors»? Например, следует ли применять его к своим классам сущностей? А как насчет DAO? Мне было бы очень любопытно узнать, что делают все остальные, а также какое повышение производительности вы заметили при правильном применении.


person Shadowman    schedule 29.09.2010    source источник
comment
+1, очень интересный вопрос.   -  person Markos Fragkakis    schedule 05.10.2010


Ответы (3)


Если вы уверены, что вам не нужны функции перехватчика, вы можете положиться на аннотацию @BypassInterceptor для отключения перехватчиков. Функциональность включает

И так далее...

Поскольку функциональность двунаправленного действия достигается за счет использования отражения (среда выполнения) - см., Например, этот вопрос, где вы можете понять, сколько накладных расходов на производительность может добавить отражение - этого можно избежать (помимо @BypassInterceptor), используя

• Component.getInstance (‹COMPONENT_NAME_GOES_HERE›)

• геттеры и сеттеры

Если у вас есть

@Name("personManager")
public class PersonManager {

    private @In Person person;

}

<h:inputText value="#{person.name}"/>

Можно вместо @In аннотации

@Name("personManager")
public class PersonManager {

    private Person person;

    public Person getPerson() {return this.person;}
    public void setPerson(Person person) {this.person = person;}

}

Но не забывайте (обратите внимание на его новейший атрибут значения)

<h:inputText value="#{personManager.person.name}"/>
person Arthur Ronald    schedule 30.09.2010

Просто продолжение сообщения Артура.

Как правило, если, например, вы выполняете некоторые вычисления для метода, который не использует какие-либо перехватчики в Seam, то есть: вычисляете некоторые значения, тогда рекомендуется пометить этот метод с помощью @BypassInterceptors.

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

Разумнее оставить это, если вы точно не знаете, что делаете или что делает аннотация.

person Shervin Asgari    schedule 30.09.2010

Обязательная к прочтению статья Дэна Аллена (Seam in Action) по этой теме находится здесь (часть 1) и здесь (часть 2). Он охватывает @BypassInterceptors и многие другие проблемы, связанные с производительностью в приложении Seam, такие как условный рендеринг.

person Markos Fragkakis    schedule 05.10.2010