Flex Cairngorm Primavera BlazeDS - Remoting Erro - ajuda-me por favor
-
18-09-2019 - |
Pergunta
Parece que estou recebendo o seguinte erro quando tento acessar uma classe Java remoto (na Primavera / BlazeDS) da aplicação Flex / Cairngorm. Estou enlouquecendo no momento tentando ver o que está errado - qualquer ajuda seria muito apreciada. - Obrigado Mike
**Error: C0007E: RemoteObject not found for mycomponentsService
at RemoteObjects/getService()
at com.adobe.cairngorm.business::ServiceLocator/getRemoteObject()
at com.nomura.dashboard.client.business::DashBoardDelegate()**
Todos os meus arquivos de configuração estão abaixo:
Cairngorm - BusinessDelegate.as
this.service = ServiceLocator.getInstance().getRemoteObject("**mycomponentsService**");
Cairngorm - Services.mxml
mx:RemoteObject id="mycomponentsService"
destination="remotecomponentService"
showBusyCursor="true">
Primavera / BlazeDS - application-config.xml
flex:remote-service ref="remotecomponentService"
bean id="remotecomponentService"
class="com.mycompany.dashboard.server.dao.ComponentsDAO"
Primavera / BlazeDS - services-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"
O web.xml também contém referências Primavera - veja abaixo
<?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>
Solução
Podemos ver o seu web.xml também por favor? Estou surpreso de ver a palavra "Primavera" na URL do terminal. Meus endpoints sempre parecia
url="http://{server.name}:{server.port}/{context.root}/messagebroker/amf"
Ex .: Eu acho que sua services-config.xml deve olhar mais como este.
<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>
Também gostaria de sugerir não codificar o URL de ponto final tanto. Basta ir com
<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:
OK, então seu web.xml parece ok, assim como ter o spring
em sua URL. O que eu não ver no seu arquivo de configuração do Spring (application-config.xml
) é o mapeamento Primavera URL. Por exemplo, em meus arquivos de configuração Spring, além das definições de feijão, existe um mapeamento. Por exemplo:.
<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" />
(Eu tenho um aplicativo que é baseado em Spring, e outro que usa BlazeDS, mas não ambos ... para que eu possa estar faltando alguma coisa. Dito isto, o que eu estou pedindo ainda deve ser válido. Em teoria. Mas levá-la com um grão de sal.)
Talvez alguma depuração alguns super básica está em ordem. você pode verificar para ver se as chamadas para o seu servidor estiver retornando HTTP 404
ou não em teses endpoints problema? Algumas maneiras de fazer isso:
- Verifique os logs de acesso para
GET /dashboard-server/spring/messagebroker/amf
. Qual é o código de status HTTP para esses pedidos? (Free, fácil, há novas ferramentas.) - Se você estiver usando o Firefox como um navegador, adicione o Tamper dados plug-in. você não tem que mexer com os dados, mas mostra-lhe o que está sendo chamado, o que é retornado, e todos os cabeçalhos HTTP.
- Use um completo na ferramenta protocolo sniffer orientada Flash / Flex, como Charles Web Debugging Proxy .
Será muito útil para reduzir o problema de saber se quando estes pedidos estão falhando nas comunicações empilhar.
Outras dicas
Anexei web.xml abaixo. Em termos da palavra "Primavera" - Eu estou usando os BlazrDS padrão / Primavera arquivo WAR integração que exige "spring" para estar lá. O bean id = "remotecomponentService" é efectivamente um bean Spring.
Você está dizendo que mesmo com os BlazeDS / Primavera WAR posso usar a sua solução acima?
O web.xml também contém referências Primavera - veja abaixo
<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>