2009-11-05 3 views
2

Я, кажется, получаю следующую ошибку, когда пытаюсь получить доступ к удаленному классу Java (по Spring/BlazeDS) из приложения Flex/Cairngorm. Я схожу с ума в настоящий момент, пытаясь понять, что не так - любая помощь будет очень признательна - спасибо Майку.Flex Cairngorm Spring Blazeds - Remoting Error - помогите мне

**Error: C0007E: RemoteObject not found for mycomponentsService 
    at RemoteObjects/getService() 
    at com.adobe.cairngorm.business::ServiceLocator/getRemoteObject() 
    at com.nomura.dashboard.client.business::DashBoardDelegate()** 

Все мои файлы конфигурации ниже:

Кэрнгорм - BusinessDelegate.as

this.service = ServiceLocator.getInstance().getRemoteObject("**mycomponentsService**"); 

Кэрнгорм - Services.mxml

mx:RemoteObject id="mycomponentsService" 
       destination="remotecomponentService" 
       showBusyCursor="true"> 

Spring/BlazeDS - приложение-config.xml

flex:remote-service ref="remotecomponentService" 

bean id="remotecomponentService" 
    class="com.mycompany.dashboard.server.dao.ComponentsDAO" 

Весна/BlazeDS - услуги-config.xml

channel-definition id="myamf" class="mx.messaging.channels.AMFChannel" 
endpoint url="http://localhost:8080/dashboard-server/spring/messagebroker/amf" 
class="flex.messaging.endpoints.AMFEndpoint" 

Файл web.xml также содержит ссылки на пружине - смотри ниже

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="2.4"> 

<!-- The front controller of this Spring Web application, responsible for handling all application requests --> 
<display-name>dashboard-server</display-name> 

<servlet> 
    <servlet-name>Spring MVC Dispatcher Servlet</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 

    <init-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/spring/*-config.xml</param-value> 
    </init-param> 

    <load-on-startup>1</load-on-startup> 
</servlet> 

<!-- Map /spring/* requests to the DispatcherServlet --> 
<servlet-mapping> 
    <servlet-name>Spring MVC Dispatcher Servlet</servlet-name> 
    <url-pattern>/spring/*</url-pattern> 
    </servlet-mapping> 
</web-app> 
+0

ли ваш 'BusinessDelegate.as' действительно выглядят как' "** mycomponentsService **" ', со звездами в нем? Или это была попытка форматирования? –

+0

Привет, Stu, это форматирование в целом - я думаю, что смелая функция сайта пошла не так - имя mycomponentsService – Michael

+0

@Michael: Вы можете отредактировать свой вопрос, как и я. :) Это способ «переполнения стека». –

ответ

1

Можем ли мы увидеть ваш web.xml также, пожалуйста? Я с удивлением вижу слово «Весна» в URL-адресе конечной точки. Мои конечные точки всегда выглядели как

url="http://{server.name}:{server.port}/{context.root}/messagebroker/amf" 

т.д .: Я думаю, что ваши услуги-config.xml должен выглядеть следующим образом.

<channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel"> 
     <endpoint url="http://{server.name}/dashboard-server/messagebroker/amf" 
        class="flex.messaging.endpoints.AMFEndpoint"/> 
    </channel-definition> 

Я также предлагаю не жестко кодировать конечный URL-адрес. Просто идите с

<channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel"> 
     <endpoint class="flex.messaging.endpoints.AMFEndpoint" 
      url="http://{server.name}:{server.port}/{context.root}/messagebroker/amf" /> 
    </channel-definition> 

Update:

ОК, так что ваш web.xml выглядит хорошо, как это делает, имеющий spring в вашей URL. То, что я вижу в вашем конфигурационном файле Spring (application-config.xml), - это сопоставление URL Spring. Например, в моих конфигурационных файлах Spring в дополнение к определениям bean-компонентов имеется сопоставление. Например:

<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 
    <property name="mappings"> 
     <value> 
      /histogram/**=bean.HistogramController 
      /counter/**=bean.CounterController 
     </value> 
    </property> 
</bean> 

<bean id="bean.HistogramController" class="ch.comp.app.HistogramXportController" /> 
<bean id="bean.CounterController" class="ch.comp.app.CounterXportController" /> 

(у меня есть одно приложение, которое Spring на основе, а другой, который использует BlazeDS, но не оба ... так что я, возможно, отсутствует то, что сказал, что я спрашиваю еще должен. Верно, но теоретически, но возьмите его с солью.)

Возможно, какая-то супер-основная отладка в порядке. Вы можете проверить, возвращаются ли вызовы на ваш сервер HTTP 404 или нет на конечных точках проблем? Пара способов сделать это:

  • Проверьте журналы доступа для GET /dashboard-server/spring/messagebroker/amf. Каков код состояния HTTP для этих запросов? (Бесплатно, легко, без новых инструментов.)
  • Если вы используете FireFox в качестве браузера, добавьте Tamper Data пробку. Вы не должны искажать данные, но это показывает, что в настоящее время называется, что возвращается, и все HTTP заголовки.
  • Использовать полнофункциональный инструмент Sniffer для Flash/Flex, например Charles Web Debugging Proxy.

Это очень полезно, чтобы сузить проблему, чтобы узнать, не попадают ли эти запросы в стек сообщений.

+0

Привет Стю, из-за ограниченного пространства в комментариях Я ответил на мой вопрос ... см. Следующий ответ – Michael

+0

Также, как {server.name}: {server.port}/{ context.root}/- установить? – Michael

+0

Это авто-магия! Сервер знает свое имя, знает его порт и знает, какой он работает. Он заменяет '{parameter-name}' на реальные, фактические, запущенные значения. –

0

Я приложил web.xml ниже. С точки зрения слова «Весна» - я использую стандартный файл WAR WARNING/Spring, который требует наличия «весны». Компонент id = "remotecomponentService" является активным компонентом Spring.

Вы говорите, что даже с BlazeDS/Spring WAR я могу использовать ваше решение выше?

Файл web.xml также содержит ссылки Spring - см ниже

<web-app version="2.4"> 
<display-name>dashboard-server</display-name> 
<servlet> 
    <servlet-name>Spring MVC Dispatcher Servlet</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <init-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/spring/*-config.xml</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<!-- Map /spring/* requests to the DispatcherServlet --> 
<servlet-mapping> 
    <servlet-name>Spring MVC Dispatcher Servlet</servlet-name> 
    <url-pattern>/spring/*</url-pattern> 
    </servlet-mapping> 
</web-app> 
+0

@Michael: Пожалуйста, разместите свой web.xml в самом вопросе. Система переполнения стека не работает хорошо как потоковая платформа обмена сообщениями, потому что ответы не отображаются в хронологическом порядке. Например: для меня этот «ответ» появился выше моего, так что разговорный «все перепутано». (Это по дизайну.) –

+0

Добавлен web.xml к основному вопросу. – Michael

+0

Прохладный. Вы можете удалить этот ответ тогда :) –