簡體   English   中英

Flex + Java + BlazeDS:Flex上無法使用服務器上已經創建的某些Java類實例!

[英]Flex + Java + BlazeDS: Some java class instances already created on the server are unavailable from Flex!

感謝您提供所有文檔和出色的論壇。

我對Java工廠有疑問; 我在某處讀到:“ ... JavaFactory將檢查范圍內是否已存在實例,然后將其返回。如果對象不可用,則將實例化...”,但我不理解表達式“如果對象不可用”?

我在查找和/或將已在服務器中實例化(由另一個類)的類分配給聲明的目的地時遇到了麻煩。

這是場景

我正在用Java開發應用程序:

  • J2EE。
  • 我在Tomcat 6服務器上運行它
  • 我正在使用BlazeDS與Flex進行通信。
  • 我正在使用RPC的遠程服務 (通過RemoteObjects)

兩個處理客戶端(Flex)交互的Java類 ,分別是ApplicationClassUserApplicationClass

  • ApplicationClass具有對UserApplicationClass實例的引用(屬性)
  • ApplicationClass應該是實例化** User * ApplicationClass *的唯一入口點(盡管BlazeDS需要一個空的構造函數);

在ApplicationClass上設置屬性User之后,立即實例化UserApplicationClass。

**//Java Code**


public class ApplicationClass {
        private User user = null;
        private UserApplicationClass userApplicationClass = null;
        ...
        public ApplicationClass {}
        ...
        public void setUser(User user) {
            this.user = user;
            this.userApplicationClass = new UserApplicationClass(user);
        }
        ...
    }

到目前為止,一切都很好:

從Flex客戶端,我可以使用ApplicationClass方法,設置其User並從ApplicationClass獲取UserApplicationClass屬性。

但這是問題所在

當我嘗試使用UserApplicationClass的任何方法時, 它沒有找到已經在服務器上創建的類 ,而是實例化了一個全新的類 (通過使用默認構造函數將其所有屬性設置為null)。

我如何確保目標指向服務器上由另一個類創建的指定實例,而不實例化一個新實例?

**// Flex Client Code**


<mx:Application 
        ...
        creationComplete="invokeService()">
        ...
        <mx:Script>
            <![CDATA[
                import application.UserApplicationClass;
                ...
                private var userApplicationClass    :UserApplicationClass;
                ...
                private function invokeService():void
                {
                    applicationClassRemoteObject.getUser(); // Ok
                    userApplicationClass.getUser(); // Ok
                    userApplicationClassRemoteObject.getUser(); **// Fails; user null; the JavaFactory 
                                              //doesn't find the UserApplicationClass instance on the 
                                              //server and creates a new instance.**
                }
                ...
                private function applicationClass_getUser(event:ResultEvent):void
                {   
                    // Validate null ResultEvent ...
                    userApplicationClass = UserApplicationClass(event.result);
                }
                ...
            ]]>
        </mx:Script>

        <mx:RemoteObject 
            id="applicationClassRemoteObject" 
            destination="***ApplicationClass***Destination"
            showBusyCursor="true">
            ...
            <mx:method 
                name="getUserApplicationClass"
                result="applicationClass_getUser(event)"
            />      
        </mx:RemoteObject>

        <mx:RemoteObject 
            id="userApplicationClassRemoteObject" 
            destination="***UserApplicationClass***Destination"
            showBusyCursor="true">
            <mx:method 
                name="getUser"
                result="userApplicationClass_getUser(event)"
            />
            ...
        </mx:RemoteObject>
        ...
    </mx:Application>

注意:兩個目標上的scope屬性(在remoting-config.xml上)都設置為session。

我希望我已經清楚了。 如果您能幫助我,我將不勝感激。

提前致謝,

上午

JoseVelas,甚至我也遇到了您提到的相同問題。 在匯總中進行谷歌搜索之后,我發現了remote-config文件的問題。如果嘗試在Java Factory中提供以下代碼,

<destination id=”my-destination”>

<properties>

<source>flex.samples.EmployeeService </source>

**<scope>application</scope>**

</properties>

</destination>

這對我來說可以。 示波器在這里起着主要作用,希望對您有所幫助。

您應該尋找在BlazeDS中實現穩定服務的方法。 查找服務的可用范圍。 例如,您可以讓所有用戶使用相同的ApplicationClass,或為每個用戶使用一個。

默認情況下,它是無狀態的,因為將為每個請求實例化一個新對象。 如果目標配置包含有狀態標志,則將在HTTP會話中搜索對象的現有實例,因此將在有狀態組件上調用來自同一客戶端的多個請求。 類JavaAdapter

我希望這些鏈接能為您指明方向: http : //flexuniverse.wordpress.com/2010/05/20/setting-up-gilead-for-blazeds-in-statefull-mode/ http://sujitreddyg.wordpress.com / 2009/01/20 / how-remoting-service-in-blazeds-works /

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM