|
Передача объекта в job
|
|||
---|---|---|---|
#18+
Задача: при вызове веб-сервиса, сделать в фоне вызов еще одного сервиса (передав ему на вход объект, полученный от первого сервиса). Делаю так: Method requestOne(object As %XML.Adaptor) As %XML.Adaptor [ WebMethod ] { j ##class(asyncsoap.Processing).requestTwo(object) ... } И класс, который должен быть отдельным потоком, по моим расчетам: Class asyncsoap.Processing Extends %RegisteredObject { ClassMethod requestTwo(object As %XML.Adaptor) { ... /// Вызов другого сервиса } Проблема в том, что при любом обращении к свойствам переданного объекта, код дальше не идет (возможно он падает и я не знаю как посмотреть ошибку). ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2013, 10:24 |
|
Передача объекта в job
|
|||
---|---|---|---|
#18+
coder1cv8передав ему на вход объект Но в Каше нет объектов... Есть классы и экземпляры классов... Что есть "объект" в твоем случае? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2013, 10:32 |
|
Передача объекта в job
|
|||
---|---|---|---|
#18+
coder1cv8, http://docs.intersystems.com/cache20131/csp/docbook/DocBook.UI.Page.cls?KEY=RCOS_cjob > Since jobbed processes have separate memory partitions, they do not share a common local variable environment with the process that created them or with each other. When you start a jobbed process, you can use parameter passing (routine-params) to pass values from the current process to the jobbed process. т.е. у нового процесса нет объекта, по передаваемой объектной ссылке, что означает невозможность передачи объектов в качестве параметров. Для выхода из этой ситуации можно использовать хранимый класс, в который упаковывать передаваемый объект и передавать в job id этого сохраненного объекта, а вызываемый метод должен открыть объект по его идентификатору и распаковать передаваемый объект. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2013, 10:38 |
|
Передача объекта в job
|
|||
---|---|---|---|
#18+
krvsa , э-э-э... ну экземпляр класса, если такая терминология привычней. D_De1mos , я так и думал :( Эх, не хотелось мне сохранять эти "экземпляры класса" в базу.. Так-то у меня Ensemble и можно просто сделать SendRequestAsync ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2013, 10:47 |
|
Передача объекта в job
|
|||
---|---|---|---|
#18+
coder1cv8ну экземпляр класса, если такая терминология привычней. Посмотрел сейчас ВИКИ... Там написано что это эквивалентные понятия. Т.ч. правильно и так, и так... Прости... ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2013, 10:58 |
|
Передача объекта в job
|
|||
---|---|---|---|
#18+
coder1cv8возможно он падает и я не знаю как посмотреть ошибку Как вариант, довольно простой метод, можно просетить её (ошибку) в глобал (да и не только ошибку, а весь ход выполнения кода в процессе). Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Узелки от 1 до 3 покажут докуда дошло исполнение, ну а если ошибка, она запишется в ^tmp("err") (скорее всего, у вас там будет инвалид ореф). Посмотреть можете потом в терминале командой zw ^tmp (если нет других средств просмотра глобалов) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2013, 13:14 |
|
Передача объекта в job
|
|||
---|---|---|---|
#18+
Не знаю, подойдет ли вам, но если объект наследовать от %SerialObject, то его можно превратить в строку с помощью %GetSwizzleObject, а потом создать методом %New копию. Не очень понимаю механизм, но если интересно, могу попробовать сделать пример. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2013, 18:52 |
|
Передача объекта в job
|
|||
---|---|---|---|
#18+
coder1cv8, или сохранить и передать в job идентификатор объекта ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2013, 18:57 |
|
|
start [/forum/topic.php?fid=39&msg=38363048&tid=1557080]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
65ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
others: | 337ms |
total: | 502ms |
0 / 0 |