Endpoint dinâmico em canal AMF[RESOLVIDO]

7 respostas
lira_jvm

Tenho uma aplicação java e recentemente inclui um dashboard Flex com BlazeDS, que está instalada em diferentes ambientes. Em alguns é necessário colocar o nome do servidor e a porta, outros não e ainda há ambientes que é necessário incluir também o contexto da aplicação, Ex: http://server:123/minha_app.

O fato é que configurei o endpoint no arquivo servicer-config.xml da seguinte forma, para atender um de nossos ambientes:

<channel-definition id="amf" class="mx.messaging.channels.AMFChannel"> <endpoint url="http://{server.name}/messagebroker/amf" class="flex.messaging.endpoints.AMFEndpoint"/> </channel-definition> Porém se esta mesma configuração for aplicada em ambientes onde a url de acesso contenha a porta ou contexto da aplicação o swf não consegue fazer a requisição ao servidor, pois inclui o este parâmetro no compilador do Flex Builder -services “…/web/WEB-INF/flex/services-config.xml”.

Uso RemoteObject para requisitar informações ao server.

<mx:RemoteObject id="service" destination="statistics" fault="faultHandler(event);"> <mx:method name="getData" result="getDataResultHandler(event);"/> </mx:RemoteObject> A pergunta é: alguém conhece uma forma de criar um canal AMF dinamicamente ?

Obrigado.

Os jovens se cansarão e se fatigarão, e os moços certamente cairão.
Mas os que esperam no SENHOR renovarão as forças, subirão com asas como águias; correrão, e não se cansarão; caminharão, e não se fatigarão. Isaías 40:30-31

7 Respostas

R

Use o ChannelSet configurado em runtime.

Tenho um exemplo aqui de como criar com projetos separados.
http://www.cauirs.com.br/rafael/?p=24

Veja se ajuda.

Obs: O código-fonte está off por alguns problemas, mas creio que hoje a noite arrumarei isso.

lira_jvm

RafaelViana:
Use o ChannelSet configurado em runtime.

Tenho um exemplo aqui de como criar com projetos separados.
http://www.cauirs.com.br/rafael/?p=24

Veja se ajuda.

Obs: O código-fonte está off por alguns problemas, mas creio que hoje a noite arrumarei isso.


Mas a url do channel deve ser a mesma configurada no services-config.xml, certo ?

O que estou testando é criar diferentes canais no services-config.xml, vamos ver se funcionar. :slight_smile:

lira_jvm

lira jvm:
RafaelViana:
Use o ChannelSet configurado em runtime.

Tenho um exemplo aqui de como criar com projetos separados.
http://www.cauirs.com.br/rafael/?p=24

Veja se ajuda.

Obs: O código-fonte está off por alguns problemas, mas creio que hoje a noite arrumarei isso.


Mas a url do channel deve ser a mesma configurada no services-config.xml, certo ?

O que estou testando é criar diferentes canais no services-config.xml, vamos ver se funcionar. :)

Pois é não funciona… :frowning:

O Blaze não permite que eu criei mais de um canal com o mesmo destino /messagebroker/amf

Criar o ChannelSet com url dinâmica até fiz, porém o canal registrado pelo blaze é diferente, e ai não funcionou.

Também testei essa sugestão e nada.
http://server.name:server.port/server.context

Alguma outra sugestão ?

R

Deixa eu ver se entendi direito a situação:

Você tem uma aplicação Java + Flex que está instalada em mais de um local (hospedada em mais de um servidor).

Flex A chama o Java A
Flex B chama o Java B

Cada aplicação chama a sua correspondente porém sempre no mesmo local.Não ha uma ligação dessas.

No entanto, os endereços são diferentes? Uns com a porta outros sem?

Se é assim use assim o endpoint:

lira_jvm

RafaelViana:
Deixa eu ver se entendi direito a situação:

Você tem uma aplicação Java + Flex que está instalada em mais de um local (hospedada em mais de um servidor).

Flex A chama o Java A
Flex B chama o Java B

Cada aplicação chama a sua correspondente porém sempre no mesmo local.Não ha uma ligação dessas.

No entanto, os endereços são diferentes? Uns com a porta outros sem?

Se é assim use assim o endpoint:


Sim exatamente isso.
A primeira vez que fiz o deploy do dashboard esta era a configuração do endpoint, porém no ambiente de produção, que é acessado por uma url sem porta e contexto, como esta mycompany.com, por exemplo, deu erro ao tentar fazer requisição no servidor.

paulo.miyashiro

Faz algum tempo eu escrevi um post sobre isso em meu blog.

http://www.paulomiyashiro.com.br/?p=57

lira_jvm
paulo.miyashiro:
Faz algum tempo eu escrevi um post sobre isso em meu blog.

http://www.paulomiyashiro.com.br/?p=57


Problema Solucionado!
Obrigado Paulo, segui tua sugestão e funcionou.
Agora o dashboard acessa diferentes url's (com e sem porta / contexto), sem a necessidade de recompilar.
Ficou totalmente dinâmico. :D

A Solução ficou assim no services-config.xml
<channel-definition id="amf" class="mx.messaging.channels.AMFChannel">
            <endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/amf" class="flex.messaging.endpoints.AMFEndpoint"/>
            <properties>
            	<polling-enabled>false</polling-enabled>
            </properties>
        </channel-definition>
E no mxml
// flex-swf é a pasta onde estão os swf's gerados pelo flex builder
var amfEndpoint:String = Application.application.url.substring(0, Application.application.url.indexOf('flex-swf')).concat("messagebroker/amf");
var channelSet:ChannelSet = new ChannelSet();
var channel:AMFChannel = new AMFChannel("my-amf", amfEndpoint);
				
channelSet.addChannel(channel);
remoteObject.channelSet = channelSet;
Outro link que me ajudou a entender foi este http://coenraets.org/blog/2009/03/externalizing-service-configuration-using-blazeds-and-lcds/ Obrigado a todos que me ajudaram. _____________________________________________________

Os jovens se cansarão e se fatigarão, e os moços certamente cairão.
Mas os que esperam no SENHOR renovarão as forças, subirão com asas como águias; correrão, e não se cansarão; caminharão, e não se fatigarão. Isaías 40:30-31

Criado 30 de julho de 2010
Ultima resposta 4 de ago. de 2010
Respostas 7
Participantes 3