[akabana-user:105] Re: <S2Flex2>S2Flex2を使用しているswfをmx.moduleを使用してアンロードした際、処理を実行すると例外がはっせいする。

kondo [E-MAIL ADDRESS DELETED]
2007年 3月 8日 (木) 23:07:13 JST


近藤(nobu)です。

s2flex2-components.swcはコンパイルし直していません。
環境は、EclipseからDolteng.0.17.0をダウンロードしただけです。

そういえば、S2Flex2は

s2-flex2-1.0.1-SNAPSHOT.jar
s2-flex2-tiger-1.0.0.jar

です。S2Flex2のバージョンを書いておくべきでしたね。申し訳ないです。


Daichi Shinozaki wrote:
> 篠崎と申します。
> 
> ちょっと気になったのですが、
> 
> s2flex2-components.swc は、Flex 2.0.1でコンパイルし直していますか?
> 
> --kondo<[E-MAIL ADDRESS DELETED]> wrote:
>> 近藤(nobu)です。
>>
>> 長いタイトルですみません。m( _ _ )m
>> しかもこの後長文で更にすみません。m( _ _ )m
>>
>> S2Flex2を使用してDBから情報を取得、一覧表示するアプリを作っています。
>> ただ、今回、そのアプリをモジュール(mx.module)にして、他のアプリ
>> (こちらはmx.application)から呼び出させています。
>> この時に、S2Flex2から(だと思う)例外が発生しています。
>>
>> ■概要
>> 1.アプリA、モジュールBを作成。
>> 2.アプリAからモジュールBをロード。->ModuleLoader.loadModule()
>> 3.モジュールBで、DB参照->一覧表示を行う。(S2Flex2使用)
>> 4.アプリAからモジュールBをアンロード。->ModuleLoader.unloadModule()
>> 5.また、アプリAからモジュールBをロード。->ModuleLoader.loadModule()
>> 6.またモジュールBでDB参照->一覧表示を行おうとすると例外発生。
>>
>> ===================================================================
>> ■例外内容
>> TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッ
>> ドにアクセスすることはできません。
>> 	at mx.managers::CursorManager$/setBusyCursor()
>> 	at org.seasar.flex2.rpc.remoting::S2Flex2Service/::setupCursor()
>> 	at org.seasar.flex2.rpc.remoting::S2Flex2Service/::remoteCall()
>> 	at Function/http://adobe.com/AS3/2006/builtin::apply()
>> 	at
>> org.seasar.flex2.rpc.remoting::S2Flex2Service/http://www.adobe.com/2006/actionscript/flash/proxy::callProperty()
>> 	at demoapp.web.app01::App01Page/read()
>> 	at demoapp.web.app01::App01Page/readBtnOnClick()
>> ===================================================================
>>
>> なんか、setBusyCursor()内でエラーが発生している??ように見えます。
>>
>> 現在わかっていることは、
>> 1.unloadModule()を実行しなければこの現象は発生しない。
>>  ※ただ、mx.ModuleはunloadModule()を使用しない場合、インスタンスを使い
>>   まわすようで、前回の状態を保持したままLoadされる。
>> 2.SWFLoaderではこの問題は発生しない。
>>  ※そもそもSWFLoaderにはunloadがない。(ガベコレ任せと信じます)
>>
>> SDKのソースを見てみると、flash.display.Loaderの生成・破棄をやってるので
>> 、このあたりが怪しいような・・・というところで力尽きました。unloadModule
>> で何か破棄されてしまっているのではないかと思うのですが・・・。
>>
>> 何かお分かりでしたら、アドバイスをお願い致します。
>>
>>
>> ■環境
>> Eclipse 3.2.1 + Language Pack
>> Flex Builder 2.0.1
>> Tomcat Plug-in
>> Dolteng 0.17.0
>> DbLuancher
>>
>>
>> 以下、ソース。(S2Flex2を利用しているところまで。Dolteng使用)
>> ===================================================================
>> ■Main.mxml(メイン)
>> <?xml version="1.0" encoding="utf-8"?>
>> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
>> layout="absolute" xmlns:ns1="demoapp.web.menu.*" height="360"
>> creationComplete="init()">
>> 	<mx:Script>
>> 		<![CDATA[
>> 			import mx.events.FlexEvent;
>> 			import mx.events.StateChangeEvent;
>> 			import mx.controls.Alert;
>> 			import mx.modules.ModuleLoader;
>> 			
>> 			private function init():void
>> 			{
>> 				// 初期表示は menu state
>> 				this.currentState = 'menu';
>> 			}
>>
>> 			
>> 			private function stateMenuOnEnterState(e:FlexEvent):void
>> 			{
>> 			}
>> 			
>> 			
>> 			private function stateMenuOnClick(e:MouseEvent):void
>> 			{
>>
>> <<ModuleLoader.loadModule()実行部>>
>>
>> 				ModuleLoader(this.states[1].overrides[2].target).url = "App01e.swf";
>> 				this.currentState='app'
>> 			}
>>
>>
>> 			private function stateAppOnEnterState(e:FlexEvent):void
>> 			{
>> 				// かなり無理やり・・・statesの特定のアプリケーションを取得できないもの
>> か・・・。
>> 				ModuleLoader(this.states[1].overrides[2].target).loadModule();
>> 			}
>> 			
>> 			private function stateAppOnClick(e:MouseEvent):void
>> 			{
>>
>> <<ModuleLoader.unloadModule()実行部>>
>>
>> 				ModuleLoader(this.states[1].overrides[2].target).unloadModule();
>> 				this.currentState = 'menu'
>> 			}
>> 		]]>
>> 	</mx:Script>
>> 	
>>
>> 	<mx:states>
>> 		<mx:State name="menu" enterState="stateMenuOnEnterState(event)">
>> 			<mx:AddChild position="lastChild">
>> 				<mx:Button x="10" y="10" label="app" click="stateMenuOnClick(event)"/>
>> 			</mx:AddChild>
>> 			<mx:AddChild position="lastChild">
>> 				<ns1:MenuCmp x="10" y="40" width="463">
>> 				</ns1:MenuCmp>
>> 			</mx:AddChild>
>> 		</mx:State>
>> 		<mx:State name="app" enterState="stateAppOnEnterState(event)">
>> 			<mx:AddChild position="lastChild">
>> 				<mx:Button x="10" y="10" label="close" click="stateAppOnClick(event)"/>
>> 			</mx:AddChild>
>> 			<mx:AddChild position="lastChild">
>> 			</mx:AddChild>
>> 			<mx:AddChild position="lastChild">
>> 				<mx:ModuleLoader x="10" y="40" width="442" height="310" id="loader">
>> 				</mx:ModuleLoader>
>> 			</mx:AddChild>
>> 		</mx:State>
>> 	</mx:states>
>> 	
>> 	
>> </mx:Application>
>>
>> ■App01e.mxml(S2Flex2を使用しているアプリ。mx.moduleで作成)
>> <?xml version="1.0" encoding="utf-8"?>
>> <mx:Module xmlns:mx="http://www.adobe.com/2006/mxml" width="364"
>> height="264" xmlns:ns1="demoapp.web.app01.*">
>> 	<ns1:App01 width="100%" height="100%">
>> 	</ns1:App01>
>> </mx:Module>
>>
>>
>> ■App01.mxml(App01e.mxmlの実態(コンポーネント))
>> <?xml version="1.0" encoding="utf-8"?>
>> <mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="366"
>> height="262" xmlns:seasar="http://www.seasar.org/s2flex2/mxml"
>> xmlns:app01="demoapp.web.app01.*">
>> 	<seasar:S2Flex2Service id="service" destination="app01_app01Service"
>> showBusyCursor="true"/>
>> 	<app01:App01Page id="page"/>
>>
>> 	<mx:Button x="0" y="0" label="read" id="readBtn"/>
>> 	
>> 	<mx:DataGrid x="0" y="28" width="100%" height="234" id="dg">
>> 		<mx:columns>
>> 			<mx:DataGridColumn headerText="社員コード" dataField="empCd"/>
>> 			<mx:DataGridColumn headerText="社員名" dataField="empNm"/>
>> 			<mx:DataGridColumn headerText="部署コード" dataField="pstCd"/>
>> 		</mx:columns>
>> 	</mx:DataGrid>
>> 	
>> 	<mx:Label x="60" y="2" text="0" width="90" textAlign="right" id="recCnt"/>
>> 	<mx:Label x="158" y="2" text="件" width="22"/>
>> 	
>> </mx:Canvas>
>>
>>
>> ■App01Page.as(App01.mxmlのPageクラス)
>> package demoapp.web.app01 {
>>
>> 	import mx.controls.Alert;
>> 	import mx.rpc.AsyncToken;
>> 	import mx.rpc.events.ResultEvent;
>> 	import mx.rpc.events.FaultEvent;
>> 	import flash.events.Event;
>> 	import demoapp.entity.mst.MstEmployee;
>> 	import demoapp.web.AbstractPage;
>> 	import demoapp.web.AppMode;
>> 	import flash.events.MouseEvent;
>> 	import mx.collections.ArrayCollection;
>>
>> 	[Bindable]
>> 	public class App01Page extends AbstractPage {
>>
>> 		public var model: MstEmployee;
>>
>> 		public var appMode: int;
>>
>> 		override public function onCreationComplete(event: Event): void {
>> 			super.onCreationComplete(event);
>> 			setInitEntryMode();
>> 		}
>> 		
>> 		public function setInitEntryMode(): void {
>> 			appMode = AppMode.NEUTRAL;
>> 			model = null;
>> 		}
>> 		
>> 		public function setNewEntryMode(): void {
>> 			appMode = AppMode.NEW;
>> 		}
>>
>> 		public function setCorEntryMode(): void {
>> 			appMode = AppMode.COR;
>> 		}
>> 		
>> 		public function convertFormData(): void {
>> 			loadFormData(this.model);
>> 		}
>> 		
>> 		/**
>> 		 * 情報取得メソッド
>> 		 *
>> 		 */
>> 		public function read():void {
>> 			remoteCall(service.read(), readOnSuccess, readOnFault);
>> 		}
>> 		public function readOnSuccess(e:ResultEvent, token:Object=null):void {
>> 			var mArray:Array = e.result as Array;
>> 			var mArrayCollection:ArrayCollection = new ArrayCollection(mArray);
>> 			
>> 			// 取得結果をDataGridにバインディング
>> 			document.dg.dataProvider = mArrayCollection;
>> 			
>> 			// 件数を表示
>> 			document.recCnt.text = mArrayCollection.length;
>> 		}
>> 		public function readOnFault(e:FaultEvent, token:Object=null):void {
>> 			Alert.show("read is fault");
>> 		}
>> 		
>> 		public function readBtnOnClick(e:MouseEvent):void
>> 		{
>> 			read();
>> 		}
>> 	}
>> }
>> ===================================================================
>>
>> _______________________________________________
>> akabana-user mailing list
>> [E-MAIL ADDRESS DELETED]
>> https://ml.seasar.org/mailman/listinfo/akabana-user
>>
>>
>>
> 
> _______________________________________________
> akabana-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/akabana-user
> __________ NOD32 2102 (20070308) 情報 __________
> 
> このメールはNOD32によって検査済みです。
> http://canon-sol.jp
> 
> 
> 



akabana-user メーリングリストの案内