Hi Everyone. 


Thank you for all the documentation, and the great forum.

I have a question about the Java Factory; I've read somewhere that: "... the JavaFactory will check if there is already an instance in the scope and return that. If the object is not available then it is instantiated ...", but I don't understand the expression "if the object is not available"?

I am having trouble to find and/or assign classes already instantiated (by another class) in the server, to a declared destination.

Here is the scenario:

I'm developing an application in Java:

  • J2EE
  • I'm running it on a Tomcat 6 server
  • I'm using BlazeDS to communicate with Flex.
  • I'm using the RPC's Remoting Service (through RemoteObjects)

There are two java classes that handle Client (Flex) interaction, say ApplicationClass and UserApplicationClass:

  • ApplicationClass has a reference (attribute) to a UserApplicationClass instance
  • ApplicationClass should be the one and only entry point (although BlazeDS requires an empty constructor) to instantiate a UserApplicationClass;
  • UserApplicationClass is instantiated, right after the attribute User has been set on ApplicationClass.

 


__________________________________

//Java CodeCode:

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);
       
}
       
...
   
}

 

Up to here everything is fine:

From the Flex client I am able to use ApplicationClass methods, set its User and get the UserApplicationClass attribute from ApplicationClass.

 

But here is the problem:

When I try to use any method of UserApplicationClass, It doesn't find the class already created on the server, but instead, it instantiates a brand new one (with all of its attributes set to null by using the default constructor). 

Nonetheless, the ApplicationClass instance is properly managed (it stays alive in the server, per session, and can be accessed from Flex).

On the other hand, the UserApplicationClass created by ApplicationClass is not available (it seems to be only accessible from this latter, ApplicationClass, but not from Flex). I would want to access the UserApplicationClass instance created by ApplicationClass, but I can't!!   

How could I assure that the destination points to a specified instance on the server, created by another class, and not instantiating a new one?  

 

__________________________________

// Flex Client CodeCode:

<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
="ApplicationClassDestination"
            showBusyCursor
="true">
           
...
           
<mx:method
                name
="getUserApplicationClass"
                result
="applicationClass_getUser(event)"
           
/>      
       
</mx:RemoteObject>

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

Note: scope attribute (on remoting-config.xml) on both destinations is set to session.
I hope I have been clear; I would really appreciate if you could help me.

Thanks in advance,