Спасибо за всю документацию и отличный форум.
У меня есть вопрос по поводу Java Factory; Я где-то читал, что: «... JavaFactory проверит, существует ли уже экземпляр в области видимости, и вернет его. Если объект недоступен, то он создается ...», но я не понимаю выражение "если объект недоступен"?
У меня проблемы с поиском и / или назначением классов, уже созданных (другим классом) на сервере, объявленному месту назначения.
Вот сценарий :
Я занимаюсь разработкой приложения на Java:
- J2EE.
- Я запускаю его на Tomcat 6
Сервер
- Я использую BlazeDS для общения
с Flex.
- Я использую удаленное управление RPC
Сервис (через RemoteObjects)
Существует два Java-класса , которые обрабатывают взаимодействие с клиентом (Flex), скажем ApplicationClass и UserApplicationClass :
- ApplicationClass имеет ссылку
(атрибут) для UserApplicationClass
Экземпляр
- ApplicationClass должен быть
единственная точка входа (хотя
BlazeDS требует пустой
конструктор), чтобы создать экземпляр
** Пользователь * ApplicationClass *;
UserApplicationClass создается сразу после того, как атрибут User установлен в 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);
}
...
}
До этого все нормально:
Из клиента Flex я могу использовать методы ApplicationClass, установить его User и получить атрибут UserApplicationClass из ApplicationClass .
Но здесь проблема :
Когда я пытаюсь использовать любой метод UserApplicationClass , Он не находит класс, уже созданный на сервере , но вместо этого создает экземпляр нового класса (все его атрибуты установлены в нуль с помощью конструктора по умолчанию).
Как я могу убедиться, что место назначения указывает на указанный экземпляр на сервере, созданный другим классом, а не создающий экземпляр нового?
**// 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) в обоих местах назначения установлен в сеанс.
Надеюсь, я был ясен; Буду очень признателен, если вы мне поможете.
Заранее спасибо,
AM