Pessoal,
não sei quantos de vocês ja tiveram essa "problema", mas, usando o
Fluorine.Net você pode colocar no seu arquivo de configuração o
services-config.xml apenas um mapeamento para chamar qualquer classe,
usando a tag "source" configurada como "*" <source>*</source> e
apenas na propriedade "source" do seu objeto "RemoteObject"
especificar que classe quer acessar.
Você pode achar isso bobo e que se pode mapear todas as classes, para
sistemas pqnos talvez, mas, para sistemas grandes é uma perda de
tempo total alem do que pode levar a erros chatos de serem
encontrados.
Como o Granite não tem esse suporte resolvi adiciona-lo eu mesmo e
para quem quiser ai vai dica:
Modifique o arquivo:
org.granite.messaging.service.SimpleServiceFactory.java na linha 59,
adicione o seguinte codigo:
/*************/
Destination d = destination;
if (destination.getProperties().get("source").equals("*")){
Map<String, Object> propertiesMap = new HashMap<String, Object>();
propertiesMap.put("source", request.getSource());
d = new Destination(destination.getId(),
destination.getChannelRefs
(), propertiesMap, destination.getRoles());
}
/**************/
E modifique o codigo que fica logo abaixo desse que você adicionou:
/**************/
String key = SimpleServiceInvoker.class.getName() + '.' +
destination.getId();
SimpleServiceInvoker service = (SimpleServiceInvoker)cache.get(key);
if (service == null) {
service = new SimpleServiceInvoker(destination, this);
cache.put(key, service);
}
/*****************/
Para:
/*****************/
String key = SimpleServiceInvoker.class.getName() + '.' +
d.getProperties().get("source"); //<--Muda Aqui
SimpleServiceInvoker service = (SimpleServiceInvoker)cache.get(key);
if (service == null) {
service = new SimpleServiceInvoker(d, this); //<--Muda Aqui
cache.put(key, service);
}
/****************/
Com isso você pode colocar a tag <source>*</source> do mapeamento no
arquivo de mapeamento services-config.xml desta forma afim de chamar
qualquer classe, como no exemplo abaixo:
<services>
<service
id="granite-service"
class="flex.messaging.services.RemotingService"
messageTypes="flex.messaging.messages.RemotingMessage">
<destination id="pojo">
<channels>
<channel ref="my-graniteamf"/>
</channels>
<properties>
<scope>session</scope>
<source>*</source>
</properties>
</destination>
</service>
</services>
E no seu mxml mudar o objeto RemoteObject adicionando a classe na
propriedade source, como demostrado abaixo:
<mx:RemoteObject id="srv" showBusyCursor="true" destination="pojo"
source="test.pojo.PojoService"/>
Espero que isso ajude alguem, eu postei no grupo do GDS no yahoo,
pois, tinha gente pedindo isso lá tambem, e achei que seria
interessante colocar aqui, uma vez que tambem deve ter gente que usa
o flex com java e .net e ja sentiu falta disso!
Abraço a todos,
Jack