Два файла EAR, один и тот же объектный менеджер JPA, такой же транзакция => тот же сеанс?

Допустим, у меня есть два приложения, каждое с отдельным файлом EAR, которые вызывают друг друга в рамках одной транзакции JTA. Если оба используют один и тот же entitymanager, Я не могу воплотить такой дизайн в жизнь на C #. Я не могу переопределить свойство Value в W, потому что в базовом классе нет сеттера (и его нет, потому что добавление сеттера к базовому классу означает, что он также «просочится» в R).

Реальность - уродливый обходной путь ( не читать)

Я добавил сеттер в A, который выдает исключение. В WI переопределить сеттер, а в R я ничего не делаю.

Это некрасиво из-за дизайна, потому что сеттер в R является общедоступным и потому что теперь такой код компилируется:

R reader;
reader.Value = 5;

только получатель в базовом классе и добавить сеттер в производный класс?

История

Поскольку всегда есть по крайней мере одна любопытная душа, я объясняю - эти классы являются держателями / менеджерами данных. Класс R является «держателем» динамических данных - он вычисляет значение по заданной формуле (аналогично классу Lazy Eval). Большинство вещей типично для W и R - фильтрация значений, отправка уведомлений и так далее. Единственная разница в том, что в R вы не можете установить значение напрямую, потому что формула односторонняя (похожа на конвертер WPF с определенным только одним методом, Convert).

Решение

Спасибо Марку, я решил эту проблему здесь это код:

  abstract class A {
      public int Value { get { return ... } }
  }

  class R : A { }

  class W : A {
      new public int Value {
          get { return base.Value; }
          set { .... }
      }
  }

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

Спасибо, Марк, за просветление: -).

6
задан greenoldman 15 December 2010 в 08:42
поделиться