Quando se cria uma aplicação Flex + Java + BlazeDS o services-config.xml é criado dessa forma:
<endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/amf" class="flex.messaging.endpoints.AMFEndpoint"/>
E na hora da compilação este arquivo é lido e o compilador no lugar de server.name coloca localhost e em server.port coloca 8080 e context.root é colocado como está configurado no Flash Builder que normalmente é o nome da aplicação.
Enquanto estivermos trabalhando local, tudo funciona beleza, mas quando passamos a nossa aplicação para um servidor de produção, as requisições AMF simplesmente deixam de funcionar porque estão tentando acessar localhost e não o ip ou nome do servidor onde hospedamos, e por segurança o Flash Player não permite acessar algo externo ao servidor.
Para resolver isso eu altero meu endpoint removendo server.name e server.port ficando como abaixo:
<endpoint url="{context.root}/messagebroker/amf" class="flex.messaging.endpoints.AMFEndpoint"/>
Com isso não me preocupo mais com servidor onde hospedo minha aplicação, só preciso manter o mesmo contexto.
Pode-se mudar também messagebroker/amf, mas para isso será necessário alterar também o web.xml para que o MessageBrokerServlet "saiba" qual url deve interceptar.
Uma outra dica é digitar no navegador: {server.name}/{context.root}/messagebroker/amf se a aplicação foi startada corretamente então irá aparecer uma tela em branco.
Veja também:
Externalizing Service Configuration using BlazeDS and LCDS
Veja também:
Externalizing Service Configuration using BlazeDS and LCDS
Tem uma forma beeeem simples de alterar esse endereço em runtime, sem nem mesmo precisar criar um novo ChannelSet... dê uma olhada na documentação da classe ServerConfig.as (nao me melbro o pacote dela agora). Mas é essa classe que o compilador cria (em tempo de compilação) e guarda o xml dentro (num atributo static xml:XML). Basta acessar o valor que quiser via e4x e alterar para qualquer atributo, ou usar um método que retorna os ChannelSets. Por ser bindable, todos os remoteObjects irão refletir a mudança.
ResponderExcluirMais info:
1) http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/messaging/config/ServerConfig.html
2) http://ria-coder.com/blog/accessing-services-config-values-with-flex
[]'s
Mário, muito obrigado pelo comentário, lembro vagamente de já ter visto esta ServerConfig, imagino q deve ter sido em algum post seu em algum forum q participamos.
ExcluirVou dar uma estudada no q passou.
[]s
Quais alterações devo fazer no web.xml?
ResponderExcluirGustavo,
ExcluirNo web.xml vc só altera se vc quiser mudar o caminho do messagebroker para algo diferente do default:
<servlet-mapping>
<servlet-name>MessageBrokerServlet</servlet-name>
<url-pattern>/messagebroker/*</url-pattern>
</servlet-mapping>
Mas o url-pattern tem q ser igual ao endpoint url do services-config.xml
A ideia básica é alterar o endpoint url para ser independente de servidor.
[]s
Entendi.
ExcluirPoderia me enviar seu e-mail para goust_arcari@yahoo.com.br
Gostaria de uma opinião em um problema que estou tendo.
estou tentando resolver pelo GUJ sem sucesso.
Será que pode dar uma ajuda?
Segue o link
http://www.guj.com.br/java/303125-erro-em-conexoes-remotas