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, может кто ни будь что ни будь подсказать?
|