Stefan Horochovec

Blog sobre tecnologias que mudam a vida dos usuários

Flex 4 + BlazeDS 4 + Java + DataWizards

with 27 comments

Olá pessoal

A grande sensação ontem (23/03) foi a publicação pelo guru Christophe Coenraets demonstrando um vídeo aonde através do Flash Builder ele consumiu recursos de um projeto Java sem codificação no ambiente Flex. Nesse artigo vou demonstrar como trabalhar com esse recurso passo-a-passo.

Bom, primeiro passo é você ter em seu computador todas as ferramentas necessárias. Neste caso, você irá utilizar o Eclipse Galileu JEE, Flash Builder (stand-alone ou plugin) e do BlazeDS 4 Beta.

A aplicação que desenvolveremos nesse tutorial é a mesma desenvolvida no post anterior, com a diferença que aonde foi feito codificação manual no ambiente Flex, agora, iremos utilizar o Flash Builder para a geração do código fonte.

Bom, no Eclipse Galileo para iniciar um projeto, eu escolhi a opção File -> New -> Web -> Dynamic Web Project, conforme abaixo:

E depois configurei o projeto da seguinte maneira:

Bom, depois de configurar o projeto, iremos criar um Bean para serializarmos algumas informações que serão enviadas para o Flex. A idéia é bastante simples, irei criar um model para uma simples agenda de contato.

?Download Contato.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package br.com.horochovec.model;
 
import java.io.Serializable;
 
/**
 * Modelo para agenda de contato
 * @author Stefan Horochovec 
 */
public class Contato implements Serializable {
 
	/**
	 *
	 */
	private static final long serialVersionUID = 1L;
 
	private String nome;
 
	private String email;
 
	public String getNome() {
		return nome;
	}
 
	public void setNome(String nome) {
		this.nome = nome;
	}
 
	public String getEmail() {
		return email;
	}
 
	public void setEmail(String email) {
		this.email = email;
	}
 
}

E em seguida, criarei um serviço que irá adicionar em um ArrayList os contatos que serão enviados do Flex para o Java.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package br.com.horochovec.service;
 
import java.util.ArrayList;
 
import br.com.horochovec.model.Contato;
 
/**
 * Serviço para manutenção dos contatos
 * @author Stefan Horochovec 
 */
public class ContatoService {
 
	private static ArrayList listContato = new ArrayList(); 
 
	/**
	 * Adiciona um contato a lista
	 * @param contato
	 */
	public void addContato(Contato contato) {
		listContato.add(contato);
	}
 
	/**
	 * Retorna a lista de contatos
	 * @return
	 */
	public ArrayList getListContato() {
		return listContato;
	}
 
}

Após isso, já temos uma simples aplicação pronta para trabalhar com o Flex, basta apenas configurar os arquivos .XML para que o BlazeDS possa funcionar.

A partir de agora é necessário que você já tenha descompactado o arquivo blazeds-bin-4.0.0.14910.zip. Após descompactá-lo, você terá que descompactar o arquivo blazeds.war que surgiu da descompactação anterior. Como resultado, obterá o seguinte:

Bom, podemos copiar para o diretório WebContent/WEB-INF de nosso projeto Java, os diretórios: flex/, lib/, spring/ e os arquivos: flex-servlet.xml e web.xml. Após copiar esse conteúdo, o primeiro arquivo que iremos configurar, é o arquivo web.xml que fica dentro da pasta WebContent/WEB-INF/.

Para essa configuração, iremos alterar o conteúdo do arquivo web.xml que veio dentro do arquivo blazeds.war que foi previamente descompactado.

Perceba que os parametros da aplicação foram alterados e também foi alterado o valor da propriedade useAppserverSecurity para false. O resultado será:

?Download web.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
 
    <display-name>FlexDuck</display-name>
    <description>FlexDuck</description>
 
    <!-- Http Flex Session attribute and binding listener support -->
    <listener>
        <listener-class>flex.messaging.HttpFlexSession</listener-class>
    </listener>
 
    <!-- MessageBroker Servlet -->
    <servlet>
        <servlet-name>MessageBrokerServlet</servlet-name>
        <display-name>MessageBrokerServlet</display-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>
        <load-on-startup>1</load-on-startup>
    </servlet>
 
    <servlet>
        <servlet-name>RDSDispatchServlet</servlet-name>
		<display-name>RDSDispatchServlet</display-name>
        <servlet-class>flex.rds.server.servlet.FrontEndServlet</servlet-class>
		<init-param>
			<param-name>useAppserverSecurity</param-name>
			<param-value>false</param-value>
		</init-param>        
        <load-on-startup>10</load-on-startup>
    </servlet>
 
    <servlet-mapping id="RDS_DISPATCH_MAPPING">
        <servlet-name>RDSDispatchServlet</servlet-name>
        <url-pattern>/CFIDE/main/ide.cfm</url-pattern>
    </servlet-mapping>
 
    <servlet-mapping>
        <servlet-name>MessageBrokerServlet</servlet-name>
        <url-pattern>/messagebroker/*</url-pattern>
    </servlet-mapping>
 
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
    </welcome-file-list>
 
    <!-- for WebSphere deployment, please uncomment -->
    <!--
    <resource-ref>
        <description>Flex Messaging WorkManager</description>
        <res-ref-name>wm/MessagingWorkManager</res-ref-name>
        <res-type>com.ibm.websphere.asynchbeans.WorkManager</res-type>
        <res-auth>Container</res-auth>
        <res-sharing-scope>Shareable</res-sharing-scope>
    </resource-ref>
    -->
 
<!--
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>
			/WEB-INF/spring/*-config.xml
		</param-value>
	</context-param>
 
    <filter>
        <filter-name>springSecurityFilterChain</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    </filter>
 
    <filter-mapping>
      <filter-name>springSecurityFilterChain</filter-name>
      <url-pattern>/*</url-pattern>
    </filter-mapping>
 
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
 
	<servlet>
		<servlet-name>flex</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
 
	<servlet-mapping>
    	<servlet-name>flex</servlet-name>
    	<url-pattern>/messagebroker/*</url-pattern>
 	</servlet-mapping>
 
-->
 
</web-app>

Feito isso, iremos adicionar dentro da pasta WebContent a pasta flex que foi previamente descompactada do arquivo blazeds.war, e também todo o conteúdo da pasta lib para dentro do diretório WebContent/WEB-INF/lib , obtendo o seguinte resultado:

Feito isso, iremos configurar o único arquivo .xml do BlazeDS para que esse exemplo funcione. O arquivo WEB-INF/flex/remoting-config.xml. Iremos adicionar uma configuração para informar ao BlazeDS sobre o serviço ContatoService que foi criado anteriormente, conforme abaixo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?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="ContatoService">
    	<properties>
    		<source>br.com.horochovec.service.ContatoService</source>
    	</properties>
    </destination>
 
</service>

Após essa última configuração, podemos exportar o nosso projeto para um servidor web. Nesse caso, utilizaremos o Tomcat 6.x. Neste artigo não entrarei em detalhes de sua instalação e configuração.

Bom, as configurações no projeto Java já foram finalizadas, e considerando que o deploy da aplicação dentro do Tomcat já foi realizado, a partir deste momento iremos trabalhar diretamente com o Flash Builder.

Neste artigo irei demonstrar a comunicação utilizando o Flash Builder e a versão do Flex 4. Você pode fazer o download da versão 4.0 do Flash Builder e do Flex 4 SDK aqui.

Após instalado e iniciado o Flash Builder, iremos criar um projeto no seguinte molde:

As configurações feitas na segunda tela de configuração são bastante importantes. Fazendo elas da forma correta, você estará apto a iniciar o projeto sem fazer novas configurações.

Na primeira linha, em Root Folder, foi apontado o diretório de deploy da minha aplicação dentro do meu servidor de aplicação.

Na segunda linha, em Root URL, foi apontado o caminho da URL para abertura da aplicação em meu navegador de internet.

Na terceira linha, em ContextRoot, apontamos o nome da nossa aplicação.

Na quarta e ultima linha, em Output folder, apontamos o diretório de onde deve ser exportados os arquivos quando compilados. Para esse tutorial, foi apontado diretamente o diretório de minha aplicação dentro do meu servidor Tomcat.

Como resultado, o Flash Builder irá criar e disponibilizar no workspace um projeto da seguinte forma:

É muito importante fazer a conferência de uma configuração gerada automaticamente pelo Flash Builder em cima dos parametros informados na segunda etapa da criação do projeto. No menu ‘Project’ vá na opção ‘Properties’ e confira as propriedades de acordo com a imagem abaixo:

Iremos criar uma tela no Flash Builder que contenha dois campos text input para preencher as informações do nome e email do contato, e também um grid para conter a lista dos contatos que serão adicionados no Java e retornarão ao Flex através do BlazeDS.

Segue sua implementação

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
			   xmlns:s="library://ns.adobe.com/flex/spark" 
			   xmlns:mx="library://ns.adobe.com/flex/mx" height="419">
 
 
	<fx:Declarations>
 
	</fx:Declarations>
 
 
	<s:Panel width="400" height="137" title="Cadastro" left="10" top="10">
 
	</s:Panel>
 
	<s:Panel x="12" y="166" width="400" height="227" title="Pesquisa" left="10">
		<mx:DataGrid x="10" y="10" bottom="30" left="5" right="5" top="5" id="grid">
		</mx:DataGrid>
		<s:Button x="-1" y="163" label="Listar todos" left="5" bottom="5" id="button"/>
	</s:Panel>
</s:Application>

A partir deste momento, usaremos os recursos de Data/Services presentes no Flash Builder 4 para a geração da comunicação com o Java.

Primeiro, iremos conectar o Flash Builder com o BlazeDS. Para isso, na aba “Data/Services” clique na opção “Connect to Data/Service”. Caso ela não esteja disponivel em seu workspace, vá ao menu “Window” e marque a opção “Data/Services”.

Feito isso, na próxima tela, marque a opção “BlazeDS”, clique em Next e marque a opção para não utilizar controle de acesso. Conforme as telas abaixo:

Na última tela, você deve marcar os serviços que deseja adicionar a aplicação, com opção de definição de endereços de pacotes e depois finalizar a criação do Objeto, conforme:

Após finalizar a configuração do serviço remoto, obtemos o seguinte resultado no Flash Builder.

Agora, iremos definir que no momento do click no botão logo abaixo do DataGrid, a aplicação deverá invocar o método getListContato().

O primeiro passo para isso, é clicar com o botão direito sobre o botão com do painel que contem o DataGrid e marcar a opção “Generate Service Call“. Feito isso configure a tela do serviço conforme apresentado abaixo:

Feito isso, selecione o DataGrid e clicando com o botão direito dentro dele, selecione a opção “Bind to Data” e configure a tela conforme informado abaixo:

Nesse momento, o painel responsável por listar as informações da nossa agenda de contato já está finalizado.

Agora, clicando novamente com o botão direito em cima do DataGrid, clique na opção “Generate Details Form” e configure a tela conforme abaixo:

O formulário gerado será adicionado no mesmo container que estiver o DataGrid, portanto, será necessário reposicioná-lo dentro do Panel já criado, conforme imagem abaixo:

Ok, agora basta configurarmos o clique do botão de salvar para que adicione novos contatos.

O primeiro passo é alterar o label do botão para “Cadastrar“.

O segundo passo é clicar com o botão direito sobre o botão de cadastro e selecionar a opção “Generate Service Call” e configure a opção da seguinte forma:

Ao terminar essa configuração, você será direcionado diretamente para a implementação do click do botão com a chamada do serviço remoto. A implementação gerada do método será a seguinte:

1
2
3
4
5
6
protected function button2_clickHandler(event:MouseEvent):void
{
	contato.email = emailTextInput.text;
	contato.nome = nomeTextInput.text;
	addContatoResult.token = contatoService.addContato(/*Enter value(s) for */ arg0);
}

E você deverá fazer a seguinte alteração. Adicionar o parametro a ser enviado no método addContato() e inicializar o objeto contato, da seguinte forma:

1
2
3
4
5
6
7
protected function button2_clickHandler(event:MouseEvent):void
{
	contato = new Contato();
	contato.email = emailTextInput.text;
	contato.nome = nomeTextInput.text;
	addContatoResult.token = contatoService.addContato(contato);
}

Com isso, nosso projeto estará enviado as informações para o Java. Agora, para finalizar, iremos adicionar um evento para disparar um método quando tivermos o resultado do serviço remoto.

No CallResponder com o id “addContatoResult” pressione o CTRL + SPACE para acionar o code complete e acione o event “result“, e em seguida, solicite para que seja adicionado o ResultHandler para o event adicionado, conforme imagens abaixo:

E na função adicionada no código devemos fazer a seguinte implementação:

1
2
3
4
5
protected function addContatoResult_resultHandler(event:ResultEvent):void
{
	contato = new Contato();
	getListContatoResult.token = contatoService.getListContato();
}

Rodando a aplicação, teremos como resultado no navegador o seguinte:

E como resultado final no código fonte:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
			   xmlns:s="library://ns.adobe.com/flex/spark" 
			   xmlns:mx="library://ns.adobe.com/flex/mx" height="419" xmlns:services="services.*" xmlns:valueObjects="valueObjects.*">
	<fx:Script>
		<![CDATA[
			import mx.controls.Alert;
			import mx.rpc.events.ResultEvent;
 
			protected function button_clickHandler(event:MouseEvent):void
			{
				getListContatoResult.token = contatoService.getListContato();
			}
 
 
			protected function button2_clickHandler(event:MouseEvent):void
			{
				var contato : Contato = new Contato();
				contato.email = emailTextInput.text;
				contato.nome = nomeTextInput.text;
				addContatoResult.token = contatoService.addContato(contato);
			}
 
 
			protected function addContatoResult_resultHandler(event:ResultEvent):void
			{
				contato = new Contato();
				getListContatoResult.token = contatoService.getListContato();
			}
 
		]]>
	</fx:Script>
 
 
	<fx:Declarations>
		<s:CallResponder id="getListContatoResult"/>
		<services:ContatoService id="contatoService" fault="Alert.show(event.fault.faultString + '\n' + event.fault.faultDetail)" showBusyCursor="true"/>
		<valueObjects:Contato id="contato"/>
		<s:CallResponder id="addContatoResult" result="addContatoResult_resultHandler(event)"/>
	</fx:Declarations>
 
	<fx:Binding source="grid.selectedItem as Contato" destination="contato"/>
 
	<s:Panel width="400" height="137" title="Cadastro" left="10" top="10">
		<mx:Form defaultButton="{button2}" x="1" y="-4" bottom="0" left="0" right="0" top="0">
			<mx:FormItem label="Email">
				<s:TextInput id="emailTextInput" text="{contato.email}"/>
			</mx:FormItem>
			<mx:FormItem label="Nome">
				<s:TextInput id="nomeTextInput" text="{contato.nome}"/>
			</mx:FormItem>
			<s:Button id="button2" label="Cadastrar" click="button2_clickHandler(event)"/>
		</mx:Form>
 
	</s:Panel>
 
	<s:Panel x="12" y="166" width="400" height="227" title="Pesquisa" left="10">
		<mx:DataGrid x="10" y="10" bottom="30" left="5" right="5" top="5" id="grid" dataProvider="{getListContatoResult.lastResult}">
			<mx:columns>
				<mx:DataGridColumn headerText="email" dataField="email"/>
				<mx:DataGridColumn headerText="nome" dataField="nome"/>
			</mx:columns>
		</mx:DataGrid>
		<s:Button x="-1" y="163" label="Listar todos" left="5" bottom="5" id="button" click="button_clickHandler(event)"/>
	</s:Panel>
</s:Application>

Para fazer o download do projeto clique aqui.

Espero ter ajudado, um abraço :)

Written by Stefan Horochovec

março 24th, 2010 at 11:55 pm

27 Responses to 'Flex 4 + BlazeDS 4 + Java + DataWizards'

Subscribe to comments with RSS or TrackBack to 'Flex 4 + BlazeDS 4 + Java + DataWizards'.

  1. [...] – Flex 4 + BlazeDS 4 + Java + DataWizards [...]

  2. Pois é Stefan, o flex 4 vem recheado de processo praticamente autónomos, se por um lado será super facil ligar o flex a qualquer outra linguagem backend, eu acredito que esta nova versão vai encher as listas de discussão com milhares de duvidas relativas à nova arquitetura de código mxml… e acima de tudo vai fazer com que muitos desistam simplesmente do flex 4! mas isso são os fracos! hehehehe

    Mas sem duvida esta nova versão não poupou esforços da parte da adobe, e simplesmente está genial….

    Parabens pelo tutorial, com certeza será muito tuil, principalmente quando uma das minhas metas desse ano é aprender java!

    Abraço.

    Mário Santos

    26 mar 10 at 4:07

  3. Stefan,
    Comecei a testar o FB4 num sistema que tenho e estou passando por um único problema. Meu sistema foi dividido em 2 projetos (1 Dynamic Web Project + Flex Project), no entanto, toda vez que altero o projeto Flex o swf gerado (na pasta WebContent do projeto Java) não é automaticamente publicado no Tomcat como acontecia no FB3, estou contornando esse ‘BUG’ dando um F5 no projeto Java a cada compilação. Sabe como devo proceder para ajustar isso?
    Desde já agradeço a atenção,

    Daniel

    26 mar 10 at 21:43

  4. Opa, como vai Mário, obrigado pela visita ao blog!

    Concordo contigo, acredito que muitos irão desistir do Flex4 porque a coisa ficou mais complexa mesmo, o novo SDK é muito melhor, mas bem mais complicado de trabalhar com ele.

    A simplicidade do antigo SDK na forma de trabalhar com o Flex chamou muitos usuários, acho que nessa nova versão isso fica a critério da IDE, o SDK ficou melhor, mas ao mesmo tempo bem mais complexo!

    Mas como você mesmo disse, isso são para os fracos :D

    Abraço

    Stefan Horochovec

    27 mar 10 at 13:30

  5. @Daniel

    Olá, isso é bem simples de resolver. Basta você mudar o local de deploy do teu projeto Flex para dentro do teu servidor web, seja ele um tomcat ou um Jboss da vida por exemplo. Como proceder?

    Vá ao menu “Project -> Properties” e na janela que abrir, no menu esquerdo, selecione a opção “Flex Server” e troque o caminho na opção “Output Folder”.

    Espero ter ajudado e obrigado por visitar o blog!

    Stefan Horochovec

    27 mar 10 at 13:36

  6. Obrigado pela pronta resposta Stefan, alias bem simples mesmo.
    Ah, acredito que ainda esteja em tempo de parabenizá-lo pela ótima qualidade do post.
    Att.,

    Daniel

    27 mar 10 at 22:56

  7. @Stefan,
    Hoje aqui, comecei a notar um pequeno problema usando este procedimento. Toda vez que altero um arquivo de configuração e re-inicio o servidor web ele limpa o diretório da aplicação removendo todos os meus swfs. Você já passou por isso? Se sim, como resolveu?
    Desculpe o incômodo.

    Daniel

    29 mar 10 at 16:11

  8. Stefan,

    parabéns pelo post! Há tempos venho procurando por algo semelhante, porém sem sucesso.

    Estou com um problema. Fiz tudo do jeito que você falou, mas quando crio o projeto no FB4 e mando rodar só para testar dá o seguinte problema:

    HTTP Status 404 – /FlexDuck//FlexDuck.html

    type: status report.. e na descrição diz que o recurso não está disponível.

    Já tenho minha aplicação no diretório webapps do Tomcat 6.0.24. E vi que os arquivos do projeto Flex foram compilados lá dentro quando tentei rodar a aplicação.

    Quando clico duas vezes direto no arquivo.html.. tudo funciona bem. Porém não roda pelo servidor.

    Pode me dar uma ajuda?

    Danilo

    12 abr 10 at 16:36

  9. E o engraçado,

    aparecem duas barras // .. no erro, confira:

    HTTP Status 404 – /FlexDuck//FlexDuck.html

    Danilo

    12 abr 10 at 16:39

  10. Stefan,

    Fiz todo o procedimento, mas quando eu tento fazer a conexão com o BlazeDS, seleciono “no password required” e clico em OK, ele me retorna a seguinte mensagem: “RDS server message: Connection refused: connect”.
    O que eu to fazendo de errado ? você poderia me ajudar ??
    Thank’s

    Kleyton

    14 abr 10 at 15:43

  11. @Kleyton
    Faça o deploy do projeto java em seu Tomcat e o Flash Builder irá se conectar ao servlet e listar os serviços remotos.

    Abraço

    Stefan Horochovec

    16 abr 10 at 2:33

  12. Muito bom stefan, já tinha testado o wizard até como uma expectativa muito boa, e realmente simplifica muito a comunicação com os serviços disponibilizados no backend… mas :)

    no caso do wizard do blazeds não obtive o sucesso que gostaria, como meus remoting-config não mapeio classes java e sim uso factory do spring o blazeds(Wizard) não conseguiu mapear meu serviços, então pelo que entendi assim como no visual studio da M$ o wizard servem em 90% dos casos o que já é melhor que nada :P

    Abraços!

    jandersonfc

    7 mai 10 at 9:49

  13. Artigo sensasional… mas apareceu um problema aqui…

    RDS server message: erro executing RDS command. Status code: 404, reason: not found

    Obrigado pela ajuda desde já…
    :D

    ThiagoVentura

    27 mai 10 at 11:51

  14. @Thiago
    Antes de voce tentar conectar com o RDS, faça o deploy em seu servidor de aplicação e deixe ele iniciado. Deve funcionar perfeitamente dai.

    Abraço e obrigado por visitar o blog!

    Stefan Horochovec

    30 mai 10 at 13:27

  15. @danilo tem certeza que seu servidor TomCat está startado cara?

    Ricardo

    4 jun 10 at 9:38

  16. ola

    como eu faço pra na hora que eu compilo o projeto e publico no webapp do tom cat pra ele nao publicar os
    .java do projeto so os .class????

    Andre

    6 jul 10 at 16:38

  17. Bom dia Stefan, baixei o BlazeDs porém ao descompactar o .war e acessar a pasta WEB-INF não encontrei a pasta Spring nem o arquivo flex-servlet.xml, a versão do BlazeDS que baixei foi a blazeds-bin-4.0.0.14931…

    Toni

    17 jul 10 at 12:46

  18. Projeto ficou muito bem escrito parabéns mesmo, so que gostaria de saber como deve ser trabalhada esta mesma classe se forem acrescentado a ela “DataNasc” tipo Date e “Salario” tipo Double, sei que não tem muito a ver estes atribuitos com a classe contato mas é que ja tentei de tudo e não consegui implementar.

    Lazaro

    25 set 10 at 13:57

  19. Toda vez que chamo pela primeria vez meu método do Remote Object dispara a exceção lista no final deste post. Entretanto depois o sistema funciona perfeitamente e todos os métodos são executados corretamente sem exceção. Tentei de tudo mas não encontrei uma resposta. É como se não tivesse por default um canal aberto e este canal fosse aberto somente depois da primeira conexão.
    Segue a abaixo a exceção:

    22:08:50,687 INFO [AjpProtocol] Starting Coyote AJP/1.3 on ajp-127.0.0.1-8009
    22:08:50,734 INFO [ServerImpl] JBoss (Microcontainer) [5.1.0.GA (build: SVNTag=JBoss_5_1_0_GA date=200905221053)] Started in 2m:13s:94ms
    22:10:00,062 ERROR [[DispatcherServlet]] Servlet.service() for servlet DispatcherServlet threw exception
    java.lang.NoSuchMethodError: edu.emory.mathcs.backport.java.util.concurrent.locks.ReentrantLock$NonfairSync.setExclusiveOwnerThread(Ljava/lang/Thread;)V
    at edu.emory.mathcs.backport.java.util.concurrent.locks.ReentrantLock$NonfairSync.lock(ReentrantLock.java:186)
    at edu.emory.mathcs.backport.java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:266)
    at edu.emory.mathcs.backport.java.util.concurrent.ConcurrentHashMap$Segment.put(ConcurrentHashMap.java:418)
    at edu.emory.mathcs.backport.java.util.concurrent.ConcurrentHashMap.put(ConcurrentHashMap.java:884)
    at flex.messaging.HttpFlexSession.setHttpSession(HttpFlexSession.java:550)
    at flex.messaging.HttpFlexSession.getFlexSession(HttpFlexSession.java:251)
    at org.springframework.flex.servlet.MessageBrokerHandlerAdapter.handle(MessageBrokerHandlerAdapter.java:74)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:771)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:716)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:560)

    Romulo

    16 out 10 at 22:23

  20. Cara você não poderia fazer uma vídeo aula para facilitar mais pra nossos estudo … Se for possível eu agradeço

    Rafael Faria

    15 mar 11 at 15:15

  21. O Download do exemplo nao esta funcionando, pode postar novamente ou me enviar por e-mail

    obrigado

    Leandro

    19 abr 11 at 8:42

  22. Stefan estou seguindo o tutorial passo a passo mas acontece o seguinte:

    quando clico em Conect to Data/Services ele acha a classe ContatoService na lista e o pacote que ela se encontra mas da o seguinte erro:

    br.com.horochevec.service.ContatoService is not available in the specified location

    Try importing by unselecting destination ContatoService

    pode me ajudar?

    Valeu

    Gustavo

    24 abr 11 at 2:39

  23. Valeu Stefan ótimo post ajudou bastante.

    Tiago Zis

    26 abr 11 at 14:14

  24. Valeu Thiago,

    Obrigado por comentar o post, abraço

    Stefan Horochovec

    29 abr 11 at 20:30

  25. Fala Gustavo

    Dá uma conferida no teu remoting-config.xml e veja se esta declarado o serviço corretamente. Caso você deixe algum serviço mapeado e a classe não exista ele vai dar esse erro.

    Abraço, qualquer coisa pergunta ai fera.

    Obrigado por visitar o blog

    Stefan Horochovec

    29 abr 11 at 20:32

  26. Boa Noite Stefan, parabéns pelo tutorial esta de ótima qualidade!. Obrigado me ajudou muito!

    Att.
    Márcio Zonta

    Marcio Zonta

    3 set 11 at 19:56

  27. Oi Márcio,

    Obrigado pelo comentário, fico feliz em ter ajudado!

    Abraço

    Stefan Horochovec

    6 set 11 at 10:38

Leave a Reply

More in BlazeDS, Flex 4, Java (11 of 23 articles)