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 **User*ApplicationClass*;
UserApplicationClass is instantiated, right after the attribute User has been set on ApplicationClass.
**//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);
}
...
}
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).
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 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>
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,
AM