Показать сообщение отдельно
Старый 07.11.2009, 23:01
Deidara вне форума Посмотреть профиль Отправить личное сообщение для Deidara Найти все сообщения от Deidara
  № 1  
Ответить с цитированием
Deidara

Регистрация: May 2009
Сообщений: 80
Question 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, может кто ни будь что ни будь подсказать?