Como transferir MVC para EJB [RESOLVIDO]

15 respostas
M

Sempre uso esse padrão de MVC que coloquei aqui abaixo, estou estudando EJB c/ JBOSS.
Pois o EJB c/ JBOSS, estão pedindo muito no mercado e eu preciso estar familiarizado a isto .

Gostaria de saber como ficaria a sua arquitetura no EJB, pode explicar ultilizando os scripts abaixo.

================Script ============================

Usuario
@Entity
@Table(name="usuario")
public class Usuario implements Serializable{
 //metodos
}

ManagedBean

@ManagedBean(name="usuarioBean")
@RequestScoped 
public class UsuarioBean {
  private Usuario usuario;
  
  public UsuarioBean(){
            usuario = new Usuario();
   
  }


  public String salvar(){
		FacesContext fc = FacesContext.getCurrentInstance();
		UsuarioRN usuarioRN = new UsuarioRN();
		usuarioRN.salvar(this.usuario);
	
		
		return "paginax";
	}
}

Regra de Negocio

// Ficam a regra de persistencia, como deveria salvar e se pode salvar 
   // Exemplo não pode salvar usuario com o msmo login, ou nao pode deletar usuario administrador
public class UsuarioRN{
	
	private UsuarioDAO usuarioDAO;
	
	public UsuarioRN() {
		this.usuarioDAO = DAOFactory.criarUsuarioDAO();
	}
	
	public void salvar(Usuario usuario){

		return this.usuarioDAO.salvar(usuario);
	}
}

Interface de UsuarioDAO

public interface UsuarioDAO {

	public void salvar(Usuario usuario);
{

UsuarioDAOHibernate -- realmente aonde persiste

public class UsuarioDAOHibernate implements UsuarioDAO {
	
	private Session session;
	
	public void setSession(Session session) {
		this.session = session;
	}

	@Override 
	public void salvar(Usuario usuario) {
		this.session.save(usuario);
	}
}

E a DAOFactory

public class DAOFactory {
	
	public static UsuarioDAO criarUsuarioDAO(){
		UsuarioDAOHibernate usuarioDAO = new UsuarioDAOHibernate();
		usuarioDAO.setSession(HibernateUtil.getSessionFactory().getCurrentSession());
		return usuarioDAO;
	}
}

15 Respostas

H

Acho que você não entendeu o conceito do MVC. Você pode ter MVC com EJB.

MVC é padrão, EJB é tecnologia.

Se quiser, em minha assinatura tem um exemplo de JSF com EJB. [=

M

Hebert aqui ???
Meu blog sobre Java: uaiHebert.com

Eu não achei :confused:

o EJB entraria no lugar de quem acima ???

E

MarcolaLipe10:
Hebert aqui ???
Meu blog sobre Java: uaiHebert.com

Eu não achei :confused:

o EJB entraria no lugar de quem acima ???

O link direto pro artigo ta na assinatura do Senhor Hebert.
Aplicação Web Completa JSF EJB JPA JAAS

I

Entenda que MVC é um padrão, e EJB é a tecnologia, como o Hebert disse…
Da pra você usar os dois, e por padrão já utiliza…

A forma que vc demonstrou já está em MVC, agora é só colocar o EJB ai!

Exemplo:

  • Repare nas anotações EJBs
@Local
public interface UsuarioDAO {  
  
    public void salvar(Usuario usuario);  
{
@Stateless(name = "usuarioDAO")
public class UsuarioDAOHibernate implements UsuarioDAO {  
      
    private Session session;  
      
    public void setSession(Session session) {  
        this.session = session;  
    }  
  
    @Override   
    public void salvar(Usuario usuario) {  
        this.session.save(usuario);  
    }  
}
M

Valeo Erick , achei e ja estou fazendo ! :smiley:

Hebert Coelho blogger sensacional … Sem palavras .

Igor_ks : Você fechou com chave de ouro o forum …
Você realmente tirou minhas duvidas emcima de minhas aplicações , obrigado rapaz

[OFF] Como eu fecho esse topico do forum ???

E

Basta editar o seu primeiro post e colocar no título [RESOLVIDO].

M

Valeo Erick … [Resolvido ] :smiley:

M

Esse MVC acima é o (Design Pattern ? Strategy) ???

E para criar um projeto e faze-lo como um Ejb-lite , é necessario eu criar um NEW > EJB PROJECT ou eu posso fazer um NEW > DYNAMIC WEB PROJECT ?

H

MarcolaLipe10:
Esse MVC acima é o (Design Pattern ? Strategy) ???

E para criar um projeto e faze-lo como um Ejb-lite , é necessario eu criar um NEW > EJB PROJECT ou eu posso fazer um NEW > DYNAMIC WEB PROJECT ?

Oi?
MVC, é o MVC. Strategy é outra coisa. Aqui explica o strategy: http://uaihebert.com/design-pattern-strategy/

MVC é separação das camadas de uma aplicação Web.

Você precisa entender oq é o EJB Lite e como funciona, no que ele difere no EJB Full. Se você quiser, tem esse manual que é muito bom: https://sites.google.com/site/uaihebertdeposito/OCBCD%206%20Study%20Notes.pdf

M

Helbert …

Tem algum projeto que você coloco no seu bloger, como ultilizar um JPA ??

Pois eu uso Hibernate.cfg.xml , e gostaria de migrar para o JPA , me sinto preso ao Hibernate e nas consultas é dificil eu achar alguem que faça com cfg.xml

Tenho um projeto para fazer aqui com prazo determinado e gostaria de arriscar utilizando JPA .

Obrigado !

H

MarcolaLipe10:
Helbert …

Tem algum projeto que você coloco no seu bloger, como ultilizar um JPA ??

Pois eu uso Hibernate.cfg.xml , e gostaria de migrar para o JPA , me sinto preso ao Hibernate e nas consultas é dificil eu achar alguem que faça com cfg.xml

Tenho um projeto para fazer aqui com prazo determinado e gostaria de arriscar utilizando JPA .

Obrigado !

Todas as aplicações completas lá utilizam JPA. JSF + EJB com JPA, JSF + JPA (com tomcat) e a ultima que foi SpringMVC

M

Já achei … !!

http://uaihebert.com/aplicacao-web-completa-tomcat-jsf-primefaces-jpa-hibernate/

Você sempre usa o eclipse Indigo ???

Pelo qual motivo ?

M

Quando vamos baixar o arquivo na pagina 15, aqui para mim ta vindo um .rar sem nada !

H

MarcolaLipe10:
Quando vamos baixar o arquivo na pagina 15, aqui para mim ta vindo um .rar sem nada !
Atualizei a URL lá. Aqui você encontra: http://uaihebert.com/wp-content/uploads/JSFCrudApp.zip

M

Fiz o seu , qndo fui fazer o meu deu erro :/

O que tem de errado aqui ??

package br.com.marcos.managedbean;

import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.naming.InitialContext;
import javax.naming.NamingException;

import br.com.marcos.ejb.ClienteBean;
import br.com.marcos.entidade.Cliente;

@ManagedBean
@ViewScoped
public class ClienteMB {
	
	private Cliente cliente = new Cliente();
	private List<Cliente> lstCliente = new ArrayList<Cliente>();
	
	
	public String incluirCliente(){
		//Incluir cliente no Banco de Dados
		InitialContext ini;
		try {
			ini =new InitialContext();
			ClienteBean clienteBean = (ClienteBean)ini.lookup("java:/module/ClienteBean");
			clienteBean.salvar(cliente);
			cliente = new Cliente();
			lstCliente = clienteBean.buscarClientes();
		} catch (NamingException e) {
			e.printStackTrace();
		}
		
		
		return null;
	}
	
	/***
	 * GETTER E SETTER
	 * 
	 * **/
ClienteBean
package br.com.marcos.ejb;

import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import br.com.marcos.entidade.Cliente;

@Stateless
public class ClienteBean{
	
	@PersistenceContext
	EntityManager em;
	
	public void salvar(Cliente  cliente){
		em.persist(cliente);
	}
	
	public List<Cliente> buscarClientes(){
		return em.createQuery("FROM Cliente;").getResultList();
	}
}
Entity
package br.com.marcos.entidade;

import javax.persistence.*;

@Entity
@Table(name="cliente")
public class Cliente {
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	private Integer id;
	@Column
	private String nome;
	
	/******
	 * Getter&Setter
	 * 
	 * **/

persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
	<persistence-unit name="minhaaplicacao">
	<class>br.com.marcos.entidade.Cliente</class>
	<jta-data-source>minhaaplicacao_ds</jta-data-source> 
	</persistence-unit>
</persistence>

Erro lindo :

Registering web context: /minhaaplicacao
20:35:46,637 INFO  [org.jboss.as.server] (HttpManagementService-threads - 2) JBAS018559: Deployed "minhaaplicacao.war"
20:36:10,427 ERROR [stderr] (http-localhost-127.0.0.1-8083-1) javax.naming.NameNotFoundException: module/ClienteBean -- service jboss.naming.context.java.module.ClienteBean
20:36:10,428 ERROR [stderr] (http-localhost-127.0.0.1-8083-1) 	at org.jboss.as.naming.ServiceBasedNamingStore.lookup(ServiceBasedNamingStore.java:97)
20:36:10,429 ERROR [stderr] (http-localhost-127.0.0.1-8083-1) 	at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:178)
20:36:10,430 ERROR [stderr] (http-localhost-127.0.0.1-8083-1) 	at org.jboss.as.naming.InitialContext.lookup(InitialContext.java:113)
20:36:10,430 ERROR [stderr] (http-localhost-127.0.0.1-8083-1) 	at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:214)
20:36:10,431 ERROR [stderr] (http-localhost-127.0.0.1-8083-1) 	at javax.naming.InitialContext.lookup(InitialContext.java:411)
20:36:10,431 ERROR [stderr] (http-localhost-127.0.0.1-8083-1) 	at br.com.marcos.managedbean.ClienteMB.incluirCliente(ClienteMB.java:33)
20:36:10,432 ERROR [stderr] (http-localhost-127.0.0.1-8083-1) 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
20:36:10,432 ERROR [stderr] (http-localhost-127.0.0.1-8083-1) 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
20:36:10,433 ERROR [stderr] (http-localhost-127.0.0.1-8083-1) 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
20:36:10,433 ERROR [stderr] (http-localhost-127.0.0.1-8083-1) 	at java.lang.reflect.Method.invoke(Method.java:606)
20:36:10,434 ERROR [stderr] (http-localhost-127.0.0.1-8083-1) 	at org.apache.el.parser.AstValue.invoke(AstValue.java:262)
20:36:10,434 ERROR [stderr] (http-localhost-127.0.0.1-8083-1) 	at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278)
20:36:10,435 ERROR [stderr] (http-localhost-127.0.0.1-8083-1) 	at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
20:36:10,435 ERROR [stderr] (http-localhost-127.0.0.1-8083-1) 	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
20:36:10,436 ERROR [stderr] (http-localhost-127.0.0.1-8083-1) 	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
20:36:10,436 ERROR [stderr] (http-localhost-127.0.0.1-8083-1) 	at javax.faces.component.UICommand.broadcast(UICommand.java:315)
20:36:10,437 ERROR [stderr] (http-localhost-127.0.0.1-8083-1) 	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
20:36:10,437 ERROR [stderr] (http-localhost-127.0.0.1-8083-1) 	at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
20:36:10,438 ERROR [stderr] (http-localhost-127.0.0.1-8083-1) 	at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
20:36:10,438 ERROR [stderr] (http-localhost-127.0.0.1-8083-1) 	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
20:36:10,439 ERROR [stderr] (http-localhost-127.0.0.1-8083-1) 	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
20:36:10,439 ERROR [stderr] (http-localhost-127.0.0.1-8083-1) 	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
20:36:10,440 ERROR [stderr] (http-localhost-127.0.0.1-8083-1) 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329)
20:36:10,440 ERROR [stderr] (http-localhost-127.0.0.1-8083-1) 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248)
20:36:10,441 ERROR [stderr] (http-localhost-127.0.0.1-8083-1) 	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275)
20:36:10,441 ERROR [stderr] (http-localhost-127.0.0.1-8083-1) 	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)
20:36:10,442 ERROR [stderr] (http-localhost-127.0.0.1-8083-1) 	at org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50)
20:36:10,443 ERROR [stderr] (http-localhost-127.0.0.1-8083-1) 	at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153)
20:36:10,443 ERROR [stderr] (http-localhost-127.0.0.1-8083-1) 	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155)
20:36:10,444 ERROR [stderr] (http-localhost-127.0.0.1-8083-1) 	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
20:36:10,444 ERROR [stderr] (http-localhost-127.0.0.1-8083-1) 	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
20:36:10,445 ERROR [stderr] (http-localhost-127.0.0.1-8083-1) 	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368)
20:36:10,445 ERROR [stderr] (http-localhost-127.0.0.1-8083-1) 	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877)
20:36:10,446 ERROR [stderr] (http-localhost-127.0.0.1-8083-1) 	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:671)
20:36:10,446 ERROR [stderr] (http-localhost-127.0.0.1-8083-1) 	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:930)
20:36:10,447 ERROR [stderr] (http-localhost-127.0.0.1-8083-1) 	at java.lang.Thread.run(Thread.java:724)
Criado 12 de dezembro de 2013
Ultima resposta 17 de dez. de 2013
Respostas 15
Participantes 4