KnigkinDom.org» » »📕 Интернет-журнал "Домашняя лаборатория", 2007 №6 - Усманов

Интернет-журнал "Домашняя лаборатория", 2007 №6 - Усманов

Книгу Интернет-журнал "Домашняя лаборатория", 2007 №6 - Усманов читаем онлайн бесплатно полную версию! Чтобы начать читать не надо регистрации. Напомним, что читать онлайн вы можете не только на компьютере, но и на андроид (Android), iPhone и iPad. Приятного чтения!

1 ... 240 241 242 243 244 245 246 247 248 ... 361
Перейти на страницу:

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
<<<IN>>> parameters: (

}

===SPbU.AOP_NET.Account, MyServer, Version=0.0.0.0,

     Culture=neutral, PublicKeyToken=null

ctor

      <<<OUT>>> parameters: {

}

===System.MarshalByRefObject, mscorlib, Version=1.0.3300.0,

     Culture=neutral, PublicKeyToken=b77a5c561934e089

InitializeLifetimeservice

      <<<IN>>> parameters: (

}

===System.MarshalByRefObject, mscorlib, Version=1.0.3300.0,

    Culture=neutral, PublicKeyToken=b77a5c561934e089

InitializeLifetimeservice

         <<<OUT>>> parameters: (

}

===clr: SPbU.AOP_NET.Account, MyServer

Add

      <<<IN>>> parameters: {

sum= 5

'

clientProcessId= 192)

===clr: SPbU.AOP_NET.Account, MyServer

Add

       <<<IN>>> parameters: {

sum= 5

'

clientProcessId= 165)

===clr: SPbU.AOP_NET.Account, MyServer

Add

        <<<OUT>>> parameters: {

}

===clr: SPbU.AOP_NET.Account, MyServer

Add

       <<<OUT>>> parameters: {

}

===clr: SPbU.AOP_NET.Account, MyServer

Add

        <<<IN>>> parameters: {

sum= 5

'

clientProcessId= 192)

===clr: SPbU.AOP_NET.Account, MyServer

Add

         <<<OUT>>> parameters: {

}

Компоненты размещаются в двух контекстах, но в одном домене синхронизации

Закомментируем атрибут Synchronization (), приписанный классу Account. Теперь, просматривая вывод на консоль сервера, можно заметить, что компонент Account размещается в контексте 1, а компоненты Tax и News в контексте 2:

Server is listening

News context = 2 News constructor thread = 9 IsPoolThread = True

Tax context = 2 Tax constructor thread = 9 IsPoolThread = True

Account context = 1 Account constructor thread = 9 IsPoolThread = True

…….

Просматривая файл LogFile видим, что теперь перехватываются вызовы к компонентам Tax и News, поступающие от компонента Account:

===SPbU.AOP_NET.Tax, MyServer, Version=0.0.0.0,

    Culture=neutral, PublicKeyToken=null

ctor

      <<<IN>> parameters: {

}

===SPbU.AOP_NET.Tax, MyServer, Version=0.0.0.0,

     Culture=neutral, PublicKeyToken=null

ctor

      <<<OUT>>> parameters: {

}

===SPbU.AOP_NET.Tax, MyServer, Version=0.0.0.0,

    Culture=neutral, PublicKeyToken=null

Notify

     <<<IN>>> parameters: {

msg= new Account operation: +5)

===SPbU.AOP_NET.Tax, MyServer, Version=0.0.0.0,

    Culture=neutral, PublicKeyToken=null

Notify

}

===SPbU.AOP_NET.Tax, MyServer, Version=0.0.0.0,

    Culture=neutral, PublicKeyToken=null

get_news

    <<<IN>>> parameters: {

}

===SPbU.AOP_NET.Tax, MyServer, Version=0.0.0.0,

   Culture=neutral, PublicKeyToken=null

get_news

    <<<OUT>>> parameters: {

}

===SPbU.AOP_NET.News, MyServer, Version=0.0.).0,

    Culture=neutral, PublicKeyToken=null

Notify

    <<<IN>>> parameters: {

msg= direct notification from Account)

===SPbU.AOP_NET.News, MyServer, Version=0.0.0.0,

    Culture=neutral, PublicKeyToken=null

Notify

    <<<OUT>>> parameters: {

}

В рамках данного эксперимента мы покажем, что оба контекста синхронизации размещаются в одном домене синхронизации. Для этого необходимо показать, что ссылка на свойство синхронизации во втором контексте указывает на свойство синхронизации первого контекста, т. е. оба контекста совместно используют одно свойство синхронизации (одну очередь работ и т. д.).

Внесем в код сервера следующие дополнения:

namespace SPbU.AOP_NET {

……

public class Account: ContextBoundObject, IAccumulator,

      IAudit, IAccumulatorNew{

……

      public Account() {

……

           SynchronizationAttribute syncProperty =

               (SynchronizationAttribute)

                    Thread.CurrentContext.GetProperty {

                      "Synchronization");

            Console.WriteLine {

               "Account syncProperty == Tax syncProperty "+

               Object.ReferenceEquals(syncProperty, _tax.syncProperty));

       }

……

}

……

public class Tax: ContextBoundObject {

……

       private SynchronizationAttribute _syncProperty;

       public Tax() {

…….

             _syncProperty =

                  (SynchronizationAttribute)

                     Thread.CurrentContext.GetProperty {

                        "Synchronization");

……

       }

…….

       internal SynchronizationAttribute syncProperty {

            get { return _syncProperty;}

       }

……

}

…….

Просматривая консоль сервера убеждаемся, что ссылки на свойство синхронизации в обоих контекстах (в контексте, в котором живет компонент Account и в контексте, в котором живут компоненты Tax и News) указывают на один объект — свойство синхронизации домена синхронизации:

Server is listening

News context = 2 News constructor thread = 9 IsPoolThread = True

Tax context = 2 Tax constructor thread = 9 IsPoolThread = True

Account context = 1 Account constructor thread = 9 IsPoolThread = True

Account syncProperty == Tax syncProperty True

…….

Компоненты размещаются в трех контекстах и в двух доменах синхронизации

Заменим атрибут синхронизации, приписанный компоненту News следующей его версией:

[Synchronization(0x00000008)]

Задание данного атрибута означает, что компонент News будет располагаться в новом контексте (3), причем этот контекст образует и новый домен синхронизации. Компоненты Account и Tax должны располагаться в различных контекстах (1 и 2), но эти контексты должны входить в один домен синхронизации.

Для проверки этих утверждений внесем еще несколько дополнений в код сервера:

…….

namespace SPbU.AOP_NET {

……

      public class Tax: ContextBoundObject {

…….

            public Tax() {

…….

                Console.WriteLine {

                   "Tax syncProperty == News syncProperty "+

                  Object.ReferenceEquals(_syncProperty,

                     _news.syncProperty));

……

           }

…….

      }

…….

public class News: ContextBoundObject {

        private SynchronizationAttribute _syncProperty;

        public News() {

             _syncProperty =

                    (SynchronizationAttribute)

                        Thread.CurrentContext.GetProperty {

                               "Synchronization");

……

      }

……

      internal SynchronizationAttribute syncProperty {

             get { return _syncProperty;}

      }

…….

}

Просматривая консоль сервера убеждаемся в том, что компонент News размещается в новом домене синхронизации:

Server is listening

News context = 3 News constructor thread = 9 IsPoolThread = True

Tax syncProperty == News syncProperty False

Tax context = 2 Tax constructor thread = 9 IsPoolThread = True

Account context = 1 Account constructor thread = 9 IsPoolThread = True

Account syncProperty == Tax syncProperty True

…….

И последнее замечание касается файла LogFile. Просматривая его, можно заметить, что теперь перехватываются все вызовы, идущие к компонентам Tах и News, идущие не только от компонента Account, но и от компонента Tах к компоненту News. Это объясняется тем, что все компоненты живут в различных контекстах и все вызовы пересекают границу

1 ... 240 241 242 243 244 245 246 247 248 ... 361
Перейти на страницу:
Отзывы - 0

Прочитали книгу? Предлагаем вам поделится своим отзывом от прочитанного(прослушанного)! Ваш отзыв будет полезен читателям, которые еще только собираются познакомиться с произведением.


Уважаемые читатели, слушатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

  • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
  • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
  • 3. Просьба отказаться от нецензурной лексики.
  • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

Надеемся на Ваше понимание и благоразумие. С уважением, администратор knigkindom.ru.


Партнер

Новые отзывы

  1. Christine Christine26 июнь 01:23 ​​​​Сначала было тежеловта читать, но потом всё изменилось, я с удовольствием прочитала, спасибо за книгу. Я прочитала весь цикл... Опасное влечение - Полина Лоранс
  2. Тамаринда Тамаринда21 июнь 12:33 Редко что-то цепляет, но тут было всё живое, жизненное, чувственное, сильное, читайте, не пожалеете о своём времени...... Хрупкая связь - Ольга Джокер
  3. Гость Марина Гость Марина20 июнь 06:08 Книга очень понравилась, хотя и длинная. Героиня сильная личность. Да и герой не подкачал. ... Странная - Татьяна Александровна Шумкова
Все комметарии
Новое в блоге