感谢提供的所有文档和精彩的论坛。
我有一个关于 Java Factory 的问题;我在某处读到:“... JavaFactory 将检查范围内是否已经有一个实例并返回该实例。如果该对象不可用,则将其实例化...”,但我不明白表达式“如果对象不可用”?
我无法在服务器中查找和/或分配已实例化的类(由另一个类)到声明的目的地。
这是场景:
我正在用 Java 开发一个应用程序:
- J2EE。
- 我在 Tomcat 6 上运行它 服务器
- 我使用 BlazeDS 进行交流 与 Flex。
- 我正在使用RPC 的远程处理 服务(通过RemoteObjects)
有两个 java 类处理客户端 (Flex) 交互,例如 ApplicationClass 和 UserApplicationClass:
- ApplicationClass 有一个引用 (属性)到 UserApplicationClass 实例
- ApplicationClass 应该是 唯一的入口点(尽管 BlazeDS 需要一个空的 构造函数)来实例化一个 **用户*ApplicationClass*;
UserApplicationClass 在 ApplicationClass 上设置 User 属性后立即实例化。
**//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的任何方法时,它找不到服务器上已创建的类</strong>,而是实例化了一个品牌new one(使用默认构造函数将其所有属性设置为 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>
注意:两个目标上的范围属性(在 remoting-config.xml 上)均设置为 session 。
我希望我已经说清楚了;如果您能帮助我,我将不胜感激。
提前致谢,
上午
最佳答案
JoseVelas,即使我也遇到了你提到的同样的问题。经过谷歌搜索总结后,我发现了远程配置文件的问题。如果您尝试在 java Factory 中给出以下代码
<destination id=”my-destination”>
<properties>
<source>flex.samples.EmployeeService </source>
**<scope>application</scope>**
</properties>
</destination>
对我来说效果很好。范围在这里起着重要作用,我希望它可以对您有所帮助。
关于java - Flex + Java + BlazeDS : Some java class instances already created on the server are unavailable from Flex!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4960482/