Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   RemoteObject (сборщик мусора), не удаляется экземпляр. (http://www.flasher.ru/forum/showthread.php?t=132263)

Deidara 07.11.2009 23:01

RemoteObject (сборщик мусора), не удаляется экземпляр.
 
Добрый день.
Использую RemoteObject для работы с классами Java следующим образом:
Код AS3:

package SupportClassesSrc {
        public class RemoteServis{
                private var remoteObject:RemoteObject;
                private var _resultHendler:Function;
                private var _faultHendler:Function;
 
                //Конструктор
public function RemoteServis(destination:String, resultHendler:Function = null, faultHendler:Function = null){       
                        _faultHendler = faultHendler;
                        _resultHendler = resultHendler;
                        remoteObject = new RemoteObject();
                        remoteObject.destination = destination;
                }
 
                protected function call(name:String, args:Array = null):void{
                        CursorManager.setBusyCursor();
                        try{
                                var operation:AbstractOperation = remoteObject.getOperation(name);
                                operation.addEventListener(ResultEvent.RESULT, onResult);
                                operation.addEventListener(FaultEvent.FAULT, onFault);
                                operation.send.apply(operation, args);
                        }catch(e:Error){
                                trace("RemoteServis " +  e.toString());
                        }
 
                }
                protected function onResult(e:ResultEvent):void{
                        CursorManager.removeBusyCursor();
                        if(_resultHendler != null){
                                _resultHendler(e.result);               
                        }
                        remoteObject = null;
                }
                protected function onFault(e:FaultEvent):void{
                        CursorManager.removeBusyCursor();
                        if(_faultHendler != null){
                                _faultHendler(e.fault)               
                        }
                        remoteObject = null;
                }
 
        }
}

От этого класса наследуются сервисы для обращения к серверу:
Код AS3:

package SupportClassesSrc {
        public class UserServise extends RemoteServis{
                public function UserServise(resultHendler:Function, faultHendler:Function = null){
                        super("registration", resultHendler, faultHendler);
                }
                public function getContry():void{
                        call("getCountryList");
                }
        }
}

После чего, вызвать метод на сервере можно следующим образом:
Код AS3:

new UserServise(checkMailInBase).getContry();

Всё прекрасно работает, скорость передачи запроса и степень удобности сериализации с Java, которую даёт blazeDS просто не может не радовать, но.
В оперативе сервиса остаются висеть запросы размером от 50 до 100 Кб.
Сервер после каждого обращиения сессию разрывает и закрывает.
Опытным путём было выяснено, что екземпляр класса, создаваемый RemoteObject'ом при обращении к серверу не удаляется (не собрается мусоросборщиком), хотя после получения result или fault RemoteObject'у присваевается null.

Сервер работет с базой через hibernate, может кто ни будь что ни будь подсказать?

alatar 08.11.2009 00:44

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


Часовой пояс GMT +4, время: 00:16.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.