Этим мы завершаем обсуждение транзакций COM+ и класса ContextUtil. Давайте перейдем к пулам объектов.

Использование пудов объектов со сборками .NET

Нетрудно сконфигурировать компонент .NET для пула объектов. Для этого необходимо изменить класс с помощью атрибута и реализовать интерфейс в этом классе.

Атрибут ObjectPooling

Атрибутом с помощью которого необходимо изменить класс, является ObjectPooling. Этот атрибут получает четыре аргумента.

1. Аргумент Enabled является первым. Ему должно быть присвоено значение true.

2. Аргумент MinPoolSize определяет минимальное число экземпляров объектов, которое должны поддерживать службы COM+ в пуле объектов класса.

3. Аргумент MaxPoolSize определяет максимальное число экземпляров объектов, которое должны поддерживать службы COM+ в пуле объектов класса.

4. Аргумент CreationTimeOut определяет период времени, в течение которого службы COM+ должны пытаться получить объект из пула, прежде чем вернуть отказ.

Далее следует пример атрибута ObjectPooling со всеми четырьмя аргументами, примененными к классу. Мы расширим этот фрагмент кода в конце данного раздела.

[ObjectPooling (Enabled=True, MinPoolSize=1, MaxPoolSize=100, CreationTimeout=30)]

public class CreditCard:ServicedComponent {

Интерфейс ServicedComponent

Как можно было заметить, класс в примере выше наследует интерфейс ServicedComponent. Все классы .NET, которые используют пулы объектов, должны реализовывать этот интерфейс. ServicedComponent содержит три метода для переопределения.

1. Метод CanBePooled() используется клиентами для определения, что может быть создан пул объектов класса.

2. Метод Activate() вызывается службами COM+ на объекте в пуле перед тем, как этот объект передается новому клиенту.

3. Метод Deactivate(), напарник метода Activate(), вызывается службами COM+, когда объект освобождается клиентом, чтобы вернуть его в пул доступных объектов.

Следующий фрагмент кода показывает класс, сконфигурированный для пула объектов.

[ObjectPooling (Enabled=true, MinPoolSize=1, MaxPoolSize=100, CreationTimeout=30)]

public class CreditCard:ServicedComponent {

 // Этот метод будет вызываться службами COM+ для определения,

 // что объект находится в пуле.

 public override bool CanBePooled() {

  return true; // необходимо вернуть логическое 'true'

 }

 // Этот метод должен вызываться службами COM+, когда объект

 // передается клиенту.

 public override void Activate() {

  // Код инициализации находится здесь.

 }

 // Этот метод будет вызываться службами COM+, когда

 // объект будет возвращаться в пул.

 public override void Deactivate() {

  // Код завершения находится здесь

 }

 // Этот метод будет вызываться клиентом.

 public void PlaceCharge(int OrderInfo, int UserInfo) {

  // код списания средств с кредитной карты находится здесь

 }

}

Как показывает пример, атрибут ObjectPooling и интерфейс ServicedComponent требуются для того, чтобы класс .NET реализовал пул объектов. Также можно заметить, что в отличие от атрибута Transaction атрибут ObjectPooling применяется непосредственно к 'рабочей' сборке .NET, а не к классу прокси, созданному с атрибутом ComEmulate, который был рассмотрен ранее в этой главе.

Использование активизации JIT со сборками .NET

Чтобы сконфигурировать класс .NET для активизации JIT, нужно просто изменить класс с помощью атрибута JustInTimeActivation, задав булево значение true. В данном случае класс CreditCard из предыдущего примера модифицируется для активизации JIT.

[JustInTimeActivation(true)]

public class CreditCard: ServicedComponent {

 // Этот метод будет вызываться клиентом.

 public void PlaceCharge(OrderInfo objOrderInfo, UserInfo objUserInfo) {

  // Код для снятия средств с кредитной карты находится здесь

 }

}

Заключение

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату