Depois de fuçar (e muito), vários e vários dias sobre o assunto BlazeDS, venho aqui ao forum para pedir algumas dicas dos usuários mais experiêntes no assunto.
Primeiramente eu gostaria de saber, por que 99% dos artigos espalhados pela WEB citam o Spring como framework MVC, e não outro qualquer, como Struts, VRaptor... (esse ultimo tem um post no blog da caelum porem ensinando a trabalhar com JSON).
Em segundo lugar, gostaria de saber por que novamente em 99% dos artigos, o servidor de aplicações é oTomcat, e nao o Glassfish por exemplo. Existe alguma limitação quanto a este ? Aqui na empresa eu utilizo apenas o Glassfish, e estou na dúvida sobre a compatiblidade, ja que ele nunca é citado.
Agora vamos ao problema mais cabeludo: Não consigo fazer a comunicação utilizando o BlazeDS. Só consegui fazer a integração através do objeto HTTPService, atraves de mensagens JSON, porem este metodo se mostrou muito ineficiente, ja que em meus projetos eu uso VRaptor, e eu gostei da ideia de "espelhamento" entre uma entidade JAVA e ActionScript 3.
Tentei seguir o tutorial
http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensource-para-sistemas-web-parte-1/
porem não obtive sucesso. Mais uma vez noto que 99% dos artigos citam Eclipse e não Netbeans... por que ?
Meus fontes ficaram assim:
Classe de servico (logica), que se comunicara diretamente com o flex:package br.com.facenet.javaflex.servico;
import br.com.facenet.javaflex.entidade.Aluno;
import br.com.facenet.javaflex.persistencia.AlunoDAO;
import org.vraptor.annotations.Component;
@Component
public class AlunoLogic {
private Aluno aluno;
private AlunoDAO dao;
private String resultado;
public String matricula(Aluno a) {
dao.matricula(a);
return resultado = "sucesso";
}
public Aluno getAluno() {
return aluno;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<services-config>
<services>
<service-include file-path="remoting-config.xml" />
<default-channels>
<channel ref="my-amf"/>
</default-channels>
</services>
<channels>
<channel-definition id="my-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>
</channels>
<logging>
<!-- You may also use flex.messaging.log.ServletLogTarget -->
<target class="flex.messaging.log.ConsoleTarget" level="Error">
<properties>
<prefix>[BlazeDS] </prefix>
<includeDate>false</includeDate>
<includeTime>false</includeTime>
<includeLevel>true</includeLevel>
<includeCategory>false</includeCategory>
</properties>
<filters>
<!--<pattern>Endpoint.*</pattern>-->
<!--<pattern>Service.*</pattern>-->
<pattern>Message.*</pattern>
<pattern>DataService.*</pattern>
<pattern>Configuration</pattern>
</filters>
</target>
</logging>
<system>
<redeploy>
<enabled>true</enabled>
<watch-interval>20</watch-interval>
<watch-file>{context.root}/WEB-INF/flex/services-config.xml</watch-file>
<watch-file>{context.root}/WEB-INF/flex/remoting-config.xml</watch-file>
<touch-file>{context.root}/WEB-INF/web.xml</touch-file>
</redeploy>
</system>
</services-config>
<?xml version="1.0" encoding="UTF-8"?>
<service id="remoting-service"
class="flex.messaging.services.RemotingService">
<adapters>
<adapter-definition id="java-object"
class="flex.messaging.services.remoting.adapters.JavaAdapter"
default="true" />
</adapters>
<default-channels>
<channel ref="my-amf" />
</default-channels>
<destination id="alunoLogic">
<properties>
<source>
com.br.facenet.javaflex.servico.AlunoLogic
</source>
</properties>
</destination>
</service>
Componente no flex que realiza a chamada Remota:
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
import mx.controls.Alert;
import entidade.Aluno;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
private var aluno : Aluno;
public function salvar() : void {
this.aluno = new Aluno();
this.aluno.idAluno = new Number(codigoInput.text);
this.aluno.nome = alunoInput.text;
this.aluno.serie = serieInput.text;
this.aluno.matriculado = matriculaInput.text;
alunoService.matricula(aluno);
}
public function onFault(event:FaultEvent) : void {
Alert.show("Erro de conexao com o servidor de aplicacoes", "Erro do Sistema");
}
public function onSuccess(event:ResultEvent) : void {
Alert.show("Opa conectou com sucesso", "ihullll");
}
]]>
</mx:Script>
<mx:RemoteObject
id = "alunoService"
fault = "onFault(event)"
result = "onSuccess(event)"
showBusyCursor = "true"
destination = "alunoLogic"
/>
<mx:Label x="24" y="79" text="Código"/>
<mx:Label x="25" y="105" text="Aluno"/>
<mx:Label x="26" y="131" text="Serie"/>
<mx:Label x="26" y="157" text="Matrícula"/>
<mx:TextInput x="96" y="77" id="codigoInput"/>
<mx:TextInput x="96" y="103" id="alunoInput"/>
<mx:TextInput x="96" y="129" id="serieInput"/>
<mx:TextInput x="96" y="155" id="matriculaInput"/>
<mx:Button x="120" y="213" label="Salvar" click="salvar()"/>
</mx:WindowedApplication>
Lembrando que todos os jars referentes ao vraptor e blazeDS estao ok.
por ultimo meu web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>vraptor2</servlet-name>
<servlet-class>org.vraptor.VRaptorServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>vraptor2</servlet-name>
<url-pattern>*.logic</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>MessageBrokerServlet</servlet-name>
<servlet-class>
flex.messaging.MessageBrokerServlet
</servlet-class>
<init-param>
<param-name>services.configuration.file</param-name>
<param-value>/WEB-INF/flex/services-config.xml</param-value>
</init-param>
<init-param>
<param-name>flex.write.path</param-name>
<param-value>/WEB-INF/flex</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>MessageBrokerServlet</servlet-name>
<url-pattern>/messagebroker/*</url-pattern>
</servlet-mapping>
</web-app>
Se alguem quiser as entidades em JAVA e AS3 bem como a classe persistente (nao esta conectando com banco, somente para testes), avisa que eu posto aqui para testes.
Agradeço qualquer informação. Obrigado !