Как заставить Intersystems Caché использовать новый скомпилированный класс вместо старого? - PullRequest
3 голосов
/ 27 января 2009

У меня проблемы с загрузкой и компиляцией новой версии существующих классов. В то время, когда они загружены, на них нет никаких ссылок. Класс "Test.Extended" расширяет класс "Test.Base". Класс «Extended» вызывает ClassMethod для класса «Base». Проблема заключается в том, что даже после загрузки и выполнения принудительной компиляции в обоих классах вызываемый метод «Base» ClassMethod является , а не методом нового скомпилированного класса, но более старой версией этого запись в консоль).

Для компиляции обоих я использую следующие команды из терминала (f: означает силу, c: означает компиляцию во время загрузки):

NAMESPACE>w $system.OBJ.Load("C:\Test.Base.cls.xml","fc")

Load started on 01/27/2009 10:10:34
Loading file C:\Test.Base.cls.xml as xml
Imported class: Test.Base
Compiling class Test.Base ..................
Compiling routine Test.Base.1
Load finished successfully.
1

NAMESPACE>w $system.OBJ.Load("C:\Test.Extended.cls.xml","fc")

Load started on 01/27/2009 10:10:34
Loading file C:\Test.Extended.cls.xml as xml
Imported class: Test.Extended
Compiling class Test.Extended ..................
Compiling routine Test.Extended.1
Compiling routine Test.Extended.2
Load finished successfully.
1

Нам нужно, чтобы эти два файла автоматически загружались и компилировались системой, но мы не можем этого сделать, потому что система продолжает использовать более старую версию. Кто-нибудь знает, как заставить Intersystems Caché использовать последнюю версию скомпилированных классов?

Спасибо, Луис

1 Ответ

1 голос
/ 11 марта 2009

Вот пара вещей, которые нужно попробовать:

Вместо загрузки / компиляции каждого класса отдельно, загружайте оба без компиляции, а затем компилируйте оба сразу.

Как это:

W $SYSTEM.OBJ.Load("C:\Test.Base.cls.xml")
W $SYSTEM.OBJ.Load("C:\Test.Extended.cls.xml")
W $SYSTEM.OBJ.CompileList("Test.Base.cls,Test.Extended.cls","ckf")

Флаг "k" указывает компилятору сохранять сгенерированный источник для классов (файлы .INT). Это позволит вам увидеть, что на самом деле генерирует Cache (в Studio: View-> View Other Code). Ваши методы скомпилированы в теги с префиксом "z", поэтому метод ABC становится тегом zABC. В скомпилированном источнике также есть отметка времени, которая может подтвердить, что он действительно что-то сделал.

Флаг "b" тоже может помочь. (Включите подклассы).

...