flex parte2

64
Rodrigo Fraga on Flex and Java Java, Adobe Flex, Adobe AIR, Arquitetura de Software e Práticas de Desenvolvimento de Software. Home Labs Contato Seja Bem Vindo! Neste Blog você encontrará tutoriais, visões particulares e screencasts. Sinta-se a vontade para criticar, opinar ou elogiar. Hospedagem é na Insite 60 GB de espaço, 1200 GB de tráfego Suporte por 0800 e 20 dias de teste www.insite.com.br Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou... 1 de 64 1/1/2009 11:54

Upload: api-19660391

Post on 13-Jun-2015

712 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Flex Parte2

Rodrigo Fraga on Flex and JavaJava, Adobe Flex, Adobe AIR, Arquitetura de Software e Práticas de Desenvolvimento de Software.

Home Labs Contato

Seja Bem Vindo!Neste Blog você encontrará tutoriais,visões particulares e screencasts.Sinta-se a vontade para criticar, opinar ouelogiar.

Hospedagem é na Insite60 GB de espaço, 1200 GB de tráfegoSuporte por 0800 e 20 dias de testewww.insite.com.br

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

1 de 64 1/1/2009 11:54

Page 2: Flex Parte2

JAN

27Adobe BlazeDS, Adobe Flex, Hibernate, Java, RIA, Spring Framework

Integrando Adobe Flex + BlazeDS + SpringFramework +Hibernate - Uma Solução OpenSource para Sistemas Web.(Parte 2 - Final)

Add Categorias

Adobe AIR (2)

Adobe BlazeDS (2)

AMFPHP (2)

Adobe Flex (13)

Adobe (14)

Google (1)

Hibernate (2)

Spring Framework (2)

Java (3)

PHP (3)

RIA (2)

Vários (5)

Arquivos

abril 2008

março 2008

janeiro 2008

dezembro 2007

novembro 2007

setembro 2007

julho 2007

Porquê Flex? / Why Flex?

Manifesto Flex brasil

Integrando Adobe Flex + BlazeDS +SpringFramework + Hibernate - Uma SoluçãoOpenSource para Sistemas Web. (Parte 2 - Final)

Integrando Adobe Flex + BlazeDS +SpringFramework + Hibernate - Uma SoluçãoOpenSource para Sistemas Web. (Parte 1)

Forum sobre AdobeFlex!

Posts recentes

Tags

Adobe Flash Player Adobe FlexAdobe Flex Builder BlazeDS CSS Flex Builder Flex

Builder 3 Google Google Toolbar Hibernate Java

Modules SpringFramework Vários

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

2 de 64 1/1/2009 11:54

Page 3: Flex Parte2

Olá Pessoal!

Primeiro lugar, quero agradecer a todos pelo feedback do post anterior, isto é motivante eme dá ânimo em concluir este, e outros que virão.

Hoje o foco deste artigo é que você termine ele sabendo:

Configurar os Beans do Spring através de annotations;

Integrar o esquema de Beans do Spring com os services do Flex através de umaFactory;

Configurar o Spring para usar o Hibernate para abstrair nosso banco de dados;

Para isso vamos a uma breve introdução a estes poderosos frameworks

Breve Introdução ao Spring

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

3 de 64 1/1/2009 11:54

Page 4: Flex Parte2

Como não sou fã de ficar re-escrevendo a roda, vou tentar dar a você leigo em Spring, umcaminho para estudar.

Primeiro de tudo, leia este artigo feito pelo Phillip Calçado (Shoes)

apostila-spring.pdf Valeu Ebertom pela hospedagem! =)

Uma Introdução ao que o SpringFramework pode oferecer:

http://blog.fragmental.com.br/2005/08/31/spring-em-acao/http://www.ime.usp.br/~reverbel/SMA/Slides/seminarios/spring.pdfhttp://imasters.uol.com.br/artigo/4497/java/spring_framework_introducao/

Outros Tutoriais

http://www.javafree.org/content/view.jf?idContent=46

http://www.devmedia.com.br/articles/viewcomp.asp?comp=6627http://www.devmedia.com.br/articles/viewcomp.asp?comp=6628http://www.devmedia.com.br/articles/viewcomp.asp?comp=6653

Spring Annotations

http://blog.interface21.com/main/2006/11/28/a-java-configuration-option-for-spring/http://weblogs.java.net/blog/seemarich/archive/2007/11/annotation_base_1.html

Exemplos de códigos

http://paulojeronimo.com/arquivos/tutoriais/tutorial-spring-framework.ziphttp://www.java2s.com/Code/Java/Spring/CatalogSpring.htm

Documentação

The Spring Framework - Reference Documentation

Bom acredito que se você que está afim de conhecer o SpringFramewok, com esses Link'sjá é possível entender quase tudo o que ele pode oferecer a sua arquitetura. Lembrando quenão é recomendável seguir com este artigo, sem antes entender como funciona IoC, AOP,DAO, com o SpringFramework.

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

4 de 64 1/1/2009 11:54

Page 5: Flex Parte2

*Nota A abordagem aqui é sobre o SpringFramework, (Framework de Negócio) e não sobreo SpringMVC, uma vez que o Flex pode se trocar objetos através do protocolo AMF3, étotalmente dispensável o uso de Frameworks MVC's.

Breve Introdução ao Hibernate

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

5 de 64 1/1/2009 11:54

Page 6: Flex Parte2

Como eu já disse, uma vez que já existe um bom conteúdo sobre Hibernate na Internet, nãohá a necessidade de re-escrever, por isso vou lhe dar a você leigo em Hibernate umasequência de Link que irá te ajudar a entender este poderoso Framework.

Uma Introdução ao que o Hibernate pode oferecer:

http://www.students.ic.unicamp.br/~ra007271/docs/white-papers/hibernate-uma_introducao_dirigida.pdfhttp://www.guj.com.br/java.tutorial.artigo.125.1.gujhttp://www.jeebrasil.com.br/mostrar/4http://www.devmedia.com.br/articles/viewcomp.asp?comp=4149

Outros Tutoriais

http://simundi.blogspot.com/2007/09/criar-uma-aplicao-com-hibernate.htmlhttp://www.hibernate.org/hib_docs/v3/reference/en/html/queryhql.htmlhttp://www.hibernate.org/hib_docs/tools/reference/en/html/plugins.htmlhttp://www.guj.com.br/posts/list/7249.java

Pacotão de PDF's

http://br.groups.yahoo.com/group/java-br/files/Hibernate/

Exemplos de código

http://www.java2s.com/Code/Java/Hibernate/CatalogHibernate.htm

Documentação

http://www.hibernate.org/hib_docs/v3/reference/en/html/

Ok, partindo do princípio que você já entendeu como funciona o Hibernate, e o Spring,vamos ao código! +)

Requerimentos:

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

6 de 64 1/1/2009 11:54

Page 7: Flex Parte2

SpringFramework 2.5 ou superior;*Vamos baixar o Spring com as dependências, isto é neste arquivo conterá todas as

libs que nós podemos por ventura usar com o Spring, como por exemplo as libs do

hibernate.

MySql 5.x Instalado;*Eu estarei usando o pacote apache friends - xampp

MySql JConnector 5.x.x;

Conhecimentos básicos sobre MySql;

Plugin Eclipse SpringIDE;*Opcional

Plugin Eclipse Hibernate Tools 3.2.x;

*Opcional

Instale os plugin's estes opcionais na verdade este artigo não fará uso deles, mas pensandono futuro seria interessante fazer uso deles.

Após isso, abra seu projeto no Eclipse que nós tinhamos criado anteriormente, O JavaFlex.

Vamos adicionar as seguintes libs ao projeto na pasta JavaFlex\WebContent\WEB-INF\lib:

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

7 de 64 1/1/2009 11:54

Page 8: Flex Parte2

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

8 de 64 1/1/2009 11:54

Page 9: Flex Parte2

*A maioria das libs podem ser encontrada no arquivo compactado que você baixou do

Spring. Lembrando também que o modelo de estilo de projeto criado no Eclipse, Dynamic

Web Project, já adiciona automaticamente ao Classpath do projeto ao você colar as libs

nesta pasta.

Como nós já tinhamos modelado um caso de uso chamado Cargo, vamos agora criar umbanco de dados para o nosso pequeno sistema.

Abra seu MySql, e execute este script sql que criará a base de dados chamada JavaFlex, etambém a tabela JAVAFLEX_CARGO;

--1.

-- Banco de Dados: `javaflex`2.

--3.

CREATE DATABASE `javaflex` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;4.

USE `javaflex`;5.

6.

--7.

-- Estrutura da tabela `javaflex_cargo`8.

--9.

10.

CREATE TABLE `javaflex_cargo` (11.

`ID_CARGO` int(10) unsigned NOT NULL auto_increment,12.

`DS_CARGO` varchar(50) collate utf8_unicode_ci NOT NULL,13.

PRIMARY KEY (`ID_CARGO`)14.

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=15.

PLAIN TEXT

CODE:

Entendendo os Pacotes, e configurando a persistência

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

9 de 64 1/1/2009 11:54

Page 10: Flex Parte2

Com o banco de dados criado, vamos mapear a tabela no banco, com o nosso Entity Cargo,para isso, crie um package chamado:

com.digows.artigos.JavaFlex.model.repository.hibernate.hbm

Neste package irá conter todos os nossos mapeamentos em xml, alguns preferem fazeruso de annotations, só que pessoalmente não gosto de acoplar códigos de annotationsem meus beans de negócio, prefiro delegar a função Mapeamento a arquivos xml's.

Neste mesmo package crie um arquivo chamado Cargo.hbm.xml, e adicione o seguinteconteúdo:

Cargo.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>1.

<!DOCTYPE hibernate-mapping PUBLIC2.

"-//Hibernate/Hibernate Mapping DTD 3.0//EN"3.

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">4.

<hibernate-mapping>5.

<class name="com.digows.artigos.JavaFlex.model.entity.Cargo"6.

table="javaflex_cargo">7.

8.

<id name="idCargo" column="ID_CARGO" type="long">9.

<generator class="native" />10.

</id>11.

12.

<property name="dsCargo" column="DS_CARGO" type="string"13.

not-null="true" length="50" />14.

</class>15.

</hibernate-mapping>16.

PLAIN TEXT

XML:

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

10 de 64 1/1/2009 11:54

Page 11: Flex Parte2

Perceba que estamos mapeando nosso entity Cargo que foi criado no post anterior com atabela JAVAFLEX_CARGO criada recém.

com.digows.artigos.JavaFlex.model.repository.hibernate

Este package irá conter classes que implementam o Pattern DAO usando oHibernate. Métodos de CRUD e querys em geral usando o Hibernate deverão estarneste pacote estes separados por casos de uso.

Neste mesmo package, vamos criar um DAO usando o hibernate para o nosso entity cargo,para isso, crie uma classe java chamada CargoHibernateDao, e adicione o seguinteconteúdo:

CargoHibernateDao.java

PLAIN TEXT

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

11 de 64 1/1/2009 11:54

Page 12: Flex Parte2

package com.digows.artigos.JavaFlex.model.repository.hibernate;1.

2.

import java.util.List;3.

4.

import org.hibernate.SessionFactory;5.

import org.springframework.beans.factory.annotation.Autowired;6.

import org.springframework.beans.factory.annotation.Qualifier;7.

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;8.

import org.springframework.stereotype.Repository;9.

10.

import com.digows.artigos.JavaFlex.model.entity.Cargo;11.

import com.digows.artigos.JavaFlex.model.repository.CargoRepository;12.

13.

@Repository(value="cargoRepository")14.

public class CargoHibernateDao extends HibernateDaoSupport15.

implements CargoRepository {16.

17.

@Autowired18.

public CargoHibernateDao(@Qualifier("sessionFactory")SessionFactory factory19.

super.setSessionFactory(factory);20.

}21.

22.

public Cargo save(Cargo p_cargo) {23.

getHibernateTemplate().saveOrUpdate(p_cargo);24.

return p_cargo;// ID POPULADA25.

}26.

27.

public void remove(Cargo p_cargo) {28.

getHibernateTemplate().delete(p_cargo);29.

}30.

31.

public Cargo findById(Cargo p_cargo) throws Exception {32.

long id = p_cargo.getIdCargo();33.

p_cargo = (Cargo) getHibernateTemplate().get(Cargo.class, p_cargo.34.

35.

if (p_cargo == null)36.

throw new Exception("O Cargo com a ID: "+id+" do(a) "+Cargo.class37.

return p_cargo;38.

}39.

40.

JAVA:

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

12 de 64 1/1/2009 11:54

Page 13: Flex Parte2

Perceba que esta implementa apenas métodos de acesso ao banco de dados usando ohibernate. Nesta classe faço uso de annotations para que o container Spring faça o wire dosbeans.

@Repository

A anotação @Repository é mais um estereótipo que foi introduzido no Spring 2.0.Esta anotação é usada para indicar que uma classe funciona como um repositório(Veremos mais adiante o que é este pattern), esta anotação faz com que o Springenvie Exceptions da persistência a camada de serviço, vindas deDataAccessException, isto é deixa tranparênte a camada de serviço o tipo derepository que foi implementado.

@Autowired

A anotação @Autowired é usada para a injeção de depêndencia da sessionFactory dohibernate.

@SuppressWarnings

Faço uso da anotação @SuppressWarnings, apenas para o compilador não gerar umWarning no cast da List, uma vez que o Hibernate foi projetado sem o uso deGenerics, ao usar Generics o compilador devolve um Warning.

Perceba que esta classe implementa uma interface, está interface implementa o patternRepository, este padrão já causou muita polêmica em forums Java como o GUJ porexemplo, recomendo a leitura deste post para entender o padrão:http://blog.caelum.com.br/2007/06/09/repository-seu-modelo-mais-orientado-a-objeto/

com.digows.artigos.JavaFlex.model.repository

Este package irá conter interfaces do tipo repository que dará comportamentos aDAO's sejam elas implementadas por DAO's Hibernate, DAO's JDBC, DAO's iBatis eetc...

Neste mesmo pacote, crie uma interface chamada CargoRepository com o seguinteconteúdo:

CargoRepository.java

PLAIN TEXT

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

13 de 64 1/1/2009 11:54

Page 14: Flex Parte2

package com.digows.artigos.JavaFlex.model.repository;1.

2.

import java.util.List;3.

import com.digows.artigos.JavaFlex.model.entity.Cargo;4.

5.

public interface CargoRepository {6.

7.

void remove(Cargo p_cargo);8.

Cargo save(Cargo p_cargo);9.

Cargo findById(Cargo p_cargo) throws Exception;10.

List<cargo> getList();11.

}12.

Ok! nossa persistência já foi programada, vamos agora alterar a classe CargoService que foicriado no post anterior, para que se comporte como uma classe de serviço gerenciada pelocontainer Spring.

Para isso, altere o nome da classe CargoService que está no packagecom.digows.artigos.JavaFlex.model.service para CargoServiceImpl e adicione esteconteúdo:

CargoServiceImpl.java

JAVA:

PLAIN TEXT

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

14 de 64 1/1/2009 11:54

Page 15: Flex Parte2

package com.digows.artigos.JavaFlex.model.service;1.

2.

import java.util.List;3.

4.

import org.springframework.beans.factory.annotation.Autowired;5.

import org.springframework.stereotype.Service;6.

import org.springframework.transaction.annotation.Propagation;7.

import org.springframework.transaction.annotation.Transactional;8.

9.

import com.digows.artigos.JavaFlex.model.entity.Cargo;10.

import com.digows.artigos.JavaFlex.model.repository.CargoRepository;11.

12.

@Service(value="cargoService")13.

@Transactional(propagation=Propagation.REQUIRED, rollbackFor=Exception.class14.

public class CargoServiceImpl implements CargoService {15.

16.

private CargoRepository cargoRepository;17.

18.

@Autowired19.

public void setCargoRepository(CargoRepository cargoRepository) {20.

this.cargoRepository = cargoRepository;21.

}22.

23.

public Cargo save(Cargo p_cargo) throws Exception {24.

try {25.

this.cargoRepository.save(p_cargo);26.

return p_cargo;27.

} catch (Exception e) {28.

throw new Exception("Não foi possível salvar." +e.getCause())29.

}30.

}31.

32.

public void remove(Cargo p_cargo) throws Exception {33.

try {34.

this.cargoRepository.remove(p_cargo);35.

} catch (Exception e) {36.

throw new Exception("Não foi possível excluir." +e.getMessage37.

}38.

}39.

40.

JAVA:

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

15 de 64 1/1/2009 11:54

Page 16: Flex Parte2

Perceba que é uma classe de serviço simples, esta apenas tem a funcão de coodernar osEntities de domínio e fazer a persistência atráves de um repository.

@Service

A anotação @Service é uma forma especializada da anotação @Component. Éconveniente anotar as classes da camada de serviço com @Service para facilitar oprocessamento por ferramentas ou antecipar qualquer futuro serviço de capacidadesespecíficas que podem ser adicionados a esta anotação.

@Transactional

Como o próprio nome diz, é um estereótipo que delega ao container que esta classe deserviço deve ser transicional.

@Autowired

A anotação @Autowired é usada para a injeção de depêndencia que será feita pelocontainer de uma implementação da interface CargoService.

Nessa camada de serviço faço uso também do Pattern DIP (Dependency InversionPrinciple), por isso esta classe é uma implementação (CasoDeUsoServiceImpl) de umainterface de serviço, no caso a CargoService.

Para isso no pacote com.digows.artigos.JavaFlex.model.service, crie uma interface como nome de CargoService, com este conteúdo:

CargoService.java

PLAIN TEXT

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

16 de 64 1/1/2009 11:54

Page 17: Flex Parte2

package com.digows.artigos.JavaFlex.model.service;1.

2.

import java.util.List;3.

4.

import com.digows.artigos.JavaFlex.model.entity.Cargo;5.

6.

public interface CargoService {7.

8.

void remove(Cargo p_cargo) throws Exception;9.

Cargo save(Cargo p_cargo) throws Exception;10.

Cargo findById(Cargo p_cargo) throws Exception;11.

List<cargo> getList() throws Exception;12.

}13.

JAVA:

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

17 de 64 1/1/2009 11:54

Page 18: Flex Parte2

Ok, com estes passos realizados, já concluímos a implementação do nosso model. Aestrutura final deverá ser esta:

Configurando o SpringFramework com o Hibernate e o Blaze.

No post anterior, configuramos o Tomcat para utilizar apenas o BlazeDS, agora precisamosadicionar mais as configurações do SpringFramework.

Para isso abra o arquivo JavaFlex\WebContent\WEB-INF\web.xml e altere deixando comeste conteúdo:

web.xml

PLAIN TEXT

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

18 de 64 1/1/2009 11:54

Page 19: Flex Parte2

<?xml version="1.0" encoding="UTF-8"?>1.

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"2.

xmlns="http://java.sun.com/xml/ns/javaee"3.

xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"4.

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"5.

id="WebApp_ID" version="2.5">6.

7.

<display-name>JavaFlex</display-name>8.

9.

<!--10.

///////////////////////////////11.

Configuracao Spring 2.512.

///////////////////////////////13.

-->14.

<context-param>15.

<param-name>contextConfigLocation</param-name>16.

<param-value>17.

/WEB-INF/applicationContext.xml18.

</param-value>19.

</context-param>20.

21.

<listener>22.

<listener-class>23.

org.springframework.web.context.ContextLoaderListener24.

</listener-class>25.

</listener>26.

<listener>27.

<listener-class>28.

org.springframework.web.context.request.RequestContextListener29.

</listener-class>30.

</listener>31.

32.

<!--33.

///////////////////////////////34.

Configuracao do BlazeDS35.

///////////////////////////////36.

-->37.

<context-param>38.

<param-name>flex.class.path</param-name>39.

<param-value>/WEB-INF/flex/hotfixes</param-value>40.

XML:

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

19 de 64 1/1/2009 11:54

Page 20: Flex Parte2

Perceba na configuração do Spring, ele faz referência a um arquivo chamadoapplicationContext.xml, este arquivo é o que contém as configurações do Spring em si,então no mesmo diretório que se econtra o web.xml, crie um arquivo com o nome deapplicationContext.xml e coloque este conteúdo:

applicationContext.xml

PLAIN TEXT

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

20 de 64 1/1/2009 11:54

Page 21: Flex Parte2

<?xml version="1.0" encoding="UTF-8"?>1.

<beans xmlns="http://www.springframework.org/schema/beans"2.

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"3.

xmlns:p="http://www.springframework.org/schema/p"4.

xmlns:context="http://www.springframework.org/schema/context"5.

xmlns:jee="http://www.springframework.org/schema/jee"6.

xmlns:tx="http://www.springframework.org/schema/tx"7.

xsi:schemaLocation="8.

http://www.springframework.org/schema/beans http://www.springframework.or9.

http://www.springframework.org/schema/context http://www.springframework.10.

http://www.springframework.org/schema/jee http://www.springframework.org/11.

http://www.springframework.org/schema/tx http://www.springframework.org/s12.

<!--13.

//////////////////////////////////////14.

Integração do Spring com o Hibernate15.

//////////////////////////////////////16.

-->17.

18.

<!--19.

Carregamento do Arquivo de Configuracoes do JDBC20.

-->21.

<context:property-placeholder location="classpath:jdbc.properties" />22.

23.

<!--24.

Configuracao do DataSource25.

-->26.

<bean id="dataSource"27.

class="org.springframework.jdbc.datasource.DriverManagerDataSource"28.

<property name="driverClassName">29.

<value>${jdbc.driverClassName}</value>30.

</property>31.

<property name="url">32.

<value>${jdbc.url}</value>33.

</property>34.

<property name="username">35.

<value>${jdbc.username}</value>36.

</property>37.

<property name="password">38.

<value>${jdbc.password}</value>39.

</property>40.

XML:

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

21 de 64 1/1/2009 11:54

Page 22: Flex Parte2

Perceba que as configurações do banco de dados usado, delego a um arquivo .properties,também vou precisar configurar o log4j para a impressão de log's. Por estética o bacanaseria gerar um novo source-path que contenha tais arquivos properties.

Crie um pasta na raiz do projeto com o nome de resources,

De um botão direito sobre o projeto e clique em properties;

Em Java Build Path, clique no botão AddFolder;

Selecione a pasta resources, clique em ok, e marque a opção Allow output foldersfor source folders, e ok.

Dentro do package resources, crie um arquivo chamado jdbc.properties, e adicione oseguinte conteúdo:

jdbc.properties

# Properties file com as configuracoes do JDBC.1.

# Aplicado pelo PropertyPlaceholderConfigurer do Spring2.

3.

jdbc.driverClassName=com.mysql.jdbc.Driver4.

jdbc.url=jdbc:mysql://localhost:3306/javaflex5.

jdbc.username=root6.

jdbc.password=7.

8.

#Properties que determina o dialeto do Banco de Dados.9.

hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect10.

e outro arquivo chamado log4j.properties com este conteúdo:

log4j.properties

PLAIN TEXT

CODE:

PLAIN TEXT

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

22 de 64 1/1/2009 11:54

Page 23: Flex Parte2

### direct log messages to stdout ###1.

log4j.appender.stdout=org.apache.log4j.ConsoleAppender2.

log4j.appender.stdout.Target=System.out3.

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout4.

log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n5.

6.

# set root logger level to debug and its only appender to mtf7.

log4j.rootLogger=INFO,development8.

9.

# only for development purposes10.

log4j.appender.development=org.apache.log4j.ConsoleAppender11.

log4j.appender.development.layout=org.apache.log4j.PatternLayout12.

log4j.appender.development.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss13.

14.

log4j.logger.noModule=FATAL15.

log4j.logger.org.springframework=WARN16.

17.

# Log JDBC bind parameter runtime arguments18.

log4j.logger.org.hibernate.type=DEBUG19.

CODE:

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

23 de 64 1/1/2009 11:54

Page 24: Flex Parte2

Uma outra modificação é necessária, está a mais importante, pois delega ao Blaze, queexiste uma factory de beans criada pelo Spring.

Essa factory deve ser implementada, porém já existe pronto na internet para uso, estapode ser encontrada aqui:

Spring and Flex Integration Factory Class

Baixe ela, e coloque por exemplo neste pacote:

com.digows.artigos.JavaFlex.controller

*O nome controller ficou sugestivo aqui, uma vez que está factory não tem

comportamentos de um controller, porém como o Flex não faz uso do controller para

controlar as actions que também não existe, achei bacana preservar o package

colocando a factory de beans do Spring que será usada pelo Blaze neste pacote. Se

alguém tiver uma idéia melhor de onde colocar a classe, estou aceitando opniões.

Vamos então configurar o Blaze. Abra o arquivo JavaFlex\WebContent\WEB-INF\flex\services-config.xml e altere deixando com este conteúdo:

services-config.xml

PLAIN TEXT

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

24 de 64 1/1/2009 11:54

Page 25: Flex Parte2

<?xml version="1.0" encoding="UTF-8"?>1.

<services-config>2.

<services>3.

<service-include file-path="remoting-config.xml" />4.

</services>5.

6.

<!-- Spring factory registration -->7.

<factories>8.

<factory id="spring"9.

class="com.digows.artigos.JavaFlex.controller.SpringFactory"/>10.

</factories>11.

12.

<channels>13.

<channel-definition id="channel-amf"14.

class="mx.messaging.channels.AMFChannel">15.

<endpoint16.

url="http://{server.name}:{server.port}/{context.root}/messagebroker/amf"17.

class="flex.messaging.endpoints.AMFEndpoint" />18.

<properties>19.

<polling-enabled>false</polling-enabled>20.

</properties>21.

</channel-definition>22.

</channels>23.

24.

<logging>25.

<target class="flex.messaging.log.ConsoleTarget"26.

level="Error">27.

<properties>28.

<prefix>[BlazeDS]</prefix>29.

<includeDate>true</includeDate>30.

<includeTime>false</includeTime>31.

<includeLevel>true</includeLevel>32.

<includeCategory>true</includeCategory>33.

</properties>34.

<filters>35.

<pattern>Endpoint.*</pattern>36.

<pattern>Service.*</pattern>37.

<pattern>Message.*</pattern>38.

<pattern>DataService.*</pattern>39.

<pattern>Configuration</pattern>40.

XML:

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

25 de 64 1/1/2009 11:54

Page 26: Flex Parte2

Perceba que mapeio o local da Factory. Agora é preciso atualizar nosso servico cargoServicedentro do arquivo JavaFlex\WebContent\WEB-INF\flex\remoting-config.xml. Entãoabra e edite deixando com este conteúdo:

remoting-config.xml

<?xml version="1.0" encoding="UTF-8"?>1.

<service id="remoting-service"2.

class="flex.messaging.services.RemotingService">3.

4.

<adapters>5.

<adapter-definition id="java-object"6.

class="flex.messaging.services.remoting.adapters.JavaAdapter"7.

default="true" />8.

</adapters>9.

10.

<default-channels>11.

<channel ref="channel-amf" />12.

</default-channels>13.

14.

<destination id="cargoService">15.

<properties>16.

<factory>spring</factory>17.

<source>cargoService</source>18.

</properties>19.

</destination>20.

</service>21.

PLAIN TEXT

XML:

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

26 de 64 1/1/2009 11:54

Page 27: Flex Parte2

Aqui só é importante observar que a tag <source /> mapeia o nome do bean do tiposerviço que foi delegado na annotation, no nosso caso na classe CargoServiceImpl percebaa annotation @Service(value="cargoService") e também a tag <factory /> que fazreferência a configuração no arquivo services-config.xml

Se tudo foi efetuado corretamente, ao você dar um botão direito no projeto e ir em Run As-> Run On Server, ao clicar em salvar no fomulário de cadastro criado no post anterior, oseu objeto cargo vindo do Flex já será persistido! observe o console para isso.

Eu alterei o arquivo com\digows\artigos\JavaFlex\view\screen\CargoForm.mxmlpara que possa usar todos os métodos do CRUD Cargo. Segue como ficou:

CargoForm.mxml

PLAIN TEXT

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

27 de 64 1/1/2009 11:54

Page 28: Flex Parte2

<?xml version="1.0" encoding="utf-8"?>1.

<mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml"2.

layout="vertical" width="488" height="384" creationComplete="getList()"3.

4.

<mx:Form width="100%" height="100%" defaultButton="{btSalvar}">5.

<mx:FormHeading label="Gerenciamento de Cargos" width="100%"/>6.

<mx:FormItem label="ID:" width="127">7.

<mx:TextInput width="100%" id="txtIdCargo"8.

text="{Cargo(dgCargo.selectedItem).idCargo}" editable="false"9.

</mx:FormItem>10.

<mx:FormItem label="Cargo:" width="345">11.

<mx:TextInput width="100%" id="txtDsCargo"12.

text="{Cargo(dgCargo.selectedItem).dsCargo}"/>13.

</mx:FormItem>14.

<mx:DataGrid id="dgCargo" width="100%" height="100%" dataProvider15.

<mx:columns>16.

<mx:DataGridColumn headerText="ID" dataField="idCargo" width17.

<mx:DataGridColumn headerText="Cargo" dataField="dsCargo"18.

</mx:columns>19.

</mx:DataGrid>20.

</mx:Form>21.

22.

<mx:ControlBar horizontalAlign="center">23.

<mx:Button label="Novo" click="setDefault()"/>24.

<mx:Button label="Salvar" id="btSalvar" click="save()"25.

textAlign="center"/>26.

<mx:Button label="Excluir" click="remove()"/>27.

</mx:ControlBar>28.

29.

<mx:RemoteObject id="cargoService" showBusyCursor="true"30.

fault="onFault(event)" destination="cargoService">31.

<mx:method name="save" result="onResultSave(event)" fault="onFault(event)"32.

<mx:method name="remove" result="onResultRemove(event)" fault="onFault(event)"33.

<mx:method name="getList" result="onResultGetList(event)" fault="onFault(event)"34.

</mx:RemoteObject>35.

36.

<mx:Script>37.

<![CDATA[38.

import mx.collections.ArrayCollection;39.

import com.digows.artigos.JavaFlex.view.entity.Cargo;40.

XML:

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

28 de 64 1/1/2009 11:54

Page 29: Flex Parte2

Bom pessoal, acredito que com estes 2 artigos consegui atingir o objetivo de dar acomunidade Java uma proposta de interface produtiva e poderosa, e também a comunidadeFlex uma proposta de uma arquitetura com Flex e Java, utilizando o Blaze Data Services.

Faça mais testes, veja que o desenvolvimento é muito rápido! muito melhor do que se matarcom tags html e funções em JavaScript.

Fora que você pode desenvolver com o Flex aplicando os conceitos de Orientação a Objetos,a começar pela tranferência de dados, no Flex chega Objetos! e não textos (XML,WebServices, Request/Response e afins).

Neste artigo não fiz uso de patterns para o desenvolvimento das telas em Flex, porém nospróximos artigos irei abordar detalhadamente como você pode arquiteturar seu código Flexvisando ganhar manutenabilidade, escalabilidade, e reusabilidade.

Tópico no Forum que contém detalhes sobre o download. Flex 2.0 e Flex 3.0[Link]

Obrigado a todos e um Beijão especial para minha querida Liz!

=*****

Abraços

\o/

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

29 de 64 1/1/2009 11:54

Page 30: Flex Parte2

Author: digows

Easy & Fast DB Apps Dev.Visually Develop DB Apps with Class ERD,UML Code Sync. & Free Trial!

Java Installer BuilderEasy to use, amazingly powerful Createsbeautiful installers

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

30 de 64 1/1/2009 11:54

Page 31: Flex Parte2

67 Comentários

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

31 de 64 1/1/2009 11:54

Page 32: Flex Parte2

Erko Bridee27 de janeiro de 2008

aeeee

muito bomparabens =]

SaintBr27 de janeiro de 2008

nervoso esse tuto hein !

FlexDev » Blog Archive » Artigo Flex+BlazeDS+Spring+Hibernate28 de janeiro de 2008

[...] Parte 1 Parte 2 [...]

Antonio de Lemos28 de janeiro de 2008

Valeu Rodrigo, muito bom este seu tuto.

Mário Júnior28 de janeiro de 2008

Parabéns Rodrigo@

A única diferença é q eu uso o Hibernate Annotations q implementa a JPA, assimelimino os arquivos hbm.xml e mapeio minhas entidades usando as anotações dajpa.

Em compensação, eu não uso as annotations do spring (por enquanto).

Abraços e boa sorte.

Jr.

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

32 de 64 1/1/2009 11:54

Page 33: Flex Parte2

Rodrigo Pereira Fraga28 de janeiro de 2008

Olá Mário,Como disse, eu prefiro delegar a função “Mapeamento” a arquivos xml’s, do queacoplar annotations em meus beans de negócio.

Acho bacana usar annotations no hibernate, se eu usar o modelo de objetosanêmicos usando VO’s, BO’s e afins.. pois daí mapearia meu VO.

Neste artigo trago princípios do Domain Driven Desing escrito por Martin Fowler, usoo padrão Entity, então pessoalmente não acho legal mapear usando annotations.

Mas… é uma questão pessoal! do jeito que estar é tranquilo usar annotations tbm.

Abraços!\o/

Liz28 de janeiro de 2008

Tá bom! eu confesSo que eu tenteii ler até o fim!!…;)! pra ver se eu aprimorava osmeus conhecimentos!!Maaas axeii meLHor ler a introduçãO e a última linha!Nãocomentareii sobre ela porque talvez não haja espaço suficiente pra tantoconhecimento!! Mas da última LINha!..HUm!! esSa é simples e eficaz!! “Pode muitoem seus efeitos” ;*Amo vocÊ meu amOr!! ?

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

33 de 64 1/1/2009 11:54

Page 34: Flex Parte2

fernando siqueira29 de janeiro de 2008

Rodrigo, parabéns pelo seu artigo, achei muito legal, me ajudou bastante, vocêdemonstra ter um bom conhecimento no assunto. Vou tentar usar BlazeDS em umaaplicação comercial que eu estou fazendo. Acredito que o uso de flex com java sejamelhor em um estrutura hibrida. Onde eu poderia usar flex para gerar gráficos,listar itens ou mostra imagens de produtos usando algum tipo de animação. Fazertelas de cadastros/alteração e exclusão eu ainda acho melhor usar o bom e nem tãovelho struts 2 integrado com dwr. Apesar de todo o problema de compatibilidade ouso de HTML/css/javascript torna a aplicação mais leve em relação ao flash.Não sei se você já deu uma olhada em JavaFX … Mas senão posso dizer q seu códigoé escrito em uma estrutura declarativa, que torna sua implementação muitosimples. Ela ainda é uma tecnologia que ainda está em um estagio beta,não da parausar comercialmente ainda. Mas que no futuro ela pode ser uma boa opção para aconstrução de aplicações RIA para os desenvolvedores Java.Espero que você escreva mais artigos sobre flex. Parabéns!

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

34 de 64 1/1/2009 11:54

Page 35: Flex Parte2

Rodrigo Pereira Fraga29 de janeiro de 2008

Olá Fernando

“Fazer telas de cadastros/alteração e exclusão eu ainda acho melhor usar o bom enem tão velho struts 2 integrado com dwr.”

Então, ultimamente tenho tido muito sucesso com o Flex em sistemas, seja elefazendo tais telas e ainda gerando gráficos e etc…

Só não uso flex, quando a máquina cliente é muito ruim mesmo, coisa q até umajax da vida causa memory leak.

Querendo ou não o Flex é uma aplicação WEB, só que com poder desktop.

Desenvolver com html, é custoso! até hoje não achei um modo de desenvolvimentotão rápido do que o Flex, coisas como IDE, Visual Editor, Componentização, ÉOrientado a Objetos, e etc.. Ajudam e muito no desenvolvimento.

JavaFX não olhei não, mas acredito que hoje o Flex atende e atende muito bem,afinal tem muitos anos de experiência no mercado. Tomara que esse JavaFx nãoseja semelhante a um Swing da vida…Por que afzz.. A sun para visual é complicado.

Abraços e obrigado pelo feed-back.

Eduardo Dias3 de fevereiro de 2008

Parabéns pelo post está de excelente qualidade, um pouco extenso, mas nãopoderia ser de outra forma afim de cobrir todo o conteúdo. Abraço !!!

Ricardo7 de fevereiro de 2008

Muito bom!Com certeza muita gente ira iniciar flex/Java depois deste tutu.

Duvida rápida:Para aplicações comerciais o BlazeDS é pago?Como funciona?

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

35 de 64 1/1/2009 11:54

Page 36: Flex Parte2

Rodrigo Pereira Fraga7 de fevereiro de 2008

Olá Ricardo,não sei se leu, mas o BlazeDS está sobre a licença LGPL v3.

Bruno Queiroz Mendes7 de fevereiro de 2008

Parabens pelo artigo, cobriu muito bem me ajudando bastante. Mas fiquei comtr~es duvidas, talvez vc poderia me adiantar:Qual a função dos jar’s : flex-tomcat-common.jar e flex-tomcat-server.jar ?Para que serve o mapeamento no web.xml da pasta hotfixes?Qual o motivo de se criar uma factory spring, já que existe a do java por default?Abraços

Rodrigo Pereira Fraga7 de fevereiro de 2008

Olá Bruno, obrigado pelo feedback.

Qual a função dos jar’s : flex-tomcat-common.jar e flex-tomcat-server.jar ?Esses jars são usados para que o blaze possa fazer autenticacao no Tomcat,usandos roles e etc.

Para que serve o mapeamento no web.xml da pasta hotfixes?A pasta flex dentro do web-inf, contem arquivos do sdk flex, logo se estiver usandoo modulo para o Tomcat que provê uma compilação web-tier do MXML, ele usará oshotfixes que estiverem aí. No momento isto é dispensável, apenas segui adocumentação.

Qual o motivo de se criar uma factory spring, já que existe a do java por default?

Você fala a própria factory do Spring?digamos que o flex não tem como acessar ela, aí então usamos esta helper que fazum “lookup” nos beans do Spring, devolvendo para o Flex.

Abraços e boa sorte!\o/

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

36 de 64 1/1/2009 11:54

Page 37: Flex Parte2

Bruno Queiroz mendes7 de fevereiro de 2008

Valeu Rodrigo!!!

Janderson14 de fevereiro de 2008

Rodrigo, há realmente a necessidade de criar o Cargo.as, não teria uma outramaneira de fazer sem usar esse mapeamento do nosso pojo em as?

Rodrigo Pereira Fraga14 de fevereiro de 2008

Não a necessidade, se você tirar, você teria que passar parametros via tiposprimitivos, ou entao um array ou algo do tipo, mas realmente você quer fazer isto?

Só lembrando que o “custo” de fazer o mapeamento no flex, é extremamentecompensado, por você trabalha com Objetos.

Exemplo disso, imagine uma datagrid populada com uma lista de Cargos, cadaposição da lista, será um objeto do tipo Cargo, logo eu tenho um objeto tipado! porexemplo para pegar um cargo selecionado nesta grid eu faria assim:

var cargo:CargoVO = CargoVO(dgCargo.selectedItem);

assim como em qualquer outro componente, ou até mesmo na passagens deparâmetros via events e etc…

Abraços

\o/

José Castillo17 de fevereiro de 2008

Rodrigo, in spite of my native language is spanish your article is very clear and giveme a better understanding of these technologies. I was looking for an alternative toJSP, JSF, etc, to the view part on the MVC model and Flex is the answer. Thanks alot.

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

37 de 64 1/1/2009 11:54

Page 38: Flex Parte2

Rodrigo Pereira Fraga17 de fevereiro de 2008

Hola José Castillo,

Gracias por su comentarios!Me siento bien sabiendo que estoy llegando a mucho outros lugares.

\o/

Ricardo18 de fevereiro de 2008

Valeu Rodrigo, mas vc acha que é necessário para seguir este tutu?E estou seguindo a risca e quando mapeio os HB’s que no meu caso é:com/webservice/model/repository/hibernate/ da erro!E quando eu removo ele deixando em branco ele funciona, por que?

Rodrigo Pereira Fraga18 de fevereiro de 2008

Olá Ricardo,“Mas vc acha que é necessário para seguir este tutu?”

Concerteza! não faz sentido seguir com o tutorial nem sem saber o que umHibernate ou um Spring tem por finalidade.

Leia a documentação apresentada aqui, que ficará fácil de resolver problemasposteriores.

Abraços!\o/

R.B.25 de fevereiro de 2008

Execelnte tutorial, teria como disponibilizar o projeto para importar no Eclipse,assim como feito no final da parte 1 do tutorial?

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

38 de 64 1/1/2009 11:54

Page 39: Flex Parte2

Rodrigo Pereira Fraga25 de fevereiro de 2008

Acredito que você não tenha lido o tutorial inteiro…

No final…

Tópico no Forum que contém detalhes sobre o download. Flex 2.0 e Flex 3.0[http://forum.flexbrasil.com.br/viewtopic.php?f=8&t=46#p139]

R.B.26 de fevereiro de 2008

É possível obter a saída do Hibernate com os unparameterized SQL?

Por padrão, o outuput SQL aparece como “insert into javaflex_cargo (DS_CARGO)values (?)”. Eu gostaria de ser capaz de ver o que ele está passando por valor no ?.

O Hibernate usa Prepared Statement internamente, de modo que não têm sempre oSQL em um formato onde valores seriam incorporados.

Eduardo26 de fevereiro de 2008

E pensar que dá pra fazer tudo isso usando Flex e Rails com apenas 1/100 decódigo…

É preciso dar uma tonelada de links, livros, vários frameworks etc, pra fazer umatelinha simples de cadastro??

Ainda bem que eu parei com as drogas.

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

39 de 64 1/1/2009 11:54

Page 40: Flex Parte2

Rodrigo Pereira Fraga26 de fevereiro de 2008

Depende… se for para fazer um pequeno sistema….

Seu rails com 1/100 linhas tem injeção de dependência? ou você acopla seu códigocom new’s em tudo?

Provê objeto distribuído? do jeito que este exemplo está com 3 linhas de código euposso disponibilizar um serviço para qualquer um usar.

Uma telinha simples de cadastro?Claro, se for só para fazer tal telinha de cadastro eu acoplaria tudo em poucasclasses.

A intenção aqui Eduardo, foi mostrar como você pode trabalhar com Flex e Javacorporativamente, logo não será qualquer scaffold que atenderá as necessidadescomum em um ambiente enterprise.

Livros? entendimento de frameworks e afins?

Tudo tem seu significado, e como uma pessoa de T.I. devo conhecer tecnologiaspara possíveis problemas.

Ricardo27 de fevereiro de 2008

Rodrigo, segui como também li muito sobre todas as tecnologias utilizada e estivetentando fazer um sistema de autenticação até baseado no seu method findByIdmas não estou consiguindo, como posso fazer?

Rodrigo Pereira Fraga27 de fevereiro de 2008

Bom seria você abrir um tópico no fórum:http://forum.flexbrasil.com.br/

e especificar seu problema.

Abraços!\o/

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

40 de 64 1/1/2009 11:54

Page 41: Flex Parte2

R.B.28 de fevereiro de 2008

Rodrigo, em qual classe eu poderia colocar minhas regras de negócio? Ou como eupoderia repassar a classe Cargo (creio que é um Data Transfer Object/ Value Object)para uma outra classe responsável pelas regras de negócio antes de passar o DataTransfer Object (Cargo) para a camada DAO com o intuito de persistir na base dedados?

Rodrigo Pereira Fraga28 de fevereiro de 2008

Se você leu com atenção o artigo, em certos momentos falo que estou fazendo usodo DomainDrivenDesing, logo o Cargo ali não é um DTO tão pouco VO.

Ele é o Objeto em sí, este segue o padrão entity do DDD.

Logo, o que vai te responder claramente sua dúvida, será você estudando sobre oDDD e sua filosofia, que em poucas palavras não desacopla comportamentos deatributos como em um BusinessObject e um DataTransferObject, mas modela umObjeto integente onde contém seus próprios comportamentos e atributos.

Você pode usar o padrão que você conhece, a arquitetura não influencia no uso doFlex.

Abraços.\o/

dsfextreme29 de fevereiro de 2008

Camarada, parabéns pelo trabalho.

Cláudio4 de março de 2008

Parabéns. Excelente artigo.Você poderia disponibilizar o código-fonte?[]’sCláudio

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

41 de 64 1/1/2009 11:54

Page 42: Flex Parte2

Eduardo Rebola4 de março de 2008

Parabéns pelo artigo! Este projeto pode ser utilizado tranquilamente como template,afinal de contas, quem gosta de ficar configurando toneladas de XMLs?

Porém não posso dizer que esta template é aplicável p/ “projetos do mundo real”. Asolucao proposta, baseada no modelo tradicional service + Dao (por entidade!!) +hibernate = Lazy load exception. Isso nao ocorre neste exemplo pq a classe Cargo éextremamente simples. O que fazer neste caso? Ignorar Lazy-load e utilizar Eagerpor default? Eu acho que não…

Hibernate Annotations é JPA, logo virou padrão. Todo mundo tá usando e já jáhbm.xml vai virar poeira, descontinuado. Quem usa Spring com annotations sabeque é um caminho sem volta, assim como JPA!

Não tenho nada contra o Flex, só não dá pra integrá-lo de modo produtivo com Javaem projetos de médio/grande porte. Pra quem usa Linux então, esqueça! FlexBuilder é precário.

O dia que a integração Flex + Maven multi-module-project + ambiente CI estiverresolvido, aí sim teremos uma alternativa concreta contra JSF e GWT.

Abraço!

Janderson5 de março de 2008

Olá Rodrigo mais uma vez, estou fazendo parte parte do seu excelente artigo, maissurgiu uma dúvida e não sei se pode me ajudar,no ínicio do artigo vc instalou oeclipse 3.3 e quando tento instalar o SpringIDE não consigo instalr via updatesite,diz que precisa o eclipse 3.2, sabe me dizer se tem como instalar o springIDEcom eclipse 3.3,vlw

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

42 de 64 1/1/2009 11:54

Page 43: Flex Parte2

Rodrigo Pereira Fraga5 de março de 2008

Olá Janderson, é veradade, ofialmente só pode usar no Eclipse 3.2, porém! Existeum workaround para fazer funcionar.

Quando der o erro no update site, verifique o jar que ele está reclamando, entãopegue este jar de um Eclipse 3.2 e coloque no plugins do seu 3.3

Aí tu engana a instalação!

Abraços!

Janderson5 de março de 2008

rsrsr, essa eu gostei

vlw pela dica Dr. e muito obrigado

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

43 de 64 1/1/2009 11:54

Page 44: Flex Parte2

Rodrigo Pereira Fraga6 de março de 2008

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

44 de 64 1/1/2009 11:54

Page 45: Flex Parte2

Olá Eduardo Rocha,

Vlw pelo feedback amigo, é um prazer contribuir com a comunidade.

Quanto ao “tradicional service +Dao por entidade”

Faço uso de DAO’s por entities pois sou não gosto de criar DAO’s genéricos, prefirocriar um para cada mesmo, e também a proposta era mostrar com integrar, se suaarquitetura faz uso de DAO genéricos e afins, é uma opção sua.

“O que fazer neste caso? Ignorar Lazy-load e utilizar Eager por default? Eu acho quenão…”

Não amigo, não mesmo, aplicar um OpenSessionView no Flex com o BlazeDS étranquilo, basta adicionar um filter no web.xml e url-mapping no endereco que élevando do AMF.

Como estou usando Spring, posso usar os support que ele contém:org.springframework.orm.hibernate3.support.OpenSessionInViewFilter é interceptaros lazy loads.

Só não toquei no assunto pois ficaria ainda maior abordar lazy loading e afins… issoficará para o próximo artigo.

“Hibernate Annotations é JPA, logo virou padrão. Todo mundo tá usando e já jáhbm.xml vai virar poeira, descontinuado. Quem usa Spring com annotations sabeque é um caminho sem volta, assim como JPA!”

Concerteza JPA é bacana, só que por questoes de legalibilidade de código nãoacoplo códigos de persistencia ao meu Entity de negócio, uma vez que estouseguinte padrões do DomainDrivenDesign, não rola deletar a função demapeamento ao Entity.

“Não tenho nada contra o Flex, só não dá pra integrá-lo de modo produtivo comJava em projetos de médio/grande porte.”

Ola amigo não sei qual a sua experiência co Flex, mas hoje estou usando Flex paraaplicacões de grande porte e está atendendo muito bem, ainda mais quando se usaintegrado ao padrão JCP de portles, no caso da BEA Weblogic.Vantagens de programação toda Orientada a objetos e o protocolo AMF3, nem secompara com navegaçÃo de textos/xml e afins com outros frameworks.

“Pra quem usa Linux então, esqueça! Flex Builder é precário.”

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

45 de 64 1/1/2009 11:54

Page 46: Flex Parte2

Bom, o FlexxBuilder para linux ainda não tem o modo visual, mas o auto-completeestá perfeito, e logo logo saíra a versão com o DesingView, mas para quem se mataprogramando tags html ou js e css, programar só com um auto-complete já mata apaú.

“O dia que a integração Flex + Maven multi-module-project + ambiente CI estiverresolvido, aí sim teremos uma alternativa concreta contra JSF e GWT.”

Não sei de algo do genêro, mas você me falando agora, vou pesquisar e ver se temalgo do genêro, quando a alternativa, posso dizer que já é uma boa alternativa,cada um com suas vantagens, o flex mesmo em um ambiente corporativo comrecursos de datapush, ajuda e muito! coisa que aplicações onde o cliente é slave(simples browser) não é possível implementar. Como o Flex roda sobre uma VM eestá é um pouco mais inteligente além de vantagens visuais, tem um bom suporteno back-end.

Abraços\o/

Jacir7 de março de 2008

e ai mano ..blz ..eu vi manera apresentaçao lah na facul hje kra .. muito bom ateh entao nao sabianda de flex e tal … e tudo mais que vc’s colocaram lah .. valeo kraté mais

Rodrigo Pereira Fraga7 de março de 2008

Eae Jacir!

=)

Blza kra pelo feed-back, um caminho bacana para começar seria aqui:http://forum.flexbrasil.com.br/viewforum.php?f=2

Abraços e qualquer coisa de um toque kra!

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

46 de 64 1/1/2009 11:54

Page 47: Flex Parte2

Jacir7 de março de 2008

valeo kra pela ajuda ai …muito boa sua ideia de divulgar isso na rede kra .. sucesso pra vc kra ..

Eduardo10 de março de 2008

Caro Rodrigo,

Sobre a solução que vc apresentou p/ o problema do Lazy-load que eu relatei,ambos sabemos que é furada. Você sabe disso muito bem, basta ler o tópico abaixo,iniciado por você inclusive.

http://tech.groups.yahoo.com/group/flexcoders/message/98655

Essa é uma limitação tão grande que torna o uso do Flex em grandes projetosinviável. Eu senti isso na pele, e aparentemente outros também:

http://tech.groups.yahoo.com/group/flexcoders/message/98681

Ouvir dos próprios engenheiros da Adobe que, no momento não há solução oficial(somente alguns workarounds, termo gringo metido p/ a popular gambiarra) foisuficiente p/ eu aguardar o amadurecimento da plataforma:

http://tech.groups.yahoo.com/group/flexcoders/message/98733

Continuo mantendo minha posição de standby p/ o Flex. Tem tudo p/ dar certoagora open-source. Mas ainda não é.

Novamente congratulo-o pela iniciativa, mas acho que faltou um pouquinho dehonestidade para com os leitores.

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

47 de 64 1/1/2009 11:54

Page 48: Flex Parte2

Rodrigo Pereira Fraga10 de março de 2008

Olá Eduardo,

O que apresentei a você na resposta anterior, é uma solução aoLazyInitializationException, o simples listener do Spring no messagebroker resolveeste problema.

O problema acontece quando o Blaze faz a serialização dos objetos, ao fazer isso, oé ativado o lazy.

Para isso existe algumas soluções ou workarounds como preferir, o que o Jeffapresentou é válido, e estou usando.

Mass! o mais interessante, é que o BlazeDS é OpenSource, concerteza teremosalgumas soluções não mais workaround, eu mesmo já extendi de RemotingService eJavaAdapter para prover uma solução temporária, mas já encontrei outras pessoasdesenvolvendo:http://www.infoaccelerator.net/index.cfm?event=showEntry&entryId=84B781EA-FF30-C9A3-ADAC3B7518DC8E93

Com o BlazeDS, acredito que o Lazy load é coisa de pouco tempo.

Mas só lembrando que a ultima versão do GraniteDS suporta o Lazy Loading:http://www.graniteds.org/confluence/display/DOC/2.4.2.+Lazy+Initialization

Eu pensando no futuro, prefiro investir no BlazeDS, por ser da própia Adobe e etc..

Bom é uma opinião sua dizer que Flex não é uma alternativa para desenvolvimento,mas só vale lembrar também, que RemoteObject é o plus! a mais quanto as outrastecnologias, você poderia muito bem ter lazy load usando HttpServices, ou entãoWebServices.

è uma opinião sua, porém só acho que não pode ser tão radical, aonde eu trabalhoFlex com WebServices tem atendido muito bem, e olha que não é qualquersiteminha.

Abraços amigo, e vamos aguardar outras soluções com o BlazeDS.

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

48 de 64 1/1/2009 11:54

Page 49: Flex Parte2

R.B.10 de março de 2008

Estive lendo, como sugerido, para tentar encontrar uma resposta a minha dúvida.Em minhas leituras descobri que as regras de negócio podem ser colocadas nasEntities. Fica aí o esclarecimento pois outras pessoas me perguntaram também.

Desde já agradeço pela atenção de todos.

R.B.11 de março de 2008

Rodrigo, estou cmo uma outra dúvida. Como posso fazer a navegação entrearquivos MXML? Por exemplo: eu gostaria de clicar num botão de cadastras usuárioe ir para uma outra página (outro MXML) de cadastro. Usávamos o MVC Cairngorm,entretanto não queríamos mais usar um framework MVC por não achar maisnecessário diante do exposto por ti neste tutorial. =)

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

49 de 64 1/1/2009 11:54

Page 50: Flex Parte2

Rodrigo Pereira Fraga12 de março de 2008

Olá R.B,

Primeiramente, bacana que você abstraiu o Entity do DDD, a abordagem é muitobacana, você programa orientado a objetos, do tipo:

carro.AbrePorta();financeiro.calcularDespesas();

Quanto a navegação,

Navegação com Flex basicamente se resume em 3:States, ViewStack e PopUp’s.

Estas são as keywords para sua pesquisa, lembrando que a boa prática aí é o uso deViewStacks.

States é muito bacana, porém procure usar para pequenas funcionalidades.

PopUp’s, é também bacana, porém sugam um pouquinho mais de memória,existem frameworks muito bons para o esquema MDI, um deles é o Flex MDI, eumesmo usei em uma App que fiz a um bom tempo:

[GoogleWebDesktop]http://www.flexdev.com.br/gwd/

Quanto ao MVC, acredito que você não entendeu muito bem quando disse que nãoprecisava de um Framework MVC. Eu disse isso me referindo ao Struts, WebWork,SpringMVC e afins que existem no mundo java.

Com flex, é necessário arquitetar!, uma vez que ele é orientado a objetos, odesenvolvimento n camadas para reuso e componentização é necessário.

Logo, se sua aplicação passa a ter mais de 2 telas, bacana seria usar não umframework, mais eu diria um padrão de arquitetura, seja lá o Cairngorm, ou então oPureMVC, estes ajudam você resolver problemas conhecidos.

Abraços

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

50 de 64 1/1/2009 11:54

Page 51: Flex Parte2

R.B.13 de março de 2008

Rodrigo estive lendo sobre o Cairngorm e o PureMVC. Caso eu utilizasse o PureMVCcom implementação no próprio AS3 eu conseguiria ainda assim fazer a integraçãocom o Java + BlazeDS + Hibernate + SpringFrameWork como mostrado nestetutorial? Desculpe se parecer uma pergunta tola mas estou realmente precisandofazer um controle entre várias páguinas (como o cadastro de usuário) e decidi usaro PureMVC, estou lendo sobre ele e me surgiu esta dúvida enquanto estouestudando sobre esta nova ferramenta já que ela menciona que podem ser objetosremotos ou locais.

Manifesto Flex brasil - Rodrigo Fraga - RIA Evangelist16 de março de 2008

[...] Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate. [Parte1] [Parte2] Por que ele é relevante: Mostro com detalhes como integrar frameworks demercado mais famosos no [...]

Rafael18 de março de 2008

Rodrigo, uma dúvida:

Quando eu coloquei o SpringFactory.java no pacote controller, e modifiquei o nomedo pacote que estava no arquivo (de package flex.samples.factories parameupacote.controller) ele começou a dar um aviso de erro nas linhas:

import flex.messaging.FactoryInstance;import flex.messaging.FlexFactory;import flex.messaging.config.ConfigMap;import flex.messaging.services.ServiceException;

como é que eu resolvo isso?

Rodrigo Pereira Fraga19 de março de 2008

Provavelmente você não adicionou os jars: flex-messaging-*.jar no seu classpath.

Abraços

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

51 de 64 1/1/2009 11:54

Page 52: Flex Parte2

Robson3 de abril de 2008

Ótimo Artigo,

Para eu criar testes unitários para meus services usando o JUnit, qual configuraçãoeu uso ?

Lendo a documentação vi que meu teste deve extender a classeAbstractTransactionalDataSourceSpringContextTests e escrever os testes que oSpring injetará todas as dependencias que eu preciso.

Isso acontece, porem eu consigo recuperar a lista de dados, mas não consigoadicionar. Consegue me dar uma luz do que fazer?

Att.

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

52 de 64 1/1/2009 11:54

Page 53: Flex Parte2

Rodrigo Pereira Fraga3 de abril de 2008

Bom.. você não especificou seu problema… mas segue lah um exemplo:

@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(locations = { “classpath:applicationContext-tests.xml” })public class NivelUsuarioControlImplTests extendsAbstractDependencyInjectionSpringContextTests{@Autowiredprivate NivelUsuarioAppService nivelUsuarioAppService;private NivelUsuario nivelUsuario;

@Testpublic void testSave(){this.nivelUsuario = new NivelUsuario();this.nivelUsuario.setDsNivelUsuario(”Usuario”);assertEquals(nivelUsuario, nivelUsuarioAppService.save(nivelUsuario));}

@Testpublic void testList(){List list = (List) nivelUsuarioAppService.getAll();for (NivelUsuario nivelUsuario : list){System.out.println(” ID: ” + nivelUsuario.getIdNivelUsuario() + ” -> ”+ nivelUsuario.getDsNivelUsuario());}}}

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

53 de 64 1/1/2009 11:54

Page 54: Flex Parte2

Araújo Jr.14 de abril de 2008

Olá rodrigo, em primeiro lugar, gostaria de parabenizá-lo pelo artigo, sem dúvidanão há nada no google com o grau de detalhe que você colocou aqui. Eu fiqueibastante maravilhado com o spring li todas as referencias que você deixou comobase preparatória para o artigo, mas confesso que não entendi duas coisas.1 - @Repository(value=”cargoRepository”)eu vasculhei todo o código várias e váriasvezes mas não encontrei referencia para o “cargoRepository”.2 -@Transactional(propagation=Propagation.REQUIRED, rollbackFor=Exception.class)achei até um link relacionadohttp://static.springframework.org/spring/docs/2.0.x/api/org

/springframework/transaction/annotation/Transactional.htmlmas confesso que não compreendi a utilidade deste annotation.

Um grande abraço.

Rodrigo Pereira Fraga14 de abril de 2008

Olá Araújo,

Bom, quanto a suas dúvidas, a annotation:@Repository(value=”cargoRepository”)

É apenas um stereotype que denota que a classe implementa um Repositório. Ovalue agregado a ela, é apenas um nome dado a este Bean.No caso apresentado realmente não faz uso, mas se em algum momento eu quizerfazer um lockup neste bem, eu somente solicito esta “ID”.Imagine se por ventura vc tivesse 2 implementaçoes de banco de dados do mesmocaso de uso, seria util denotar a ID para quando injetar no service, injetar aimplementação desejada.

Quanto a @Transactional(propagation=Propagation.REQUIRED,rollbackFor=Exception.class), é a annotation que denota Transacao, isto eh todo ofluxo inciado em qualquer método será transicional, a propagação será semprerequerida, e fará rollback quando uma exception do tipo Exception for levantada.O conceito aplicado a esta annotation é o mesmo quando se trata de transação.Recomendo pesquisar sobre transações, e saber usar as devidas propagações.

Abraços e bons estudos.

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

54 de 64 1/1/2009 11:54

Page 55: Flex Parte2

Najib11 de maio de 2008

hi,thinks you a lot for this great tutoriali have one question mm two questions:

1: how can i deploy this application with jboss 4.2.2 ?

2:how can i migrate to postgresql ?i am newbe in flex and blazeds thinks …

Najib12 de maio de 2008

oura !!i have resolved that i can now use postgresql just you have to changecargo.hbm.xml to :

and change in the cargo class the id to be int ,not long and change all of other classand interface the id to be int and not long (sorry i don’t speak english very well butyou can understand me of course !!)

if you don’t understand me i can speak french !!

Najib12 de maio de 2008

sorry the file wasn’t displayed !!in cargo.hbm.xml change to this :

id name=”idCargo” column=”id_cargo” type=”integer”and the generator must be class=”increment”

the upper letter must be lower in your database and you must change thejdbc.properties to change driver and others urls,

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

55 de 64 1/1/2009 11:54

Page 56: Flex Parte2

Rene Vielma13 de maio de 2008

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

56 de 64 1/1/2009 11:54

Page 57: Flex Parte2

Hello.I’m follow your steps, but I got next exception:

INFO: Server startup in 5339 ms

[BlazeDS] 05/13/2008 [ERROR] [Message.General] Exception when invokingservice: remoting-servicewith message: Flex Message (flex.messaging.messages.RemotingMessage)operation = getListclientId = 37AB9285-5C0A-9144-4B42-4D37058CBF48destination = cargoServicemessageId = ACAAB8F1-C177-E376-0260-E4D4D05A5F90timestamp = 1210724962588timeToLive = 0body = nullhdr(DSId) = 37AB9226-2508-D765-4011-3CB5687F9CF0hdr(DSEndpoint) = my-amfexception: flex.messaging.MessageException: java.lang.NullPointerException

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

57 de 64 1/1/2009 11:54

Page 58: Flex Parte2

[BlazeDS] 05/13/2008 [ERROR] [Message.General] Root cause:java.lang.NullPointerExceptionatcom.digows.artigos.JavaFlex.controller.SpringFactory$SpringFactoryInstance.lookup(SpringFactory.java:125)atflex.messaging.services.remoting.adapters.JavaAdapter.createInstance(JavaAdapter.java:475)atflex.messaging.services.remoting.adapters.JavaAdapter.invoke(JavaAdapter.java:395)atflex.messaging.services.RemotingService.serviceMessage(RemotingService.java:183)atflex.messaging.MessageBroker.routeMessageToService(MessageBroker.java:1417)atflex.messaging.endpoints.AbstractEndpoint.serviceMessage(AbstractEndpoint.java:878)atflex.messaging.endpoints.amf.MessageBrokerFilter.invoke(MessageBrokerFilter.java:121)at flex.messaging.endpoints.amf.LegacyFilter.invoke(LegacyFilter.java:158)at flex.messaging.endpoints.amf.SessionFilter.invoke(SessionFilter.java:49)atflex.messaging.endpoints.amf.BatchProcessFilter.invoke(BatchProcessFilter.java:67)atflex.messaging.endpoints.amf.SerializationFilter.invoke(SerializationFilter.java:146)atflex.messaging.endpoints.BaseHTTPEndpoint.service(BaseHTTPEndpoint.java:274)at flex.messaging.MessageBrokerServlet.service(MessageBrokerServlet.java:377)at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)atorg.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)atorg.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)atorg.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

58 de 64 1/1/2009 11:54

Page 59: Flex Parte2

at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)atorg.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)at java.lang.Thread.run(Thread.java:619)

[BlazeDS] 05/13/2008 [ERROR] [Message.General] Error handling message:flex.messaging.MessageException: java.lang.NullPointerExceptionincomingMessage: Flex Message (flex.messaging.messages.RemotingMessage)operation = getListclientId = 37AB9285-5C0A-9144-4B42-4D37058CBF48destination = cargoServicemessageId = ACAAB8F1-C177-E376-0260-E4D4D05A5F90timestamp = 1210724962588timeToLive = 0body = nullhdr(DSId) = 37AB9226-2508-D765-4011-3CB5687F9CF0hdr(DSEndpoint) = my-amferrorReply: Flex Message (flex.messaging.messages.ErrorMessage)clientId = 37AB9285-5C0A-9144-4B42-4D37058CBF48correlationId = ACAAB8F1-C177-E376-0260-E4D4D05A5F90destination = cargoServicemessageId = 37AB929B-550A-6236-7645-50B50B9742F7timestamp = 1210724962597timeToLive = 0body = nullcode = Server.Processingmessage = java.lang.NullPointerExceptiondetails = nullrootCause = java.lang.NullPointerExceptionbody = nullextendedData = null

any idea ?

thanks you !

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

59 de 64 1/1/2009 11:54

Page 60: Flex Parte2

Bruno Queiroz19 de maio de 2008

Rodrigo, talvez vc saiba…estou usando aquele @transaction do Spring mas naoconsigo faze-lo funcionar junto ao flex. Quando coloco a anotacao no escopo declasse ou metodo, o flex nao encontra os meus metodos do meu service, mas casoeu tire, funciona blzinha.

details: Method ‘obterPorCPF’ not found.

Valber Carreiro17 de setembro de 2008

Olá Rodrigo, venho dando uma estudada em flex através dos seus totos, daÃestou cm uma dúvida quanto ao seguinte ponto, por exemplo na minha classeservice se eu criar um método de login colocando como tipo de retorno umFlexForward, depois de fazer as validações de login como poderia encaminhar oretorno para uma página inicial? Pq estou tentando fazer o retorno dando um“return findForward(flexForward, HOME);” onde esse “felxForward” é umainstância da FlexForward e home seria a página que deveria ser apresentada casoa operação fosse bem sucedida, porém, após digitar o login e a senha econfirmar a operação nada acontece, ou seja, não acontece o redirecionamentopara a página principal.Vc teria alguma dica de como devo fazer esse forward ou teria alguma indicaçãode material para que eu pudesse dar uma olhada e ver se encontro o que estouprocurando?Desde já agradeço.

Valber Carreiro17 de setembro de 2008

Rodrigo, só complementando o post anterior… o que eu quero saber na verdadeé como fazer esse redirecionamento para a página principal a partir do javadepois da validação de um login por exemplo?vlw

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

60 de 64 1/1/2009 11:54

Page 61: Flex Parte2

Eremim30 de setembro de 2008

Deu um erro no meu projeto.

erro:SEVERE: Context initialization failedorg.springframework.beans.factory.BeanCreationException: Error creating bean withname ’sessionFactory’ defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Instantiation of bean failed; nested exception isorg.springframework.beans.BeanInstantiationException: Could not instantiate beanclass [org.springframework.orm.hibernate3.LocalSessionFactoryBean]: Constructorthrew exception; nested exception is java.lang.NoClassDefFoundError

na linha:super.setSessionFactory(factory);do CargoHibernateDao.java

Deu a seguinte mensagem:The type org.hibernate.SessionFactory cannot be resolved. It is indirectly referencedfrom required .class files

Alguem pode me ajudar?

João Paulo6 de outubro de 2008

Parabéns pelo excelente artigo! Com certeza é um dos melhores artigos na internetfalando sobre essa arquitetura.

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

61 de 64 1/1/2009 11:54

Page 62: Flex Parte2

Flávio27 de outubro de 2008

Eu criei uma função que faz uma pesquisa de membros de um projeto quepertencem a um projeto usando essa função:

Código: Selecionar tudo—-public MembroProjeto getMembroProjetoByProjeto(Projeto projCodigo){MembroProjeto membroProjeto = (MembroProjeto) getSession().createQuery(”" +“FROM br.com.teamwork.model.entity.MembroProjeto WHERE projCodigo=”+projCodigo.getProjCodigo()).list();return membroProjeto;}—-

O problema é que ela pelo jeito foi feita para retornar apenas 1 item e nãovários, como eu faço para ele retornar vários dados? Pois se o projeto tiverapenas um membro ele vai sem problema, senão ele dá pau. Outra coisa, eu tiveque trocar o tipo do list de ArrayCollection para Object, senão dá pau

Como faço para arrumar isso?Estou quase no final do TCC e é só isso que falta

Leonardo França » Adobe Flex e Java5 de novembro de 2008

[...] Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - UmaSolução OpenSource para Sistem… [...]

Sergio12 de novembro de 2008

Cara esse plugin flex pro eclipse, é o adobe flex builder 3, se não, como faço prainstalar esse plugin no eclipse?

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

62 de 64 1/1/2009 11:54

Page 63: Flex Parte2

aaron12 de novembro de 2008

faultCode:Server.Processing faultString:’No destination with id ‘cargoService’ isregistered with any service.’ faultDetail:’null’

hello anyone can help I really need to solve it. thanks

ezzeddine4 de dezembro de 2008

hello,if i have a class java with a composite key, how his calss ActionScript?

Comments RSS TrackBack Identifier URI

Deixe um comentário

Name (obrigatório)

Mail (will not be published) (obrigatório)

Website

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

63 de 64 1/1/2009 11:54

Page 64: Flex Parte2

Recent Posts

Porquê Flex? / Why Flex? Baseado nopost do Ebertom, resolvi postar uma série devideos engraçados e interessantes sobre...Porquê Flex? AIR? Why Flex ...

Manifesto Flex brasil [Saiba o que é oManifesto Flex Brasil] Minhas principaiscontribuições para a comunidade: Post:Configurando Ambiente com Flex 2 eHelloWorld. Por que ele é relevante: Aprendaa...

Integrando Adobe Flex + BlazeDS +SpringFramework + Hibernate - UmaSolução OpenSource para Sistemas Web.(Parte 2 - Final) Olá Pessoal! Primeiro lugar,quero agradecer a todos pelo feedback dopost anterior, isto é motivante e me dá ânimoem concluir este, e outros que virão. Hoje ofoco...

Recent Comments

howosteofevek: hello it is test. WinRARprovides the full RAR and ZIP file ...

patricia: Uma dúvia...Sou iniciante com oflex...esta associação entre...

Keynes: Digows, Parabens... Seu artigo ficouótimo. Seguindo o tut...

vavamaster: Olá, ficou muito bom mesmo,meus parabéns, só estou com um p...

ezzeddine: hello, if i have a class java with acomposite key, how his...

Junior: Alguem tem o source.zip desteexemplo???...

J2EE Jobs

Join GetAFreelancer.com and bid on

J2EE projects. Join Free.www.GetAFreelancer.com

Tomcat Hosting $7.99/mo

Professional JAVA/JSP/Servlet host

Tomcat/Jetty/JBoss! 14d trialwww.hostjava.net

Powered By: Rodrigo P. Fraga - The Theme design by Web Themes.

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate - Uma Solução OpenSource para S... http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensou...

64 de 64 1/1/2009 11:54