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!
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:
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
-
package com.saberprogramar.business.entitys;
-
import javax.persistence.Entity;
-
import javax.persistence.GeneratedValue;
-
import javax.persistence.GenerationType;
-
import javax.persistence.Id;
-
import javax.persistence.Table;
-
@Table(name="estado")
-
public class Estado {
-
@Id @GeneratedValue(strategy = GenerationType.AUTO)
-
private long idEstado;
-
private String nome;
-
private String uf;
-
//…. Getters e Setters
-
}
Meu repositório EstadoRepository.java
Meu Serviço EstadoService.java
-
package com.saberprogramar.business.services;
-
import java.util.List;
-
import org.springframework.beans.factory.annotation.Autowired;
-
import org.springframework.stereotype.Service;
-
import com.saberprogramar.business.entitys.Estado;
-
import com.saberprogramar.business.repositorys.EstadoRepository;
-
@Service(value="EstadoService")
-
public class EstadoService {
-
EstadoRepository estadoRepository;
-
@Autowired
-
public void setEstadoRepository(EstadoRepository estadoRepository) {
-
this.estadoRepository = estadoRepository;
-
}
-
public void save(Estado estado){
-
estadoRepository.save(estado);
-
}
-
public void remove(Estado estado){
-
estadoRepository.remove(estado);
-
}
-
return estadoRepository.findAll();
-
}
-
return estadoRepository.findByName(nome);
-
}
-
}
CAMADA DE DADOS
Minha Classe EstadoDao.java
-
package com.saberprogramar.data.daos;
-
import java.util.List;
-
import org.hibernate.SessionFactory;
-
import org.springframework.beans.factory.annotation.Autowired;
-
import org.springframework.beans.factory.annotation.Qualifier;
-
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
-
import org.springframework.stereotype.Repository;
-
import com.saberprogramar.business.entitys.Estado;
-
import com.saberprogramar.business.repositorys.EstadoRepository;
-
public class EstadoDao extends HibernateDaoSupport
-
implements EstadoRepository {
-
@Autowired
-
public EstadoDao(@Qualifier("sessionFactory") SessionFactory sessionFactory) {
-
// TODO Auto-generated constructor stub
-
super.setSessionFactory(sessionFactory);
-
}
-
@Override
-
public void remove(Estado estado) {
-
// TODO Auto-generated method stub
-
getHibernateTemplate().delete(estado);
-
}
-
@SuppressWarnings("unchecked")
-
@Override
-
// TODO Auto-generated method stub
-
return getHibernateTemplate().loadAll(Estado.class);
-
}
-
@SuppressWarnings("unchecked")
-
@Override
-
// TODO Auto-generated method stub
-
return getHibernateTemplate().find("from Estado" +
-
" where nome like '%" + nome + "%'");
-
}
-
@Override
-
public void save(Estado estado) {
-
// TODO Auto-generated method stub
-
getHibernateTemplate().saveOrUpdate(estado);
-
}
-
}
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
-
package com.saberprogramar.infrastructure;
-
-
import java.util.ArrayList;
-
import java.util.Collection;
-
import java.util.Set;
-
-
import javax.persistence.Entity;
-
-
import org.springframework.beans.factory.config.BeanDefinition;
-
import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider;
-
import org.springframework.core.type.filter.AnnotationTypeFilter;
-
import org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean;
-
import org.springframework.util.ClassUtils;
-
-
/**
-
* ###############################
-
* @since 23/04/2008
-
* @version 1.0
-
* @category Infrastructure
-
*/
-
public class AnnotationOptimizedSessionFactoryBean extends AnnotationSessionFactoryBean
-
{
-
/*-------------------------------------------------------------------
-
* ATTRIBUTES
-
*-------------------------------------------------------------------*/
-
private ClassLoader beanClassLoader;
-
-
/*-------------------------------------------------------------------
-
* BEHAVIORS
-
*-------------------------------------------------------------------*/
-
@Override
-
{
-
Collection> entities = new ArrayList>();
-
ClassPathScanningCandidateComponentProvider scanner = this.createScanner();
-
{
-
this.findEntities(scanner, entities, basePackage);
-
}
-
this.setAnnotatedClasses(entities
-
.toArray(new Class[entities.size()]));
-
this.setAnnotatedPackages(this.basePackages);
-
super.afterPropertiesSet();
-
}
-
-
private ClassPathScanningCandidateComponentProvider createScanner()
-
{
-
ClassPathScanningCandidateComponentProvider scanner = new ClassPathScanningCandidateComponentProvider(false);
-
return scanner;
-
}
-
-
private void findEntities(ClassPathScanningCandidateComponentProvider scanner, Collection> entities, String basePackage)
-
{
-
-
for (BeanDefinition bd : annotatedClasses)
-
{
-
Class type = ClassUtils.resolveClassName( className, this.beanClassLoader );
-
entities.add( type );
-
}
-
}
-
-
/*-------------------------------------------------------------------
-
* GET'S AND SET'S
-
*-------------------------------------------------------------------*/
-
{
-
}
-
{
-
this.basePackages = basePackages;
-
}
-
-
@Override
-
{
-
this.beanClassLoader = beanClassLoader;
-
}
-
}
SpringFactory.java
-
package com.saberprogramar.infrastructure;
-
-
import org.springframework.beans.BeansException;
-
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
-
import org.springframework.context.ApplicationContext;
-
import org.springframework.web.context.support.WebApplicationContextUtils;
-
-
import flex.messaging.FactoryInstance;
-
import flex.messaging.FlexFactory;
-
import flex.messaging.config.ConfigMap;
-
import flex.messaging.services.ServiceException;
-
-
public class SpringFactory implements FlexFactory
-
{
-
-
-
{
-
SpringFactoryInstance instance = new SpringFactoryInstance(this, id, properties);
-
instance.setSource(properties.getPropertyAsString(SOURCE, instance.getId()));
-
return instance;
-
} // end method createFactoryInstance()
-
-
{
-
SpringFactoryInstance factoryInstance = (SpringFactoryInstance) inst;
-
return factoryInstance.lookup();
-
}
-
-
static class SpringFactoryInstance extends FactoryInstance
-
{
-
{
-
super(factory, id, properties);
-
}
-
-
{
-
return "SpringFactory instance for id=" + getId() + " source=" + getSource() + " scope=" + getScope();
-
}
-
-
{
-
ApplicationContext appContext = WebApplicationContextUtils.getWebApplicationContext(flex.messaging.FlexContext.getServletConfig().getServletContext());
-
-
try
-
{
-
return appContext.getBean(beanName);
-
}
-
catch (NoSuchBeanDefinitionException nexc)
-
{
-
ServiceException e = new ServiceException();
-
e.setMessage(msg);
-
e.setRootCause(nexc);
-
e.setDetails(msg);
-
e.setCode("Server.Processing");
-
throw e;
-
}
-
catch (BeansException bexc)
-
{
-
ServiceException e = new ServiceException();
-
e.setMessage(msg);
-
e.setRootCause(bexc);
-
e.setDetails(msg);
-
e.setCode("Server.Processing");
-
throw e;
-
}
-
}
-
-
}
-
-
}
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.




Pingback: TUTORIAL JAVA + FLEX NA PRÁTICA 2/6 | SaberProgramar.com
Pingback: TUTORIAL JAVA + FLEX NA PRÁTICA 3/6 | SaberProgramar.com
Pingback: TUTORIAL JAVA + FLEX NA PRÁTICA 4/6 | SaberProgramar.com
Pingback: TUTORIAL JAVA + FLEX NA PRÁTICA 5/6 | SaberProgramar.com
Pingback: TUTORIAL JAVA + FLEX NA PRÁTICA 6/6 | SaberProgramar.com
Pingback: TUTORIAL JAVA + FLEX NA PRÁTICA 7/6 - Bônus | SaberProgramar.com
Pingback: SaberProgramar com nova Hospedagem | SaberProgramar.com
Pingback: Retrospectiva 2009, Meta 2010 e Boas Festas | SaberProgramar.com