TUTORIAL JAVA + FLEX NA PRÁTICA 1/6

Antes de mais nada gostaria de agradecer as visitas no blog, quando visitar sinta-se a vontade para fazer seu comentário, ok! ;)

Este Tutorial vai ser para os leitores com um nível mais avançado (ao contrário do que tenho procurado atender no momento aqui no blog), então vai ser muito código, alguns Links e pouca teoria, peço desculpas para os iniciantes, mais pensa pelo lado positivo, se estudar tudo que vai ser mostrado e correr atrás ( o que não entender procurar no Google) você vai com certeza aprender e muito.

BACKEND – JAVA + HIBERNATE ANNOTATIONS + SPRING ANNOTATIONS + BLAZEDS + MYSQL

Essa estrutura que vou usar no backend já é muito conhecida então vou mostrar o código sem muita explicação ( sempre utilizaremos como IDE o ECLIPSE).

Existe um excelente exemplo feito pelo Rodrigo Fraga em seu blog, então para não reescrever a roda, antes de ler este artigo leia esses artigos do Rodrigo Fraga, ok!

http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensource-para-sistemas-web-parte-1/

http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensource-para-sistemas-web-parte-2-final/

bem, então vamos começar (não vou mostrar as dependências, espero que você saiba que precisa dos jars do Spring, Hibernate, Blazeds, Mysql Jdbc, que vc precisa de um Web Conteiner Tomcat ou um Servidor de Aplicação como JBoos instalado e configurado, o mesmo com o Mysql, o eclipse e os plugins necessários... Se não sabe pesquise folgado, se não você nunca vai ser um bom programador :) ).

COMECANDO O PROJETO

Vamos Criar o Nosso Projeto em Java ( Um Dynamic Web Project ) com o nome CrudJava, na imagem abaixo se trata de um simples Crud(Cadastro de Estado). O nosso projeto todo codificado vai ficar assim:

 TUTORIAL JAVA + FLEX NA PRÁTICA 1/6


Como podem perceber o Java é responsável por 3 camadas da minha arquitetura, Negócio (Business), Dados (Data) e Infraestrutura (Infrastructure).

Agora vou colocando os códigos de cada classe abaixo e o que for necessário vou explicando:

CAMADA DE NEGÓCIO

Minha entidade Estado.java

JAVA:
  1. package com.saberprogramar.business.entitys;
  2. import javax.persistence.Entity;
  3. import javax.persistence.GeneratedValue;
  4. import javax.persistence.GenerationType;
  5. import javax.persistence.Id;
  6. import javax.persistence.Table;
  7. @Table(name="estado")
  8. public class Estado {
  9. @Id @GeneratedValue(strategy = GenerationType.AUTO)
  10.     private long idEstado;
  11. private String nome;
  12. private String uf;
  13.     //…. Getters e Setters
  14. }

Meu repositório EstadoRepository.java

JAVA:
  1. package com.saberprogramar.business.repositorys;
  2. import java.util.List;
  3. import com.saberprogramar.business.entitys.Estado;
  4. public interface EstadoRepository {
  5. public void save(Estado estado);
  6. public void remove(Estado estado);
  7. public List<estado> findAll();
  8. public List<estado> findByName(String nome);
  9. }

Meu Serviço EstadoService.java

JAVA:
  1. package com.saberprogramar.business.services;
  2. import java.util.List;
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.stereotype.Service;
  5. import com.saberprogramar.business.entitys.Estado;
  6. import com.saberprogramar.business.repositorys.EstadoRepository;
  7. @Service(value="EstadoService")
  8. public class EstadoService {
  9. EstadoRepository estadoRepository;
  10. @Autowired
  11.     public void setEstadoRepository(EstadoRepository estadoRepository) {
  12.         this.estadoRepository = estadoRepository;
  13.     }
  14.     public void save(Estado estado){
  15.         estadoRepository.save(estado);
  16.     }
  17.     public void remove(Estado estado){
  18.         estadoRepository.remove(estado);
  19.     }
  20.     public List<estado> findAll(){
  21.         return estadoRepository.findAll();
  22.     }
  23.     public List<estado> findByName(String nome){
  24.         return estadoRepository.findByName(nome);
  25.     }
  26. }

CAMADA DE DADOS

Minha Classe EstadoDao.java

JAVA:
  1. package com.saberprogramar.data.daos;
  2. import java.util.List;
  3. import org.hibernate.SessionFactory;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.beans.factory.annotation.Qualifier;
  6. import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
  7. import org.springframework.stereotype.Repository;
  8. import com.saberprogramar.business.entitys.Estado;
  9. import com.saberprogramar.business.repositorys.EstadoRepository;
  10. @Repository(value="EstadoRepository")
  11. public class EstadoDao extends HibernateDaoSupport
  12.     implements EstadoRepository {
  13. @Autowired
  14.     public EstadoDao(@Qualifier("sessionFactory") SessionFactory sessionFactory) {
  15.         // TODO Auto-generated constructor stub
  16.         super.setSessionFactory(sessionFactory);
  17.     }
  18.     @Override
  19.     public void remove(Estado estado) {
  20.         // TODO Auto-generated method stub
  21.         getHibernateTemplate().delete(estado);
  22.     }
  23.     @SuppressWarnings("unchecked")
  24.     @Override
  25.     public List<estado> findAll() {
  26.         // TODO Auto-generated method stub
  27.         return getHibernateTemplate().loadAll(Estado.class);
  28.     }
  29.     @SuppressWarnings("unchecked")
  30.     @Override
  31.     public List<estado> findByName(String nome) {
  32.         // TODO Auto-generated method stub
  33.         return getHibernateTemplate().find("from Estado" +
  34.                 " where nome like '%" + nome + "%'");
  35.     }
  36.     @Override
  37.     public void save(Estado estado) {
  38.         // TODO Auto-generated method stub
  39.         getHibernateTemplate().saveOrUpdate(estado);
  40.     }
  41. }

CAMADA DE INFRAESTRUTURA

AnnotationOptimizedSessionFactoryBean – Essa classe não é mostrada no link do artigo do Rodrigo Fraga, porém foi ele também que disponibilizou essa classe. Ao utilizarmos esta classe conseguimos mapear o package onde ficam nossas Entity do Hibernate (@Entity), configuração essa que é melhor visualizada no nosso ApplicationContext.xml. Detalhes de para que serve essa classe no fórum FlexBrasil http://forum.flexbrasil.com.br/viewtopic.php?f=22&t=567

AnnotationOptimizedSessionFactoryBean.java

JAVA:
  1. package com.saberprogramar.infrastructure;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.Collection;
  5. import java.util.Set;
  6.  
  7. import javax.persistence.Entity;
  8.  
  9. import org.springframework.beans.factory.config.BeanDefinition;
  10. import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider;
  11. import org.springframework.core.type.filter.AnnotationTypeFilter;
  12. import org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean;
  13. import org.springframework.util.ClassUtils;
  14.  
  15. /**
  16. * ###############################
  17. * @since 23/04/2008
  18. * @version 1.0
  19. * @category Infrastructure
  20. */
  21. public class AnnotationOptimizedSessionFactoryBean extends AnnotationSessionFactoryBean
  22. {
  23.    /*-------------------------------------------------------------------
  24.     *                       ATTRIBUTES
  25.     *-------------------------------------------------------------------*/
  26.    private String[] basePackages;
  27.    private ClassLoader beanClassLoader;
  28.  
  29.    /*-------------------------------------------------------------------
  30.     *                        BEHAVIORS
  31.     *-------------------------------------------------------------------*/
  32.    @Override
  33.    public void afterPropertiesSet() throws Exception
  34.    {
  35.       Collection<class<?>> entities = new ArrayList<class<?>>();
  36.       ClassPathScanningCandidateComponentProvider scanner = this.createScanner();
  37.       for (String basePackage : this.basePackages)
  38.       {
  39.          this.findEntities(scanner, entities, basePackage);
  40.       }
  41.       this.setAnnotatedClasses(entities
  42.             .toArray(new Class<?>[entities.size()]));
  43.       this.setAnnotatedPackages(this.basePackages);
  44.       super.afterPropertiesSet();
  45.    }
  46.  
  47.    private ClassPathScanningCandidateComponentProvider createScanner()
  48.    {
  49.       ClassPathScanningCandidateComponentProvider scanner = new ClassPathScanningCandidateComponentProvider(false);
  50.       scanner.addIncludeFilter( new AnnotationTypeFilter(Entity.class) );
  51.       return scanner;
  52.    }
  53.  
  54.    private void findEntities(ClassPathScanningCandidateComponentProvider scanner, Collection<class<?>> entities, String basePackage)
  55.    {
  56.       Set<beanDefinition> annotatedClasses = scanner.findCandidateComponents(basePackage);
  57.  
  58.       for (BeanDefinition bd : annotatedClasses)
  59.       {
  60.          String className = bd.getBeanClassName();
  61.          Class<?> type = ClassUtils.resolveClassName( className, this.beanClassLoader );
  62.          entities.add( type );
  63.       }
  64.    }
  65.  
  66.    /*-------------------------------------------------------------------
  67.     *                       GET'S AND SET'S
  68.     *-------------------------------------------------------------------*/
  69.    public void setBasePackage(String basePackage)
  70.    {
  71.       this.basePackages = new String[]{ basePackage };
  72.    }
  73.    public void setBasePackages(String[] basePackages)
  74.    {
  75.       this.basePackages = basePackages;
  76.    }
  77.  
  78.    @Override
  79.    public void setBeanClassLoader(ClassLoader beanClassLoader)
  80.    {
  81.       this.beanClassLoader = beanClassLoader;
  82.    }
  83. }

SpringFactory.java

JAVA:
  1. package com.saberprogramar.infrastructure;
  2.  
  3. import org.springframework.beans.BeansException;
  4. import org.springframework.beans.factory.NoSuchBeanDefinitionException;
  5. import org.springframework.context.ApplicationContext;
  6. import org.springframework.web.context.support.WebApplicationContextUtils;
  7.  
  8. import flex.messaging.FactoryInstance;
  9. import flex.messaging.FlexFactory;
  10. import flex.messaging.config.ConfigMap;
  11. import flex.messaging.services.ServiceException;
  12.  
  13. public class SpringFactory implements FlexFactory
  14. {
  15.     private static final String SOURCE = "source";
  16.  
  17.     public void initialize(String id, ConfigMap configMap) {}
  18.  
  19.     public FactoryInstance createFactoryInstance(String id, ConfigMap properties)
  20.     {
  21.         SpringFactoryInstance instance = new SpringFactoryInstance(this, id, properties);
  22.         instance.setSource(properties.getPropertyAsString(SOURCE, instance.getId()));
  23.         return instance;
  24.     } // end method createFactoryInstance()
  25.  
  26.     public Object lookup(FactoryInstance inst)
  27.     {
  28.         SpringFactoryInstance factoryInstance = (SpringFactoryInstance) inst;
  29.         return factoryInstance.lookup();
  30.     }
  31.  
  32.     static class SpringFactoryInstance extends FactoryInstance
  33.     {
  34.         SpringFactoryInstance(SpringFactory factory, String id, ConfigMap properties)
  35.         {
  36.             super(factory, id, properties);
  37.         }
  38.  
  39.  
  40.         public String toString()
  41.         {
  42.             return "SpringFactory instance for id=" + getId() + " source=" + getSource() + " scope=" + getScope();
  43.         }
  44.  
  45.         public Object lookup()
  46.         {
  47.             ApplicationContext appContext = WebApplicationContextUtils.getWebApplicationContext(flex.messaging.FlexContext.getServletConfig().getServletContext());
  48.             String beanName = getSource();
  49.  
  50.             try
  51.             {
  52.                 return appContext.getBean(beanName);
  53.             }
  54.             catch (NoSuchBeanDefinitionException nexc)
  55.             {
  56.                 ServiceException e = new ServiceException();
  57.                 String msg = "Spring service named '" + beanName + "' does not exist.";
  58.                 e.setMessage(msg);
  59.                 e.setRootCause(nexc);
  60.                 e.setDetails(msg);
  61.                 e.setCode("Server.Processing");
  62.                 throw e;
  63.             }
  64.             catch (BeansException bexc)
  65.             {
  66.                 ServiceException e = new ServiceException();
  67.                 String msg = "Unable to create Spring service named '" + beanName + "' ";
  68.                 e.setMessage(msg);
  69.                 e.setRootCause(bexc);
  70.                 e.setDetails(msg);
  71.                 e.setCode("Server.Processing");
  72.                 throw e;
  73.             }
  74.         }
  75.  
  76.     }
  77.  
  78. }

No próximo Artigo continuaremos com o Backend, só que com os nossos arquivos de configuração no nosso WEB-INF. Há, e desculpe pelo erro de português, faltei as aulas de português para fica programando. huahuahu

Vlw e até logo.

Popularity: 100% [?]

Tags: , , , , , , , , , , ,

Categoria(s):#JAVA + FLEX NA PRÁTICA, Blazeds, Data Service, Frameworks, Hibernate, Java, MVC, Spring, Swiz Framework


Outros Artigos:

This website uses IntenseDebate comments, but they are not currently loaded because either your browser doesn't support JavaScript, or they didn't load fast enough.

8 Responses to “TUTORIAL JAVA + FLEX NA PRÁTICA 1/6”

  1. [...] Esse artigo é continuação do TUTORIAL JAVA + FLEX NA PRÁTICA 1/6. [...]

  2. [...] artigo é continuação do TUTORIAL JAVA + FLEX NA PRÁTICA 1/6 TUTORIAL JAVA + FLEX NA PRÁTICA [...]

  3. [...] artigo é continuação do TUTORIAL JAVA + FLEX NA PRÁTICA 1/6 TUTORIAL JAVA + FLEX NA PRÁTICA 2/6 TUTORIAL JAVA + FLEX NA PRÁTICA [...]

  4. [...] artigo é continuação do TUTORIAL JAVA + FLEX NA PRÁTICA 1/6 TUTORIAL JAVA + FLEX NA PRÁTICA 2/6 TUTORIAL JAVA + FLEX NA PRÁTICA 3/6 TUTORIAL JAVA + FLEX NA [...]

  5. [...] artigo é continuação do TUTORIAL JAVA + FLEX NA PRÁTICA 1/6 TUTORIAL JAVA + FLEX NA PRÁTICA 2/6 TUTORIAL JAVA + FLEX NA PRÁTICA 3/6 TUTORIAL JAVA + FLEX NA [...]

  6. [...] artigo é continuação do TUTORIAL JAVA + FLEX NA PRÁTICA 1/6 TUTORIAL JAVA + FLEX NA PRÁTICA 2/6 TUTORIAL JAVA + FLEX NA PRÁTICA 3/6 TUTORIAL JAVA + FLEX NA [...]

  7. [...] resumindo… para comemorar vou colocar para download o projeto java do Tutorial JAVA + FLEX NA PRÁTICA com todos os jars, já que muitos me [...]

  8. [...] Esse é o primeiro ano do SaberProgramar.com e até que foi bem aceito na blogsfera… muito contato por email que resultou em parceria diária de ajuda, fora as oportunidades de trabalho que recebi através do mesmo, sei que tenho que melhorar muita coisa mas isso não importa neste momento, muitos já me conhecem na web, espero ajudar mais desenvolvedores nesse ano de 2010 com excelentes tutoriais como foi o TUTORIAL JAVA + FLEX NA PRÁTICA. [...]

Leave a Reply